diff options
Diffstat (limited to 'include/linux')
503 files changed, 15016 insertions, 5655 deletions
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index 334a3593cdfd..5a5385749e16 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
| @@ -126,6 +126,7 @@ header-y += nfs_mount.h | |||
| 126 | header-y += nl80211.h | 126 | header-y += nl80211.h |
| 127 | header-y += param.h | 127 | header-y += param.h |
| 128 | header-y += pci_regs.h | 128 | header-y += pci_regs.h |
| 129 | header-y += perf_event.h | ||
| 129 | header-y += pfkeyv2.h | 130 | header-y += pfkeyv2.h |
| 130 | header-y += pg.h | 131 | header-y += pg.h |
| 131 | header-y += phantom.h | 132 | header-y += phantom.h |
| @@ -268,6 +269,10 @@ ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/include/asm/kvm.h \ | |||
| 268 | $(srctree)/include/asm-$(SRCARCH)/kvm.h),) | 269 | $(srctree)/include/asm-$(SRCARCH)/kvm.h),) |
| 269 | unifdef-y += kvm.h | 270 | unifdef-y += kvm.h |
| 270 | endif | 271 | endif |
| 272 | ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/include/asm/kvm_para.h \ | ||
| 273 | $(srctree)/include/asm-$(SRCARCH)/kvm_para.h),) | ||
| 274 | unifdef-y += kvm_para.h | ||
| 275 | endif | ||
| 271 | unifdef-y += llc.h | 276 | unifdef-y += llc.h |
| 272 | unifdef-y += loop.h | 277 | unifdef-y += loop.h |
| 273 | unifdef-y += lp.h | 278 | unifdef-y += lp.h |
| @@ -325,6 +330,7 @@ unifdef-y += scc.h | |||
| 325 | unifdef-y += sched.h | 330 | unifdef-y += sched.h |
| 326 | unifdef-y += screen_info.h | 331 | unifdef-y += screen_info.h |
| 327 | unifdef-y += sdla.h | 332 | unifdef-y += sdla.h |
| 333 | unifdef-y += securebits.h | ||
| 328 | unifdef-y += selinux_netlink.h | 334 | unifdef-y += selinux_netlink.h |
| 329 | unifdef-y += sem.h | 335 | unifdef-y += sem.h |
| 330 | unifdef-y += serial_core.h | 336 | unifdef-y += serial_core.h |
| @@ -359,6 +365,7 @@ unifdef-y += utsname.h | |||
| 359 | unifdef-y += videodev2.h | 365 | unifdef-y += videodev2.h |
| 360 | unifdef-y += videodev.h | 366 | unifdef-y += videodev.h |
| 361 | unifdef-y += virtio_config.h | 367 | unifdef-y += virtio_config.h |
| 368 | unifdef-y += virtio_ids.h | ||
| 362 | unifdef-y += virtio_blk.h | 369 | unifdef-y += virtio_blk.h |
| 363 | unifdef-y += virtio_net.h | 370 | unifdef-y += virtio_net.h |
| 364 | unifdef-y += virtio_9p.h | 371 | unifdef-y += virtio_9p.h |
diff --git a/include/linux/acpi.h b/include/linux/acpi.h index 34321cfffeab..dfcd920c3e54 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h | |||
| @@ -41,8 +41,6 @@ | |||
| 41 | #include <acpi/acpi_drivers.h> | 41 | #include <acpi/acpi_drivers.h> |
| 42 | #include <acpi/acpi_numa.h> | 42 | #include <acpi/acpi_numa.h> |
| 43 | #include <asm/acpi.h> | 43 | #include <asm/acpi.h> |
| 44 | #include <linux/dmi.h> | ||
| 45 | |||
| 46 | 44 | ||
| 47 | enum acpi_irq_model_id { | 45 | enum acpi_irq_model_id { |
| 48 | ACPI_IRQ_MODEL_PIC = 0, | 46 | ACPI_IRQ_MODEL_PIC = 0, |
| @@ -219,10 +217,8 @@ static inline int acpi_video_display_switch_support(void) | |||
| 219 | #endif /* defined(CONFIG_ACPI_VIDEO) || defined(CONFIG_ACPI_VIDEO_MODULE) */ | 217 | #endif /* defined(CONFIG_ACPI_VIDEO) || defined(CONFIG_ACPI_VIDEO_MODULE) */ |
| 220 | 218 | ||
| 221 | extern int acpi_blacklisted(void); | 219 | extern int acpi_blacklisted(void); |
| 222 | #ifdef CONFIG_DMI | ||
| 223 | extern void acpi_dmi_osi_linux(int enable, const struct dmi_system_id *d); | 220 | extern void acpi_dmi_osi_linux(int enable, const struct dmi_system_id *d); |
| 224 | extern int acpi_osi_setup(char *str); | 221 | extern int acpi_osi_setup(char *str); |
| 225 | #endif | ||
| 226 | 222 | ||
| 227 | #ifdef CONFIG_ACPI_NUMA | 223 | #ifdef CONFIG_ACPI_NUMA |
| 228 | int acpi_get_pxm(acpi_handle handle); | 224 | int acpi_get_pxm(acpi_handle handle); |
| @@ -292,7 +288,10 @@ void __init acpi_s4_no_nvs(void); | |||
| 292 | extern acpi_status acpi_pci_osc_control_set(acpi_handle handle, u32 flags); | 288 | extern acpi_status acpi_pci_osc_control_set(acpi_handle handle, u32 flags); |
| 293 | extern void acpi_early_init(void); | 289 | extern void acpi_early_init(void); |
| 294 | 290 | ||
| 295 | #else /* CONFIG_ACPI */ | 291 | #else /* !CONFIG_ACPI */ |
| 292 | |||
| 293 | #define acpi_disabled 1 | ||
| 294 | |||
| 296 | static inline void acpi_early_init(void) { } | 295 | static inline void acpi_early_init(void) { } |
| 297 | 296 | ||
| 298 | static inline int early_acpi_boot_init(void) | 297 | static inline int early_acpi_boot_init(void) |
| @@ -331,5 +330,11 @@ static inline int acpi_check_mem_region(resource_size_t start, | |||
| 331 | return 0; | 330 | return 0; |
| 332 | } | 331 | } |
| 333 | 332 | ||
| 333 | struct acpi_table_header; | ||
| 334 | static inline int acpi_table_parse(char *id, | ||
| 335 | int (*handler)(struct acpi_table_header *)) | ||
| 336 | { | ||
| 337 | return -1; | ||
| 338 | } | ||
| 334 | #endif /* !CONFIG_ACPI */ | 339 | #endif /* !CONFIG_ACPI */ |
| 335 | #endif /*_LINUX_ACPI_H*/ | 340 | #endif /*_LINUX_ACPI_H*/ |
diff --git a/include/linux/agp_backend.h b/include/linux/agp_backend.h index 76fa794fdac0..9101ed64f803 100644 --- a/include/linux/agp_backend.h +++ b/include/linux/agp_backend.h | |||
| @@ -53,7 +53,7 @@ struct agp_kern_info { | |||
| 53 | int current_memory; | 53 | int current_memory; |
| 54 | bool cant_use_aperture; | 54 | bool cant_use_aperture; |
| 55 | unsigned long page_mask; | 55 | unsigned long page_mask; |
| 56 | struct vm_operations_struct *vm_ops; | 56 | const struct vm_operations_struct *vm_ops; |
| 57 | }; | 57 | }; |
| 58 | 58 | ||
| 59 | /* | 59 | /* |
| @@ -79,9 +79,12 @@ struct agp_memory { | |||
| 79 | u32 physical; | 79 | u32 physical; |
| 80 | bool is_bound; | 80 | bool is_bound; |
| 81 | bool is_flushed; | 81 | bool is_flushed; |
| 82 | bool vmalloc_flag; | 82 | bool vmalloc_flag; |
| 83 | /* list of agp_memory mapped to the aperture */ | 83 | /* list of agp_memory mapped to the aperture */ |
| 84 | struct list_head mapped_list; | 84 | struct list_head mapped_list; |
| 85 | /* DMA-mapped addresses */ | ||
| 86 | struct scatterlist *sg_list; | ||
| 87 | int num_sg; | ||
| 85 | }; | 88 | }; |
| 86 | 89 | ||
| 87 | #define AGP_NORMAL_MEMORY 0 | 90 | #define AGP_NORMAL_MEMORY 0 |
diff --git a/include/linux/aio.h b/include/linux/aio.h index 47f7d932a01d..aea219d7d8d1 100644 --- a/include/linux/aio.h +++ b/include/linux/aio.h | |||
| @@ -225,8 +225,6 @@ static inline void exit_aio(struct mm_struct *mm) { } | |||
| 225 | 225 | ||
| 226 | #define io_wait_to_kiocb(wait) container_of(wait, struct kiocb, ki_wait) | 226 | #define io_wait_to_kiocb(wait) container_of(wait, struct kiocb, ki_wait) |
| 227 | 227 | ||
| 228 | #include <linux/aio_abi.h> | ||
| 229 | |||
| 230 | static inline struct kiocb *list_kiocb(struct list_head *h) | 228 | static inline struct kiocb *list_kiocb(struct list_head *h) |
| 231 | { | 229 | { |
| 232 | return list_entry(h, struct kiocb, ki_list); | 230 | return list_entry(h, struct kiocb, ki_list); |
diff --git a/include/linux/amba/bus.h b/include/linux/amba/bus.h index 9b93cafa82a0..ab94335b4bb9 100644 --- a/include/linux/amba/bus.h +++ b/include/linux/amba/bus.h | |||
| @@ -36,6 +36,11 @@ struct amba_driver { | |||
| 36 | struct amba_id *id_table; | 36 | struct amba_id *id_table; |
| 37 | }; | 37 | }; |
| 38 | 38 | ||
| 39 | enum amba_vendor { | ||
| 40 | AMBA_VENDOR_ARM = 0x41, | ||
| 41 | AMBA_VENDOR_ST = 0x80, | ||
| 42 | }; | ||
| 43 | |||
| 39 | #define amba_get_drvdata(d) dev_get_drvdata(&d->dev) | 44 | #define amba_get_drvdata(d) dev_get_drvdata(&d->dev) |
| 40 | #define amba_set_drvdata(d,p) dev_set_drvdata(&d->dev, p) | 45 | #define amba_set_drvdata(d,p) dev_set_drvdata(&d->dev, p) |
| 41 | 46 | ||
diff --git a/include/linux/amba/mmci.h b/include/linux/amba/mmci.h new file mode 100644 index 000000000000..6b4241748dda --- /dev/null +++ b/include/linux/amba/mmci.h | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | /* | ||
| 2 | * include/linux/amba/mmci.h | ||
| 3 | */ | ||
| 4 | #ifndef AMBA_MMCI_H | ||
| 5 | #define AMBA_MMCI_H | ||
| 6 | |||
| 7 | #include <linux/mmc/host.h> | ||
| 8 | |||
| 9 | struct mmci_platform_data { | ||
| 10 | unsigned int ocr_mask; /* available voltages */ | ||
| 11 | u32 (*translate_vdd)(struct device *, unsigned int); | ||
| 12 | unsigned int (*status)(struct device *); | ||
| 13 | int gpio_wp; | ||
| 14 | int gpio_cd; | ||
| 15 | unsigned long capabilities; | ||
| 16 | }; | ||
| 17 | |||
| 18 | #endif | ||
diff --git a/include/linux/amba/pl022.h b/include/linux/amba/pl022.h index dcad0ffd1755..e4836c6b3dd7 100644 --- a/include/linux/amba/pl022.h +++ b/include/linux/amba/pl022.h | |||
| @@ -136,12 +136,12 @@ enum ssp_tx_level_trig { | |||
| 136 | 136 | ||
| 137 | /** | 137 | /** |
| 138 | * enum SPI Clock Phase - clock phase (Motorola SPI interface only) | 138 | * enum SPI Clock Phase - clock phase (Motorola SPI interface only) |
| 139 | * @SSP_CLK_RISING_EDGE: Receive data on rising edge | 139 | * @SSP_CLK_FIRST_EDGE: Receive data on first edge transition (actual direction depends on polarity) |
| 140 | * @SSP_CLK_FALLING_EDGE: Receive data on falling edge | 140 | * @SSP_CLK_SECOND_EDGE: Receive data on second edge transition (actual direction depends on polarity) |
| 141 | */ | 141 | */ |
| 142 | enum ssp_spi_clk_phase { | 142 | enum ssp_spi_clk_phase { |
| 143 | SSP_CLK_RISING_EDGE, | 143 | SSP_CLK_FIRST_EDGE, |
| 144 | SSP_CLK_FALLING_EDGE | 144 | SSP_CLK_SECOND_EDGE |
| 145 | }; | 145 | }; |
| 146 | 146 | ||
| 147 | /** | 147 | /** |
diff --git a/include/linux/amba/pl093.h b/include/linux/amba/pl093.h new file mode 100644 index 000000000000..2983e3671adb --- /dev/null +++ b/include/linux/amba/pl093.h | |||
| @@ -0,0 +1,80 @@ | |||
| 1 | /* linux/amba/pl093.h | ||
| 2 | * | ||
| 3 | * Copyright (c) 2008 Simtec Electronics | ||
| 4 | * http://armlinux.simtec.co.uk/ | ||
| 5 | * Ben Dooks <ben@simtec.co.uk> | ||
| 6 | * | ||
| 7 | * AMBA PL093 SSMC (synchronous static memory controller) | ||
| 8 | * See DDI0236.pdf (r0p4) for more details | ||
| 9 | * | ||
| 10 | * This program is free software; you can redistribute it and/or modify | ||
| 11 | * it under the terms of the GNU General Public License version 2 as | ||
| 12 | * published by the Free Software Foundation. | ||
| 13 | */ | ||
| 14 | |||
| 15 | #define SMB_BANK(x) ((x) * 0x20) /* each bank control set is 0x20 apart */ | ||
| 16 | |||
| 17 | /* Offsets for SMBxxxxRy registers */ | ||
| 18 | |||
| 19 | #define SMBIDCYR (0x00) | ||
| 20 | #define SMBWSTRDR (0x04) | ||
| 21 | #define SMBWSTWRR (0x08) | ||
| 22 | #define SMBWSTOENR (0x0C) | ||
| 23 | #define SMBWSTWENR (0x10) | ||
| 24 | #define SMBCR (0x14) | ||
| 25 | #define SMBSR (0x18) | ||
| 26 | #define SMBWSTBRDR (0x1C) | ||
| 27 | |||
| 28 | /* Masks for SMB registers */ | ||
| 29 | #define IDCY_MASK (0xf) | ||
| 30 | #define WSTRD_MASK (0xf) | ||
| 31 | #define WSTWR_MASK (0xf) | ||
| 32 | #define WSTOEN_MASK (0xf) | ||
| 33 | #define WSTWEN_MASK (0xf) | ||
| 34 | |||
| 35 | /* Notes from datasheet: | ||
| 36 | * WSTOEN <= WSTRD | ||
| 37 | * WSTWEN <= WSTWR | ||
| 38 | * | ||
| 39 | * WSTOEN is not used with nWAIT | ||
| 40 | */ | ||
| 41 | |||
| 42 | /* SMBCR bit definitions */ | ||
| 43 | #define SMBCR_BIWRITEEN (1 << 21) | ||
| 44 | #define SMBCR_ADDRVALIDWRITEEN (1 << 20) | ||
| 45 | #define SMBCR_SYNCWRITE (1 << 17) | ||
| 46 | #define SMBCR_BMWRITE (1 << 16) | ||
| 47 | #define SMBCR_WRAPREAD (1 << 14) | ||
| 48 | #define SMBCR_BIREADEN (1 << 13) | ||
| 49 | #define SMBCR_ADDRVALIDREADEN (1 << 12) | ||
| 50 | #define SMBCR_SYNCREAD (1 << 9) | ||
| 51 | #define SMBCR_BMREAD (1 << 8) | ||
| 52 | #define SMBCR_SMBLSPOL (1 << 6) | ||
| 53 | #define SMBCR_WP (1 << 3) | ||
| 54 | #define SMBCR_WAITEN (1 << 2) | ||
| 55 | #define SMBCR_WAITPOL (1 << 1) | ||
| 56 | #define SMBCR_RBLE (1 << 0) | ||
| 57 | |||
| 58 | #define SMBCR_BURSTLENWRITE_MASK (3 << 18) | ||
| 59 | #define SMBCR_BURSTLENWRITE_4 (0 << 18) | ||
| 60 | #define SMBCR_BURSTLENWRITE_8 (1 << 18) | ||
| 61 | #define SMBCR_BURSTLENWRITE_RESERVED (2 << 18) | ||
| 62 | #define SMBCR_BURSTLENWRITE_CONTINUOUS (3 << 18) | ||
| 63 | |||
| 64 | #define SMBCR_BURSTLENREAD_MASK (3 << 10) | ||
| 65 | #define SMBCR_BURSTLENREAD_4 (0 << 10) | ||
| 66 | #define SMBCR_BURSTLENREAD_8 (1 << 10) | ||
| 67 | #define SMBCR_BURSTLENREAD_16 (2 << 10) | ||
| 68 | #define SMBCR_BURSTLENREAD_CONTINUOUS (3 << 10) | ||
| 69 | |||
| 70 | #define SMBCR_MW_MASK (3 << 4) | ||
| 71 | #define SMBCR_MW_8BIT (0 << 4) | ||
| 72 | #define SMBCR_MW_16BIT (1 << 4) | ||
| 73 | #define SMBCR_MW_M32BIT (2 << 4) | ||
| 74 | |||
| 75 | /* SSMC status registers */ | ||
| 76 | #define SSMCCSR (0x200) | ||
| 77 | #define SSMCCR (0x204) | ||
| 78 | #define SSMCITCR (0x208) | ||
| 79 | #define SSMCITIP (0x20C) | ||
| 80 | #define SSMCITIOP (0x210) | ||
diff --git a/include/linux/anon_inodes.h b/include/linux/anon_inodes.h index e0a0cdc2da43..69a21e0ebd33 100644 --- a/include/linux/anon_inodes.h +++ b/include/linux/anon_inodes.h | |||
| @@ -8,6 +8,9 @@ | |||
| 8 | #ifndef _LINUX_ANON_INODES_H | 8 | #ifndef _LINUX_ANON_INODES_H |
| 9 | #define _LINUX_ANON_INODES_H | 9 | #define _LINUX_ANON_INODES_H |
| 10 | 10 | ||
| 11 | struct file *anon_inode_getfile(const char *name, | ||
| 12 | const struct file_operations *fops, | ||
| 13 | void *priv, int flags); | ||
| 11 | int anon_inode_getfd(const char *name, const struct file_operations *fops, | 14 | int anon_inode_getfd(const char *name, const struct file_operations *fops, |
| 12 | void *priv, int flags); | 15 | void *priv, int flags); |
| 13 | 16 | ||
diff --git a/include/linux/arcdevice.h b/include/linux/arcdevice.h index cd4bcb6989ce..7d650a0e3d8f 100644 --- a/include/linux/arcdevice.h +++ b/include/linux/arcdevice.h | |||
| @@ -337,7 +337,8 @@ struct net_device *alloc_arcdev(const char *name); | |||
| 337 | 337 | ||
| 338 | int arcnet_open(struct net_device *dev); | 338 | int arcnet_open(struct net_device *dev); |
| 339 | int arcnet_close(struct net_device *dev); | 339 | int arcnet_close(struct net_device *dev); |
| 340 | int arcnet_send_packet(struct sk_buff *skb, struct net_device *dev); | 340 | netdev_tx_t arcnet_send_packet(struct sk_buff *skb, |
| 341 | struct net_device *dev); | ||
| 341 | void arcnet_timeout(struct net_device *dev); | 342 | void arcnet_timeout(struct net_device *dev); |
| 342 | 343 | ||
| 343 | #endif /* __KERNEL__ */ | 344 | #endif /* __KERNEL__ */ |
diff --git a/include/linux/async_tx.h b/include/linux/async_tx.h index 5fc2ef8d97fa..a1c486a88e88 100644 --- a/include/linux/async_tx.h +++ b/include/linux/async_tx.h | |||
| @@ -58,25 +58,60 @@ struct dma_chan_ref { | |||
| 58 | * array. | 58 | * array. |
| 59 | * @ASYNC_TX_ACK: immediately ack the descriptor, precludes setting up a | 59 | * @ASYNC_TX_ACK: immediately ack the descriptor, precludes setting up a |
| 60 | * dependency chain | 60 | * dependency chain |
| 61 | * @ASYNC_TX_DEP_ACK: ack the dependency descriptor. Useful for chaining. | 61 | * @ASYNC_TX_FENCE: specify that the next operation in the dependency |
| 62 | * chain uses this operation's result as an input | ||
| 62 | */ | 63 | */ |
| 63 | enum async_tx_flags { | 64 | enum async_tx_flags { |
| 64 | ASYNC_TX_XOR_ZERO_DST = (1 << 0), | 65 | ASYNC_TX_XOR_ZERO_DST = (1 << 0), |
| 65 | ASYNC_TX_XOR_DROP_DST = (1 << 1), | 66 | ASYNC_TX_XOR_DROP_DST = (1 << 1), |
| 66 | ASYNC_TX_ACK = (1 << 3), | 67 | ASYNC_TX_ACK = (1 << 2), |
| 67 | ASYNC_TX_DEP_ACK = (1 << 4), | 68 | ASYNC_TX_FENCE = (1 << 3), |
| 69 | }; | ||
| 70 | |||
| 71 | /** | ||
| 72 | * struct async_submit_ctl - async_tx submission/completion modifiers | ||
| 73 | * @flags: submission modifiers | ||
| 74 | * @depend_tx: parent dependency of the current operation being submitted | ||
| 75 | * @cb_fn: callback routine to run at operation completion | ||
| 76 | * @cb_param: parameter for the callback routine | ||
| 77 | * @scribble: caller provided space for dma/page address conversions | ||
| 78 | */ | ||
| 79 | struct async_submit_ctl { | ||
| 80 | enum async_tx_flags flags; | ||
| 81 | struct dma_async_tx_descriptor *depend_tx; | ||
| 82 | dma_async_tx_callback cb_fn; | ||
| 83 | void *cb_param; | ||
| 84 | void *scribble; | ||
| 68 | }; | 85 | }; |
| 69 | 86 | ||
| 70 | #ifdef CONFIG_DMA_ENGINE | 87 | #ifdef CONFIG_DMA_ENGINE |
| 71 | #define async_tx_issue_pending_all dma_issue_pending_all | 88 | #define async_tx_issue_pending_all dma_issue_pending_all |
| 89 | |||
| 90 | /** | ||
| 91 | * async_tx_issue_pending - send pending descriptor to the hardware channel | ||
| 92 | * @tx: descriptor handle to retrieve hardware context | ||
| 93 | * | ||
| 94 | * Note: any dependent operations will have already been issued by | ||
| 95 | * async_tx_channel_switch, or (in the case of no channel switch) will | ||
| 96 | * be already pending on this channel. | ||
| 97 | */ | ||
| 98 | static inline void async_tx_issue_pending(struct dma_async_tx_descriptor *tx) | ||
| 99 | { | ||
| 100 | if (likely(tx)) { | ||
| 101 | struct dma_chan *chan = tx->chan; | ||
| 102 | struct dma_device *dma = chan->device; | ||
| 103 | |||
| 104 | dma->device_issue_pending(chan); | ||
| 105 | } | ||
| 106 | } | ||
| 72 | #ifdef CONFIG_ARCH_HAS_ASYNC_TX_FIND_CHANNEL | 107 | #ifdef CONFIG_ARCH_HAS_ASYNC_TX_FIND_CHANNEL |
| 73 | #include <asm/async_tx.h> | 108 | #include <asm/async_tx.h> |
| 74 | #else | 109 | #else |
| 75 | #define async_tx_find_channel(dep, type, dst, dst_count, src, src_count, len) \ | 110 | #define async_tx_find_channel(dep, type, dst, dst_count, src, src_count, len) \ |
| 76 | __async_tx_find_channel(dep, type) | 111 | __async_tx_find_channel(dep, type) |
| 77 | struct dma_chan * | 112 | struct dma_chan * |
| 78 | __async_tx_find_channel(struct dma_async_tx_descriptor *depend_tx, | 113 | __async_tx_find_channel(struct async_submit_ctl *submit, |
| 79 | enum dma_transaction_type tx_type); | 114 | enum dma_transaction_type tx_type); |
| 80 | #endif /* CONFIG_ARCH_HAS_ASYNC_TX_FIND_CHANNEL */ | 115 | #endif /* CONFIG_ARCH_HAS_ASYNC_TX_FIND_CHANNEL */ |
| 81 | #else | 116 | #else |
| 82 | static inline void async_tx_issue_pending_all(void) | 117 | static inline void async_tx_issue_pending_all(void) |
| @@ -84,10 +119,16 @@ static inline void async_tx_issue_pending_all(void) | |||
| 84 | do { } while (0); | 119 | do { } while (0); |
| 85 | } | 120 | } |
| 86 | 121 | ||
| 122 | static inline void async_tx_issue_pending(struct dma_async_tx_descriptor *tx) | ||
| 123 | { | ||
| 124 | do { } while (0); | ||
| 125 | } | ||
| 126 | |||
| 87 | static inline struct dma_chan * | 127 | static inline struct dma_chan * |
| 88 | async_tx_find_channel(struct dma_async_tx_descriptor *depend_tx, | 128 | async_tx_find_channel(struct async_submit_ctl *submit, |
| 89 | enum dma_transaction_type tx_type, struct page **dst, int dst_count, | 129 | enum dma_transaction_type tx_type, struct page **dst, |
| 90 | struct page **src, int src_count, size_t len) | 130 | int dst_count, struct page **src, int src_count, |
| 131 | size_t len) | ||
| 91 | { | 132 | { |
| 92 | return NULL; | 133 | return NULL; |
| 93 | } | 134 | } |
| @@ -99,46 +140,70 @@ async_tx_find_channel(struct dma_async_tx_descriptor *depend_tx, | |||
| 99 | * @cb_fn_param: parameter to pass to the callback routine | 140 | * @cb_fn_param: parameter to pass to the callback routine |
| 100 | */ | 141 | */ |
| 101 | static inline void | 142 | static inline void |
| 102 | async_tx_sync_epilog(dma_async_tx_callback cb_fn, void *cb_fn_param) | 143 | async_tx_sync_epilog(struct async_submit_ctl *submit) |
| 103 | { | 144 | { |
| 104 | if (cb_fn) | 145 | if (submit->cb_fn) |
| 105 | cb_fn(cb_fn_param); | 146 | submit->cb_fn(submit->cb_param); |
| 106 | } | 147 | } |
| 107 | 148 | ||
| 108 | void | 149 | typedef union { |
| 109 | async_tx_submit(struct dma_chan *chan, struct dma_async_tx_descriptor *tx, | 150 | unsigned long addr; |
| 110 | enum async_tx_flags flags, struct dma_async_tx_descriptor *depend_tx, | 151 | struct page *page; |
| 111 | dma_async_tx_callback cb_fn, void *cb_fn_param); | 152 | dma_addr_t dma; |
| 153 | } addr_conv_t; | ||
| 154 | |||
| 155 | static inline void | ||
| 156 | init_async_submit(struct async_submit_ctl *args, enum async_tx_flags flags, | ||
| 157 | struct dma_async_tx_descriptor *tx, | ||
| 158 | dma_async_tx_callback cb_fn, void *cb_param, | ||
| 159 | addr_conv_t *scribble) | ||
| 160 | { | ||
| 161 | args->flags = flags; | ||
| 162 | args->depend_tx = tx; | ||
| 163 | args->cb_fn = cb_fn; | ||
| 164 | args->cb_param = cb_param; | ||
| 165 | args->scribble = scribble; | ||
| 166 | } | ||
| 167 | |||
| 168 | void async_tx_submit(struct dma_chan *chan, struct dma_async_tx_descriptor *tx, | ||
| 169 | struct async_submit_ctl *submit); | ||
| 112 | 170 | ||
| 113 | struct dma_async_tx_descriptor * | 171 | struct dma_async_tx_descriptor * |
| 114 | async_xor(struct page *dest, struct page **src_list, unsigned int offset, | 172 | async_xor(struct page *dest, struct page **src_list, unsigned int offset, |
| 115 | int src_cnt, size_t len, enum async_tx_flags flags, | 173 | int src_cnt, size_t len, struct async_submit_ctl *submit); |
| 116 | struct dma_async_tx_descriptor *depend_tx, | ||
| 117 | dma_async_tx_callback cb_fn, void *cb_fn_param); | ||
| 118 | 174 | ||
| 119 | struct dma_async_tx_descriptor * | 175 | struct dma_async_tx_descriptor * |
| 120 | async_xor_zero_sum(struct page *dest, struct page **src_list, | 176 | async_xor_val(struct page *dest, struct page **src_list, unsigned int offset, |
| 121 | unsigned int offset, int src_cnt, size_t len, | 177 | int src_cnt, size_t len, enum sum_check_flags *result, |
| 122 | u32 *result, enum async_tx_flags flags, | 178 | struct async_submit_ctl *submit); |
| 123 | struct dma_async_tx_descriptor *depend_tx, | ||
| 124 | dma_async_tx_callback cb_fn, void *cb_fn_param); | ||
| 125 | 179 | ||
| 126 | struct dma_async_tx_descriptor * | 180 | struct dma_async_tx_descriptor * |
| 127 | async_memcpy(struct page *dest, struct page *src, unsigned int dest_offset, | 181 | async_memcpy(struct page *dest, struct page *src, unsigned int dest_offset, |
| 128 | unsigned int src_offset, size_t len, enum async_tx_flags flags, | 182 | unsigned int src_offset, size_t len, |
| 129 | struct dma_async_tx_descriptor *depend_tx, | 183 | struct async_submit_ctl *submit); |
| 130 | dma_async_tx_callback cb_fn, void *cb_fn_param); | ||
| 131 | 184 | ||
| 132 | struct dma_async_tx_descriptor * | 185 | struct dma_async_tx_descriptor * |
| 133 | async_memset(struct page *dest, int val, unsigned int offset, | 186 | async_memset(struct page *dest, int val, unsigned int offset, |
| 134 | size_t len, enum async_tx_flags flags, | 187 | size_t len, struct async_submit_ctl *submit); |
| 135 | struct dma_async_tx_descriptor *depend_tx, | 188 | |
| 136 | dma_async_tx_callback cb_fn, void *cb_fn_param); | 189 | struct dma_async_tx_descriptor *async_trigger_callback(struct async_submit_ctl *submit); |
| 190 | |||
| 191 | struct dma_async_tx_descriptor * | ||
| 192 | async_gen_syndrome(struct page **blocks, unsigned int offset, int src_cnt, | ||
| 193 | size_t len, struct async_submit_ctl *submit); | ||
| 194 | |||
| 195 | struct dma_async_tx_descriptor * | ||
| 196 | async_syndrome_val(struct page **blocks, unsigned int offset, int src_cnt, | ||
| 197 | size_t len, enum sum_check_flags *pqres, struct page *spare, | ||
| 198 | struct async_submit_ctl *submit); | ||
| 199 | |||
| 200 | struct dma_async_tx_descriptor * | ||
| 201 | async_raid6_2data_recov(int src_num, size_t bytes, int faila, int failb, | ||
| 202 | struct page **ptrs, struct async_submit_ctl *submit); | ||
| 137 | 203 | ||
| 138 | struct dma_async_tx_descriptor * | 204 | struct dma_async_tx_descriptor * |
| 139 | async_trigger_callback(enum async_tx_flags flags, | 205 | async_raid6_datap_recov(int src_num, size_t bytes, int faila, |
| 140 | struct dma_async_tx_descriptor *depend_tx, | 206 | struct page **ptrs, struct async_submit_ctl *submit); |
| 141 | dma_async_tx_callback cb_fn, void *cb_fn_param); | ||
| 142 | 207 | ||
| 143 | void async_tx_quiesce(struct dma_async_tx_descriptor **tx); | 208 | void async_tx_quiesce(struct dma_async_tx_descriptor **tx); |
| 144 | #endif /* _ASYNC_TX_H_ */ | 209 | #endif /* _ASYNC_TX_H_ */ |
diff --git a/include/linux/ata.h b/include/linux/ata.h index 9c75921f0c16..4fb357312b3b 100644 --- a/include/linux/ata.h +++ b/include/linux/ata.h | |||
| @@ -210,15 +210,25 @@ enum { | |||
| 210 | ATA_CMD_STANDBY = 0xE2, /* place in standby power mode */ | 210 | ATA_CMD_STANDBY = 0xE2, /* place in standby power mode */ |
| 211 | ATA_CMD_IDLE = 0xE3, /* place in idle power mode */ | 211 | ATA_CMD_IDLE = 0xE3, /* place in idle power mode */ |
| 212 | ATA_CMD_EDD = 0x90, /* execute device diagnostic */ | 212 | ATA_CMD_EDD = 0x90, /* execute device diagnostic */ |
| 213 | ATA_CMD_DOWNLOAD_MICRO = 0x92, | ||
| 214 | ATA_CMD_NOP = 0x00, | ||
| 213 | ATA_CMD_FLUSH = 0xE7, | 215 | ATA_CMD_FLUSH = 0xE7, |
| 214 | ATA_CMD_FLUSH_EXT = 0xEA, | 216 | ATA_CMD_FLUSH_EXT = 0xEA, |
| 215 | ATA_CMD_ID_ATA = 0xEC, | 217 | ATA_CMD_ID_ATA = 0xEC, |
| 216 | ATA_CMD_ID_ATAPI = 0xA1, | 218 | ATA_CMD_ID_ATAPI = 0xA1, |
| 219 | ATA_CMD_SERVICE = 0xA2, | ||
| 217 | ATA_CMD_READ = 0xC8, | 220 | ATA_CMD_READ = 0xC8, |
| 218 | ATA_CMD_READ_EXT = 0x25, | 221 | ATA_CMD_READ_EXT = 0x25, |
| 222 | ATA_CMD_READ_QUEUED = 0x26, | ||
| 223 | ATA_CMD_READ_STREAM_EXT = 0x2B, | ||
| 224 | ATA_CMD_READ_STREAM_DMA_EXT = 0x2A, | ||
| 219 | ATA_CMD_WRITE = 0xCA, | 225 | ATA_CMD_WRITE = 0xCA, |
| 220 | ATA_CMD_WRITE_EXT = 0x35, | 226 | ATA_CMD_WRITE_EXT = 0x35, |
| 227 | ATA_CMD_WRITE_QUEUED = 0x36, | ||
| 228 | ATA_CMD_WRITE_STREAM_EXT = 0x3B, | ||
| 229 | ATA_CMD_WRITE_STREAM_DMA_EXT = 0x3A, | ||
| 221 | ATA_CMD_WRITE_FUA_EXT = 0x3D, | 230 | ATA_CMD_WRITE_FUA_EXT = 0x3D, |
| 231 | ATA_CMD_WRITE_QUEUED_FUA_EXT = 0x3E, | ||
| 222 | ATA_CMD_FPDMA_READ = 0x60, | 232 | ATA_CMD_FPDMA_READ = 0x60, |
| 223 | ATA_CMD_FPDMA_WRITE = 0x61, | 233 | ATA_CMD_FPDMA_WRITE = 0x61, |
| 224 | ATA_CMD_PIO_READ = 0x20, | 234 | ATA_CMD_PIO_READ = 0x20, |
| @@ -235,6 +245,7 @@ enum { | |||
| 235 | ATA_CMD_PACKET = 0xA0, | 245 | ATA_CMD_PACKET = 0xA0, |
| 236 | ATA_CMD_VERIFY = 0x40, | 246 | ATA_CMD_VERIFY = 0x40, |
| 237 | ATA_CMD_VERIFY_EXT = 0x42, | 247 | ATA_CMD_VERIFY_EXT = 0x42, |
| 248 | ATA_CMD_WRITE_UNCORR_EXT = 0x45, | ||
| 238 | ATA_CMD_STANDBYNOW1 = 0xE0, | 249 | ATA_CMD_STANDBYNOW1 = 0xE0, |
| 239 | ATA_CMD_IDLEIMMEDIATE = 0xE1, | 250 | ATA_CMD_IDLEIMMEDIATE = 0xE1, |
| 240 | ATA_CMD_SLEEP = 0xE6, | 251 | ATA_CMD_SLEEP = 0xE6, |
| @@ -243,15 +254,34 @@ enum { | |||
| 243 | ATA_CMD_READ_NATIVE_MAX_EXT = 0x27, | 254 | ATA_CMD_READ_NATIVE_MAX_EXT = 0x27, |
| 244 | ATA_CMD_SET_MAX = 0xF9, | 255 | ATA_CMD_SET_MAX = 0xF9, |
| 245 | ATA_CMD_SET_MAX_EXT = 0x37, | 256 | ATA_CMD_SET_MAX_EXT = 0x37, |
| 246 | ATA_CMD_READ_LOG_EXT = 0x2f, | 257 | ATA_CMD_READ_LOG_EXT = 0x2F, |
| 258 | ATA_CMD_WRITE_LOG_EXT = 0x3F, | ||
| 259 | ATA_CMD_READ_LOG_DMA_EXT = 0x47, | ||
| 260 | ATA_CMD_WRITE_LOG_DMA_EXT = 0x57, | ||
| 261 | ATA_CMD_TRUSTED_RCV = 0x5C, | ||
| 262 | ATA_CMD_TRUSTED_RCV_DMA = 0x5D, | ||
| 263 | ATA_CMD_TRUSTED_SND = 0x5E, | ||
| 264 | ATA_CMD_TRUSTED_SND_DMA = 0x5F, | ||
| 247 | ATA_CMD_PMP_READ = 0xE4, | 265 | ATA_CMD_PMP_READ = 0xE4, |
| 248 | ATA_CMD_PMP_WRITE = 0xE8, | 266 | ATA_CMD_PMP_WRITE = 0xE8, |
| 249 | ATA_CMD_CONF_OVERLAY = 0xB1, | 267 | ATA_CMD_CONF_OVERLAY = 0xB1, |
| 268 | ATA_CMD_SEC_SET_PASS = 0xF1, | ||
| 269 | ATA_CMD_SEC_UNLOCK = 0xF2, | ||
| 270 | ATA_CMD_SEC_ERASE_PREP = 0xF3, | ||
| 271 | ATA_CMD_SEC_ERASE_UNIT = 0xF4, | ||
| 250 | ATA_CMD_SEC_FREEZE_LOCK = 0xF5, | 272 | ATA_CMD_SEC_FREEZE_LOCK = 0xF5, |
| 273 | ATA_CMD_SEC_DISABLE_PASS = 0xF6, | ||
| 274 | ATA_CMD_CONFIG_STREAM = 0x51, | ||
| 251 | ATA_CMD_SMART = 0xB0, | 275 | ATA_CMD_SMART = 0xB0, |
| 252 | ATA_CMD_MEDIA_LOCK = 0xDE, | 276 | ATA_CMD_MEDIA_LOCK = 0xDE, |
| 253 | ATA_CMD_MEDIA_UNLOCK = 0xDF, | 277 | ATA_CMD_MEDIA_UNLOCK = 0xDF, |
| 254 | ATA_CMD_DSM = 0x06, | 278 | ATA_CMD_DSM = 0x06, |
| 279 | ATA_CMD_CHK_MED_CRD_TYP = 0xD1, | ||
| 280 | ATA_CMD_CFA_REQ_EXT_ERR = 0x03, | ||
| 281 | ATA_CMD_CFA_WRITE_NE = 0x38, | ||
| 282 | ATA_CMD_CFA_TRANS_SECT = 0x87, | ||
| 283 | ATA_CMD_CFA_ERASE = 0xC0, | ||
| 284 | ATA_CMD_CFA_WRITE_MULT_NE = 0xCD, | ||
| 255 | /* marked obsolete in the ATA/ATAPI-7 spec */ | 285 | /* marked obsolete in the ATA/ATAPI-7 spec */ |
| 256 | ATA_CMD_RESTORE = 0x10, | 286 | ATA_CMD_RESTORE = 0x10, |
| 257 | 287 | ||
| @@ -304,8 +334,12 @@ enum { | |||
| 304 | SETFEATURES_SATA_DISABLE = 0x90, /* Disable use of SATA feature */ | 334 | SETFEATURES_SATA_DISABLE = 0x90, /* Disable use of SATA feature */ |
| 305 | 335 | ||
| 306 | /* SETFEATURE Sector counts for SATA features */ | 336 | /* SETFEATURE Sector counts for SATA features */ |
| 307 | SATA_AN = 0x05, /* Asynchronous Notification */ | 337 | SATA_FPDMA_OFFSET = 0x01, /* FPDMA non-zero buffer offsets */ |
| 308 | SATA_DIPM = 0x03, /* Device Initiated Power Management */ | 338 | SATA_FPDMA_AA = 0x02, /* FPDMA Setup FIS Auto-Activate */ |
| 339 | SATA_DIPM = 0x03, /* Device Initiated Power Management */ | ||
| 340 | SATA_FPDMA_IN_ORDER = 0x04, /* FPDMA in-order data delivery */ | ||
| 341 | SATA_AN = 0x05, /* Asynchronous Notification */ | ||
| 342 | SATA_SSP = 0x06, /* Software Settings Preservation */ | ||
| 309 | 343 | ||
| 310 | /* feature values for SET_MAX */ | 344 | /* feature values for SET_MAX */ |
| 311 | ATA_SET_MAX_ADDR = 0x00, | 345 | ATA_SET_MAX_ADDR = 0x00, |
| @@ -525,6 +559,9 @@ static inline int ata_is_data(u8 prot) | |||
| 525 | #define ata_id_has_atapi_AN(id) \ | 559 | #define ata_id_has_atapi_AN(id) \ |
| 526 | ( (((id)[76] != 0x0000) && ((id)[76] != 0xffff)) && \ | 560 | ( (((id)[76] != 0x0000) && ((id)[76] != 0xffff)) && \ |
| 527 | ((id)[78] & (1 << 5)) ) | 561 | ((id)[78] & (1 << 5)) ) |
| 562 | #define ata_id_has_fpdma_aa(id) \ | ||
| 563 | ( (((id)[76] != 0x0000) && ((id)[76] != 0xffff)) && \ | ||
| 564 | ((id)[78] & (1 << 2)) ) | ||
| 528 | #define ata_id_iordy_disable(id) ((id)[ATA_ID_CAPABILITY] & (1 << 10)) | 565 | #define ata_id_iordy_disable(id) ((id)[ATA_ID_CAPABILITY] & (1 << 10)) |
| 529 | #define ata_id_has_iordy(id) ((id)[ATA_ID_CAPABILITY] & (1 << 11)) | 566 | #define ata_id_has_iordy(id) ((id)[ATA_ID_CAPABILITY] & (1 << 11)) |
| 530 | #define ata_id_u32(id,n) \ | 567 | #define ata_id_u32(id,n) \ |
diff --git a/include/linux/atmdev.h b/include/linux/atmdev.h index 086e5c362d3a..817b23705c91 100644 --- a/include/linux/atmdev.h +++ b/include/linux/atmdev.h | |||
| @@ -397,7 +397,7 @@ struct atmdev_ops { /* only send is required */ | |||
| 397 | int (*getsockopt)(struct atm_vcc *vcc,int level,int optname, | 397 | int (*getsockopt)(struct atm_vcc *vcc,int level,int optname, |
| 398 | void __user *optval,int optlen); | 398 | void __user *optval,int optlen); |
| 399 | int (*setsockopt)(struct atm_vcc *vcc,int level,int optname, | 399 | int (*setsockopt)(struct atm_vcc *vcc,int level,int optname, |
| 400 | void __user *optval,int optlen); | 400 | void __user *optval,unsigned int optlen); |
| 401 | int (*send)(struct atm_vcc *vcc,struct sk_buff *skb); | 401 | int (*send)(struct atm_vcc *vcc,struct sk_buff *skb); |
| 402 | int (*send_oam)(struct atm_vcc *vcc,void *cell,int flags); | 402 | int (*send_oam)(struct atm_vcc *vcc,void *cell,int flags); |
| 403 | void (*phy_put)(struct atm_dev *dev,unsigned char value, | 403 | void (*phy_put)(struct atm_dev *dev,unsigned char value, |
diff --git a/include/linux/attribute_container.h b/include/linux/attribute_container.h index 794ad74b1d61..c3ab81428c66 100644 --- a/include/linux/attribute_container.h +++ b/include/linux/attribute_container.h | |||
| @@ -17,7 +17,7 @@ struct attribute_container { | |||
| 17 | struct list_head node; | 17 | struct list_head node; |
| 18 | struct klist containers; | 18 | struct klist containers; |
| 19 | struct class *class; | 19 | struct class *class; |
| 20 | struct attribute_group *grp; | 20 | const struct attribute_group *grp; |
| 21 | struct device_attribute **attrs; | 21 | struct device_attribute **attrs; |
| 22 | int (*match)(struct attribute_container *, struct device *); | 22 | int (*match)(struct attribute_container *, struct device *); |
| 23 | #define ATTRIBUTE_CONTAINER_NO_CLASSDEVS 0x01 | 23 | #define ATTRIBUTE_CONTAINER_NO_CLASSDEVS 0x01 |
diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h index 1d52425a6118..b449e738533a 100644 --- a/include/linux/backing-dev.h +++ b/include/linux/backing-dev.h | |||
| @@ -13,6 +13,8 @@ | |||
| 13 | #include <linux/proportions.h> | 13 | #include <linux/proportions.h> |
| 14 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
| 15 | #include <linux/fs.h> | 15 | #include <linux/fs.h> |
| 16 | #include <linux/sched.h> | ||
| 17 | #include <linux/writeback.h> | ||
| 16 | #include <asm/atomic.h> | 18 | #include <asm/atomic.h> |
| 17 | 19 | ||
| 18 | struct page; | 20 | struct page; |
| @@ -23,9 +25,11 @@ struct dentry; | |||
| 23 | * Bits in backing_dev_info.state | 25 | * Bits in backing_dev_info.state |
| 24 | */ | 26 | */ |
| 25 | enum bdi_state { | 27 | enum bdi_state { |
| 26 | BDI_pdflush, /* A pdflush thread is working this device */ | 28 | BDI_pending, /* On its way to being activated */ |
| 29 | BDI_wb_alloc, /* Default embedded wb allocated */ | ||
| 27 | BDI_async_congested, /* The async (write) queue is getting full */ | 30 | BDI_async_congested, /* The async (write) queue is getting full */ |
| 28 | BDI_sync_congested, /* The sync queue is getting full */ | 31 | BDI_sync_congested, /* The sync queue is getting full */ |
| 32 | BDI_registered, /* bdi_register() was done */ | ||
| 29 | BDI_unused, /* Available bits start here */ | 33 | BDI_unused, /* Available bits start here */ |
| 30 | }; | 34 | }; |
| 31 | 35 | ||
| @@ -39,7 +43,23 @@ enum bdi_stat_item { | |||
| 39 | 43 | ||
| 40 | #define BDI_STAT_BATCH (8*(1+ilog2(nr_cpu_ids))) | 44 | #define BDI_STAT_BATCH (8*(1+ilog2(nr_cpu_ids))) |
| 41 | 45 | ||
| 46 | struct bdi_writeback { | ||
| 47 | struct list_head list; /* hangs off the bdi */ | ||
| 48 | |||
| 49 | struct backing_dev_info *bdi; /* our parent bdi */ | ||
| 50 | unsigned int nr; | ||
| 51 | |||
| 52 | unsigned long last_old_flush; /* last old data flush */ | ||
| 53 | |||
| 54 | struct task_struct *task; /* writeback task */ | ||
| 55 | struct list_head b_dirty; /* dirty inodes */ | ||
| 56 | struct list_head b_io; /* parked for writeback */ | ||
| 57 | struct list_head b_more_io; /* parked for more writeback */ | ||
| 58 | }; | ||
| 59 | |||
| 42 | struct backing_dev_info { | 60 | struct backing_dev_info { |
| 61 | struct list_head bdi_list; | ||
| 62 | struct rcu_head rcu_head; | ||
| 43 | unsigned long ra_pages; /* max readahead in PAGE_CACHE_SIZE units */ | 63 | unsigned long ra_pages; /* max readahead in PAGE_CACHE_SIZE units */ |
| 44 | unsigned long state; /* Always use atomic bitops on this */ | 64 | unsigned long state; /* Always use atomic bitops on this */ |
| 45 | unsigned int capabilities; /* Device capabilities */ | 65 | unsigned int capabilities; /* Device capabilities */ |
| @@ -48,6 +68,8 @@ struct backing_dev_info { | |||
| 48 | void (*unplug_io_fn)(struct backing_dev_info *, struct page *); | 68 | void (*unplug_io_fn)(struct backing_dev_info *, struct page *); |
| 49 | void *unplug_io_data; | 69 | void *unplug_io_data; |
| 50 | 70 | ||
| 71 | char *name; | ||
| 72 | |||
| 51 | struct percpu_counter bdi_stat[NR_BDI_STAT_ITEMS]; | 73 | struct percpu_counter bdi_stat[NR_BDI_STAT_ITEMS]; |
| 52 | 74 | ||
| 53 | struct prop_local_percpu completions; | 75 | struct prop_local_percpu completions; |
| @@ -56,6 +78,14 @@ struct backing_dev_info { | |||
| 56 | unsigned int min_ratio; | 78 | unsigned int min_ratio; |
| 57 | unsigned int max_ratio, max_prop_frac; | 79 | unsigned int max_ratio, max_prop_frac; |
| 58 | 80 | ||
| 81 | struct bdi_writeback wb; /* default writeback info for this bdi */ | ||
| 82 | spinlock_t wb_lock; /* protects update side of wb_list */ | ||
| 83 | struct list_head wb_list; /* the flusher threads hanging off this bdi */ | ||
| 84 | unsigned long wb_mask; /* bitmask of registered tasks */ | ||
| 85 | unsigned int wb_cnt; /* number of registered tasks */ | ||
| 86 | |||
| 87 | struct list_head work_list; | ||
| 88 | |||
| 59 | struct device *dev; | 89 | struct device *dev; |
| 60 | 90 | ||
| 61 | #ifdef CONFIG_DEBUG_FS | 91 | #ifdef CONFIG_DEBUG_FS |
| @@ -71,6 +101,20 @@ int bdi_register(struct backing_dev_info *bdi, struct device *parent, | |||
| 71 | const char *fmt, ...); | 101 | const char *fmt, ...); |
| 72 | int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev); | 102 | int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev); |
| 73 | void bdi_unregister(struct backing_dev_info *bdi); | 103 | void bdi_unregister(struct backing_dev_info *bdi); |
| 104 | void bdi_start_writeback(struct backing_dev_info *bdi, struct super_block *sb, | ||
| 105 | long nr_pages); | ||
| 106 | int bdi_writeback_task(struct bdi_writeback *wb); | ||
| 107 | int bdi_has_dirty_io(struct backing_dev_info *bdi); | ||
| 108 | |||
| 109 | extern spinlock_t bdi_lock; | ||
| 110 | extern struct list_head bdi_list; | ||
| 111 | |||
| 112 | static inline int wb_has_dirty_io(struct bdi_writeback *wb) | ||
| 113 | { | ||
| 114 | return !list_empty(&wb->b_dirty) || | ||
| 115 | !list_empty(&wb->b_io) || | ||
| 116 | !list_empty(&wb->b_more_io); | ||
| 117 | } | ||
| 74 | 118 | ||
| 75 | static inline void __add_bdi_stat(struct backing_dev_info *bdi, | 119 | static inline void __add_bdi_stat(struct backing_dev_info *bdi, |
| 76 | enum bdi_stat_item item, s64 amount) | 120 | enum bdi_stat_item item, s64 amount) |
| @@ -261,6 +305,11 @@ static inline bool bdi_cap_swap_backed(struct backing_dev_info *bdi) | |||
| 261 | return bdi->capabilities & BDI_CAP_SWAP_BACKED; | 305 | return bdi->capabilities & BDI_CAP_SWAP_BACKED; |
| 262 | } | 306 | } |
| 263 | 307 | ||
| 308 | static inline bool bdi_cap_flush_forker(struct backing_dev_info *bdi) | ||
| 309 | { | ||
| 310 | return bdi == &default_backing_dev_info; | ||
| 311 | } | ||
| 312 | |||
| 264 | static inline bool mapping_cap_writeback_dirty(struct address_space *mapping) | 313 | static inline bool mapping_cap_writeback_dirty(struct address_space *mapping) |
| 265 | { | 314 | { |
| 266 | return bdi_cap_writeback_dirty(mapping->backing_dev_info); | 315 | return bdi_cap_writeback_dirty(mapping->backing_dev_info); |
| @@ -276,4 +325,10 @@ static inline bool mapping_cap_swap_backed(struct address_space *mapping) | |||
| 276 | return bdi_cap_swap_backed(mapping->backing_dev_info); | 325 | return bdi_cap_swap_backed(mapping->backing_dev_info); |
| 277 | } | 326 | } |
| 278 | 327 | ||
| 328 | static inline int bdi_sched_wait(void *word) | ||
| 329 | { | ||
| 330 | schedule(); | ||
| 331 | return 0; | ||
| 332 | } | ||
| 333 | |||
| 279 | #endif /* _LINUX_BACKING_DEV_H */ | 334 | #endif /* _LINUX_BACKING_DEV_H */ |
diff --git a/include/linux/backlight.h b/include/linux/backlight.h index 79ca2da81c87..0f5f57858a23 100644 --- a/include/linux/backlight.h +++ b/include/linux/backlight.h | |||
| @@ -27,6 +27,11 @@ | |||
| 27 | * Any other use of the locks below is probably wrong. | 27 | * Any other use of the locks below is probably wrong. |
| 28 | */ | 28 | */ |
| 29 | 29 | ||
| 30 | enum backlight_update_reason { | ||
| 31 | BACKLIGHT_UPDATE_HOTKEY, | ||
| 32 | BACKLIGHT_UPDATE_SYSFS, | ||
| 33 | }; | ||
| 34 | |||
| 30 | struct backlight_device; | 35 | struct backlight_device; |
| 31 | struct fb_info; | 36 | struct fb_info; |
| 32 | 37 | ||
| @@ -100,6 +105,8 @@ static inline void backlight_update_status(struct backlight_device *bd) | |||
| 100 | extern struct backlight_device *backlight_device_register(const char *name, | 105 | extern struct backlight_device *backlight_device_register(const char *name, |
| 101 | struct device *dev, void *devdata, struct backlight_ops *ops); | 106 | struct device *dev, void *devdata, struct backlight_ops *ops); |
| 102 | extern void backlight_device_unregister(struct backlight_device *bd); | 107 | extern void backlight_device_unregister(struct backlight_device *bd); |
| 108 | extern void backlight_force_update(struct backlight_device *bd, | ||
| 109 | enum backlight_update_reason reason); | ||
| 103 | 110 | ||
| 104 | #define to_backlight_device(obj) container_of(obj, struct backlight_device, dev) | 111 | #define to_backlight_device(obj) container_of(obj, struct backlight_device, dev) |
| 105 | 112 | ||
diff --git a/include/linux/binfmts.h b/include/linux/binfmts.h index 2046b5b8af48..aece486ac734 100644 --- a/include/linux/binfmts.h +++ b/include/linux/binfmts.h | |||
| @@ -120,7 +120,7 @@ extern int copy_strings_kernel(int argc,char ** argv,struct linux_binprm *bprm); | |||
| 120 | extern int prepare_bprm_creds(struct linux_binprm *bprm); | 120 | extern int prepare_bprm_creds(struct linux_binprm *bprm); |
| 121 | extern void install_exec_creds(struct linux_binprm *bprm); | 121 | extern void install_exec_creds(struct linux_binprm *bprm); |
| 122 | extern void do_coredump(long signr, int exit_code, struct pt_regs *regs); | 122 | extern void do_coredump(long signr, int exit_code, struct pt_regs *regs); |
| 123 | extern int set_binfmt(struct linux_binfmt *new); | 123 | extern void set_binfmt(struct linux_binfmt *new); |
| 124 | extern void free_bprm(struct linux_binprm *); | 124 | extern void free_bprm(struct linux_binprm *); |
| 125 | 125 | ||
| 126 | #endif /* __KERNEL__ */ | 126 | #endif /* __KERNEL__ */ |
diff --git a/include/linux/bio.h b/include/linux/bio.h index 2892b710771c..5be93f18d842 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h | |||
| @@ -142,56 +142,51 @@ struct bio { | |||
| 142 | * | 142 | * |
| 143 | * bit 0 -- data direction | 143 | * bit 0 -- data direction |
| 144 | * If not set, bio is a read from device. If set, it's a write to device. | 144 | * If not set, bio is a read from device. If set, it's a write to device. |
| 145 | * bit 1 -- rw-ahead when set | 145 | * bit 1 -- fail fast device errors |
| 146 | * bit 2 -- barrier | 146 | * bit 2 -- fail fast transport errors |
| 147 | * bit 3 -- fail fast driver errors | ||
| 148 | * bit 4 -- rw-ahead when set | ||
| 149 | * bit 5 -- barrier | ||
| 147 | * Insert a serialization point in the IO queue, forcing previously | 150 | * Insert a serialization point in the IO queue, forcing previously |
| 148 | * submitted IO to be completed before this one is issued. | 151 | * submitted IO to be completed before this one is issued. |
| 149 | * bit 3 -- synchronous I/O hint. | 152 | * bit 6 -- synchronous I/O hint. |
| 150 | * bit 4 -- Unplug the device immediately after submitting this bio. | 153 | * bit 7 -- Unplug the device immediately after submitting this bio. |
| 151 | * bit 5 -- metadata request | 154 | * bit 8 -- metadata request |
| 152 | * Used for tracing to differentiate metadata and data IO. May also | 155 | * Used for tracing to differentiate metadata and data IO. May also |
| 153 | * get some preferential treatment in the IO scheduler | 156 | * get some preferential treatment in the IO scheduler |
| 154 | * bit 6 -- discard sectors | 157 | * bit 9 -- discard sectors |
| 155 | * Informs the lower level device that this range of sectors is no longer | 158 | * Informs the lower level device that this range of sectors is no longer |
| 156 | * used by the file system and may thus be freed by the device. Used | 159 | * used by the file system and may thus be freed by the device. Used |
| 157 | * for flash based storage. | 160 | * for flash based storage. |
| 158 | * bit 7 -- fail fast device errors | ||
| 159 | * bit 8 -- fail fast transport errors | ||
| 160 | * bit 9 -- fail fast driver errors | ||
| 161 | * Don't want driver retries for any fast fail whatever the reason. | 161 | * Don't want driver retries for any fast fail whatever the reason. |
| 162 | * bit 10 -- Tell the IO scheduler not to wait for more requests after this | 162 | * bit 10 -- Tell the IO scheduler not to wait for more requests after this |
| 163 | one has been submitted, even if it is a SYNC request. | 163 | one has been submitted, even if it is a SYNC request. |
| 164 | */ | 164 | */ |
| 165 | #define BIO_RW 0 /* Must match RW in req flags (blkdev.h) */ | 165 | enum bio_rw_flags { |
| 166 | #define BIO_RW_AHEAD 1 /* Must match FAILFAST in req flags */ | 166 | BIO_RW, |
| 167 | #define BIO_RW_BARRIER 2 | 167 | BIO_RW_FAILFAST_DEV, |
| 168 | #define BIO_RW_SYNCIO 3 | 168 | BIO_RW_FAILFAST_TRANSPORT, |
| 169 | #define BIO_RW_UNPLUG 4 | 169 | BIO_RW_FAILFAST_DRIVER, |
| 170 | #define BIO_RW_META 5 | 170 | /* above flags must match REQ_* */ |
| 171 | #define BIO_RW_DISCARD 6 | 171 | BIO_RW_AHEAD, |
| 172 | #define BIO_RW_FAILFAST_DEV 7 | 172 | BIO_RW_BARRIER, |
| 173 | #define BIO_RW_FAILFAST_TRANSPORT 8 | 173 | BIO_RW_SYNCIO, |
| 174 | #define BIO_RW_FAILFAST_DRIVER 9 | 174 | BIO_RW_UNPLUG, |
| 175 | #define BIO_RW_NOIDLE 10 | 175 | BIO_RW_META, |
| 176 | 176 | BIO_RW_DISCARD, | |
| 177 | #define bio_rw_flagged(bio, flag) ((bio)->bi_rw & (1 << (flag))) | 177 | BIO_RW_NOIDLE, |
| 178 | }; | ||
| 178 | 179 | ||
| 179 | /* | 180 | /* |
| 180 | * Old defines, these should eventually be replaced by direct usage of | 181 | * First four bits must match between bio->bi_rw and rq->cmd_flags, make |
| 181 | * bio_rw_flagged() | 182 | * that explicit here. |
| 182 | */ | 183 | */ |
| 183 | #define bio_barrier(bio) bio_rw_flagged(bio, BIO_RW_BARRIER) | 184 | #define BIO_RW_RQ_MASK 0xf |
| 184 | #define bio_sync(bio) bio_rw_flagged(bio, BIO_RW_SYNCIO) | 185 | |
| 185 | #define bio_unplug(bio) bio_rw_flagged(bio, BIO_RW_UNPLUG) | 186 | static inline bool bio_rw_flagged(struct bio *bio, enum bio_rw_flags flag) |
| 186 | #define bio_failfast_dev(bio) bio_rw_flagged(bio, BIO_RW_FAILFAST_DEV) | 187 | { |
| 187 | #define bio_failfast_transport(bio) \ | 188 | return (bio->bi_rw & (1 << flag)) != 0; |
| 188 | bio_rw_flagged(bio, BIO_RW_FAILFAST_TRANSPORT) | 189 | } |
| 189 | #define bio_failfast_driver(bio) \ | ||
| 190 | bio_rw_flagged(bio, BIO_RW_FAILFAST_DRIVER) | ||
| 191 | #define bio_rw_ahead(bio) bio_rw_flagged(bio, BIO_RW_AHEAD) | ||
| 192 | #define bio_rw_meta(bio) bio_rw_flagged(bio, BIO_RW_META) | ||
| 193 | #define bio_discard(bio) bio_rw_flagged(bio, BIO_RW_DISCARD) | ||
| 194 | #define bio_noidle(bio) bio_rw_flagged(bio, BIO_RW_NOIDLE) | ||
| 195 | 190 | ||
| 196 | /* | 191 | /* |
| 197 | * upper 16 bits of bi_rw define the io priority of this bio | 192 | * upper 16 bits of bi_rw define the io priority of this bio |
| @@ -216,7 +211,7 @@ struct bio { | |||
| 216 | #define bio_offset(bio) bio_iovec((bio))->bv_offset | 211 | #define bio_offset(bio) bio_iovec((bio))->bv_offset |
| 217 | #define bio_segments(bio) ((bio)->bi_vcnt - (bio)->bi_idx) | 212 | #define bio_segments(bio) ((bio)->bi_vcnt - (bio)->bi_idx) |
| 218 | #define bio_sectors(bio) ((bio)->bi_size >> 9) | 213 | #define bio_sectors(bio) ((bio)->bi_size >> 9) |
| 219 | #define bio_empty_barrier(bio) (bio_barrier(bio) && !bio_has_data(bio) && !bio_discard(bio)) | 214 | #define bio_empty_barrier(bio) (bio_rw_flagged(bio, BIO_RW_BARRIER) && !bio_has_data(bio) && !bio_rw_flagged(bio, BIO_RW_DISCARD)) |
| 220 | 215 | ||
| 221 | static inline unsigned int bio_cur_bytes(struct bio *bio) | 216 | static inline unsigned int bio_cur_bytes(struct bio *bio) |
| 222 | { | 217 | { |
diff --git a/include/linux/blk-iopoll.h b/include/linux/blk-iopoll.h new file mode 100644 index 000000000000..308734d3d4a2 --- /dev/null +++ b/include/linux/blk-iopoll.h | |||
| @@ -0,0 +1,48 @@ | |||
| 1 | #ifndef BLK_IOPOLL_H | ||
| 2 | #define BLK_IOPOLL_H | ||
| 3 | |||
| 4 | struct blk_iopoll; | ||
| 5 | typedef int (blk_iopoll_fn)(struct blk_iopoll *, int); | ||
| 6 | |||
| 7 | struct blk_iopoll { | ||
| 8 | struct list_head list; | ||
| 9 | unsigned long state; | ||
| 10 | unsigned long data; | ||
| 11 | int weight; | ||
| 12 | int max; | ||
| 13 | blk_iopoll_fn *poll; | ||
| 14 | }; | ||
| 15 | |||
| 16 | enum { | ||
| 17 | IOPOLL_F_SCHED = 0, | ||
| 18 | IOPOLL_F_DISABLE = 1, | ||
| 19 | }; | ||
| 20 | |||
| 21 | /* | ||
| 22 | * Returns 0 if we successfully set the IOPOLL_F_SCHED bit, indicating | ||
| 23 | * that we were the first to acquire this iop for scheduling. If this iop | ||
| 24 | * is currently disabled, return "failure". | ||
| 25 | */ | ||
| 26 | static inline int blk_iopoll_sched_prep(struct blk_iopoll *iop) | ||
| 27 | { | ||
| 28 | if (!test_bit(IOPOLL_F_DISABLE, &iop->state)) | ||
| 29 | return test_and_set_bit(IOPOLL_F_SCHED, &iop->state); | ||
| 30 | |||
| 31 | return 1; | ||
| 32 | } | ||
| 33 | |||
| 34 | static inline int blk_iopoll_disable_pending(struct blk_iopoll *iop) | ||
| 35 | { | ||
| 36 | return test_bit(IOPOLL_F_DISABLE, &iop->state); | ||
| 37 | } | ||
| 38 | |||
| 39 | extern void blk_iopoll_sched(struct blk_iopoll *); | ||
| 40 | extern void blk_iopoll_init(struct blk_iopoll *, int, blk_iopoll_fn *); | ||
| 41 | extern void blk_iopoll_complete(struct blk_iopoll *); | ||
| 42 | extern void __blk_iopoll_complete(struct blk_iopoll *); | ||
| 43 | extern void blk_iopoll_enable(struct blk_iopoll *); | ||
| 44 | extern void blk_iopoll_disable(struct blk_iopoll *); | ||
| 45 | |||
| 46 | extern int blk_iopoll_enabled; | ||
| 47 | |||
| 48 | #endif | ||
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 69103e053c92..221cecd86bd3 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
| @@ -82,17 +82,17 @@ enum rq_cmd_type_bits { | |||
| 82 | enum { | 82 | enum { |
| 83 | REQ_LB_OP_EJECT = 0x40, /* eject request */ | 83 | REQ_LB_OP_EJECT = 0x40, /* eject request */ |
| 84 | REQ_LB_OP_FLUSH = 0x41, /* flush request */ | 84 | REQ_LB_OP_FLUSH = 0x41, /* flush request */ |
| 85 | REQ_LB_OP_DISCARD = 0x42, /* discard sectors */ | ||
| 86 | }; | 85 | }; |
| 87 | 86 | ||
| 88 | /* | 87 | /* |
| 89 | * request type modified bits. first two bits match BIO_RW* bits, important | 88 | * request type modified bits. first four bits match BIO_RW* bits, important |
| 90 | */ | 89 | */ |
| 91 | enum rq_flag_bits { | 90 | enum rq_flag_bits { |
| 92 | __REQ_RW, /* not set, read. set, write */ | 91 | __REQ_RW, /* not set, read. set, write */ |
| 93 | __REQ_FAILFAST_DEV, /* no driver retries of device errors */ | 92 | __REQ_FAILFAST_DEV, /* no driver retries of device errors */ |
| 94 | __REQ_FAILFAST_TRANSPORT, /* no driver retries of transport errors */ | 93 | __REQ_FAILFAST_TRANSPORT, /* no driver retries of transport errors */ |
| 95 | __REQ_FAILFAST_DRIVER, /* no driver retries of driver errors */ | 94 | __REQ_FAILFAST_DRIVER, /* no driver retries of driver errors */ |
| 95 | /* above flags must match BIO_RW_* */ | ||
| 96 | __REQ_DISCARD, /* request to discard sectors */ | 96 | __REQ_DISCARD, /* request to discard sectors */ |
| 97 | __REQ_SORTED, /* elevator knows about this request */ | 97 | __REQ_SORTED, /* elevator knows about this request */ |
| 98 | __REQ_SOFTBARRIER, /* may not be passed by ioscheduler */ | 98 | __REQ_SOFTBARRIER, /* may not be passed by ioscheduler */ |
| @@ -114,6 +114,7 @@ enum rq_flag_bits { | |||
| 114 | __REQ_INTEGRITY, /* integrity metadata has been remapped */ | 114 | __REQ_INTEGRITY, /* integrity metadata has been remapped */ |
| 115 | __REQ_NOIDLE, /* Don't anticipate more IO after this one */ | 115 | __REQ_NOIDLE, /* Don't anticipate more IO after this one */ |
| 116 | __REQ_IO_STAT, /* account I/O stat */ | 116 | __REQ_IO_STAT, /* account I/O stat */ |
| 117 | __REQ_MIXED_MERGE, /* merge of different types, fail separately */ | ||
| 117 | __REQ_NR_BITS, /* stops here */ | 118 | __REQ_NR_BITS, /* stops here */ |
| 118 | }; | 119 | }; |
| 119 | 120 | ||
| @@ -142,6 +143,10 @@ enum rq_flag_bits { | |||
| 142 | #define REQ_INTEGRITY (1 << __REQ_INTEGRITY) | 143 | #define REQ_INTEGRITY (1 << __REQ_INTEGRITY) |
| 143 | #define REQ_NOIDLE (1 << __REQ_NOIDLE) | 144 | #define REQ_NOIDLE (1 << __REQ_NOIDLE) |
| 144 | #define REQ_IO_STAT (1 << __REQ_IO_STAT) | 145 | #define REQ_IO_STAT (1 << __REQ_IO_STAT) |
| 146 | #define REQ_MIXED_MERGE (1 << __REQ_MIXED_MERGE) | ||
| 147 | |||
| 148 | #define REQ_FAILFAST_MASK (REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | \ | ||
| 149 | REQ_FAILFAST_DRIVER) | ||
| 145 | 150 | ||
| 146 | #define BLK_MAX_CDB 16 | 151 | #define BLK_MAX_CDB 16 |
| 147 | 152 | ||
| @@ -255,7 +260,6 @@ typedef void (request_fn_proc) (struct request_queue *q); | |||
| 255 | typedef int (make_request_fn) (struct request_queue *q, struct bio *bio); | 260 | typedef int (make_request_fn) (struct request_queue *q, struct bio *bio); |
| 256 | typedef int (prep_rq_fn) (struct request_queue *, struct request *); | 261 | typedef int (prep_rq_fn) (struct request_queue *, struct request *); |
| 257 | typedef void (unplug_fn) (struct request_queue *); | 262 | typedef void (unplug_fn) (struct request_queue *); |
| 258 | typedef int (prepare_discard_fn) (struct request_queue *, struct request *); | ||
| 259 | 263 | ||
| 260 | struct bio_vec; | 264 | struct bio_vec; |
| 261 | struct bvec_merge_data { | 265 | struct bvec_merge_data { |
| @@ -307,6 +311,7 @@ struct queue_limits { | |||
| 307 | unsigned int alignment_offset; | 311 | unsigned int alignment_offset; |
| 308 | unsigned int io_min; | 312 | unsigned int io_min; |
| 309 | unsigned int io_opt; | 313 | unsigned int io_opt; |
| 314 | unsigned int max_discard_sectors; | ||
| 310 | 315 | ||
| 311 | unsigned short logical_block_size; | 316 | unsigned short logical_block_size; |
| 312 | unsigned short max_hw_segments; | 317 | unsigned short max_hw_segments; |
| @@ -334,7 +339,6 @@ struct request_queue | |||
| 334 | make_request_fn *make_request_fn; | 339 | make_request_fn *make_request_fn; |
| 335 | prep_rq_fn *prep_rq_fn; | 340 | prep_rq_fn *prep_rq_fn; |
| 336 | unplug_fn *unplug_fn; | 341 | unplug_fn *unplug_fn; |
| 337 | prepare_discard_fn *prepare_discard_fn; | ||
| 338 | merge_bvec_fn *merge_bvec_fn; | 342 | merge_bvec_fn *merge_bvec_fn; |
| 339 | prepare_flush_fn *prepare_flush_fn; | 343 | prepare_flush_fn *prepare_flush_fn; |
| 340 | softirq_done_fn *softirq_done_fn; | 344 | softirq_done_fn *softirq_done_fn; |
| @@ -453,10 +457,13 @@ struct request_queue | |||
| 453 | #define QUEUE_FLAG_NONROT 14 /* non-rotational device (SSD) */ | 457 | #define QUEUE_FLAG_NONROT 14 /* non-rotational device (SSD) */ |
| 454 | #define QUEUE_FLAG_VIRT QUEUE_FLAG_NONROT /* paravirt device */ | 458 | #define QUEUE_FLAG_VIRT QUEUE_FLAG_NONROT /* paravirt device */ |
| 455 | #define QUEUE_FLAG_IO_STAT 15 /* do IO stats */ | 459 | #define QUEUE_FLAG_IO_STAT 15 /* do IO stats */ |
| 460 | #define QUEUE_FLAG_CQ 16 /* hardware does queuing */ | ||
| 461 | #define QUEUE_FLAG_DISCARD 17 /* supports DISCARD */ | ||
| 456 | 462 | ||
| 457 | #define QUEUE_FLAG_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \ | 463 | #define QUEUE_FLAG_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \ |
| 458 | (1 << QUEUE_FLAG_CLUSTER) | \ | 464 | (1 << QUEUE_FLAG_CLUSTER) | \ |
| 459 | (1 << QUEUE_FLAG_STACKABLE)) | 465 | (1 << QUEUE_FLAG_STACKABLE) | \ |
| 466 | (1 << QUEUE_FLAG_SAME_COMP)) | ||
| 460 | 467 | ||
| 461 | static inline int queue_is_locked(struct request_queue *q) | 468 | static inline int queue_is_locked(struct request_queue *q) |
| 462 | { | 469 | { |
| @@ -575,6 +582,7 @@ enum { | |||
| 575 | 582 | ||
| 576 | #define blk_queue_plugged(q) test_bit(QUEUE_FLAG_PLUGGED, &(q)->queue_flags) | 583 | #define blk_queue_plugged(q) test_bit(QUEUE_FLAG_PLUGGED, &(q)->queue_flags) |
| 577 | #define blk_queue_tagged(q) test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags) | 584 | #define blk_queue_tagged(q) test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags) |
| 585 | #define blk_queue_queuing(q) test_bit(QUEUE_FLAG_CQ, &(q)->queue_flags) | ||
| 578 | #define blk_queue_stopped(q) test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags) | 586 | #define blk_queue_stopped(q) test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags) |
| 579 | #define blk_queue_nomerges(q) test_bit(QUEUE_FLAG_NOMERGES, &(q)->queue_flags) | 587 | #define blk_queue_nomerges(q) test_bit(QUEUE_FLAG_NOMERGES, &(q)->queue_flags) |
| 580 | #define blk_queue_nonrot(q) test_bit(QUEUE_FLAG_NONROT, &(q)->queue_flags) | 588 | #define blk_queue_nonrot(q) test_bit(QUEUE_FLAG_NONROT, &(q)->queue_flags) |
| @@ -582,6 +590,7 @@ enum { | |||
| 582 | #define blk_queue_flushing(q) ((q)->ordseq) | 590 | #define blk_queue_flushing(q) ((q)->ordseq) |
| 583 | #define blk_queue_stackable(q) \ | 591 | #define blk_queue_stackable(q) \ |
| 584 | test_bit(QUEUE_FLAG_STACKABLE, &(q)->queue_flags) | 592 | test_bit(QUEUE_FLAG_STACKABLE, &(q)->queue_flags) |
| 593 | #define blk_queue_discard(q) test_bit(QUEUE_FLAG_DISCARD, &(q)->queue_flags) | ||
| 585 | 594 | ||
| 586 | #define blk_fs_request(rq) ((rq)->cmd_type == REQ_TYPE_FS) | 595 | #define blk_fs_request(rq) ((rq)->cmd_type == REQ_TYPE_FS) |
| 587 | #define blk_pc_request(rq) ((rq)->cmd_type == REQ_TYPE_BLOCK_PC) | 596 | #define blk_pc_request(rq) ((rq)->cmd_type == REQ_TYPE_BLOCK_PC) |
| @@ -828,11 +837,13 @@ static inline void blk_run_address_space(struct address_space *mapping) | |||
| 828 | } | 837 | } |
| 829 | 838 | ||
| 830 | /* | 839 | /* |
| 831 | * blk_rq_pos() : the current sector | 840 | * blk_rq_pos() : the current sector |
| 832 | * blk_rq_bytes() : bytes left in the entire request | 841 | * blk_rq_bytes() : bytes left in the entire request |
| 833 | * blk_rq_cur_bytes() : bytes left in the current segment | 842 | * blk_rq_cur_bytes() : bytes left in the current segment |
| 834 | * blk_rq_sectors() : sectors left in the entire request | 843 | * blk_rq_err_bytes() : bytes left till the next error boundary |
| 835 | * blk_rq_cur_sectors() : sectors left in the current segment | 844 | * blk_rq_sectors() : sectors left in the entire request |
| 845 | * blk_rq_cur_sectors() : sectors left in the current segment | ||
| 846 | * blk_rq_err_sectors() : sectors left till the next error boundary | ||
| 836 | */ | 847 | */ |
| 837 | static inline sector_t blk_rq_pos(const struct request *rq) | 848 | static inline sector_t blk_rq_pos(const struct request *rq) |
| 838 | { | 849 | { |
| @@ -849,6 +860,8 @@ static inline int blk_rq_cur_bytes(const struct request *rq) | |||
| 849 | return rq->bio ? bio_cur_bytes(rq->bio) : 0; | 860 | return rq->bio ? bio_cur_bytes(rq->bio) : 0; |
| 850 | } | 861 | } |
| 851 | 862 | ||
| 863 | extern unsigned int blk_rq_err_bytes(const struct request *rq); | ||
| 864 | |||
| 852 | static inline unsigned int blk_rq_sectors(const struct request *rq) | 865 | static inline unsigned int blk_rq_sectors(const struct request *rq) |
| 853 | { | 866 | { |
| 854 | return blk_rq_bytes(rq) >> 9; | 867 | return blk_rq_bytes(rq) >> 9; |
| @@ -859,6 +872,11 @@ static inline unsigned int blk_rq_cur_sectors(const struct request *rq) | |||
| 859 | return blk_rq_cur_bytes(rq) >> 9; | 872 | return blk_rq_cur_bytes(rq) >> 9; |
| 860 | } | 873 | } |
| 861 | 874 | ||
| 875 | static inline unsigned int blk_rq_err_sectors(const struct request *rq) | ||
| 876 | { | ||
| 877 | return blk_rq_err_bytes(rq) >> 9; | ||
| 878 | } | ||
| 879 | |||
| 862 | /* | 880 | /* |
| 863 | * Request issue related functions. | 881 | * Request issue related functions. |
| 864 | */ | 882 | */ |
| @@ -885,10 +903,12 @@ extern bool blk_end_request(struct request *rq, int error, | |||
| 885 | unsigned int nr_bytes); | 903 | unsigned int nr_bytes); |
| 886 | extern void blk_end_request_all(struct request *rq, int error); | 904 | extern void blk_end_request_all(struct request *rq, int error); |
| 887 | extern bool blk_end_request_cur(struct request *rq, int error); | 905 | extern bool blk_end_request_cur(struct request *rq, int error); |
| 906 | extern bool blk_end_request_err(struct request *rq, int error); | ||
| 888 | extern bool __blk_end_request(struct request *rq, int error, | 907 | extern bool __blk_end_request(struct request *rq, int error, |
| 889 | unsigned int nr_bytes); | 908 | unsigned int nr_bytes); |
| 890 | extern void __blk_end_request_all(struct request *rq, int error); | 909 | extern void __blk_end_request_all(struct request *rq, int error); |
| 891 | extern bool __blk_end_request_cur(struct request *rq, int error); | 910 | extern bool __blk_end_request_cur(struct request *rq, int error); |
| 911 | extern bool __blk_end_request_err(struct request *rq, int error); | ||
| 892 | 912 | ||
| 893 | extern void blk_complete_request(struct request *); | 913 | extern void blk_complete_request(struct request *); |
| 894 | extern void __blk_complete_request(struct request *); | 914 | extern void __blk_complete_request(struct request *); |
| @@ -909,12 +929,15 @@ extern void blk_queue_max_hw_sectors(struct request_queue *, unsigned int); | |||
| 909 | extern void blk_queue_max_phys_segments(struct request_queue *, unsigned short); | 929 | extern void blk_queue_max_phys_segments(struct request_queue *, unsigned short); |
| 910 | extern void blk_queue_max_hw_segments(struct request_queue *, unsigned short); | 930 | extern void blk_queue_max_hw_segments(struct request_queue *, unsigned short); |
| 911 | extern void blk_queue_max_segment_size(struct request_queue *, unsigned int); | 931 | extern void blk_queue_max_segment_size(struct request_queue *, unsigned int); |
| 932 | extern void blk_queue_max_discard_sectors(struct request_queue *q, | ||
| 933 | unsigned int max_discard_sectors); | ||
| 912 | extern void blk_queue_logical_block_size(struct request_queue *, unsigned short); | 934 | extern void blk_queue_logical_block_size(struct request_queue *, unsigned short); |
| 913 | extern void blk_queue_physical_block_size(struct request_queue *, unsigned short); | 935 | extern void blk_queue_physical_block_size(struct request_queue *, unsigned short); |
| 914 | extern void blk_queue_alignment_offset(struct request_queue *q, | 936 | extern void blk_queue_alignment_offset(struct request_queue *q, |
| 915 | unsigned int alignment); | 937 | unsigned int alignment); |
| 916 | extern void blk_limits_io_min(struct queue_limits *limits, unsigned int min); | 938 | extern void blk_limits_io_min(struct queue_limits *limits, unsigned int min); |
| 917 | extern void blk_queue_io_min(struct request_queue *q, unsigned int min); | 939 | extern void blk_queue_io_min(struct request_queue *q, unsigned int min); |
| 940 | extern void blk_limits_io_opt(struct queue_limits *limits, unsigned int opt); | ||
| 918 | extern void blk_queue_io_opt(struct request_queue *q, unsigned int opt); | 941 | extern void blk_queue_io_opt(struct request_queue *q, unsigned int opt); |
| 919 | extern void blk_set_default_limits(struct queue_limits *lim); | 942 | extern void blk_set_default_limits(struct queue_limits *lim); |
| 920 | extern int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, | 943 | extern int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, |
| @@ -934,7 +957,6 @@ extern void blk_queue_merge_bvec(struct request_queue *, merge_bvec_fn *); | |||
| 934 | extern void blk_queue_dma_alignment(struct request_queue *, int); | 957 | extern void blk_queue_dma_alignment(struct request_queue *, int); |
| 935 | extern void blk_queue_update_dma_alignment(struct request_queue *, int); | 958 | extern void blk_queue_update_dma_alignment(struct request_queue *, int); |
| 936 | extern void blk_queue_softirq_done(struct request_queue *, softirq_done_fn *); | 959 | extern void blk_queue_softirq_done(struct request_queue *, softirq_done_fn *); |
| 937 | extern void blk_queue_set_discard(struct request_queue *, prepare_discard_fn *); | ||
| 938 | extern void blk_queue_rq_timed_out(struct request_queue *, rq_timed_out_fn *); | 960 | extern void blk_queue_rq_timed_out(struct request_queue *, rq_timed_out_fn *); |
| 939 | extern void blk_queue_rq_timeout(struct request_queue *, unsigned int); | 961 | extern void blk_queue_rq_timeout(struct request_queue *, unsigned int); |
| 940 | extern struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev); | 962 | extern struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev); |
| @@ -977,15 +999,18 @@ static inline struct request *blk_map_queue_find_tag(struct blk_queue_tag *bqt, | |||
| 977 | } | 999 | } |
| 978 | 1000 | ||
| 979 | extern int blkdev_issue_flush(struct block_device *, sector_t *); | 1001 | extern int blkdev_issue_flush(struct block_device *, sector_t *); |
| 980 | extern int blkdev_issue_discard(struct block_device *, | 1002 | #define DISCARD_FL_WAIT 0x01 /* wait for completion */ |
| 981 | sector_t sector, sector_t nr_sects, gfp_t); | 1003 | #define DISCARD_FL_BARRIER 0x02 /* issue DISCARD_BARRIER request */ |
| 1004 | extern int blkdev_issue_discard(struct block_device *, sector_t sector, | ||
| 1005 | sector_t nr_sects, gfp_t, int flags); | ||
| 982 | 1006 | ||
| 983 | static inline int sb_issue_discard(struct super_block *sb, | 1007 | static inline int sb_issue_discard(struct super_block *sb, |
| 984 | sector_t block, sector_t nr_blocks) | 1008 | sector_t block, sector_t nr_blocks) |
| 985 | { | 1009 | { |
| 986 | block <<= (sb->s_blocksize_bits - 9); | 1010 | block <<= (sb->s_blocksize_bits - 9); |
| 987 | nr_blocks <<= (sb->s_blocksize_bits - 9); | 1011 | nr_blocks <<= (sb->s_blocksize_bits - 9); |
| 988 | return blkdev_issue_discard(sb->s_bdev, block, nr_blocks, GFP_KERNEL); | 1012 | return blkdev_issue_discard(sb->s_bdev, block, nr_blocks, GFP_KERNEL, |
| 1013 | DISCARD_FL_BARRIER); | ||
| 989 | } | 1014 | } |
| 990 | 1015 | ||
| 991 | extern int blk_verify_command(unsigned char *cmd, fmode_t has_write_perm); | 1016 | extern int blk_verify_command(unsigned char *cmd, fmode_t has_write_perm); |
| @@ -1056,25 +1081,37 @@ static inline unsigned int queue_physical_block_size(struct request_queue *q) | |||
| 1056 | return q->limits.physical_block_size; | 1081 | return q->limits.physical_block_size; |
| 1057 | } | 1082 | } |
| 1058 | 1083 | ||
| 1084 | static inline int bdev_physical_block_size(struct block_device *bdev) | ||
| 1085 | { | ||
| 1086 | return queue_physical_block_size(bdev_get_queue(bdev)); | ||
| 1087 | } | ||
| 1088 | |||
| 1059 | static inline unsigned int queue_io_min(struct request_queue *q) | 1089 | static inline unsigned int queue_io_min(struct request_queue *q) |
| 1060 | { | 1090 | { |
| 1061 | return q->limits.io_min; | 1091 | return q->limits.io_min; |
| 1062 | } | 1092 | } |
| 1063 | 1093 | ||
| 1094 | static inline int bdev_io_min(struct block_device *bdev) | ||
| 1095 | { | ||
| 1096 | return queue_io_min(bdev_get_queue(bdev)); | ||
| 1097 | } | ||
| 1098 | |||
| 1064 | static inline unsigned int queue_io_opt(struct request_queue *q) | 1099 | static inline unsigned int queue_io_opt(struct request_queue *q) |
| 1065 | { | 1100 | { |
| 1066 | return q->limits.io_opt; | 1101 | return q->limits.io_opt; |
| 1067 | } | 1102 | } |
| 1068 | 1103 | ||
| 1104 | static inline int bdev_io_opt(struct block_device *bdev) | ||
| 1105 | { | ||
| 1106 | return queue_io_opt(bdev_get_queue(bdev)); | ||
| 1107 | } | ||
| 1108 | |||
| 1069 | static inline int queue_alignment_offset(struct request_queue *q) | 1109 | static inline int queue_alignment_offset(struct request_queue *q) |
| 1070 | { | 1110 | { |
| 1071 | if (q && q->limits.misaligned) | 1111 | if (q->limits.misaligned) |
| 1072 | return -1; | 1112 | return -1; |
| 1073 | 1113 | ||
| 1074 | if (q && q->limits.alignment_offset) | 1114 | return q->limits.alignment_offset; |
| 1075 | return q->limits.alignment_offset; | ||
| 1076 | |||
| 1077 | return 0; | ||
| 1078 | } | 1115 | } |
| 1079 | 1116 | ||
| 1080 | static inline int queue_sector_alignment_offset(struct request_queue *q, | 1117 | static inline int queue_sector_alignment_offset(struct request_queue *q, |
| @@ -1084,6 +1121,19 @@ static inline int queue_sector_alignment_offset(struct request_queue *q, | |||
| 1084 | & (q->limits.io_min - 1); | 1121 | & (q->limits.io_min - 1); |
| 1085 | } | 1122 | } |
| 1086 | 1123 | ||
| 1124 | static inline int bdev_alignment_offset(struct block_device *bdev) | ||
| 1125 | { | ||
| 1126 | struct request_queue *q = bdev_get_queue(bdev); | ||
| 1127 | |||
| 1128 | if (q->limits.misaligned) | ||
| 1129 | return -1; | ||
| 1130 | |||
| 1131 | if (bdev != bdev->bd_contains) | ||
| 1132 | return bdev->bd_part->alignment_offset; | ||
| 1133 | |||
| 1134 | return q->limits.alignment_offset; | ||
| 1135 | } | ||
| 1136 | |||
| 1087 | static inline int queue_dma_alignment(struct request_queue *q) | 1137 | static inline int queue_dma_alignment(struct request_queue *q) |
| 1088 | { | 1138 | { |
| 1089 | return q ? q->dma_alignment : 511; | 1139 | return q ? q->dma_alignment : 511; |
diff --git a/include/linux/blktrace_api.h b/include/linux/blktrace_api.h index 7e4350ece0f8..3b73b9992b26 100644 --- a/include/linux/blktrace_api.h +++ b/include/linux/blktrace_api.h | |||
| @@ -198,6 +198,7 @@ extern int blk_trace_setup(struct request_queue *q, char *name, dev_t dev, | |||
| 198 | char __user *arg); | 198 | char __user *arg); |
| 199 | extern int blk_trace_startstop(struct request_queue *q, int start); | 199 | extern int blk_trace_startstop(struct request_queue *q, int start); |
| 200 | extern int blk_trace_remove(struct request_queue *q); | 200 | extern int blk_trace_remove(struct request_queue *q); |
| 201 | extern void blk_trace_remove_sysfs(struct device *dev); | ||
| 201 | extern int blk_trace_init_sysfs(struct device *dev); | 202 | extern int blk_trace_init_sysfs(struct device *dev); |
| 202 | 203 | ||
| 203 | extern struct attribute_group blk_trace_attr_group; | 204 | extern struct attribute_group blk_trace_attr_group; |
| @@ -211,6 +212,7 @@ extern struct attribute_group blk_trace_attr_group; | |||
| 211 | # define blk_trace_startstop(q, start) (-ENOTTY) | 212 | # define blk_trace_startstop(q, start) (-ENOTTY) |
| 212 | # define blk_trace_remove(q) (-ENOTTY) | 213 | # define blk_trace_remove(q) (-ENOTTY) |
| 213 | # define blk_add_trace_msg(q, fmt, ...) do { } while (0) | 214 | # define blk_add_trace_msg(q, fmt, ...) do { } while (0) |
| 215 | # define blk_trace_remove_sysfs(dev) do { } while (0) | ||
| 214 | static inline int blk_trace_init_sysfs(struct device *dev) | 216 | static inline int blk_trace_init_sysfs(struct device *dev) |
| 215 | { | 217 | { |
| 216 | return 0; | 218 | return 0; |
diff --git a/include/linux/bootmem.h b/include/linux/bootmem.h index bc3ab7073695..b10ec49ee2dd 100644 --- a/include/linux/bootmem.h +++ b/include/linux/bootmem.h | |||
| @@ -53,6 +53,7 @@ extern void free_bootmem_node(pg_data_t *pgdat, | |||
| 53 | unsigned long addr, | 53 | unsigned long addr, |
| 54 | unsigned long size); | 54 | unsigned long size); |
| 55 | extern void free_bootmem(unsigned long addr, unsigned long size); | 55 | extern void free_bootmem(unsigned long addr, unsigned long size); |
| 56 | extern void free_bootmem_late(unsigned long addr, unsigned long size); | ||
| 56 | 57 | ||
| 57 | /* | 58 | /* |
| 58 | * Flags for reserve_bootmem (also if CONFIG_HAVE_ARCH_BOOTMEM_NODE, | 59 | * Flags for reserve_bootmem (also if CONFIG_HAVE_ARCH_BOOTMEM_NODE, |
| @@ -132,9 +133,6 @@ static inline void *alloc_remap(int nid, unsigned long size) | |||
| 132 | } | 133 | } |
| 133 | #endif /* CONFIG_HAVE_ARCH_ALLOC_REMAP */ | 134 | #endif /* CONFIG_HAVE_ARCH_ALLOC_REMAP */ |
| 134 | 135 | ||
| 135 | extern unsigned long __meminitdata nr_kernel_pages; | ||
| 136 | extern unsigned long __meminitdata nr_all_pages; | ||
| 137 | |||
| 138 | extern void *alloc_large_system_hash(const char *tablename, | 136 | extern void *alloc_large_system_hash(const char *tablename, |
| 139 | unsigned long bucketsize, | 137 | unsigned long bucketsize, |
| 140 | unsigned long numentries, | 138 | unsigned long numentries, |
| @@ -145,6 +143,8 @@ extern void *alloc_large_system_hash(const char *tablename, | |||
| 145 | unsigned long limit); | 143 | unsigned long limit); |
| 146 | 144 | ||
| 147 | #define HASH_EARLY 0x00000001 /* Allocating during early boot? */ | 145 | #define HASH_EARLY 0x00000001 /* Allocating during early boot? */ |
| 146 | #define HASH_SMALL 0x00000002 /* sub-page allocation allowed, min | ||
| 147 | * shift passed via *_hash_shift */ | ||
| 148 | 148 | ||
| 149 | /* Only NUMA needs hash distribution. 64bit NUMA architectures have | 149 | /* Only NUMA needs hash distribution. 64bit NUMA architectures have |
| 150 | * sufficient vmalloc space. | 150 | * sufficient vmalloc space. |
diff --git a/include/linux/brcmphy.h b/include/linux/brcmphy.h index 9b64b6d67873..2b31b91f5871 100644 --- a/include/linux/brcmphy.h +++ b/include/linux/brcmphy.h | |||
| @@ -1,6 +1,13 @@ | |||
| 1 | #define PHY_BRCM_WIRESPEED_ENABLE 0x00000001 | 1 | #define PHY_BCM_FLAGS_MODE_COPPER 0x00000001 |
| 2 | #define PHY_BRCM_AUTO_PWRDWN_ENABLE 0x00000002 | 2 | #define PHY_BCM_FLAGS_MODE_1000BX 0x00000002 |
| 3 | #define PHY_BRCM_APD_CLK125_ENABLE 0x00000004 | 3 | #define PHY_BCM_FLAGS_INTF_SGMII 0x00000010 |
| 4 | #define PHY_BRCM_STD_IBND_DISABLE 0x00000008 | 4 | #define PHY_BCM_FLAGS_INTF_XAUI 0x00000020 |
| 5 | #define PHY_BRCM_EXT_IBND_RX_ENABLE 0x00000010 | 5 | #define PHY_BRCM_WIRESPEED_ENABLE 0x00000100 |
| 6 | #define PHY_BRCM_EXT_IBND_TX_ENABLE 0x00000020 | 6 | #define PHY_BRCM_AUTO_PWRDWN_ENABLE 0x00000200 |
| 7 | #define PHY_BRCM_RX_REFCLK_UNUSED 0x00000400 | ||
| 8 | #define PHY_BRCM_STD_IBND_DISABLE 0x00000800 | ||
| 9 | #define PHY_BRCM_EXT_IBND_RX_ENABLE 0x00001000 | ||
| 10 | #define PHY_BRCM_EXT_IBND_TX_ENABLE 0x00002000 | ||
| 11 | #define PHY_BRCM_CLEAR_RGMII_MODE 0x00004000 | ||
| 12 | #define PHY_BRCM_DIS_TXCRXC_NOENRGY 0x00008000 | ||
| 13 | #define PHY_BCM_FLAGS_VALID 0x80000000 | ||
diff --git a/include/linux/can/core.h b/include/linux/can/core.h index 25085cbadcfc..6c507bea275f 100644 --- a/include/linux/can/core.h +++ b/include/linux/can/core.h | |||
| @@ -32,14 +32,12 @@ | |||
| 32 | * struct can_proto - CAN protocol structure | 32 | * struct can_proto - CAN protocol structure |
| 33 | * @type: type argument in socket() syscall, e.g. SOCK_DGRAM. | 33 | * @type: type argument in socket() syscall, e.g. SOCK_DGRAM. |
| 34 | * @protocol: protocol number in socket() syscall. | 34 | * @protocol: protocol number in socket() syscall. |
| 35 | * @capability: capability needed to open the socket, or -1 for no restriction. | ||
| 36 | * @ops: pointer to struct proto_ops for sock->ops. | 35 | * @ops: pointer to struct proto_ops for sock->ops. |
| 37 | * @prot: pointer to struct proto structure. | 36 | * @prot: pointer to struct proto structure. |
| 38 | */ | 37 | */ |
| 39 | struct can_proto { | 38 | struct can_proto { |
| 40 | int type; | 39 | int type; |
| 41 | int protocol; | 40 | int protocol; |
| 42 | int capability; | ||
| 43 | struct proto_ops *ops; | 41 | struct proto_ops *ops; |
| 44 | struct proto *prot; | 42 | struct proto *prot; |
| 45 | }; | 43 | }; |
diff --git a/include/linux/can/dev.h b/include/linux/can/dev.h index 4a37a56f6cdd..1ed2a5cc03f5 100644 --- a/include/linux/can/dev.h +++ b/include/linux/can/dev.h | |||
| @@ -29,8 +29,6 @@ enum can_mode { | |||
| 29 | /* | 29 | /* |
| 30 | * CAN common private data | 30 | * CAN common private data |
| 31 | */ | 31 | */ |
| 32 | #define CAN_ECHO_SKB_MAX 4 | ||
| 33 | |||
| 34 | struct can_priv { | 32 | struct can_priv { |
| 35 | struct can_device_stats can_stats; | 33 | struct can_device_stats can_stats; |
| 36 | 34 | ||
| @@ -44,15 +42,16 @@ struct can_priv { | |||
| 44 | int restart_ms; | 42 | int restart_ms; |
| 45 | struct timer_list restart_timer; | 43 | struct timer_list restart_timer; |
| 46 | 44 | ||
| 47 | struct sk_buff *echo_skb[CAN_ECHO_SKB_MAX]; | ||
| 48 | |||
| 49 | int (*do_set_bittiming)(struct net_device *dev); | 45 | int (*do_set_bittiming)(struct net_device *dev); |
| 50 | int (*do_set_mode)(struct net_device *dev, enum can_mode mode); | 46 | int (*do_set_mode)(struct net_device *dev, enum can_mode mode); |
| 51 | int (*do_get_state)(const struct net_device *dev, | 47 | int (*do_get_state)(const struct net_device *dev, |
| 52 | enum can_state *state); | 48 | enum can_state *state); |
| 49 | |||
| 50 | unsigned int echo_skb_max; | ||
| 51 | struct sk_buff **echo_skb; | ||
| 53 | }; | 52 | }; |
| 54 | 53 | ||
| 55 | struct net_device *alloc_candev(int sizeof_priv); | 54 | struct net_device *alloc_candev(int sizeof_priv, unsigned int echo_skb_max); |
| 56 | void free_candev(struct net_device *dev); | 55 | void free_candev(struct net_device *dev); |
| 57 | 56 | ||
| 58 | int open_candev(struct net_device *dev); | 57 | int open_candev(struct net_device *dev); |
| @@ -64,7 +63,13 @@ void unregister_candev(struct net_device *dev); | |||
| 64 | int can_restart_now(struct net_device *dev); | 63 | int can_restart_now(struct net_device *dev); |
| 65 | void can_bus_off(struct net_device *dev); | 64 | void can_bus_off(struct net_device *dev); |
| 66 | 65 | ||
| 67 | void can_put_echo_skb(struct sk_buff *skb, struct net_device *dev, int idx); | 66 | void can_put_echo_skb(struct sk_buff *skb, struct net_device *dev, |
| 68 | void can_get_echo_skb(struct net_device *dev, int idx); | 67 | unsigned int idx); |
| 68 | void can_get_echo_skb(struct net_device *dev, unsigned int idx); | ||
| 69 | void can_free_echo_skb(struct net_device *dev, unsigned int idx); | ||
| 70 | |||
| 71 | struct sk_buff *alloc_can_skb(struct net_device *dev, struct can_frame **cf); | ||
| 72 | struct sk_buff *alloc_can_err_skb(struct net_device *dev, | ||
| 73 | struct can_frame **cf); | ||
| 69 | 74 | ||
| 70 | #endif /* CAN_DEV_H */ | 75 | #endif /* CAN_DEV_H */ |
diff --git a/include/linux/can/platform/mcp251x.h b/include/linux/can/platform/mcp251x.h new file mode 100644 index 000000000000..1448177d86d5 --- /dev/null +++ b/include/linux/can/platform/mcp251x.h | |||
| @@ -0,0 +1,36 @@ | |||
| 1 | #ifndef __CAN_PLATFORM_MCP251X_H__ | ||
| 2 | #define __CAN_PLATFORM_MCP251X_H__ | ||
| 3 | |||
| 4 | /* | ||
| 5 | * | ||
| 6 | * CAN bus driver for Microchip 251x CAN Controller with SPI Interface | ||
| 7 | * | ||
| 8 | */ | ||
| 9 | |||
| 10 | #include <linux/spi/spi.h> | ||
| 11 | |||
| 12 | /** | ||
| 13 | * struct mcp251x_platform_data - MCP251X SPI CAN controller platform data | ||
| 14 | * @oscillator_frequency: - oscillator frequency in Hz | ||
| 15 | * @model: - actual type of chip | ||
| 16 | * @board_specific_setup: - called before probing the chip (power,reset) | ||
| 17 | * @transceiver_enable: - called to power on/off the transceiver | ||
| 18 | * @power_enable: - called to power on/off the mcp *and* the | ||
| 19 | * transceiver | ||
| 20 | * | ||
| 21 | * Please note that you should define power_enable or transceiver_enable or | ||
| 22 | * none of them. Defining both of them is no use. | ||
| 23 | * | ||
| 24 | */ | ||
| 25 | |||
| 26 | struct mcp251x_platform_data { | ||
| 27 | unsigned long oscillator_frequency; | ||
| 28 | int model; | ||
| 29 | #define CAN_MCP251X_MCP2510 0 | ||
| 30 | #define CAN_MCP251X_MCP2515 1 | ||
| 31 | int (*board_specific_setup)(struct spi_device *spi); | ||
| 32 | int (*transceiver_enable)(int enable); | ||
| 33 | int (*power_enable) (int enable); | ||
| 34 | }; | ||
| 35 | |||
| 36 | #endif /* __CAN_PLATFORM_MCP251X_H__ */ | ||
diff --git a/include/linux/can/platform/ti_hecc.h b/include/linux/can/platform/ti_hecc.h new file mode 100644 index 000000000000..4688c7bb1bd1 --- /dev/null +++ b/include/linux/can/platform/ti_hecc.h | |||
| @@ -0,0 +1,40 @@ | |||
| 1 | /* | ||
| 2 | * TI HECC (High End CAN Controller) driver platform header | ||
| 3 | * | ||
| 4 | * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.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 as | ||
| 8 | * published by the Free Software Foundation version 2. | ||
| 9 | * | ||
| 10 | * This program is distributed as is WITHOUT ANY WARRANTY of any | ||
| 11 | * kind, whether express or implied; without even the implied warranty | ||
| 12 | * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 13 | * GNU General Public License for more details. | ||
| 14 | * | ||
| 15 | */ | ||
| 16 | |||
| 17 | /** | ||
| 18 | * struct hecc_platform_data - HECC Platform Data | ||
| 19 | * | ||
| 20 | * @scc_hecc_offset: mostly 0 - should really never change | ||
| 21 | * @scc_ram_offset: SCC RAM offset | ||
| 22 | * @hecc_ram_offset: HECC RAM offset | ||
| 23 | * @mbx_offset: Mailbox RAM offset | ||
| 24 | * @int_line: Interrupt line to use - 0 or 1 | ||
| 25 | * @version: version for future use | ||
| 26 | * | ||
| 27 | * Platform data structure to get all platform specific settings. | ||
| 28 | * this structure also accounts the fact that the IP may have different | ||
| 29 | * RAM and mailbox offsets for different SOC's | ||
| 30 | */ | ||
| 31 | struct ti_hecc_platform_data { | ||
| 32 | u32 scc_hecc_offset; | ||
| 33 | u32 scc_ram_offset; | ||
| 34 | u32 hecc_ram_offset; | ||
| 35 | u32 mbx_offset; | ||
| 36 | u32 int_line; | ||
| 37 | u32 version; | ||
| 38 | }; | ||
| 39 | |||
| 40 | |||
diff --git a/include/linux/capability.h b/include/linux/capability.h index c3021105edc0..39e5ff512fbe 100644 --- a/include/linux/capability.h +++ b/include/linux/capability.h | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | * | 7 | * |
| 8 | * See here for the libcap library ("POSIX draft" compliance): | 8 | * See here for the libcap library ("POSIX draft" compliance): |
| 9 | * | 9 | * |
| 10 | * ftp://linux.kernel.org/pub/linux/libs/security/linux-privs/kernel-2.6/ | 10 | * ftp://www.kernel.org/pub/linux/libs/security/linux-privs/kernel-2.6/ |
| 11 | */ | 11 | */ |
| 12 | 12 | ||
| 13 | #ifndef _LINUX_CAPABILITY_H | 13 | #ifndef _LINUX_CAPABILITY_H |
| @@ -92,9 +92,7 @@ struct vfs_cap_data { | |||
| 92 | #define _KERNEL_CAPABILITY_VERSION _LINUX_CAPABILITY_VERSION_3 | 92 | #define _KERNEL_CAPABILITY_VERSION _LINUX_CAPABILITY_VERSION_3 |
| 93 | #define _KERNEL_CAPABILITY_U32S _LINUX_CAPABILITY_U32S_3 | 93 | #define _KERNEL_CAPABILITY_U32S _LINUX_CAPABILITY_U32S_3 |
| 94 | 94 | ||
| 95 | #ifdef CONFIG_SECURITY_FILE_CAPABILITIES | ||
| 96 | extern int file_caps_enabled; | 95 | extern int file_caps_enabled; |
| 97 | #endif | ||
| 98 | 96 | ||
| 99 | typedef struct kernel_cap_struct { | 97 | typedef struct kernel_cap_struct { |
| 100 | __u32 cap[_KERNEL_CAPABILITY_U32S]; | 98 | __u32 cap[_KERNEL_CAPABILITY_U32S]; |
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h index 90bba9e62286..0008dee66514 100644 --- a/include/linux/cgroup.h +++ b/include/linux/cgroup.h | |||
| @@ -37,7 +37,7 @@ extern void cgroup_exit(struct task_struct *p, int run_callbacks); | |||
| 37 | extern int cgroupstats_build(struct cgroupstats *stats, | 37 | extern int cgroupstats_build(struct cgroupstats *stats, |
| 38 | struct dentry *dentry); | 38 | struct dentry *dentry); |
| 39 | 39 | ||
| 40 | extern struct file_operations proc_cgroup_operations; | 40 | extern const struct file_operations proc_cgroup_operations; |
| 41 | 41 | ||
| 42 | /* Define the enumeration of all cgroup subsystems */ | 42 | /* Define the enumeration of all cgroup subsystems */ |
| 43 | #define SUBSYS(_x) _x ## _subsys_id, | 43 | #define SUBSYS(_x) _x ## _subsys_id, |
| @@ -141,6 +141,38 @@ enum { | |||
| 141 | CGRP_WAIT_ON_RMDIR, | 141 | CGRP_WAIT_ON_RMDIR, |
| 142 | }; | 142 | }; |
| 143 | 143 | ||
| 144 | /* which pidlist file are we talking about? */ | ||
| 145 | enum cgroup_filetype { | ||
| 146 | CGROUP_FILE_PROCS, | ||
| 147 | CGROUP_FILE_TASKS, | ||
| 148 | }; | ||
| 149 | |||
| 150 | /* | ||
| 151 | * A pidlist is a list of pids that virtually represents the contents of one | ||
| 152 | * of the cgroup files ("procs" or "tasks"). We keep a list of such pidlists, | ||
| 153 | * a pair (one each for procs, tasks) for each pid namespace that's relevant | ||
| 154 | * to the cgroup. | ||
| 155 | */ | ||
| 156 | struct cgroup_pidlist { | ||
| 157 | /* | ||
| 158 | * used to find which pidlist is wanted. doesn't change as long as | ||
| 159 | * this particular list stays in the list. | ||
| 160 | */ | ||
| 161 | struct { enum cgroup_filetype type; struct pid_namespace *ns; } key; | ||
| 162 | /* array of xids */ | ||
| 163 | pid_t *list; | ||
| 164 | /* how many elements the above list has */ | ||
| 165 | int length; | ||
| 166 | /* how many files are using the current array */ | ||
| 167 | int use_count; | ||
| 168 | /* each of these stored in a list by its cgroup */ | ||
| 169 | struct list_head links; | ||
| 170 | /* pointer to the cgroup we belong to, for list removal purposes */ | ||
| 171 | struct cgroup *owner; | ||
| 172 | /* protects the other fields */ | ||
| 173 | struct rw_semaphore mutex; | ||
| 174 | }; | ||
| 175 | |||
| 144 | struct cgroup { | 176 | struct cgroup { |
| 145 | unsigned long flags; /* "unsigned long" so bitops work */ | 177 | unsigned long flags; /* "unsigned long" so bitops work */ |
| 146 | 178 | ||
| @@ -179,11 +211,12 @@ struct cgroup { | |||
| 179 | */ | 211 | */ |
| 180 | struct list_head release_list; | 212 | struct list_head release_list; |
| 181 | 213 | ||
| 182 | /* pids_mutex protects pids_list and cached pid arrays. */ | 214 | /* |
| 183 | struct rw_semaphore pids_mutex; | 215 | * list of pidlists, up to two for each namespace (one for procs, one |
| 184 | 216 | * for tasks); created on demand. | |
| 185 | /* Linked list of struct cgroup_pids */ | 217 | */ |
| 186 | struct list_head pids_list; | 218 | struct list_head pidlists; |
| 219 | struct mutex pidlist_mutex; | ||
| 187 | 220 | ||
| 188 | /* For RCU-protected deletion */ | 221 | /* For RCU-protected deletion */ |
| 189 | struct rcu_head rcu_head; | 222 | struct rcu_head rcu_head; |
| @@ -227,6 +260,9 @@ struct css_set { | |||
| 227 | * during subsystem registration (at boot time). | 260 | * during subsystem registration (at boot time). |
| 228 | */ | 261 | */ |
| 229 | struct cgroup_subsys_state *subsys[CGROUP_SUBSYS_COUNT]; | 262 | struct cgroup_subsys_state *subsys[CGROUP_SUBSYS_COUNT]; |
| 263 | |||
| 264 | /* For RCU-protected deletion */ | ||
| 265 | struct rcu_head rcu_head; | ||
| 230 | }; | 266 | }; |
| 231 | 267 | ||
| 232 | /* | 268 | /* |
| @@ -389,10 +425,11 @@ struct cgroup_subsys { | |||
| 389 | struct cgroup *cgrp); | 425 | struct cgroup *cgrp); |
| 390 | int (*pre_destroy)(struct cgroup_subsys *ss, struct cgroup *cgrp); | 426 | int (*pre_destroy)(struct cgroup_subsys *ss, struct cgroup *cgrp); |
| 391 | void (*destroy)(struct cgroup_subsys *ss, struct cgroup *cgrp); | 427 | void (*destroy)(struct cgroup_subsys *ss, struct cgroup *cgrp); |
| 392 | int (*can_attach)(struct cgroup_subsys *ss, | 428 | int (*can_attach)(struct cgroup_subsys *ss, struct cgroup *cgrp, |
| 393 | struct cgroup *cgrp, struct task_struct *tsk); | 429 | struct task_struct *tsk, bool threadgroup); |
| 394 | void (*attach)(struct cgroup_subsys *ss, struct cgroup *cgrp, | 430 | void (*attach)(struct cgroup_subsys *ss, struct cgroup *cgrp, |
| 395 | struct cgroup *old_cgrp, struct task_struct *tsk); | 431 | struct cgroup *old_cgrp, struct task_struct *tsk, |
| 432 | bool threadgroup); | ||
| 396 | void (*fork)(struct cgroup_subsys *ss, struct task_struct *task); | 433 | void (*fork)(struct cgroup_subsys *ss, struct task_struct *task); |
| 397 | void (*exit)(struct cgroup_subsys *ss, struct task_struct *task); | 434 | void (*exit)(struct cgroup_subsys *ss, struct task_struct *task); |
| 398 | int (*populate)(struct cgroup_subsys *ss, | 435 | int (*populate)(struct cgroup_subsys *ss, |
diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h index 1219be4fb42e..83d2fbd81b93 100644 --- a/include/linux/clocksource.h +++ b/include/linux/clocksource.h | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include <linux/list.h> | 14 | #include <linux/list.h> |
| 15 | #include <linux/cache.h> | 15 | #include <linux/cache.h> |
| 16 | #include <linux/timer.h> | 16 | #include <linux/timer.h> |
| 17 | #include <linux/init.h> | ||
| 17 | #include <asm/div64.h> | 18 | #include <asm/div64.h> |
| 18 | #include <asm/io.h> | 19 | #include <asm/io.h> |
| 19 | 20 | ||
| @@ -148,14 +149,11 @@ extern u64 timecounter_cyc2time(struct timecounter *tc, | |||
| 148 | * @disable: optional function to disable the clocksource | 149 | * @disable: optional function to disable the clocksource |
| 149 | * @mask: bitmask for two's complement | 150 | * @mask: bitmask for two's complement |
| 150 | * subtraction of non 64 bit counters | 151 | * subtraction of non 64 bit counters |
| 151 | * @mult: cycle to nanosecond multiplier (adjusted by NTP) | 152 | * @mult: cycle to nanosecond multiplier |
| 152 | * @mult_orig: cycle to nanosecond multiplier (unadjusted by NTP) | ||
| 153 | * @shift: cycle to nanosecond divisor (power of two) | 153 | * @shift: cycle to nanosecond divisor (power of two) |
| 154 | * @flags: flags describing special properties | 154 | * @flags: flags describing special properties |
| 155 | * @vread: vsyscall based read | 155 | * @vread: vsyscall based read |
| 156 | * @resume: resume function for the clocksource, if necessary | 156 | * @resume: resume function for the clocksource, if necessary |
| 157 | * @cycle_interval: Used internally by timekeeping core, please ignore. | ||
| 158 | * @xtime_interval: Used internally by timekeeping core, please ignore. | ||
| 159 | */ | 157 | */ |
| 160 | struct clocksource { | 158 | struct clocksource { |
| 161 | /* | 159 | /* |
| @@ -169,7 +167,6 @@ struct clocksource { | |||
| 169 | void (*disable)(struct clocksource *cs); | 167 | void (*disable)(struct clocksource *cs); |
| 170 | cycle_t mask; | 168 | cycle_t mask; |
| 171 | u32 mult; | 169 | u32 mult; |
| 172 | u32 mult_orig; | ||
| 173 | u32 shift; | 170 | u32 shift; |
| 174 | unsigned long flags; | 171 | unsigned long flags; |
| 175 | cycle_t (*vread)(void); | 172 | cycle_t (*vread)(void); |
| @@ -181,19 +178,12 @@ struct clocksource { | |||
| 181 | #define CLKSRC_FSYS_MMIO_SET(mmio, addr) do { } while (0) | 178 | #define CLKSRC_FSYS_MMIO_SET(mmio, addr) do { } while (0) |
| 182 | #endif | 179 | #endif |
| 183 | 180 | ||
| 184 | /* timekeeping specific data, ignore */ | ||
| 185 | cycle_t cycle_interval; | ||
| 186 | u64 xtime_interval; | ||
| 187 | u32 raw_interval; | ||
| 188 | /* | 181 | /* |
| 189 | * Second part is written at each timer interrupt | 182 | * Second part is written at each timer interrupt |
| 190 | * Keep it in a different cache line to dirty no | 183 | * Keep it in a different cache line to dirty no |
| 191 | * more than one cache line. | 184 | * more than one cache line. |
| 192 | */ | 185 | */ |
| 193 | cycle_t cycle_last ____cacheline_aligned_in_smp; | 186 | cycle_t cycle_last ____cacheline_aligned_in_smp; |
| 194 | u64 xtime_nsec; | ||
| 195 | s64 error; | ||
| 196 | struct timespec raw_time; | ||
| 197 | 187 | ||
| 198 | #ifdef CONFIG_CLOCKSOURCE_WATCHDOG | 188 | #ifdef CONFIG_CLOCKSOURCE_WATCHDOG |
| 199 | /* Watchdog related data, used by the framework */ | 189 | /* Watchdog related data, used by the framework */ |
| @@ -202,8 +192,6 @@ struct clocksource { | |||
| 202 | #endif | 192 | #endif |
| 203 | }; | 193 | }; |
| 204 | 194 | ||
| 205 | extern struct clocksource *clock; /* current clocksource */ | ||
| 206 | |||
| 207 | /* | 195 | /* |
| 208 | * Clock source flags bits:: | 196 | * Clock source flags bits:: |
| 209 | */ | 197 | */ |
| @@ -212,6 +200,7 @@ extern struct clocksource *clock; /* current clocksource */ | |||
| 212 | 200 | ||
| 213 | #define CLOCK_SOURCE_WATCHDOG 0x10 | 201 | #define CLOCK_SOURCE_WATCHDOG 0x10 |
| 214 | #define CLOCK_SOURCE_VALID_FOR_HRES 0x20 | 202 | #define CLOCK_SOURCE_VALID_FOR_HRES 0x20 |
| 203 | #define CLOCK_SOURCE_UNSTABLE 0x40 | ||
| 215 | 204 | ||
| 216 | /* simplify initialization of mask field */ | 205 | /* simplify initialization of mask field */ |
| 217 | #define CLOCKSOURCE_MASK(bits) (cycle_t)((bits) < 64 ? ((1ULL<<(bits))-1) : -1) | 206 | #define CLOCKSOURCE_MASK(bits) (cycle_t)((bits) < 64 ? ((1ULL<<(bits))-1) : -1) |
| @@ -268,108 +257,15 @@ static inline u32 clocksource_hz2mult(u32 hz, u32 shift_constant) | |||
| 268 | } | 257 | } |
| 269 | 258 | ||
| 270 | /** | 259 | /** |
| 271 | * clocksource_read: - Access the clocksource's current cycle value | 260 | * clocksource_cyc2ns - converts clocksource cycles to nanoseconds |
| 272 | * @cs: pointer to clocksource being read | ||
| 273 | * | ||
| 274 | * Uses the clocksource to return the current cycle_t value | ||
| 275 | */ | ||
| 276 | static inline cycle_t clocksource_read(struct clocksource *cs) | ||
| 277 | { | ||
| 278 | return cs->read(cs); | ||
| 279 | } | ||
| 280 | |||
| 281 | /** | ||
| 282 | * clocksource_enable: - enable clocksource | ||
| 283 | * @cs: pointer to clocksource | ||
| 284 | * | ||
| 285 | * Enables the specified clocksource. The clocksource callback | ||
| 286 | * function should start up the hardware and setup mult and field | ||
| 287 | * members of struct clocksource to reflect hardware capabilities. | ||
| 288 | */ | ||
| 289 | static inline int clocksource_enable(struct clocksource *cs) | ||
| 290 | { | ||
| 291 | int ret = 0; | ||
| 292 | |||
| 293 | if (cs->enable) | ||
| 294 | ret = cs->enable(cs); | ||
| 295 | |||
| 296 | /* | ||
| 297 | * The frequency may have changed while the clocksource | ||
| 298 | * was disabled. If so the code in ->enable() must update | ||
| 299 | * the mult value to reflect the new frequency. Make sure | ||
| 300 | * mult_orig follows this change. | ||
| 301 | */ | ||
| 302 | cs->mult_orig = cs->mult; | ||
| 303 | |||
| 304 | return ret; | ||
| 305 | } | ||
| 306 | |||
| 307 | /** | ||
| 308 | * clocksource_disable: - disable clocksource | ||
| 309 | * @cs: pointer to clocksource | ||
| 310 | * | ||
| 311 | * Disables the specified clocksource. The clocksource callback | ||
| 312 | * function should power down the now unused hardware block to | ||
| 313 | * save power. | ||
| 314 | */ | ||
| 315 | static inline void clocksource_disable(struct clocksource *cs) | ||
| 316 | { | ||
| 317 | /* | ||
| 318 | * Save mult_orig in mult so clocksource_enable() can | ||
| 319 | * restore the value regardless if ->enable() updates | ||
| 320 | * the value of mult or not. | ||
| 321 | */ | ||
| 322 | cs->mult = cs->mult_orig; | ||
| 323 | |||
| 324 | if (cs->disable) | ||
| 325 | cs->disable(cs); | ||
| 326 | } | ||
| 327 | |||
| 328 | /** | ||
| 329 | * cyc2ns - converts clocksource cycles to nanoseconds | ||
| 330 | * @cs: Pointer to clocksource | ||
| 331 | * @cycles: Cycles | ||
| 332 | * | 261 | * |
| 333 | * Uses the clocksource and ntp ajdustment to convert cycle_ts to nanoseconds. | 262 | * Converts cycles to nanoseconds, using the given mult and shift. |
| 334 | * | 263 | * |
| 335 | * XXX - This could use some mult_lxl_ll() asm optimization | 264 | * XXX - This could use some mult_lxl_ll() asm optimization |
| 336 | */ | 265 | */ |
| 337 | static inline s64 cyc2ns(struct clocksource *cs, cycle_t cycles) | 266 | static inline s64 clocksource_cyc2ns(cycle_t cycles, u32 mult, u32 shift) |
| 338 | { | ||
| 339 | u64 ret = (u64)cycles; | ||
| 340 | ret = (ret * cs->mult) >> cs->shift; | ||
| 341 | return ret; | ||
| 342 | } | ||
| 343 | |||
| 344 | /** | ||
| 345 | * clocksource_calculate_interval - Calculates a clocksource interval struct | ||
| 346 | * | ||
| 347 | * @c: Pointer to clocksource. | ||
| 348 | * @length_nsec: Desired interval length in nanoseconds. | ||
| 349 | * | ||
| 350 | * Calculates a fixed cycle/nsec interval for a given clocksource/adjustment | ||
| 351 | * pair and interval request. | ||
| 352 | * | ||
| 353 | * Unless you're the timekeeping code, you should not be using this! | ||
| 354 | */ | ||
| 355 | static inline void clocksource_calculate_interval(struct clocksource *c, | ||
| 356 | unsigned long length_nsec) | ||
| 357 | { | 267 | { |
| 358 | u64 tmp; | 268 | return ((u64) cycles * mult) >> shift; |
| 359 | |||
| 360 | /* Do the ns -> cycle conversion first, using original mult */ | ||
| 361 | tmp = length_nsec; | ||
| 362 | tmp <<= c->shift; | ||
| 363 | tmp += c->mult_orig/2; | ||
| 364 | do_div(tmp, c->mult_orig); | ||
| 365 | |||
| 366 | c->cycle_interval = (cycle_t)tmp; | ||
| 367 | if (c->cycle_interval == 0) | ||
| 368 | c->cycle_interval = 1; | ||
| 369 | |||
| 370 | /* Go back from cycles -> shifted ns, this time use ntp adjused mult */ | ||
| 371 | c->xtime_interval = (u64)c->cycle_interval * c->mult; | ||
| 372 | c->raw_interval = ((u64)c->cycle_interval * c->mult_orig) >> c->shift; | ||
| 373 | } | 269 | } |
| 374 | 270 | ||
| 375 | 271 | ||
| @@ -380,6 +276,8 @@ extern void clocksource_touch_watchdog(void); | |||
| 380 | extern struct clocksource* clocksource_get_next(void); | 276 | extern struct clocksource* clocksource_get_next(void); |
| 381 | extern void clocksource_change_rating(struct clocksource *cs, int rating); | 277 | extern void clocksource_change_rating(struct clocksource *cs, int rating); |
| 382 | extern void clocksource_resume(void); | 278 | extern void clocksource_resume(void); |
| 279 | extern struct clocksource * __init __weak clocksource_default_clock(void); | ||
| 280 | extern void clocksource_mark_unstable(struct clocksource *cs); | ||
| 383 | 281 | ||
| 384 | #ifdef CONFIG_GENERIC_TIME_VSYSCALL | 282 | #ifdef CONFIG_GENERIC_TIME_VSYSCALL |
| 385 | extern void update_vsyscall(struct timespec *ts, struct clocksource *c); | 283 | extern void update_vsyscall(struct timespec *ts, struct clocksource *c); |
| @@ -394,4 +292,6 @@ static inline void update_vsyscall_tz(void) | |||
| 394 | } | 292 | } |
| 395 | #endif | 293 | #endif |
| 396 | 294 | ||
| 295 | extern void timekeeping_notify(struct clocksource *clock); | ||
| 296 | |||
| 397 | #endif /* _LINUX_CLOCKSOURCE_H */ | 297 | #endif /* _LINUX_CLOCKSOURCE_H */ |
diff --git a/include/linux/cn_proc.h b/include/linux/cn_proc.h index b8125b2eb665..47dac5ea8d3a 100644 --- a/include/linux/cn_proc.h +++ b/include/linux/cn_proc.h | |||
| @@ -52,6 +52,7 @@ struct proc_event { | |||
| 52 | PROC_EVENT_EXEC = 0x00000002, | 52 | PROC_EVENT_EXEC = 0x00000002, |
| 53 | PROC_EVENT_UID = 0x00000004, | 53 | PROC_EVENT_UID = 0x00000004, |
| 54 | PROC_EVENT_GID = 0x00000040, | 54 | PROC_EVENT_GID = 0x00000040, |
| 55 | PROC_EVENT_SID = 0x00000080, | ||
| 55 | /* "next" should be 0x00000400 */ | 56 | /* "next" should be 0x00000400 */ |
| 56 | /* "last" is the last process event: exit */ | 57 | /* "last" is the last process event: exit */ |
| 57 | PROC_EVENT_EXIT = 0x80000000 | 58 | PROC_EVENT_EXIT = 0x80000000 |
| @@ -89,6 +90,11 @@ struct proc_event { | |||
| 89 | } e; | 90 | } e; |
| 90 | } id; | 91 | } id; |
| 91 | 92 | ||
| 93 | struct sid_proc_event { | ||
| 94 | __kernel_pid_t process_pid; | ||
| 95 | __kernel_pid_t process_tgid; | ||
| 96 | } sid; | ||
| 97 | |||
| 92 | struct exit_proc_event { | 98 | struct exit_proc_event { |
| 93 | __kernel_pid_t process_pid; | 99 | __kernel_pid_t process_pid; |
| 94 | __kernel_pid_t process_tgid; | 100 | __kernel_pid_t process_tgid; |
| @@ -102,6 +108,7 @@ struct proc_event { | |||
| 102 | void proc_fork_connector(struct task_struct *task); | 108 | void proc_fork_connector(struct task_struct *task); |
| 103 | void proc_exec_connector(struct task_struct *task); | 109 | void proc_exec_connector(struct task_struct *task); |
| 104 | void proc_id_connector(struct task_struct *task, int which_id); | 110 | void proc_id_connector(struct task_struct *task, int which_id); |
| 111 | void proc_sid_connector(struct task_struct *task); | ||
| 105 | void proc_exit_connector(struct task_struct *task); | 112 | void proc_exit_connector(struct task_struct *task); |
| 106 | #else | 113 | #else |
| 107 | static inline void proc_fork_connector(struct task_struct *task) | 114 | static inline void proc_fork_connector(struct task_struct *task) |
| @@ -114,6 +121,9 @@ static inline void proc_id_connector(struct task_struct *task, | |||
| 114 | int which_id) | 121 | int which_id) |
| 115 | {} | 122 | {} |
| 116 | 123 | ||
| 124 | static inline void proc_sid_connector(struct task_struct *task) | ||
| 125 | {} | ||
| 126 | |||
| 117 | static inline void proc_exit_connector(struct task_struct *task) | 127 | static inline void proc_exit_connector(struct task_struct *task) |
| 118 | {} | 128 | {} |
| 119 | #endif /* CONFIG_PROC_EVENTS */ | 129 | #endif /* CONFIG_PROC_EVENTS */ |
diff --git a/include/linux/compat.h b/include/linux/compat.h index af931ee43dd8..ef68119a4fd2 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h | |||
| @@ -10,6 +10,8 @@ | |||
| 10 | #include <linux/stat.h> | 10 | #include <linux/stat.h> |
| 11 | #include <linux/param.h> /* for HZ */ | 11 | #include <linux/param.h> /* for HZ */ |
| 12 | #include <linux/sem.h> | 12 | #include <linux/sem.h> |
| 13 | #include <linux/socket.h> | ||
| 14 | #include <linux/if.h> | ||
| 13 | 15 | ||
| 14 | #include <asm/compat.h> | 16 | #include <asm/compat.h> |
| 15 | #include <asm/siginfo.h> | 17 | #include <asm/siginfo.h> |
| @@ -154,6 +156,48 @@ typedef struct compat_sigevent { | |||
| 154 | } _sigev_un; | 156 | } _sigev_un; |
| 155 | } compat_sigevent_t; | 157 | } compat_sigevent_t; |
| 156 | 158 | ||
| 159 | struct compat_ifmap { | ||
| 160 | compat_ulong_t mem_start; | ||
| 161 | compat_ulong_t mem_end; | ||
| 162 | unsigned short base_addr; | ||
| 163 | unsigned char irq; | ||
| 164 | unsigned char dma; | ||
| 165 | unsigned char port; | ||
| 166 | }; | ||
| 167 | |||
| 168 | struct compat_if_settings | ||
| 169 | { | ||
| 170 | unsigned int type; /* Type of physical device or protocol */ | ||
| 171 | unsigned int size; /* Size of the data allocated by the caller */ | ||
| 172 | compat_uptr_t ifs_ifsu; /* union of pointers */ | ||
| 173 | }; | ||
| 174 | |||
| 175 | struct compat_ifreq { | ||
| 176 | union { | ||
| 177 | char ifrn_name[IFNAMSIZ]; /* if name, e.g. "en0" */ | ||
| 178 | } ifr_ifrn; | ||
| 179 | union { | ||
| 180 | struct sockaddr ifru_addr; | ||
| 181 | struct sockaddr ifru_dstaddr; | ||
| 182 | struct sockaddr ifru_broadaddr; | ||
| 183 | struct sockaddr ifru_netmask; | ||
| 184 | struct sockaddr ifru_hwaddr; | ||
| 185 | short ifru_flags; | ||
| 186 | compat_int_t ifru_ivalue; | ||
| 187 | compat_int_t ifru_mtu; | ||
| 188 | struct compat_ifmap ifru_map; | ||
| 189 | char ifru_slave[IFNAMSIZ]; /* Just fits the size */ | ||
| 190 | char ifru_newname[IFNAMSIZ]; | ||
| 191 | compat_caddr_t ifru_data; | ||
| 192 | struct compat_if_settings ifru_settings; | ||
| 193 | } ifr_ifru; | ||
| 194 | }; | ||
| 195 | |||
| 196 | struct compat_ifconf { | ||
| 197 | compat_int_t ifc_len; /* size of buffer */ | ||
| 198 | compat_caddr_t ifcbuf; | ||
| 199 | }; | ||
| 200 | |||
| 157 | struct compat_robust_list { | 201 | struct compat_robust_list { |
| 158 | compat_uptr_t next; | 202 | compat_uptr_t next; |
| 159 | }; | 203 | }; |
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h index a3ed7cb8ca34..73dcf804bc94 100644 --- a/include/linux/compiler-gcc.h +++ b/include/linux/compiler-gcc.h | |||
| @@ -79,6 +79,7 @@ | |||
| 79 | #define noinline __attribute__((noinline)) | 79 | #define noinline __attribute__((noinline)) |
| 80 | #define __attribute_const__ __attribute__((__const__)) | 80 | #define __attribute_const__ __attribute__((__const__)) |
| 81 | #define __maybe_unused __attribute__((unused)) | 81 | #define __maybe_unused __attribute__((unused)) |
| 82 | #define __always_unused __attribute__((unused)) | ||
| 82 | 83 | ||
| 83 | #define __gcc_header(x) #x | 84 | #define __gcc_header(x) #x |
| 84 | #define _gcc_header(x) __gcc_header(linux/compiler-gcc##x.h) | 85 | #define _gcc_header(x) __gcc_header(linux/compiler-gcc##x.h) |
diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h index 450fa597c94d..94dea3ffbfa1 100644 --- a/include/linux/compiler-gcc4.h +++ b/include/linux/compiler-gcc4.h | |||
| @@ -36,4 +36,26 @@ | |||
| 36 | the kernel context */ | 36 | the kernel context */ |
| 37 | #define __cold __attribute__((__cold__)) | 37 | #define __cold __attribute__((__cold__)) |
| 38 | 38 | ||
| 39 | |||
| 40 | #if __GNUC_MINOR__ >= 5 | ||
| 41 | /* | ||
| 42 | * Mark a position in code as unreachable. This can be used to | ||
| 43 | * suppress control flow warnings after asm blocks that transfer | ||
| 44 | * control elsewhere. | ||
| 45 | * | ||
| 46 | * Early snapshots of gcc 4.5 don't support this and we can't detect | ||
| 47 | * this in the preprocessor, but we can live with this because they're | ||
| 48 | * unreleased. Really, we need to have autoconf for the kernel. | ||
| 49 | */ | ||
| 50 | #define unreachable() __builtin_unreachable() | ||
| 51 | #endif | ||
| 52 | |||
| 53 | #endif | ||
| 54 | |||
| 55 | #if __GNUC_MINOR__ > 0 | ||
| 56 | #define __compiletime_object_size(obj) __builtin_object_size(obj, 0) | ||
| 57 | #endif | ||
| 58 | #if __GNUC_MINOR__ >= 4 | ||
| 59 | #define __compiletime_warning(message) __attribute__((warning(message))) | ||
| 60 | #define __compiletime_error(message) __attribute__((error(message))) | ||
| 39 | #endif | 61 | #endif |
diff --git a/include/linux/compiler.h b/include/linux/compiler.h index 04fb5135b4e1..5be3dab4a695 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h | |||
| @@ -144,6 +144,11 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); | |||
| 144 | # define barrier() __memory_barrier() | 144 | # define barrier() __memory_barrier() |
| 145 | #endif | 145 | #endif |
| 146 | 146 | ||
| 147 | /* Unreachable code */ | ||
| 148 | #ifndef unreachable | ||
| 149 | # define unreachable() do { } while (1) | ||
| 150 | #endif | ||
| 151 | |||
| 147 | #ifndef RELOC_HIDE | 152 | #ifndef RELOC_HIDE |
| 148 | # define RELOC_HIDE(ptr, off) \ | 153 | # define RELOC_HIDE(ptr, off) \ |
| 149 | ({ unsigned long __ptr; \ | 154 | ({ unsigned long __ptr; \ |
| @@ -213,6 +218,10 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); | |||
| 213 | # define __maybe_unused /* unimplemented */ | 218 | # define __maybe_unused /* unimplemented */ |
| 214 | #endif | 219 | #endif |
| 215 | 220 | ||
| 221 | #ifndef __always_unused | ||
| 222 | # define __always_unused /* unimplemented */ | ||
| 223 | #endif | ||
| 224 | |||
| 216 | #ifndef noinline | 225 | #ifndef noinline |
| 217 | #define noinline | 226 | #define noinline |
| 218 | #endif | 227 | #endif |
| @@ -266,6 +275,17 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); | |||
| 266 | # define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b)) | 275 | # define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b)) |
| 267 | #endif | 276 | #endif |
| 268 | 277 | ||
| 278 | /* Compile time object size, -1 for unknown */ | ||
| 279 | #ifndef __compiletime_object_size | ||
| 280 | # define __compiletime_object_size(obj) -1 | ||
| 281 | #endif | ||
| 282 | #ifndef __compiletime_warning | ||
| 283 | # define __compiletime_warning(message) | ||
| 284 | #endif | ||
| 285 | #ifndef __compiletime_error | ||
| 286 | # define __compiletime_error(message) | ||
| 287 | #endif | ||
| 288 | |||
| 269 | /* | 289 | /* |
| 270 | * Prevent the compiler from merging or refetching accesses. The compiler | 290 | * Prevent the compiler from merging or refetching accesses. The compiler |
| 271 | * is also forbidden from reordering successive instances of ACCESS_ONCE(), | 291 | * is also forbidden from reordering successive instances of ACCESS_ONCE(), |
diff --git a/include/linux/configfs.h b/include/linux/configfs.h index 7f627775c947..ddb7a97c78c2 100644 --- a/include/linux/configfs.h +++ b/include/linux/configfs.h | |||
| @@ -27,8 +27,8 @@ | |||
| 27 | * | 27 | * |
| 28 | * configfs Copyright (C) 2005 Oracle. All rights reserved. | 28 | * configfs Copyright (C) 2005 Oracle. All rights reserved. |
| 29 | * | 29 | * |
| 30 | * Please read Documentation/filesystems/configfs.txt before using the | 30 | * Please read Documentation/filesystems/configfs/configfs.txt before using |
| 31 | * configfs interface, ESPECIALLY the parts about reference counts and | 31 | * the configfs interface, ESPECIALLY the parts about reference counts and |
| 32 | * item destructors. | 32 | * item destructors. |
| 33 | */ | 33 | */ |
| 34 | 34 | ||
diff --git a/include/linux/connector.h b/include/linux/connector.h index b68d27850d51..3a14615fd35c 100644 --- a/include/linux/connector.h +++ b/include/linux/connector.h | |||
| @@ -132,11 +132,8 @@ struct cn_callback_id { | |||
| 132 | }; | 132 | }; |
| 133 | 133 | ||
| 134 | struct cn_callback_data { | 134 | struct cn_callback_data { |
| 135 | void (*destruct_data) (void *); | 135 | struct sk_buff *skb; |
| 136 | void *ddata; | 136 | void (*callback) (struct cn_msg *, struct netlink_skb_parms *); |
| 137 | |||
| 138 | void *callback_priv; | ||
| 139 | void (*callback) (void *); | ||
| 140 | 137 | ||
| 141 | void *free; | 138 | void *free; |
| 142 | }; | 139 | }; |
| @@ -167,11 +164,11 @@ struct cn_dev { | |||
| 167 | struct cn_queue_dev *cbdev; | 164 | struct cn_queue_dev *cbdev; |
| 168 | }; | 165 | }; |
| 169 | 166 | ||
| 170 | int cn_add_callback(struct cb_id *, char *, void (*callback) (void *)); | 167 | int cn_add_callback(struct cb_id *, char *, void (*callback) (struct cn_msg *, struct netlink_skb_parms *)); |
| 171 | void cn_del_callback(struct cb_id *); | 168 | void cn_del_callback(struct cb_id *); |
| 172 | int cn_netlink_send(struct cn_msg *, u32, gfp_t); | 169 | int cn_netlink_send(struct cn_msg *, u32, gfp_t); |
| 173 | 170 | ||
| 174 | int cn_queue_add_callback(struct cn_queue_dev *dev, char *name, struct cb_id *id, void (*callback)(void *)); | 171 | int cn_queue_add_callback(struct cn_queue_dev *dev, char *name, struct cb_id *id, void (*callback)(struct cn_msg *, struct netlink_skb_parms *)); |
| 175 | void cn_queue_del_callback(struct cn_queue_dev *dev, struct cb_id *id); | 172 | void cn_queue_del_callback(struct cn_queue_dev *dev, struct cb_id *id); |
| 176 | 173 | ||
| 177 | int queue_cn_work(struct cn_callback_entry *cbq, struct work_struct *work); | 174 | int queue_cn_work(struct cn_callback_entry *cbq, struct work_struct *work); |
diff --git a/include/linux/cpu.h b/include/linux/cpu.h index 4d668e05d458..47536197ffdd 100644 --- a/include/linux/cpu.h +++ b/include/linux/cpu.h | |||
| @@ -48,6 +48,15 @@ struct notifier_block; | |||
| 48 | 48 | ||
| 49 | #ifdef CONFIG_SMP | 49 | #ifdef CONFIG_SMP |
| 50 | /* Need to know about CPUs going up/down? */ | 50 | /* Need to know about CPUs going up/down? */ |
| 51 | #if defined(CONFIG_HOTPLUG_CPU) || !defined(MODULE) | ||
| 52 | #define cpu_notifier(fn, pri) { \ | ||
| 53 | static struct notifier_block fn##_nb __cpuinitdata = \ | ||
| 54 | { .notifier_call = fn, .priority = pri }; \ | ||
| 55 | register_cpu_notifier(&fn##_nb); \ | ||
| 56 | } | ||
| 57 | #else /* #if defined(CONFIG_HOTPLUG_CPU) || !defined(MODULE) */ | ||
| 58 | #define cpu_notifier(fn, pri) do { (void)(fn); } while (0) | ||
| 59 | #endif /* #else #if defined(CONFIG_HOTPLUG_CPU) || !defined(MODULE) */ | ||
| 51 | #ifdef CONFIG_HOTPLUG_CPU | 60 | #ifdef CONFIG_HOTPLUG_CPU |
| 52 | extern int register_cpu_notifier(struct notifier_block *nb); | 61 | extern int register_cpu_notifier(struct notifier_block *nb); |
| 53 | extern void unregister_cpu_notifier(struct notifier_block *nb); | 62 | extern void unregister_cpu_notifier(struct notifier_block *nb); |
| @@ -74,6 +83,8 @@ extern void cpu_maps_update_done(void); | |||
| 74 | 83 | ||
| 75 | #else /* CONFIG_SMP */ | 84 | #else /* CONFIG_SMP */ |
| 76 | 85 | ||
| 86 | #define cpu_notifier(fn, pri) do { (void)(fn); } while (0) | ||
| 87 | |||
| 77 | static inline int register_cpu_notifier(struct notifier_block *nb) | 88 | static inline int register_cpu_notifier(struct notifier_block *nb) |
| 78 | { | 89 | { |
| 79 | return 0; | 90 | return 0; |
| @@ -99,11 +110,7 @@ extern struct sysdev_class cpu_sysdev_class; | |||
| 99 | 110 | ||
| 100 | extern void get_online_cpus(void); | 111 | extern void get_online_cpus(void); |
| 101 | extern void put_online_cpus(void); | 112 | extern void put_online_cpus(void); |
| 102 | #define hotcpu_notifier(fn, pri) { \ | 113 | #define hotcpu_notifier(fn, pri) cpu_notifier(fn, pri) |
| 103 | static struct notifier_block fn##_nb __cpuinitdata = \ | ||
| 104 | { .notifier_call = fn, .priority = pri }; \ | ||
| 105 | register_cpu_notifier(&fn##_nb); \ | ||
| 106 | } | ||
| 107 | #define register_hotcpu_notifier(nb) register_cpu_notifier(nb) | 114 | #define register_hotcpu_notifier(nb) register_cpu_notifier(nb) |
| 108 | #define unregister_hotcpu_notifier(nb) unregister_cpu_notifier(nb) | 115 | #define unregister_hotcpu_notifier(nb) unregister_cpu_notifier(nb) |
| 109 | int cpu_down(unsigned int cpu); | 116 | int cpu_down(unsigned int cpu); |
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h index 161042746afc..79a2340d83cd 100644 --- a/include/linux/cpufreq.h +++ b/include/linux/cpufreq.h | |||
| @@ -65,6 +65,9 @@ static inline int cpufreq_unregister_notifier(struct notifier_block *nb, | |||
| 65 | 65 | ||
| 66 | struct cpufreq_governor; | 66 | struct cpufreq_governor; |
| 67 | 67 | ||
| 68 | /* /sys/devices/system/cpu/cpufreq: entry point for global variables */ | ||
| 69 | extern struct kobject *cpufreq_global_kobject; | ||
| 70 | |||
| 68 | #define CPUFREQ_ETERNAL (-1) | 71 | #define CPUFREQ_ETERNAL (-1) |
| 69 | struct cpufreq_cpuinfo { | 72 | struct cpufreq_cpuinfo { |
| 70 | unsigned int max_freq; | 73 | unsigned int max_freq; |
| @@ -274,6 +277,13 @@ struct freq_attr { | |||
| 274 | ssize_t (*store)(struct cpufreq_policy *, const char *, size_t count); | 277 | ssize_t (*store)(struct cpufreq_policy *, const char *, size_t count); |
| 275 | }; | 278 | }; |
| 276 | 279 | ||
| 280 | struct global_attr { | ||
| 281 | struct attribute attr; | ||
| 282 | ssize_t (*show)(struct kobject *kobj, | ||
| 283 | struct attribute *attr, char *buf); | ||
| 284 | ssize_t (*store)(struct kobject *a, struct attribute *b, | ||
| 285 | const char *c, size_t count); | ||
| 286 | }; | ||
| 277 | 287 | ||
| 278 | /********************************************************************* | 288 | /********************************************************************* |
| 279 | * CPUFREQ 2.6. INTERFACE * | 289 | * CPUFREQ 2.6. INTERFACE * |
| @@ -281,8 +291,15 @@ struct freq_attr { | |||
| 281 | int cpufreq_get_policy(struct cpufreq_policy *policy, unsigned int cpu); | 291 | int cpufreq_get_policy(struct cpufreq_policy *policy, unsigned int cpu); |
| 282 | int cpufreq_update_policy(unsigned int cpu); | 292 | int cpufreq_update_policy(unsigned int cpu); |
| 283 | 293 | ||
| 294 | #ifdef CONFIG_CPU_FREQ | ||
| 284 | /* query the current CPU frequency (in kHz). If zero, cpufreq couldn't detect it */ | 295 | /* query the current CPU frequency (in kHz). If zero, cpufreq couldn't detect it */ |
| 285 | unsigned int cpufreq_get(unsigned int cpu); | 296 | unsigned int cpufreq_get(unsigned int cpu); |
| 297 | #else | ||
| 298 | static inline unsigned int cpufreq_get(unsigned int cpu) | ||
| 299 | { | ||
| 300 | return 0; | ||
| 301 | } | ||
| 302 | #endif | ||
| 286 | 303 | ||
| 287 | /* query the last known CPU freq (in kHz). If zero, cpufreq couldn't detect it */ | 304 | /* query the last known CPU freq (in kHz). If zero, cpufreq couldn't detect it */ |
| 288 | #ifdef CONFIG_CPU_FREQ | 305 | #ifdef CONFIG_CPU_FREQ |
diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h index 796df12091b7..789cf5f920ce 100644 --- a/include/linux/cpumask.h +++ b/include/linux/cpumask.h | |||
| @@ -3,444 +3,37 @@ | |||
| 3 | 3 | ||
| 4 | /* | 4 | /* |
| 5 | * Cpumasks provide a bitmap suitable for representing the | 5 | * Cpumasks provide a bitmap suitable for representing the |
| 6 | * set of CPU's in a system, one bit position per CPU number. | 6 | * set of CPU's in a system, one bit position per CPU number. In general, |
| 7 | * | 7 | * only nr_cpu_ids (<= NR_CPUS) bits are valid. |
| 8 | * The new cpumask_ ops take a "struct cpumask *"; the old ones | ||
| 9 | * use cpumask_t. | ||
| 10 | * | ||
| 11 | * See detailed comments in the file linux/bitmap.h describing the | ||
| 12 | * data type on which these cpumasks are based. | ||
| 13 | * | ||
| 14 | * For details of cpumask_scnprintf() and cpumask_parse_user(), | ||
| 15 | * see bitmap_scnprintf() and bitmap_parse_user() in lib/bitmap.c. | ||
| 16 | * For details of cpulist_scnprintf() and cpulist_parse(), see | ||
| 17 | * bitmap_scnlistprintf() and bitmap_parselist(), also in bitmap.c. | ||
| 18 | * For details of cpu_remap(), see bitmap_bitremap in lib/bitmap.c | ||
| 19 | * For details of cpus_remap(), see bitmap_remap in lib/bitmap.c. | ||
| 20 | * For details of cpus_onto(), see bitmap_onto in lib/bitmap.c. | ||
| 21 | * For details of cpus_fold(), see bitmap_fold in lib/bitmap.c. | ||
| 22 | * | ||
| 23 | * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | ||
| 24 | * Note: The alternate operations with the suffix "_nr" are used | ||
| 25 | * to limit the range of the loop to nr_cpu_ids instead of | ||
| 26 | * NR_CPUS when NR_CPUS > 64 for performance reasons. | ||
| 27 | * If NR_CPUS is <= 64 then most assembler bitmask | ||
| 28 | * operators execute faster with a constant range, so | ||
| 29 | * the operator will continue to use NR_CPUS. | ||
| 30 | * | ||
| 31 | * Another consideration is that nr_cpu_ids is initialized | ||
| 32 | * to NR_CPUS and isn't lowered until the possible cpus are | ||
| 33 | * discovered (including any disabled cpus). So early uses | ||
| 34 | * will span the entire range of NR_CPUS. | ||
| 35 | * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | ||
| 36 | * | ||
| 37 | * The obsolescent cpumask operations are: | ||
| 38 | * | ||
| 39 | * void cpu_set(cpu, mask) turn on bit 'cpu' in mask | ||
| 40 | * void cpu_clear(cpu, mask) turn off bit 'cpu' in mask | ||
| 41 | * void cpus_setall(mask) set all bits | ||
| 42 | * void cpus_clear(mask) clear all bits | ||
| 43 | * int cpu_isset(cpu, mask) true iff bit 'cpu' set in mask | ||
| 44 | * int cpu_test_and_set(cpu, mask) test and set bit 'cpu' in mask | ||
| 45 | * | ||
| 46 | * int cpus_and(dst, src1, src2) dst = src1 & src2 [intersection] | ||
| 47 | * void cpus_or(dst, src1, src2) dst = src1 | src2 [union] | ||
| 48 | * void cpus_xor(dst, src1, src2) dst = src1 ^ src2 | ||
| 49 | * int cpus_andnot(dst, src1, src2) dst = src1 & ~src2 | ||
| 50 | * void cpus_complement(dst, src) dst = ~src | ||
| 51 | * | ||
| 52 | * int cpus_equal(mask1, mask2) Does mask1 == mask2? | ||
| 53 | * int cpus_intersects(mask1, mask2) Do mask1 and mask2 intersect? | ||
| 54 | * int cpus_subset(mask1, mask2) Is mask1 a subset of mask2? | ||
| 55 | * int cpus_empty(mask) Is mask empty (no bits sets)? | ||
| 56 | * int cpus_full(mask) Is mask full (all bits sets)? | ||
| 57 | * int cpus_weight(mask) Hamming weigh - number of set bits | ||
| 58 | * int cpus_weight_nr(mask) Same using nr_cpu_ids instead of NR_CPUS | ||
| 59 | * | ||
| 60 | * void cpus_shift_right(dst, src, n) Shift right | ||
| 61 | * void cpus_shift_left(dst, src, n) Shift left | ||
| 62 | * | ||
| 63 | * int first_cpu(mask) Number lowest set bit, or NR_CPUS | ||
| 64 | * int next_cpu(cpu, mask) Next cpu past 'cpu', or NR_CPUS | ||
| 65 | * int next_cpu_nr(cpu, mask) Next cpu past 'cpu', or nr_cpu_ids | ||
| 66 | * | ||
| 67 | * cpumask_t cpumask_of_cpu(cpu) Return cpumask with bit 'cpu' set | ||
| 68 | * (can be used as an lvalue) | ||
| 69 | * CPU_MASK_ALL Initializer - all bits set | ||
| 70 | * CPU_MASK_NONE Initializer - no bits set | ||
| 71 | * unsigned long *cpus_addr(mask) Array of unsigned long's in mask | ||
| 72 | * | ||
| 73 | * CPUMASK_ALLOC kmalloc's a structure that is a composite of many cpumask_t | ||
| 74 | * variables, and CPUMASK_PTR provides pointers to each field. | ||
| 75 | * | ||
| 76 | * The structure should be defined something like this: | ||
| 77 | * struct my_cpumasks { | ||
| 78 | * cpumask_t mask1; | ||
| 79 | * cpumask_t mask2; | ||
| 80 | * }; | ||
| 81 | * | ||
| 82 | * Usage is then: | ||
| 83 | * CPUMASK_ALLOC(my_cpumasks); | ||
| 84 | * CPUMASK_PTR(mask1, my_cpumasks); | ||
| 85 | * CPUMASK_PTR(mask2, my_cpumasks); | ||
| 86 | * | ||
| 87 | * --- DO NOT reference cpumask_t pointers until this check --- | ||
| 88 | * if (my_cpumasks == NULL) | ||
| 89 | * "kmalloc failed"... | ||
| 90 | * | ||
| 91 | * References are now pointers to the cpumask_t variables (*mask1, ...) | ||
| 92 | * | ||
| 93 | *if NR_CPUS > BITS_PER_LONG | ||
| 94 | * CPUMASK_ALLOC(m) Declares and allocates struct m *m = | ||
| 95 | * kmalloc(sizeof(*m), GFP_KERNEL) | ||
| 96 | * CPUMASK_FREE(m) Macro for kfree(m) | ||
| 97 | *else | ||
| 98 | * CPUMASK_ALLOC(m) Declares struct m _m, *m = &_m | ||
| 99 | * CPUMASK_FREE(m) Nop | ||
| 100 | *endif | ||
| 101 | * CPUMASK_PTR(v, m) Declares cpumask_t *v = &(m->v) | ||
| 102 | * ------------------------------------------------------------------------ | ||
| 103 | * | ||
| 104 | * int cpumask_scnprintf(buf, len, mask) Format cpumask for printing | ||
| 105 | * int cpumask_parse_user(ubuf, ulen, mask) Parse ascii string as cpumask | ||
| 106 | * int cpulist_scnprintf(buf, len, mask) Format cpumask as list for printing | ||
| 107 | * int cpulist_parse(buf, map) Parse ascii string as cpulist | ||
| 108 | * int cpu_remap(oldbit, old, new) newbit = map(old, new)(oldbit) | ||
| 109 | * void cpus_remap(dst, src, old, new) *dst = map(old, new)(src) | ||
| 110 | * void cpus_onto(dst, orig, relmap) *dst = orig relative to relmap | ||
| 111 | * void cpus_fold(dst, orig, sz) dst bits = orig bits mod sz | ||
| 112 | * | ||
| 113 | * for_each_cpu_mask(cpu, mask) for-loop cpu over mask using NR_CPUS | ||
| 114 | * for_each_cpu_mask_nr(cpu, mask) for-loop cpu over mask using nr_cpu_ids | ||
| 115 | * | ||
| 116 | * int num_online_cpus() Number of online CPUs | ||
| 117 | * int num_possible_cpus() Number of all possible CPUs | ||
| 118 | * int num_present_cpus() Number of present CPUs | ||
| 119 | * | ||
| 120 | * int cpu_online(cpu) Is some cpu online? | ||
| 121 | * int cpu_possible(cpu) Is some cpu possible? | ||
| 122 | * int cpu_present(cpu) Is some cpu present (can schedule)? | ||
| 123 | * | ||
| 124 | * int any_online_cpu(mask) First online cpu in mask | ||
| 125 | * | ||
| 126 | * for_each_possible_cpu(cpu) for-loop cpu over cpu_possible_map | ||
| 127 | * for_each_online_cpu(cpu) for-loop cpu over cpu_online_map | ||
| 128 | * for_each_present_cpu(cpu) for-loop cpu over cpu_present_map | ||
| 129 | * | ||
| 130 | * Subtlety: | ||
| 131 | * 1) The 'type-checked' form of cpu_isset() causes gcc (3.3.2, anyway) | ||
| 132 | * to generate slightly worse code. Note for example the additional | ||
| 133 | * 40 lines of assembly code compiling the "for each possible cpu" | ||
| 134 | * loops buried in the disk_stat_read() macros calls when compiling | ||
| 135 | * drivers/block/genhd.c (arch i386, CONFIG_SMP=y). So use a simple | ||
| 136 | * one-line #define for cpu_isset(), instead of wrapping an inline | ||
| 137 | * inside a macro, the way we do the other calls. | ||
| 138 | */ | 8 | */ |
| 139 | |||
| 140 | #include <linux/kernel.h> | 9 | #include <linux/kernel.h> |
| 141 | #include <linux/threads.h> | 10 | #include <linux/threads.h> |
| 142 | #include <linux/bitmap.h> | 11 | #include <linux/bitmap.h> |
| 143 | 12 | ||
| 144 | typedef struct cpumask { DECLARE_BITMAP(bits, NR_CPUS); } cpumask_t; | 13 | typedef struct cpumask { DECLARE_BITMAP(bits, NR_CPUS); } cpumask_t; |
| 145 | extern cpumask_t _unused_cpumask_arg_; | ||
| 146 | |||
| 147 | #ifndef CONFIG_DISABLE_OBSOLETE_CPUMASK_FUNCTIONS | ||
| 148 | #define cpu_set(cpu, dst) __cpu_set((cpu), &(dst)) | ||
| 149 | static inline void __cpu_set(int cpu, volatile cpumask_t *dstp) | ||
| 150 | { | ||
| 151 | set_bit(cpu, dstp->bits); | ||
| 152 | } | ||
| 153 | |||
| 154 | #define cpu_clear(cpu, dst) __cpu_clear((cpu), &(dst)) | ||
| 155 | static inline void __cpu_clear(int cpu, volatile cpumask_t *dstp) | ||
| 156 | { | ||
| 157 | clear_bit(cpu, dstp->bits); | ||
| 158 | } | ||
| 159 | |||
| 160 | #define cpus_setall(dst) __cpus_setall(&(dst), NR_CPUS) | ||
| 161 | static inline void __cpus_setall(cpumask_t *dstp, int nbits) | ||
| 162 | { | ||
| 163 | bitmap_fill(dstp->bits, nbits); | ||
| 164 | } | ||
| 165 | |||
| 166 | #define cpus_clear(dst) __cpus_clear(&(dst), NR_CPUS) | ||
| 167 | static inline void __cpus_clear(cpumask_t *dstp, int nbits) | ||
| 168 | { | ||
| 169 | bitmap_zero(dstp->bits, nbits); | ||
| 170 | } | ||
| 171 | |||
| 172 | /* No static inline type checking - see Subtlety (1) above. */ | ||
| 173 | #define cpu_isset(cpu, cpumask) test_bit((cpu), (cpumask).bits) | ||
| 174 | |||
| 175 | #define cpu_test_and_set(cpu, cpumask) __cpu_test_and_set((cpu), &(cpumask)) | ||
| 176 | static inline int __cpu_test_and_set(int cpu, cpumask_t *addr) | ||
| 177 | { | ||
| 178 | return test_and_set_bit(cpu, addr->bits); | ||
| 179 | } | ||
| 180 | |||
| 181 | #define cpus_and(dst, src1, src2) __cpus_and(&(dst), &(src1), &(src2), NR_CPUS) | ||
| 182 | static inline int __cpus_and(cpumask_t *dstp, const cpumask_t *src1p, | ||
| 183 | const cpumask_t *src2p, int nbits) | ||
| 184 | { | ||
| 185 | return bitmap_and(dstp->bits, src1p->bits, src2p->bits, nbits); | ||
| 186 | } | ||
| 187 | |||
| 188 | #define cpus_or(dst, src1, src2) __cpus_or(&(dst), &(src1), &(src2), NR_CPUS) | ||
| 189 | static inline void __cpus_or(cpumask_t *dstp, const cpumask_t *src1p, | ||
| 190 | const cpumask_t *src2p, int nbits) | ||
| 191 | { | ||
| 192 | bitmap_or(dstp->bits, src1p->bits, src2p->bits, nbits); | ||
| 193 | } | ||
| 194 | |||
| 195 | #define cpus_xor(dst, src1, src2) __cpus_xor(&(dst), &(src1), &(src2), NR_CPUS) | ||
| 196 | static inline void __cpus_xor(cpumask_t *dstp, const cpumask_t *src1p, | ||
| 197 | const cpumask_t *src2p, int nbits) | ||
| 198 | { | ||
| 199 | bitmap_xor(dstp->bits, src1p->bits, src2p->bits, nbits); | ||
| 200 | } | ||
| 201 | |||
| 202 | #define cpus_andnot(dst, src1, src2) \ | ||
| 203 | __cpus_andnot(&(dst), &(src1), &(src2), NR_CPUS) | ||
| 204 | static inline int __cpus_andnot(cpumask_t *dstp, const cpumask_t *src1p, | ||
| 205 | const cpumask_t *src2p, int nbits) | ||
| 206 | { | ||
| 207 | return bitmap_andnot(dstp->bits, src1p->bits, src2p->bits, nbits); | ||
| 208 | } | ||
| 209 | |||
| 210 | #define cpus_complement(dst, src) __cpus_complement(&(dst), &(src), NR_CPUS) | ||
| 211 | static inline void __cpus_complement(cpumask_t *dstp, | ||
| 212 | const cpumask_t *srcp, int nbits) | ||
| 213 | { | ||
| 214 | bitmap_complement(dstp->bits, srcp->bits, nbits); | ||
| 215 | } | ||
| 216 | |||
| 217 | #define cpus_equal(src1, src2) __cpus_equal(&(src1), &(src2), NR_CPUS) | ||
| 218 | static inline int __cpus_equal(const cpumask_t *src1p, | ||
| 219 | const cpumask_t *src2p, int nbits) | ||
| 220 | { | ||
| 221 | return bitmap_equal(src1p->bits, src2p->bits, nbits); | ||
| 222 | } | ||
| 223 | |||
| 224 | #define cpus_intersects(src1, src2) __cpus_intersects(&(src1), &(src2), NR_CPUS) | ||
| 225 | static inline int __cpus_intersects(const cpumask_t *src1p, | ||
| 226 | const cpumask_t *src2p, int nbits) | ||
| 227 | { | ||
| 228 | return bitmap_intersects(src1p->bits, src2p->bits, nbits); | ||
| 229 | } | ||
| 230 | |||
| 231 | #define cpus_subset(src1, src2) __cpus_subset(&(src1), &(src2), NR_CPUS) | ||
| 232 | static inline int __cpus_subset(const cpumask_t *src1p, | ||
| 233 | const cpumask_t *src2p, int nbits) | ||
| 234 | { | ||
| 235 | return bitmap_subset(src1p->bits, src2p->bits, nbits); | ||
| 236 | } | ||
| 237 | |||
| 238 | #define cpus_empty(src) __cpus_empty(&(src), NR_CPUS) | ||
| 239 | static inline int __cpus_empty(const cpumask_t *srcp, int nbits) | ||
| 240 | { | ||
| 241 | return bitmap_empty(srcp->bits, nbits); | ||
| 242 | } | ||
| 243 | |||
| 244 | #define cpus_full(cpumask) __cpus_full(&(cpumask), NR_CPUS) | ||
| 245 | static inline int __cpus_full(const cpumask_t *srcp, int nbits) | ||
| 246 | { | ||
| 247 | return bitmap_full(srcp->bits, nbits); | ||
| 248 | } | ||
| 249 | |||
| 250 | #define cpus_weight(cpumask) __cpus_weight(&(cpumask), NR_CPUS) | ||
| 251 | static inline int __cpus_weight(const cpumask_t *srcp, int nbits) | ||
| 252 | { | ||
| 253 | return bitmap_weight(srcp->bits, nbits); | ||
| 254 | } | ||
| 255 | |||
| 256 | #define cpus_shift_right(dst, src, n) \ | ||
| 257 | __cpus_shift_right(&(dst), &(src), (n), NR_CPUS) | ||
| 258 | static inline void __cpus_shift_right(cpumask_t *dstp, | ||
| 259 | const cpumask_t *srcp, int n, int nbits) | ||
| 260 | { | ||
| 261 | bitmap_shift_right(dstp->bits, srcp->bits, n, nbits); | ||
| 262 | } | ||
| 263 | |||
| 264 | #define cpus_shift_left(dst, src, n) \ | ||
| 265 | __cpus_shift_left(&(dst), &(src), (n), NR_CPUS) | ||
| 266 | static inline void __cpus_shift_left(cpumask_t *dstp, | ||
| 267 | const cpumask_t *srcp, int n, int nbits) | ||
| 268 | { | ||
| 269 | bitmap_shift_left(dstp->bits, srcp->bits, n, nbits); | ||
| 270 | } | ||
| 271 | #endif /* !CONFIG_DISABLE_OBSOLETE_CPUMASK_FUNCTIONS */ | ||
| 272 | 14 | ||
| 273 | /** | 15 | /** |
| 274 | * to_cpumask - convert an NR_CPUS bitmap to a struct cpumask * | 16 | * cpumask_bits - get the bits in a cpumask |
| 275 | * @bitmap: the bitmap | 17 | * @maskp: the struct cpumask * |
| 276 | * | ||
| 277 | * There are a few places where cpumask_var_t isn't appropriate and | ||
| 278 | * static cpumasks must be used (eg. very early boot), yet we don't | ||
| 279 | * expose the definition of 'struct cpumask'. | ||
| 280 | * | 18 | * |
| 281 | * This does the conversion, and can be used as a constant initializer. | 19 | * You should only assume nr_cpu_ids bits of this mask are valid. This is |
| 20 | * a macro so it's const-correct. | ||
| 282 | */ | 21 | */ |
| 283 | #define to_cpumask(bitmap) \ | 22 | #define cpumask_bits(maskp) ((maskp)->bits) |
| 284 | ((struct cpumask *)(1 ? (bitmap) \ | ||
| 285 | : (void *)sizeof(__check_is_bitmap(bitmap)))) | ||
| 286 | |||
| 287 | static inline int __check_is_bitmap(const unsigned long *bitmap) | ||
| 288 | { | ||
| 289 | return 1; | ||
| 290 | } | ||
| 291 | |||
| 292 | /* | ||
| 293 | * Special-case data structure for "single bit set only" constant CPU masks. | ||
| 294 | * | ||
| 295 | * We pre-generate all the 64 (or 32) possible bit positions, with enough | ||
| 296 | * padding to the left and the right, and return the constant pointer | ||
| 297 | * appropriately offset. | ||
| 298 | */ | ||
| 299 | extern const unsigned long | ||
| 300 | cpu_bit_bitmap[BITS_PER_LONG+1][BITS_TO_LONGS(NR_CPUS)]; | ||
| 301 | |||
| 302 | static inline const struct cpumask *get_cpu_mask(unsigned int cpu) | ||
| 303 | { | ||
| 304 | const unsigned long *p = cpu_bit_bitmap[1 + cpu % BITS_PER_LONG]; | ||
| 305 | p -= cpu / BITS_PER_LONG; | ||
| 306 | return to_cpumask(p); | ||
| 307 | } | ||
| 308 | |||
| 309 | #ifndef CONFIG_DISABLE_OBSOLETE_CPUMASK_FUNCTIONS | ||
| 310 | /* | ||
| 311 | * In cases where we take the address of the cpumask immediately, | ||
| 312 | * gcc optimizes it out (it's a constant) and there's no huge stack | ||
| 313 | * variable created: | ||
| 314 | */ | ||
| 315 | #define cpumask_of_cpu(cpu) (*get_cpu_mask(cpu)) | ||
| 316 | |||
| 317 | |||
| 318 | #define CPU_MASK_LAST_WORD BITMAP_LAST_WORD_MASK(NR_CPUS) | ||
| 319 | |||
| 320 | #if NR_CPUS <= BITS_PER_LONG | ||
| 321 | |||
| 322 | #define CPU_MASK_ALL \ | ||
| 323 | (cpumask_t) { { \ | ||
| 324 | [BITS_TO_LONGS(NR_CPUS)-1] = CPU_MASK_LAST_WORD \ | ||
| 325 | } } | ||
| 326 | |||
| 327 | #define CPU_MASK_ALL_PTR (&CPU_MASK_ALL) | ||
| 328 | |||
| 329 | #else | ||
| 330 | |||
| 331 | #define CPU_MASK_ALL \ | ||
| 332 | (cpumask_t) { { \ | ||
| 333 | [0 ... BITS_TO_LONGS(NR_CPUS)-2] = ~0UL, \ | ||
| 334 | [BITS_TO_LONGS(NR_CPUS)-1] = CPU_MASK_LAST_WORD \ | ||
| 335 | } } | ||
| 336 | |||
| 337 | /* cpu_mask_all is in init/main.c */ | ||
| 338 | extern cpumask_t cpu_mask_all; | ||
| 339 | #define CPU_MASK_ALL_PTR (&cpu_mask_all) | ||
| 340 | |||
| 341 | #endif | ||
| 342 | |||
| 343 | #define CPU_MASK_NONE \ | ||
| 344 | (cpumask_t) { { \ | ||
| 345 | [0 ... BITS_TO_LONGS(NR_CPUS)-1] = 0UL \ | ||
| 346 | } } | ||
| 347 | |||
| 348 | #define CPU_MASK_CPU0 \ | ||
| 349 | (cpumask_t) { { \ | ||
| 350 | [0] = 1UL \ | ||
| 351 | } } | ||
| 352 | |||
| 353 | #define cpus_addr(src) ((src).bits) | ||
| 354 | |||
| 355 | #if NR_CPUS > BITS_PER_LONG | ||
| 356 | #define CPUMASK_ALLOC(m) struct m *m = kmalloc(sizeof(*m), GFP_KERNEL) | ||
| 357 | #define CPUMASK_FREE(m) kfree(m) | ||
| 358 | #else | ||
| 359 | #define CPUMASK_ALLOC(m) struct m _m, *m = &_m | ||
| 360 | #define CPUMASK_FREE(m) | ||
| 361 | #endif | ||
| 362 | #define CPUMASK_PTR(v, m) cpumask_t *v = &(m->v) | ||
| 363 | |||
| 364 | #define cpu_remap(oldbit, old, new) \ | ||
| 365 | __cpu_remap((oldbit), &(old), &(new), NR_CPUS) | ||
| 366 | static inline int __cpu_remap(int oldbit, | ||
| 367 | const cpumask_t *oldp, const cpumask_t *newp, int nbits) | ||
| 368 | { | ||
| 369 | return bitmap_bitremap(oldbit, oldp->bits, newp->bits, nbits); | ||
| 370 | } | ||
| 371 | |||
| 372 | #define cpus_remap(dst, src, old, new) \ | ||
| 373 | __cpus_remap(&(dst), &(src), &(old), &(new), NR_CPUS) | ||
| 374 | static inline void __cpus_remap(cpumask_t *dstp, const cpumask_t *srcp, | ||
| 375 | const cpumask_t *oldp, const cpumask_t *newp, int nbits) | ||
| 376 | { | ||
| 377 | bitmap_remap(dstp->bits, srcp->bits, oldp->bits, newp->bits, nbits); | ||
| 378 | } | ||
| 379 | |||
| 380 | #define cpus_onto(dst, orig, relmap) \ | ||
| 381 | __cpus_onto(&(dst), &(orig), &(relmap), NR_CPUS) | ||
| 382 | static inline void __cpus_onto(cpumask_t *dstp, const cpumask_t *origp, | ||
| 383 | const cpumask_t *relmapp, int nbits) | ||
| 384 | { | ||
| 385 | bitmap_onto(dstp->bits, origp->bits, relmapp->bits, nbits); | ||
| 386 | } | ||
| 387 | |||
| 388 | #define cpus_fold(dst, orig, sz) \ | ||
| 389 | __cpus_fold(&(dst), &(orig), sz, NR_CPUS) | ||
| 390 | static inline void __cpus_fold(cpumask_t *dstp, const cpumask_t *origp, | ||
| 391 | int sz, int nbits) | ||
| 392 | { | ||
| 393 | bitmap_fold(dstp->bits, origp->bits, sz, nbits); | ||
| 394 | } | ||
| 395 | #endif /* !CONFIG_DISABLE_OBSOLETE_CPUMASK_FUNCTIONS */ | ||
| 396 | 23 | ||
| 397 | #if NR_CPUS == 1 | 24 | #if NR_CPUS == 1 |
| 398 | |||
| 399 | #define nr_cpu_ids 1 | 25 | #define nr_cpu_ids 1 |
| 400 | #ifndef CONFIG_DISABLE_OBSOLETE_CPUMASK_FUNCTIONS | 26 | #else |
| 401 | #define first_cpu(src) ({ (void)(src); 0; }) | ||
| 402 | #define next_cpu(n, src) ({ (void)(src); 1; }) | ||
| 403 | #define any_online_cpu(mask) 0 | ||
| 404 | #define for_each_cpu_mask(cpu, mask) \ | ||
| 405 | for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask) | ||
| 406 | #endif /* !CONFIG_DISABLE_OBSOLETE_CPUMASK_FUNCTIONS */ | ||
| 407 | #else /* NR_CPUS > 1 */ | ||
| 408 | |||
| 409 | extern int nr_cpu_ids; | 27 | extern int nr_cpu_ids; |
| 410 | #ifndef CONFIG_DISABLE_OBSOLETE_CPUMASK_FUNCTIONS | ||
| 411 | int __first_cpu(const cpumask_t *srcp); | ||
| 412 | int __next_cpu(int n, const cpumask_t *srcp); | ||
| 413 | int __any_online_cpu(const cpumask_t *mask); | ||
| 414 | |||
| 415 | #define first_cpu(src) __first_cpu(&(src)) | ||
| 416 | #define next_cpu(n, src) __next_cpu((n), &(src)) | ||
| 417 | #define any_online_cpu(mask) __any_online_cpu(&(mask)) | ||
| 418 | #define for_each_cpu_mask(cpu, mask) \ | ||
| 419 | for ((cpu) = -1; \ | ||
| 420 | (cpu) = next_cpu((cpu), (mask)), \ | ||
| 421 | (cpu) < NR_CPUS; ) | ||
| 422 | #endif /* !CONFIG_DISABLE_OBSOLETE_CPUMASK_FUNCTIONS */ | ||
| 423 | #endif | 28 | #endif |
| 424 | 29 | ||
| 425 | #ifndef CONFIG_DISABLE_OBSOLETE_CPUMASK_FUNCTIONS | 30 | #ifdef CONFIG_CPUMASK_OFFSTACK |
| 426 | #if NR_CPUS <= 64 | 31 | /* Assuming NR_CPUS is huge, a runtime limit is more efficient. Also, |
| 427 | 32 | * not all bits may be allocated. */ | |
| 428 | #define next_cpu_nr(n, src) next_cpu(n, src) | 33 | #define nr_cpumask_bits nr_cpu_ids |
| 429 | #define cpus_weight_nr(cpumask) cpus_weight(cpumask) | 34 | #else |
| 430 | #define for_each_cpu_mask_nr(cpu, mask) for_each_cpu_mask(cpu, mask) | 35 | #define nr_cpumask_bits NR_CPUS |
| 431 | 36 | #endif | |
| 432 | #else /* NR_CPUS > 64 */ | ||
| 433 | |||
| 434 | int __next_cpu_nr(int n, const cpumask_t *srcp); | ||
| 435 | #define next_cpu_nr(n, src) __next_cpu_nr((n), &(src)) | ||
| 436 | #define cpus_weight_nr(cpumask) __cpus_weight(&(cpumask), nr_cpu_ids) | ||
| 437 | #define for_each_cpu_mask_nr(cpu, mask) \ | ||
| 438 | for ((cpu) = -1; \ | ||
| 439 | (cpu) = next_cpu_nr((cpu), (mask)), \ | ||
| 440 | (cpu) < nr_cpu_ids; ) | ||
| 441 | |||
| 442 | #endif /* NR_CPUS > 64 */ | ||
| 443 | #endif /* !CONFIG_DISABLE_OBSOLETE_CPUMASK_FUNCTIONS */ | ||
| 444 | 37 | ||
| 445 | /* | 38 | /* |
| 446 | * The following particular system cpumasks and operations manage | 39 | * The following particular system cpumasks and operations manage |
| @@ -487,12 +80,6 @@ extern const struct cpumask *const cpu_online_mask; | |||
| 487 | extern const struct cpumask *const cpu_present_mask; | 80 | extern const struct cpumask *const cpu_present_mask; |
| 488 | extern const struct cpumask *const cpu_active_mask; | 81 | extern const struct cpumask *const cpu_active_mask; |
| 489 | 82 | ||
| 490 | /* These strip const, as traditionally they weren't const. */ | ||
| 491 | #define cpu_possible_map (*(cpumask_t *)cpu_possible_mask) | ||
| 492 | #define cpu_online_map (*(cpumask_t *)cpu_online_mask) | ||
| 493 | #define cpu_present_map (*(cpumask_t *)cpu_present_mask) | ||
| 494 | #define cpu_active_map (*(cpumask_t *)cpu_active_mask) | ||
| 495 | |||
| 496 | #if NR_CPUS > 1 | 83 | #if NR_CPUS > 1 |
| 497 | #define num_online_cpus() cpumask_weight(cpu_online_mask) | 84 | #define num_online_cpus() cpumask_weight(cpu_online_mask) |
| 498 | #define num_possible_cpus() cpumask_weight(cpu_possible_mask) | 85 | #define num_possible_cpus() cpumask_weight(cpu_possible_mask) |
| @@ -511,35 +98,6 @@ extern const struct cpumask *const cpu_active_mask; | |||
| 511 | #define cpu_active(cpu) ((cpu) == 0) | 98 | #define cpu_active(cpu) ((cpu) == 0) |
| 512 | #endif | 99 | #endif |
| 513 | 100 | ||
| 514 | #define cpu_is_offline(cpu) unlikely(!cpu_online(cpu)) | ||
| 515 | |||
| 516 | /* These are the new versions of the cpumask operators: passed by pointer. | ||
| 517 | * The older versions will be implemented in terms of these, then deleted. */ | ||
| 518 | #define cpumask_bits(maskp) ((maskp)->bits) | ||
| 519 | |||
| 520 | #if NR_CPUS <= BITS_PER_LONG | ||
| 521 | #define CPU_BITS_ALL \ | ||
| 522 | { \ | ||
| 523 | [BITS_TO_LONGS(NR_CPUS)-1] = CPU_MASK_LAST_WORD \ | ||
| 524 | } | ||
| 525 | |||
| 526 | #else /* NR_CPUS > BITS_PER_LONG */ | ||
| 527 | |||
| 528 | #define CPU_BITS_ALL \ | ||
| 529 | { \ | ||
| 530 | [0 ... BITS_TO_LONGS(NR_CPUS)-2] = ~0UL, \ | ||
| 531 | [BITS_TO_LONGS(NR_CPUS)-1] = CPU_MASK_LAST_WORD \ | ||
| 532 | } | ||
| 533 | #endif /* NR_CPUS > BITS_PER_LONG */ | ||
| 534 | |||
| 535 | #ifdef CONFIG_CPUMASK_OFFSTACK | ||
| 536 | /* Assuming NR_CPUS is huge, a runtime limit is more efficient. Also, | ||
| 537 | * not all bits may be allocated. */ | ||
| 538 | #define nr_cpumask_bits nr_cpu_ids | ||
| 539 | #else | ||
| 540 | #define nr_cpumask_bits NR_CPUS | ||
| 541 | #endif | ||
| 542 | |||
| 543 | /* verify cpu argument to cpumask_* operators */ | 101 | /* verify cpu argument to cpumask_* operators */ |
| 544 | static inline unsigned int cpumask_check(unsigned int cpu) | 102 | static inline unsigned int cpumask_check(unsigned int cpu) |
| 545 | { | 103 | { |
| @@ -715,6 +273,18 @@ static inline int cpumask_test_and_set_cpu(int cpu, struct cpumask *cpumask) | |||
| 715 | } | 273 | } |
| 716 | 274 | ||
| 717 | /** | 275 | /** |
| 276 | * cpumask_test_and_clear_cpu - atomically test and clear a cpu in a cpumask | ||
| 277 | * @cpu: cpu number (< nr_cpu_ids) | ||
| 278 | * @cpumask: the cpumask pointer | ||
| 279 | * | ||
| 280 | * test_and_clear_bit wrapper for cpumasks. | ||
| 281 | */ | ||
| 282 | static inline int cpumask_test_and_clear_cpu(int cpu, struct cpumask *cpumask) | ||
| 283 | { | ||
| 284 | return test_and_clear_bit(cpumask_check(cpu), cpumask_bits(cpumask)); | ||
| 285 | } | ||
| 286 | |||
| 287 | /** | ||
| 718 | * cpumask_setall - set all cpus (< nr_cpu_ids) in a cpumask | 288 | * cpumask_setall - set all cpus (< nr_cpu_ids) in a cpumask |
| 719 | * @dstp: the cpumask pointer | 289 | * @dstp: the cpumask pointer |
| 720 | */ | 290 | */ |
| @@ -1088,4 +658,241 @@ void set_cpu_active(unsigned int cpu, bool active); | |||
| 1088 | void init_cpu_present(const struct cpumask *src); | 658 | void init_cpu_present(const struct cpumask *src); |
| 1089 | void init_cpu_possible(const struct cpumask *src); | 659 | void init_cpu_possible(const struct cpumask *src); |
| 1090 | void init_cpu_online(const struct cpumask *src); | 660 | void init_cpu_online(const struct cpumask *src); |
| 661 | |||
| 662 | /** | ||
| 663 | * to_cpumask - convert an NR_CPUS bitmap to a struct cpumask * | ||
| 664 | * @bitmap: the bitmap | ||
| 665 | * | ||
| 666 | * There are a few places where cpumask_var_t isn't appropriate and | ||
| 667 | * static cpumasks must be used (eg. very early boot), yet we don't | ||
| 668 | * expose the definition of 'struct cpumask'. | ||
| 669 | * | ||
| 670 | * This does the conversion, and can be used as a constant initializer. | ||
| 671 | */ | ||
| 672 | #define to_cpumask(bitmap) \ | ||
| 673 | ((struct cpumask *)(1 ? (bitmap) \ | ||
| 674 | : (void *)sizeof(__check_is_bitmap(bitmap)))) | ||
| 675 | |||
| 676 | static inline int __check_is_bitmap(const unsigned long *bitmap) | ||
| 677 | { | ||
| 678 | return 1; | ||
| 679 | } | ||
| 680 | |||
| 681 | /* | ||
| 682 | * Special-case data structure for "single bit set only" constant CPU masks. | ||
| 683 | * | ||
| 684 | * We pre-generate all the 64 (or 32) possible bit positions, with enough | ||
| 685 | * padding to the left and the right, and return the constant pointer | ||
| 686 | * appropriately offset. | ||
| 687 | */ | ||
| 688 | extern const unsigned long | ||
| 689 | cpu_bit_bitmap[BITS_PER_LONG+1][BITS_TO_LONGS(NR_CPUS)]; | ||
| 690 | |||
| 691 | static inline const struct cpumask *get_cpu_mask(unsigned int cpu) | ||
| 692 | { | ||
| 693 | const unsigned long *p = cpu_bit_bitmap[1 + cpu % BITS_PER_LONG]; | ||
| 694 | p -= cpu / BITS_PER_LONG; | ||
| 695 | return to_cpumask(p); | ||
| 696 | } | ||
| 697 | |||
| 698 | #define cpu_is_offline(cpu) unlikely(!cpu_online(cpu)) | ||
| 699 | |||
| 700 | #if NR_CPUS <= BITS_PER_LONG | ||
| 701 | #define CPU_BITS_ALL \ | ||
| 702 | { \ | ||
| 703 | [BITS_TO_LONGS(NR_CPUS)-1] = CPU_MASK_LAST_WORD \ | ||
| 704 | } | ||
| 705 | |||
| 706 | #else /* NR_CPUS > BITS_PER_LONG */ | ||
| 707 | |||
| 708 | #define CPU_BITS_ALL \ | ||
| 709 | { \ | ||
| 710 | [0 ... BITS_TO_LONGS(NR_CPUS)-2] = ~0UL, \ | ||
| 711 | [BITS_TO_LONGS(NR_CPUS)-1] = CPU_MASK_LAST_WORD \ | ||
| 712 | } | ||
| 713 | #endif /* NR_CPUS > BITS_PER_LONG */ | ||
| 714 | |||
| 715 | /* | ||
| 716 | * | ||
| 717 | * From here down, all obsolete. Use cpumask_ variants! | ||
| 718 | * | ||
| 719 | */ | ||
| 720 | #ifndef CONFIG_DISABLE_OBSOLETE_CPUMASK_FUNCTIONS | ||
| 721 | /* These strip const, as traditionally they weren't const. */ | ||
| 722 | #define cpu_possible_map (*(cpumask_t *)cpu_possible_mask) | ||
| 723 | #define cpu_online_map (*(cpumask_t *)cpu_online_mask) | ||
| 724 | #define cpu_present_map (*(cpumask_t *)cpu_present_mask) | ||
| 725 | #define cpu_active_map (*(cpumask_t *)cpu_active_mask) | ||
| 726 | |||
| 727 | #define cpumask_of_cpu(cpu) (*get_cpu_mask(cpu)) | ||
| 728 | |||
| 729 | #define CPU_MASK_LAST_WORD BITMAP_LAST_WORD_MASK(NR_CPUS) | ||
| 730 | |||
| 731 | #if NR_CPUS <= BITS_PER_LONG | ||
| 732 | |||
| 733 | #define CPU_MASK_ALL \ | ||
| 734 | (cpumask_t) { { \ | ||
| 735 | [BITS_TO_LONGS(NR_CPUS)-1] = CPU_MASK_LAST_WORD \ | ||
| 736 | } } | ||
| 737 | |||
| 738 | #else | ||
| 739 | |||
| 740 | #define CPU_MASK_ALL \ | ||
| 741 | (cpumask_t) { { \ | ||
| 742 | [0 ... BITS_TO_LONGS(NR_CPUS)-2] = ~0UL, \ | ||
| 743 | [BITS_TO_LONGS(NR_CPUS)-1] = CPU_MASK_LAST_WORD \ | ||
| 744 | } } | ||
| 745 | |||
| 746 | #endif | ||
| 747 | |||
| 748 | #define CPU_MASK_NONE \ | ||
| 749 | (cpumask_t) { { \ | ||
| 750 | [0 ... BITS_TO_LONGS(NR_CPUS)-1] = 0UL \ | ||
| 751 | } } | ||
| 752 | |||
| 753 | #define CPU_MASK_CPU0 \ | ||
| 754 | (cpumask_t) { { \ | ||
| 755 | [0] = 1UL \ | ||
| 756 | } } | ||
| 757 | |||
| 758 | #if NR_CPUS == 1 | ||
| 759 | #define first_cpu(src) ({ (void)(src); 0; }) | ||
| 760 | #define next_cpu(n, src) ({ (void)(src); 1; }) | ||
| 761 | #define any_online_cpu(mask) 0 | ||
| 762 | #define for_each_cpu_mask(cpu, mask) \ | ||
| 763 | for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask) | ||
| 764 | #else /* NR_CPUS > 1 */ | ||
| 765 | int __first_cpu(const cpumask_t *srcp); | ||
| 766 | int __next_cpu(int n, const cpumask_t *srcp); | ||
| 767 | int __any_online_cpu(const cpumask_t *mask); | ||
| 768 | |||
| 769 | #define first_cpu(src) __first_cpu(&(src)) | ||
| 770 | #define next_cpu(n, src) __next_cpu((n), &(src)) | ||
| 771 | #define any_online_cpu(mask) __any_online_cpu(&(mask)) | ||
| 772 | #define for_each_cpu_mask(cpu, mask) \ | ||
| 773 | for ((cpu) = -1; \ | ||
| 774 | (cpu) = next_cpu((cpu), (mask)), \ | ||
| 775 | (cpu) < NR_CPUS; ) | ||
| 776 | #endif /* SMP */ | ||
| 777 | |||
| 778 | #if NR_CPUS <= 64 | ||
| 779 | |||
| 780 | #define for_each_cpu_mask_nr(cpu, mask) for_each_cpu_mask(cpu, mask) | ||
| 781 | |||
| 782 | #else /* NR_CPUS > 64 */ | ||
| 783 | |||
| 784 | int __next_cpu_nr(int n, const cpumask_t *srcp); | ||
| 785 | #define for_each_cpu_mask_nr(cpu, mask) \ | ||
| 786 | for ((cpu) = -1; \ | ||
| 787 | (cpu) = __next_cpu_nr((cpu), &(mask)), \ | ||
| 788 | (cpu) < nr_cpu_ids; ) | ||
| 789 | |||
| 790 | #endif /* NR_CPUS > 64 */ | ||
| 791 | |||
| 792 | #define cpus_addr(src) ((src).bits) | ||
| 793 | |||
| 794 | #define cpu_set(cpu, dst) __cpu_set((cpu), &(dst)) | ||
| 795 | static inline void __cpu_set(int cpu, volatile cpumask_t *dstp) | ||
| 796 | { | ||
| 797 | set_bit(cpu, dstp->bits); | ||
| 798 | } | ||
| 799 | |||
| 800 | #define cpu_clear(cpu, dst) __cpu_clear((cpu), &(dst)) | ||
| 801 | static inline void __cpu_clear(int cpu, volatile cpumask_t *dstp) | ||
| 802 | { | ||
| 803 | clear_bit(cpu, dstp->bits); | ||
| 804 | } | ||
| 805 | |||
| 806 | #define cpus_setall(dst) __cpus_setall(&(dst), NR_CPUS) | ||
| 807 | static inline void __cpus_setall(cpumask_t *dstp, int nbits) | ||
| 808 | { | ||
| 809 | bitmap_fill(dstp->bits, nbits); | ||
| 810 | } | ||
| 811 | |||
| 812 | #define cpus_clear(dst) __cpus_clear(&(dst), NR_CPUS) | ||
| 813 | static inline void __cpus_clear(cpumask_t *dstp, int nbits) | ||
| 814 | { | ||
| 815 | bitmap_zero(dstp->bits, nbits); | ||
| 816 | } | ||
| 817 | |||
| 818 | /* No static inline type checking - see Subtlety (1) above. */ | ||
| 819 | #define cpu_isset(cpu, cpumask) test_bit((cpu), (cpumask).bits) | ||
| 820 | |||
| 821 | #define cpu_test_and_set(cpu, cpumask) __cpu_test_and_set((cpu), &(cpumask)) | ||
| 822 | static inline int __cpu_test_and_set(int cpu, cpumask_t *addr) | ||
| 823 | { | ||
| 824 | return test_and_set_bit(cpu, addr->bits); | ||
| 825 | } | ||
| 826 | |||
| 827 | #define cpus_and(dst, src1, src2) __cpus_and(&(dst), &(src1), &(src2), NR_CPUS) | ||
| 828 | static inline int __cpus_and(cpumask_t *dstp, const cpumask_t *src1p, | ||
| 829 | const cpumask_t *src2p, int nbits) | ||
| 830 | { | ||
| 831 | return bitmap_and(dstp->bits, src1p->bits, src2p->bits, nbits); | ||
| 832 | } | ||
| 833 | |||
| 834 | #define cpus_or(dst, src1, src2) __cpus_or(&(dst), &(src1), &(src2), NR_CPUS) | ||
| 835 | static inline void __cpus_or(cpumask_t *dstp, const cpumask_t *src1p, | ||
| 836 | const cpumask_t *src2p, int nbits) | ||
| 837 | { | ||
| 838 | bitmap_or(dstp->bits, src1p->bits, src2p->bits, nbits); | ||
| 839 | } | ||
| 840 | |||
| 841 | #define cpus_xor(dst, src1, src2) __cpus_xor(&(dst), &(src1), &(src2), NR_CPUS) | ||
| 842 | static inline void __cpus_xor(cpumask_t *dstp, const cpumask_t *src1p, | ||
| 843 | const cpumask_t *src2p, int nbits) | ||
| 844 | { | ||
| 845 | bitmap_xor(dstp->bits, src1p->bits, src2p->bits, nbits); | ||
| 846 | } | ||
| 847 | |||
| 848 | #define cpus_andnot(dst, src1, src2) \ | ||
| 849 | __cpus_andnot(&(dst), &(src1), &(src2), NR_CPUS) | ||
| 850 | static inline int __cpus_andnot(cpumask_t *dstp, const cpumask_t *src1p, | ||
| 851 | const cpumask_t *src2p, int nbits) | ||
| 852 | { | ||
| 853 | return bitmap_andnot(dstp->bits, src1p->bits, src2p->bits, nbits); | ||
| 854 | } | ||
| 855 | |||
| 856 | #define cpus_equal(src1, src2) __cpus_equal(&(src1), &(src2), NR_CPUS) | ||
| 857 | static inline int __cpus_equal(const cpumask_t *src1p, | ||
| 858 | const cpumask_t *src2p, int nbits) | ||
| 859 | { | ||
| 860 | return bitmap_equal(src1p->bits, src2p->bits, nbits); | ||
| 861 | } | ||
| 862 | |||
| 863 | #define cpus_intersects(src1, src2) __cpus_intersects(&(src1), &(src2), NR_CPUS) | ||
| 864 | static inline int __cpus_intersects(const cpumask_t *src1p, | ||
| 865 | const cpumask_t *src2p, int nbits) | ||
| 866 | { | ||
| 867 | return bitmap_intersects(src1p->bits, src2p->bits, nbits); | ||
| 868 | } | ||
| 869 | |||
| 870 | #define cpus_subset(src1, src2) __cpus_subset(&(src1), &(src2), NR_CPUS) | ||
| 871 | static inline int __cpus_subset(const cpumask_t *src1p, | ||
| 872 | const cpumask_t *src2p, int nbits) | ||
| 873 | { | ||
| 874 | return bitmap_subset(src1p->bits, src2p->bits, nbits); | ||
| 875 | } | ||
| 876 | |||
| 877 | #define cpus_empty(src) __cpus_empty(&(src), NR_CPUS) | ||
| 878 | static inline int __cpus_empty(const cpumask_t *srcp, int nbits) | ||
| 879 | { | ||
| 880 | return bitmap_empty(srcp->bits, nbits); | ||
| 881 | } | ||
| 882 | |||
| 883 | #define cpus_weight(cpumask) __cpus_weight(&(cpumask), NR_CPUS) | ||
| 884 | static inline int __cpus_weight(const cpumask_t *srcp, int nbits) | ||
| 885 | { | ||
| 886 | return bitmap_weight(srcp->bits, nbits); | ||
| 887 | } | ||
| 888 | |||
| 889 | #define cpus_shift_left(dst, src, n) \ | ||
| 890 | __cpus_shift_left(&(dst), &(src), (n), NR_CPUS) | ||
| 891 | static inline void __cpus_shift_left(cpumask_t *dstp, | ||
| 892 | const cpumask_t *srcp, int n, int nbits) | ||
| 893 | { | ||
| 894 | bitmap_shift_left(dstp->bits, srcp->bits, n, nbits); | ||
| 895 | } | ||
| 896 | #endif /* !CONFIG_DISABLE_OBSOLETE_CPUMASK_FUNCTIONS */ | ||
| 897 | |||
| 1091 | #endif /* __LINUX_CPUMASK_H */ | 898 | #endif /* __LINUX_CPUMASK_H */ |
diff --git a/include/linux/cred.h b/include/linux/cred.h index 4fa999696310..4e3387a89cb9 100644 --- a/include/linux/cred.h +++ b/include/linux/cred.h | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include <linux/capability.h> | 15 | #include <linux/capability.h> |
| 16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
| 17 | #include <linux/key.h> | 17 | #include <linux/key.h> |
| 18 | #include <linux/selinux.h> | ||
| 18 | #include <asm/atomic.h> | 19 | #include <asm/atomic.h> |
| 19 | 20 | ||
| 20 | struct user_struct; | 21 | struct user_struct; |
| @@ -114,6 +115,13 @@ struct thread_group_cred { | |||
| 114 | */ | 115 | */ |
| 115 | struct cred { | 116 | struct cred { |
| 116 | atomic_t usage; | 117 | atomic_t usage; |
| 118 | #ifdef CONFIG_DEBUG_CREDENTIALS | ||
| 119 | atomic_t subscribers; /* number of processes subscribed */ | ||
| 120 | void *put_addr; | ||
| 121 | unsigned magic; | ||
| 122 | #define CRED_MAGIC 0x43736564 | ||
| 123 | #define CRED_MAGIC_DEAD 0x44656144 | ||
| 124 | #endif | ||
| 117 | uid_t uid; /* real UID of the task */ | 125 | uid_t uid; /* real UID of the task */ |
| 118 | gid_t gid; /* real GID of the task */ | 126 | gid_t gid; /* real GID of the task */ |
| 119 | uid_t suid; /* saved UID of the task */ | 127 | uid_t suid; /* saved UID of the task */ |
| @@ -143,7 +151,9 @@ struct cred { | |||
| 143 | }; | 151 | }; |
| 144 | 152 | ||
| 145 | extern void __put_cred(struct cred *); | 153 | extern void __put_cred(struct cred *); |
| 154 | extern void exit_creds(struct task_struct *); | ||
| 146 | extern int copy_creds(struct task_struct *, unsigned long); | 155 | extern int copy_creds(struct task_struct *, unsigned long); |
| 156 | extern struct cred *cred_alloc_blank(void); | ||
| 147 | extern struct cred *prepare_creds(void); | 157 | extern struct cred *prepare_creds(void); |
| 148 | extern struct cred *prepare_exec_creds(void); | 158 | extern struct cred *prepare_exec_creds(void); |
| 149 | extern struct cred *prepare_usermodehelper_creds(void); | 159 | extern struct cred *prepare_usermodehelper_creds(void); |
| @@ -158,6 +168,46 @@ extern int set_security_override_from_ctx(struct cred *, const char *); | |||
| 158 | extern int set_create_files_as(struct cred *, struct inode *); | 168 | extern int set_create_files_as(struct cred *, struct inode *); |
| 159 | extern void __init cred_init(void); | 169 | extern void __init cred_init(void); |
| 160 | 170 | ||
| 171 | /* | ||
| 172 | * check for validity of credentials | ||
| 173 | */ | ||
| 174 | #ifdef CONFIG_DEBUG_CREDENTIALS | ||
| 175 | extern void __invalid_creds(const struct cred *, const char *, unsigned); | ||
| 176 | extern void __validate_process_creds(struct task_struct *, | ||
| 177 | const char *, unsigned); | ||
| 178 | |||
| 179 | extern bool creds_are_invalid(const struct cred *cred); | ||
| 180 | |||
| 181 | static inline void __validate_creds(const struct cred *cred, | ||
| 182 | const char *file, unsigned line) | ||
| 183 | { | ||
| 184 | if (unlikely(creds_are_invalid(cred))) | ||
| 185 | __invalid_creds(cred, file, line); | ||
| 186 | } | ||
| 187 | |||
| 188 | #define validate_creds(cred) \ | ||
| 189 | do { \ | ||
| 190 | __validate_creds((cred), __FILE__, __LINE__); \ | ||
| 191 | } while(0) | ||
| 192 | |||
| 193 | #define validate_process_creds() \ | ||
| 194 | do { \ | ||
| 195 | __validate_process_creds(current, __FILE__, __LINE__); \ | ||
| 196 | } while(0) | ||
| 197 | |||
| 198 | extern void validate_creds_for_do_exit(struct task_struct *); | ||
| 199 | #else | ||
| 200 | static inline void validate_creds(const struct cred *cred) | ||
| 201 | { | ||
| 202 | } | ||
| 203 | static inline void validate_creds_for_do_exit(struct task_struct *tsk) | ||
| 204 | { | ||
| 205 | } | ||
| 206 | static inline void validate_process_creds(void) | ||
| 207 | { | ||
| 208 | } | ||
| 209 | #endif | ||
| 210 | |||
| 161 | /** | 211 | /** |
| 162 | * get_new_cred - Get a reference on a new set of credentials | 212 | * get_new_cred - Get a reference on a new set of credentials |
| 163 | * @cred: The new credentials to reference | 213 | * @cred: The new credentials to reference |
| @@ -186,7 +236,9 @@ static inline struct cred *get_new_cred(struct cred *cred) | |||
| 186 | */ | 236 | */ |
| 187 | static inline const struct cred *get_cred(const struct cred *cred) | 237 | static inline const struct cred *get_cred(const struct cred *cred) |
| 188 | { | 238 | { |
| 189 | return get_new_cred((struct cred *) cred); | 239 | struct cred *nonconst_cred = (struct cred *) cred; |
| 240 | validate_creds(cred); | ||
| 241 | return get_new_cred(nonconst_cred); | ||
| 190 | } | 242 | } |
| 191 | 243 | ||
| 192 | /** | 244 | /** |
| @@ -204,7 +256,7 @@ static inline void put_cred(const struct cred *_cred) | |||
| 204 | { | 256 | { |
| 205 | struct cred *cred = (struct cred *) _cred; | 257 | struct cred *cred = (struct cred *) _cred; |
| 206 | 258 | ||
| 207 | BUG_ON(atomic_read(&(cred)->usage) <= 0); | 259 | validate_creds(cred); |
| 208 | if (atomic_dec_and_test(&(cred)->usage)) | 260 | if (atomic_dec_and_test(&(cred)->usage)) |
| 209 | __put_cred(cred); | 261 | __put_cred(cred); |
| 210 | } | 262 | } |
diff --git a/include/linux/crypto.h b/include/linux/crypto.h index ec29fa268b94..fd929889e8dc 100644 --- a/include/linux/crypto.h +++ b/include/linux/crypto.h | |||
| @@ -115,7 +115,6 @@ struct crypto_async_request; | |||
| 115 | struct crypto_aead; | 115 | struct crypto_aead; |
| 116 | struct crypto_blkcipher; | 116 | struct crypto_blkcipher; |
| 117 | struct crypto_hash; | 117 | struct crypto_hash; |
| 118 | struct crypto_ahash; | ||
| 119 | struct crypto_rng; | 118 | struct crypto_rng; |
| 120 | struct crypto_tfm; | 119 | struct crypto_tfm; |
| 121 | struct crypto_type; | 120 | struct crypto_type; |
| @@ -146,16 +145,6 @@ struct ablkcipher_request { | |||
| 146 | void *__ctx[] CRYPTO_MINALIGN_ATTR; | 145 | void *__ctx[] CRYPTO_MINALIGN_ATTR; |
| 147 | }; | 146 | }; |
| 148 | 147 | ||
| 149 | struct ahash_request { | ||
| 150 | struct crypto_async_request base; | ||
| 151 | |||
| 152 | unsigned int nbytes; | ||
| 153 | struct scatterlist *src; | ||
| 154 | u8 *result; | ||
| 155 | |||
| 156 | void *__ctx[] CRYPTO_MINALIGN_ATTR; | ||
| 157 | }; | ||
| 158 | |||
| 159 | /** | 148 | /** |
| 160 | * struct aead_request - AEAD request | 149 | * struct aead_request - AEAD request |
| 161 | * @base: Common attributes for async crypto requests | 150 | * @base: Common attributes for async crypto requests |
| @@ -220,18 +209,6 @@ struct ablkcipher_alg { | |||
| 220 | unsigned int ivsize; | 209 | unsigned int ivsize; |
| 221 | }; | 210 | }; |
| 222 | 211 | ||
| 223 | struct ahash_alg { | ||
| 224 | int (*init)(struct ahash_request *req); | ||
| 225 | int (*reinit)(struct ahash_request *req); | ||
| 226 | int (*update)(struct ahash_request *req); | ||
| 227 | int (*final)(struct ahash_request *req); | ||
| 228 | int (*digest)(struct ahash_request *req); | ||
| 229 | int (*setkey)(struct crypto_ahash *tfm, const u8 *key, | ||
| 230 | unsigned int keylen); | ||
| 231 | |||
| 232 | unsigned int digestsize; | ||
| 233 | }; | ||
| 234 | |||
| 235 | struct aead_alg { | 212 | struct aead_alg { |
| 236 | int (*setkey)(struct crypto_aead *tfm, const u8 *key, | 213 | int (*setkey)(struct crypto_aead *tfm, const u8 *key, |
| 237 | unsigned int keylen); | 214 | unsigned int keylen); |
| @@ -318,7 +295,6 @@ struct rng_alg { | |||
| 318 | #define cra_cipher cra_u.cipher | 295 | #define cra_cipher cra_u.cipher |
| 319 | #define cra_digest cra_u.digest | 296 | #define cra_digest cra_u.digest |
| 320 | #define cra_hash cra_u.hash | 297 | #define cra_hash cra_u.hash |
| 321 | #define cra_ahash cra_u.ahash | ||
| 322 | #define cra_compress cra_u.compress | 298 | #define cra_compress cra_u.compress |
| 323 | #define cra_rng cra_u.rng | 299 | #define cra_rng cra_u.rng |
| 324 | 300 | ||
| @@ -346,7 +322,6 @@ struct crypto_alg { | |||
| 346 | struct cipher_alg cipher; | 322 | struct cipher_alg cipher; |
| 347 | struct digest_alg digest; | 323 | struct digest_alg digest; |
| 348 | struct hash_alg hash; | 324 | struct hash_alg hash; |
| 349 | struct ahash_alg ahash; | ||
| 350 | struct compress_alg compress; | 325 | struct compress_alg compress; |
| 351 | struct rng_alg rng; | 326 | struct rng_alg rng; |
| 352 | } cra_u; | 327 | } cra_u; |
| @@ -433,18 +408,6 @@ struct hash_tfm { | |||
| 433 | unsigned int digestsize; | 408 | unsigned int digestsize; |
| 434 | }; | 409 | }; |
| 435 | 410 | ||
| 436 | struct ahash_tfm { | ||
| 437 | int (*init)(struct ahash_request *req); | ||
| 438 | int (*update)(struct ahash_request *req); | ||
| 439 | int (*final)(struct ahash_request *req); | ||
| 440 | int (*digest)(struct ahash_request *req); | ||
| 441 | int (*setkey)(struct crypto_ahash *tfm, const u8 *key, | ||
| 442 | unsigned int keylen); | ||
| 443 | |||
| 444 | unsigned int digestsize; | ||
| 445 | unsigned int reqsize; | ||
| 446 | }; | ||
| 447 | |||
| 448 | struct compress_tfm { | 411 | struct compress_tfm { |
| 449 | int (*cot_compress)(struct crypto_tfm *tfm, | 412 | int (*cot_compress)(struct crypto_tfm *tfm, |
| 450 | const u8 *src, unsigned int slen, | 413 | const u8 *src, unsigned int slen, |
| @@ -465,7 +428,6 @@ struct rng_tfm { | |||
| 465 | #define crt_blkcipher crt_u.blkcipher | 428 | #define crt_blkcipher crt_u.blkcipher |
| 466 | #define crt_cipher crt_u.cipher | 429 | #define crt_cipher crt_u.cipher |
| 467 | #define crt_hash crt_u.hash | 430 | #define crt_hash crt_u.hash |
| 468 | #define crt_ahash crt_u.ahash | ||
| 469 | #define crt_compress crt_u.compress | 431 | #define crt_compress crt_u.compress |
| 470 | #define crt_rng crt_u.rng | 432 | #define crt_rng crt_u.rng |
| 471 | 433 | ||
| @@ -479,7 +441,6 @@ struct crypto_tfm { | |||
| 479 | struct blkcipher_tfm blkcipher; | 441 | struct blkcipher_tfm blkcipher; |
| 480 | struct cipher_tfm cipher; | 442 | struct cipher_tfm cipher; |
| 481 | struct hash_tfm hash; | 443 | struct hash_tfm hash; |
| 482 | struct ahash_tfm ahash; | ||
| 483 | struct compress_tfm compress; | 444 | struct compress_tfm compress; |
| 484 | struct rng_tfm rng; | 445 | struct rng_tfm rng; |
| 485 | } crt_u; | 446 | } crt_u; |
| @@ -770,7 +731,7 @@ static inline struct ablkcipher_request *ablkcipher_request_alloc( | |||
| 770 | 731 | ||
| 771 | static inline void ablkcipher_request_free(struct ablkcipher_request *req) | 732 | static inline void ablkcipher_request_free(struct ablkcipher_request *req) |
| 772 | { | 733 | { |
| 773 | kfree(req); | 734 | kzfree(req); |
| 774 | } | 735 | } |
| 775 | 736 | ||
| 776 | static inline void ablkcipher_request_set_callback( | 737 | static inline void ablkcipher_request_set_callback( |
| @@ -901,7 +862,7 @@ static inline struct aead_request *aead_request_alloc(struct crypto_aead *tfm, | |||
| 901 | 862 | ||
| 902 | static inline void aead_request_free(struct aead_request *req) | 863 | static inline void aead_request_free(struct aead_request *req) |
| 903 | { | 864 | { |
| 904 | kfree(req); | 865 | kzfree(req); |
| 905 | } | 866 | } |
| 906 | 867 | ||
| 907 | static inline void aead_request_set_callback(struct aead_request *req, | 868 | static inline void aead_request_set_callback(struct aead_request *req, |
diff --git a/include/linux/cryptohash.h b/include/linux/cryptohash.h index c118b2ad9807..ec78a4bbe1d5 100644 --- a/include/linux/cryptohash.h +++ b/include/linux/cryptohash.h | |||
| @@ -2,6 +2,7 @@ | |||
| 2 | #define __CRYPTOHASH_H | 2 | #define __CRYPTOHASH_H |
| 3 | 3 | ||
| 4 | #define SHA_DIGEST_WORDS 5 | 4 | #define SHA_DIGEST_WORDS 5 |
| 5 | #define SHA_MESSAGE_BYTES (512 /*bits*/ / 8) | ||
| 5 | #define SHA_WORKSPACE_WORDS 80 | 6 | #define SHA_WORKSPACE_WORDS 80 |
| 6 | 7 | ||
| 7 | void sha_init(__u32 *buf); | 8 | void sha_init(__u32 *buf); |
diff --git a/include/linux/cyclades.h b/include/linux/cyclades.h index 1fbdea4f08eb..a5049eaf782d 100644 --- a/include/linux/cyclades.h +++ b/include/linux/cyclades.h | |||
| @@ -499,6 +499,7 @@ struct cyclades_card { | |||
| 499 | void __iomem *p9050; | 499 | void __iomem *p9050; |
| 500 | struct RUNTIME_9060 __iomem *p9060; | 500 | struct RUNTIME_9060 __iomem *p9060; |
| 501 | } ctl_addr; | 501 | } ctl_addr; |
| 502 | struct BOARD_CTRL __iomem *board_ctrl; /* cyz specific */ | ||
| 502 | int irq; | 503 | int irq; |
| 503 | unsigned int num_chips; /* 0 if card absent, -1 if Z/PCI, else Y */ | 504 | unsigned int num_chips; /* 0 if card absent, -1 if Z/PCI, else Y */ |
| 504 | unsigned int first_line; /* minor number of first channel on card */ | 505 | unsigned int first_line; /* minor number of first channel on card */ |
| @@ -541,6 +542,15 @@ struct cyclades_port { | |||
| 541 | int magic; | 542 | int magic; |
| 542 | struct tty_port port; | 543 | struct tty_port port; |
| 543 | struct cyclades_card *card; | 544 | struct cyclades_card *card; |
| 545 | union { | ||
| 546 | struct { | ||
| 547 | void __iomem *base_addr; | ||
| 548 | } cyy; | ||
| 549 | struct { | ||
| 550 | struct CH_CTRL __iomem *ch_ctrl; | ||
| 551 | struct BUF_CTRL __iomem *buf_ctrl; | ||
| 552 | } cyz; | ||
| 553 | } u; | ||
| 544 | int line; | 554 | int line; |
| 545 | int flags; /* defined in tty.h */ | 555 | int flags; /* defined in tty.h */ |
| 546 | int type; /* UART type */ | 556 | int type; /* UART type */ |
| @@ -568,7 +578,6 @@ struct cyclades_port { | |||
| 568 | struct cyclades_idle_stats idle_stats; | 578 | struct cyclades_idle_stats idle_stats; |
| 569 | struct cyclades_icount icount; | 579 | struct cyclades_icount icount; |
| 570 | struct completion shutdown_wait; | 580 | struct completion shutdown_wait; |
| 571 | wait_queue_head_t delta_msr_wait; | ||
| 572 | int throttle; | 581 | int throttle; |
| 573 | }; | 582 | }; |
| 574 | 583 | ||
diff --git a/include/linux/dca.h b/include/linux/dca.h index 9c20c7e87d0a..d27a7a05718d 100644 --- a/include/linux/dca.h +++ b/include/linux/dca.h | |||
| @@ -20,6 +20,9 @@ | |||
| 20 | */ | 20 | */ |
| 21 | #ifndef DCA_H | 21 | #ifndef DCA_H |
| 22 | #define DCA_H | 22 | #define DCA_H |
| 23 | |||
| 24 | #include <linux/pci.h> | ||
| 25 | |||
| 23 | /* DCA Provider API */ | 26 | /* DCA Provider API */ |
| 24 | 27 | ||
| 25 | /* DCA Notifier Interface */ | 28 | /* DCA Notifier Interface */ |
| @@ -36,6 +39,12 @@ struct dca_provider { | |||
| 36 | int id; | 39 | int id; |
| 37 | }; | 40 | }; |
| 38 | 41 | ||
| 42 | struct dca_domain { | ||
| 43 | struct list_head node; | ||
| 44 | struct list_head dca_providers; | ||
| 45 | struct pci_bus *pci_rc; | ||
| 46 | }; | ||
| 47 | |||
| 39 | struct dca_ops { | 48 | struct dca_ops { |
| 40 | int (*add_requester) (struct dca_provider *, struct device *); | 49 | int (*add_requester) (struct dca_provider *, struct device *); |
| 41 | int (*remove_requester) (struct dca_provider *, struct device *); | 50 | int (*remove_requester) (struct dca_provider *, struct device *); |
| @@ -47,7 +56,7 @@ struct dca_ops { | |||
| 47 | struct dca_provider *alloc_dca_provider(struct dca_ops *ops, int priv_size); | 56 | struct dca_provider *alloc_dca_provider(struct dca_ops *ops, int priv_size); |
| 48 | void free_dca_provider(struct dca_provider *dca); | 57 | void free_dca_provider(struct dca_provider *dca); |
| 49 | int register_dca_provider(struct dca_provider *dca, struct device *dev); | 58 | int register_dca_provider(struct dca_provider *dca, struct device *dev); |
| 50 | void unregister_dca_provider(struct dca_provider *dca); | 59 | void unregister_dca_provider(struct dca_provider *dca, struct device *dev); |
| 51 | 60 | ||
| 52 | static inline void *dca_priv(struct dca_provider *dca) | 61 | static inline void *dca_priv(struct dca_provider *dca) |
| 53 | { | 62 | { |
diff --git a/include/linux/dcbnl.h b/include/linux/dcbnl.h index 7d2e10006188..b7cdbb4373df 100644 --- a/include/linux/dcbnl.h +++ b/include/linux/dcbnl.h | |||
| @@ -50,6 +50,8 @@ struct dcbmsg { | |||
| 50 | * @DCB_CMD_SNUMTCS: set the number of traffic classes | 50 | * @DCB_CMD_SNUMTCS: set the number of traffic classes |
| 51 | * @DCB_CMD_GBCN: set backward congestion notification configuration | 51 | * @DCB_CMD_GBCN: set backward congestion notification configuration |
| 52 | * @DCB_CMD_SBCN: get backward congestion notification configration. | 52 | * @DCB_CMD_SBCN: get backward congestion notification configration. |
| 53 | * @DCB_CMD_GAPP: get application protocol configuration | ||
| 54 | * @DCB_CMD_SAPP: set application protocol configuration | ||
| 53 | */ | 55 | */ |
| 54 | enum dcbnl_commands { | 56 | enum dcbnl_commands { |
| 55 | DCB_CMD_UNDEFINED, | 57 | DCB_CMD_UNDEFINED, |
| @@ -80,6 +82,9 @@ enum dcbnl_commands { | |||
| 80 | DCB_CMD_BCN_GCFG, | 82 | DCB_CMD_BCN_GCFG, |
| 81 | DCB_CMD_BCN_SCFG, | 83 | DCB_CMD_BCN_SCFG, |
| 82 | 84 | ||
| 85 | DCB_CMD_GAPP, | ||
| 86 | DCB_CMD_SAPP, | ||
| 87 | |||
| 83 | __DCB_CMD_ENUM_MAX, | 88 | __DCB_CMD_ENUM_MAX, |
| 84 | DCB_CMD_MAX = __DCB_CMD_ENUM_MAX - 1, | 89 | DCB_CMD_MAX = __DCB_CMD_ENUM_MAX - 1, |
| 85 | }; | 90 | }; |
| @@ -114,6 +119,7 @@ enum dcbnl_attrs { | |||
| 114 | DCB_ATTR_CAP, | 119 | DCB_ATTR_CAP, |
| 115 | DCB_ATTR_NUMTCS, | 120 | DCB_ATTR_NUMTCS, |
| 116 | DCB_ATTR_BCN, | 121 | DCB_ATTR_BCN, |
| 122 | DCB_ATTR_APP, | ||
| 117 | 123 | ||
| 118 | __DCB_ATTR_ENUM_MAX, | 124 | __DCB_ATTR_ENUM_MAX, |
| 119 | DCB_ATTR_MAX = __DCB_ATTR_ENUM_MAX - 1, | 125 | DCB_ATTR_MAX = __DCB_ATTR_ENUM_MAX - 1, |
| @@ -338,5 +344,17 @@ enum dcb_general_attr_values { | |||
| 338 | DCB_ATTR_VALUE_UNDEFINED = 0xff | 344 | DCB_ATTR_VALUE_UNDEFINED = 0xff |
| 339 | }; | 345 | }; |
| 340 | 346 | ||
| 347 | #define DCB_APP_IDTYPE_ETHTYPE 0x00 | ||
| 348 | #define DCB_APP_IDTYPE_PORTNUM 0x01 | ||
| 349 | enum dcbnl_app_attrs { | ||
| 350 | DCB_APP_ATTR_UNDEFINED, | ||
| 351 | |||
| 352 | DCB_APP_ATTR_IDTYPE, | ||
| 353 | DCB_APP_ATTR_ID, | ||
| 354 | DCB_APP_ATTR_PRIORITY, | ||
| 355 | |||
| 356 | __DCB_APP_ATTR_ENUM_MAX, | ||
| 357 | DCB_APP_ATTR_MAX = __DCB_APP_ATTR_ENUM_MAX - 1, | ||
| 358 | }; | ||
| 341 | 359 | ||
| 342 | #endif /* __LINUX_DCBNL_H__ */ | 360 | #endif /* __LINUX_DCBNL_H__ */ |
diff --git a/include/linux/debugfs.h b/include/linux/debugfs.h index eb5c2ba2f81a..fc1b930f246c 100644 --- a/include/linux/debugfs.h +++ b/include/linux/debugfs.h | |||
| @@ -9,7 +9,7 @@ | |||
| 9 | * 2 as published by the Free Software Foundation. | 9 | * 2 as published by the Free Software Foundation. |
| 10 | * | 10 | * |
| 11 | * debugfs is for people to use instead of /proc or /sys. | 11 | * debugfs is for people to use instead of /proc or /sys. |
| 12 | * See Documentation/DocBook/kernel-api for more details. | 12 | * See Documentation/DocBook/filesystems for more details. |
| 13 | */ | 13 | */ |
| 14 | 14 | ||
| 15 | #ifndef _DEBUGFS_H_ | 15 | #ifndef _DEBUGFS_H_ |
diff --git a/include/linux/delayacct.h b/include/linux/delayacct.h index f352f06fa063..5076fe0c8a96 100644 --- a/include/linux/delayacct.h +++ b/include/linux/delayacct.h | |||
| @@ -18,7 +18,6 @@ | |||
| 18 | #define _LINUX_DELAYACCT_H | 18 | #define _LINUX_DELAYACCT_H |
| 19 | 19 | ||
| 20 | #include <linux/sched.h> | 20 | #include <linux/sched.h> |
| 21 | #include <linux/taskstats_kern.h> | ||
| 22 | 21 | ||
| 23 | /* | 22 | /* |
| 24 | * Per-task flags relevant to delay accounting | 23 | * Per-task flags relevant to delay accounting |
diff --git a/include/linux/device.h b/include/linux/device.h index aebb81036db2..2ea3e4921812 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
| @@ -2,7 +2,8 @@ | |||
| 2 | * device.h - generic, centralized driver model | 2 | * device.h - generic, centralized driver model |
| 3 | * | 3 | * |
| 4 | * Copyright (c) 2001-2003 Patrick Mochel <mochel@osdl.org> | 4 | * Copyright (c) 2001-2003 Patrick Mochel <mochel@osdl.org> |
| 5 | * Copyright (c) 2004-2007 Greg Kroah-Hartman <gregkh@suse.de> | 5 | * Copyright (c) 2004-2009 Greg Kroah-Hartman <gregkh@suse.de> |
| 6 | * Copyright (c) 2008-2009 Novell Inc. | ||
| 6 | * | 7 | * |
| 7 | * This file is released under the GPLv2 | 8 | * This file is released under the GPLv2 |
| 8 | * | 9 | * |
| @@ -62,7 +63,7 @@ struct bus_type { | |||
| 62 | int (*suspend)(struct device *dev, pm_message_t state); | 63 | int (*suspend)(struct device *dev, pm_message_t state); |
| 63 | int (*resume)(struct device *dev); | 64 | int (*resume)(struct device *dev); |
| 64 | 65 | ||
| 65 | struct dev_pm_ops *pm; | 66 | const struct dev_pm_ops *pm; |
| 66 | 67 | ||
| 67 | struct bus_type_private *p; | 68 | struct bus_type_private *p; |
| 68 | }; | 69 | }; |
| @@ -123,16 +124,18 @@ struct device_driver { | |||
| 123 | struct bus_type *bus; | 124 | struct bus_type *bus; |
| 124 | 125 | ||
| 125 | struct module *owner; | 126 | struct module *owner; |
| 126 | const char *mod_name; /* used for built-in modules */ | 127 | const char *mod_name; /* used for built-in modules */ |
| 128 | |||
| 129 | bool suppress_bind_attrs; /* disables bind/unbind via sysfs */ | ||
| 127 | 130 | ||
| 128 | int (*probe) (struct device *dev); | 131 | int (*probe) (struct device *dev); |
| 129 | int (*remove) (struct device *dev); | 132 | int (*remove) (struct device *dev); |
| 130 | void (*shutdown) (struct device *dev); | 133 | void (*shutdown) (struct device *dev); |
| 131 | int (*suspend) (struct device *dev, pm_message_t state); | 134 | int (*suspend) (struct device *dev, pm_message_t state); |
| 132 | int (*resume) (struct device *dev); | 135 | int (*resume) (struct device *dev); |
| 133 | struct attribute_group **groups; | 136 | const struct attribute_group **groups; |
| 134 | 137 | ||
| 135 | struct dev_pm_ops *pm; | 138 | const struct dev_pm_ops *pm; |
| 136 | 139 | ||
| 137 | struct driver_private *p; | 140 | struct driver_private *p; |
| 138 | }; | 141 | }; |
| @@ -192,7 +195,7 @@ struct class { | |||
| 192 | struct kobject *dev_kobj; | 195 | struct kobject *dev_kobj; |
| 193 | 196 | ||
| 194 | int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env); | 197 | int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env); |
| 195 | char *(*nodename)(struct device *dev); | 198 | char *(*devnode)(struct device *dev, mode_t *mode); |
| 196 | 199 | ||
| 197 | void (*class_release)(struct class *class); | 200 | void (*class_release)(struct class *class); |
| 198 | void (*dev_release)(struct device *dev); | 201 | void (*dev_release)(struct device *dev); |
| @@ -200,7 +203,8 @@ struct class { | |||
| 200 | int (*suspend)(struct device *dev, pm_message_t state); | 203 | int (*suspend)(struct device *dev, pm_message_t state); |
| 201 | int (*resume)(struct device *dev); | 204 | int (*resume)(struct device *dev); |
| 202 | 205 | ||
| 203 | struct dev_pm_ops *pm; | 206 | const struct dev_pm_ops *pm; |
| 207 | |||
| 204 | struct class_private *p; | 208 | struct class_private *p; |
| 205 | }; | 209 | }; |
| 206 | 210 | ||
| @@ -223,6 +227,14 @@ extern void class_unregister(struct class *class); | |||
| 223 | __class_register(class, &__key); \ | 227 | __class_register(class, &__key); \ |
| 224 | }) | 228 | }) |
| 225 | 229 | ||
| 230 | struct class_compat; | ||
| 231 | struct class_compat *class_compat_register(const char *name); | ||
| 232 | void class_compat_unregister(struct class_compat *cls); | ||
| 233 | int class_compat_create_link(struct class_compat *cls, struct device *dev, | ||
| 234 | struct device *device_link); | ||
| 235 | void class_compat_remove_link(struct class_compat *cls, struct device *dev, | ||
| 236 | struct device *device_link); | ||
| 237 | |||
| 226 | extern void class_dev_iter_init(struct class_dev_iter *iter, | 238 | extern void class_dev_iter_init(struct class_dev_iter *iter, |
| 227 | struct class *class, | 239 | struct class *class, |
| 228 | struct device *start, | 240 | struct device *start, |
| @@ -286,12 +298,12 @@ extern void class_destroy(struct class *cls); | |||
| 286 | */ | 298 | */ |
| 287 | struct device_type { | 299 | struct device_type { |
| 288 | const char *name; | 300 | const char *name; |
| 289 | struct attribute_group **groups; | 301 | const struct attribute_group **groups; |
| 290 | int (*uevent)(struct device *dev, struct kobj_uevent_env *env); | 302 | int (*uevent)(struct device *dev, struct kobj_uevent_env *env); |
| 291 | char *(*nodename)(struct device *dev); | 303 | char *(*devnode)(struct device *dev, mode_t *mode); |
| 292 | void (*release)(struct device *dev); | 304 | void (*release)(struct device *dev); |
| 293 | 305 | ||
| 294 | struct dev_pm_ops *pm; | 306 | const struct dev_pm_ops *pm; |
| 295 | }; | 307 | }; |
| 296 | 308 | ||
| 297 | /* interface for exporting device attributes */ | 309 | /* interface for exporting device attributes */ |
| @@ -380,7 +392,6 @@ struct device { | |||
| 380 | struct bus_type *bus; /* type of bus device is on */ | 392 | struct bus_type *bus; /* type of bus device is on */ |
| 381 | struct device_driver *driver; /* which driver has allocated this | 393 | struct device_driver *driver; /* which driver has allocated this |
| 382 | device */ | 394 | device */ |
| 383 | void *driver_data; /* data private to the driver */ | ||
| 384 | void *platform_data; /* Platform specific data, device | 395 | void *platform_data; /* Platform specific data, device |
| 385 | core doesn't touch it */ | 396 | core doesn't touch it */ |
| 386 | struct dev_pm_info power; | 397 | struct dev_pm_info power; |
| @@ -411,7 +422,7 @@ struct device { | |||
| 411 | 422 | ||
| 412 | struct klist_node knode_class; | 423 | struct klist_node knode_class; |
| 413 | struct class *class; | 424 | struct class *class; |
| 414 | struct attribute_group **groups; /* optional groups */ | 425 | const struct attribute_group **groups; /* optional groups */ |
| 415 | 426 | ||
| 416 | void (*release)(struct device *dev); | 427 | void (*release)(struct device *dev); |
| 417 | }; | 428 | }; |
| @@ -446,16 +457,6 @@ static inline void set_dev_node(struct device *dev, int node) | |||
| 446 | } | 457 | } |
| 447 | #endif | 458 | #endif |
| 448 | 459 | ||
| 449 | static inline void *dev_get_drvdata(const struct device *dev) | ||
| 450 | { | ||
| 451 | return dev->driver_data; | ||
| 452 | } | ||
| 453 | |||
| 454 | static inline void dev_set_drvdata(struct device *dev, void *data) | ||
| 455 | { | ||
| 456 | dev->driver_data = data; | ||
| 457 | } | ||
| 458 | |||
| 459 | static inline unsigned int dev_get_uevent_suppress(const struct device *dev) | 460 | static inline unsigned int dev_get_uevent_suppress(const struct device *dev) |
| 460 | { | 461 | { |
| 461 | return dev->kobj.uevent_suppress; | 462 | return dev->kobj.uevent_suppress; |
| @@ -488,7 +489,10 @@ extern struct device *device_find_child(struct device *dev, void *data, | |||
| 488 | extern int device_rename(struct device *dev, char *new_name); | 489 | extern int device_rename(struct device *dev, char *new_name); |
| 489 | extern int device_move(struct device *dev, struct device *new_parent, | 490 | extern int device_move(struct device *dev, struct device *new_parent, |
| 490 | enum dpm_order dpm_order); | 491 | enum dpm_order dpm_order); |
| 491 | extern const char *device_get_nodename(struct device *dev, const char **tmp); | 492 | extern const char *device_get_devnode(struct device *dev, |
| 493 | mode_t *mode, const char **tmp); | ||
| 494 | extern void *dev_get_drvdata(const struct device *dev); | ||
| 495 | extern void dev_set_drvdata(struct device *dev, void *data); | ||
| 492 | 496 | ||
| 493 | /* | 497 | /* |
| 494 | * Root device objects for grouping under /sys/devices | 498 | * Root device objects for grouping under /sys/devices |
| @@ -501,6 +505,11 @@ static inline struct device *root_device_register(const char *name) | |||
| 501 | } | 505 | } |
| 502 | extern void root_device_unregister(struct device *root); | 506 | extern void root_device_unregister(struct device *root); |
| 503 | 507 | ||
| 508 | static inline void *dev_get_platdata(const struct device *dev) | ||
| 509 | { | ||
| 510 | return dev->platform_data; | ||
| 511 | } | ||
| 512 | |||
| 504 | /* | 513 | /* |
| 505 | * Manual binding of a device to driver. See drivers/base/bus.c | 514 | * Manual binding of a device to driver. See drivers/base/bus.c |
| 506 | * for information on use. | 515 | * for information on use. |
| @@ -546,6 +555,16 @@ extern void put_device(struct device *dev); | |||
| 546 | 555 | ||
| 547 | extern void wait_for_device_probe(void); | 556 | extern void wait_for_device_probe(void); |
| 548 | 557 | ||
| 558 | #ifdef CONFIG_DEVTMPFS | ||
| 559 | extern int devtmpfs_create_node(struct device *dev); | ||
| 560 | extern int devtmpfs_delete_node(struct device *dev); | ||
| 561 | extern int devtmpfs_mount(const char *mountpoint); | ||
| 562 | #else | ||
| 563 | static inline int devtmpfs_create_node(struct device *dev) { return 0; } | ||
| 564 | static inline int devtmpfs_delete_node(struct device *dev) { return 0; } | ||
| 565 | static inline int devtmpfs_mount(const char *mountpoint) { return 0; } | ||
| 566 | #endif | ||
| 567 | |||
| 549 | /* drivers/base/power/shutdown.c */ | 568 | /* drivers/base/power/shutdown.c */ |
| 550 | extern void device_shutdown(void); | 569 | extern void device_shutdown(void); |
| 551 | 570 | ||
diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h index 07dfd460d286..91b761846061 100644 --- a/include/linux/dma-mapping.h +++ b/include/linux/dma-mapping.h | |||
| @@ -58,6 +58,7 @@ struct dma_map_ops { | |||
| 58 | enum dma_data_direction dir); | 58 | enum dma_data_direction dir); |
| 59 | int (*mapping_error)(struct device *dev, dma_addr_t dma_addr); | 59 | int (*mapping_error)(struct device *dev, dma_addr_t dma_addr); |
| 60 | int (*dma_supported)(struct device *dev, u64 mask); | 60 | int (*dma_supported)(struct device *dev, u64 mask); |
| 61 | int (*set_dma_mask)(struct device *dev, u64 mask); | ||
| 61 | int is_phys; | 62 | int is_phys; |
| 62 | }; | 63 | }; |
| 63 | 64 | ||
| @@ -98,11 +99,6 @@ static inline int is_device_dma_capable(struct device *dev) | |||
| 98 | return dev->dma_mask != NULL && *dev->dma_mask != DMA_MASK_NONE; | 99 | return dev->dma_mask != NULL && *dev->dma_mask != DMA_MASK_NONE; |
| 99 | } | 100 | } |
| 100 | 101 | ||
| 101 | static inline int is_buffer_dma_capable(u64 mask, dma_addr_t addr, size_t size) | ||
| 102 | { | ||
| 103 | return addr + size <= mask; | ||
| 104 | } | ||
| 105 | |||
| 106 | #ifdef CONFIG_HAS_DMA | 102 | #ifdef CONFIG_HAS_DMA |
| 107 | #include <asm/dma-mapping.h> | 103 | #include <asm/dma-mapping.h> |
| 108 | #else | 104 | #else |
diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h index ffefba81c818..2b9f2ac7ed60 100644 --- a/include/linux/dmaengine.h +++ b/include/linux/dmaengine.h | |||
| @@ -48,19 +48,20 @@ enum dma_status { | |||
| 48 | 48 | ||
| 49 | /** | 49 | /** |
| 50 | * enum dma_transaction_type - DMA transaction types/indexes | 50 | * enum dma_transaction_type - DMA transaction types/indexes |
| 51 | * | ||
| 52 | * Note: The DMA_ASYNC_TX capability is not to be set by drivers. It is | ||
| 53 | * automatically set as dma devices are registered. | ||
| 51 | */ | 54 | */ |
| 52 | enum dma_transaction_type { | 55 | enum dma_transaction_type { |
| 53 | DMA_MEMCPY, | 56 | DMA_MEMCPY, |
| 54 | DMA_XOR, | 57 | DMA_XOR, |
| 55 | DMA_PQ_XOR, | 58 | DMA_PQ, |
| 56 | DMA_DUAL_XOR, | 59 | DMA_XOR_VAL, |
| 57 | DMA_PQ_UPDATE, | 60 | DMA_PQ_VAL, |
| 58 | DMA_ZERO_SUM, | ||
| 59 | DMA_PQ_ZERO_SUM, | ||
| 60 | DMA_MEMSET, | 61 | DMA_MEMSET, |
| 61 | DMA_MEMCPY_CRC32C, | ||
| 62 | DMA_INTERRUPT, | 62 | DMA_INTERRUPT, |
| 63 | DMA_PRIVATE, | 63 | DMA_PRIVATE, |
| 64 | DMA_ASYNC_TX, | ||
| 64 | DMA_SLAVE, | 65 | DMA_SLAVE, |
| 65 | }; | 66 | }; |
| 66 | 67 | ||
| @@ -70,18 +71,25 @@ enum dma_transaction_type { | |||
| 70 | 71 | ||
| 71 | /** | 72 | /** |
| 72 | * enum dma_ctrl_flags - DMA flags to augment operation preparation, | 73 | * enum dma_ctrl_flags - DMA flags to augment operation preparation, |
| 73 | * control completion, and communicate status. | 74 | * control completion, and communicate status. |
| 74 | * @DMA_PREP_INTERRUPT - trigger an interrupt (callback) upon completion of | 75 | * @DMA_PREP_INTERRUPT - trigger an interrupt (callback) upon completion of |
| 75 | * this transaction | 76 | * this transaction |
| 76 | * @DMA_CTRL_ACK - the descriptor cannot be reused until the client | 77 | * @DMA_CTRL_ACK - the descriptor cannot be reused until the client |
| 77 | * acknowledges receipt, i.e. has has a chance to establish any | 78 | * acknowledges receipt, i.e. has has a chance to establish any dependency |
| 78 | * dependency chains | 79 | * chains |
| 79 | * @DMA_COMPL_SKIP_SRC_UNMAP - set to disable dma-unmapping the source buffer(s) | 80 | * @DMA_COMPL_SKIP_SRC_UNMAP - set to disable dma-unmapping the source buffer(s) |
| 80 | * @DMA_COMPL_SKIP_DEST_UNMAP - set to disable dma-unmapping the destination(s) | 81 | * @DMA_COMPL_SKIP_DEST_UNMAP - set to disable dma-unmapping the destination(s) |
| 81 | * @DMA_COMPL_SRC_UNMAP_SINGLE - set to do the source dma-unmapping as single | 82 | * @DMA_COMPL_SRC_UNMAP_SINGLE - set to do the source dma-unmapping as single |
| 82 | * (if not set, do the source dma-unmapping as page) | 83 | * (if not set, do the source dma-unmapping as page) |
| 83 | * @DMA_COMPL_DEST_UNMAP_SINGLE - set to do the destination dma-unmapping as single | 84 | * @DMA_COMPL_DEST_UNMAP_SINGLE - set to do the destination dma-unmapping as single |
| 84 | * (if not set, do the destination dma-unmapping as page) | 85 | * (if not set, do the destination dma-unmapping as page) |
| 86 | * @DMA_PREP_PQ_DISABLE_P - prevent generation of P while generating Q | ||
| 87 | * @DMA_PREP_PQ_DISABLE_Q - prevent generation of Q while generating P | ||
| 88 | * @DMA_PREP_CONTINUE - indicate to a driver that it is reusing buffers as | ||
| 89 | * sources that were the result of a previous operation, in the case of a PQ | ||
| 90 | * operation it continues the calculation with new sources | ||
| 91 | * @DMA_PREP_FENCE - tell the driver that subsequent operations depend | ||
| 92 | * on the result of this operation | ||
| 85 | */ | 93 | */ |
| 86 | enum dma_ctrl_flags { | 94 | enum dma_ctrl_flags { |
| 87 | DMA_PREP_INTERRUPT = (1 << 0), | 95 | DMA_PREP_INTERRUPT = (1 << 0), |
| @@ -90,9 +98,32 @@ enum dma_ctrl_flags { | |||
| 90 | DMA_COMPL_SKIP_DEST_UNMAP = (1 << 3), | 98 | DMA_COMPL_SKIP_DEST_UNMAP = (1 << 3), |
| 91 | DMA_COMPL_SRC_UNMAP_SINGLE = (1 << 4), | 99 | DMA_COMPL_SRC_UNMAP_SINGLE = (1 << 4), |
| 92 | DMA_COMPL_DEST_UNMAP_SINGLE = (1 << 5), | 100 | DMA_COMPL_DEST_UNMAP_SINGLE = (1 << 5), |
| 101 | DMA_PREP_PQ_DISABLE_P = (1 << 6), | ||
| 102 | DMA_PREP_PQ_DISABLE_Q = (1 << 7), | ||
| 103 | DMA_PREP_CONTINUE = (1 << 8), | ||
| 104 | DMA_PREP_FENCE = (1 << 9), | ||
| 93 | }; | 105 | }; |
| 94 | 106 | ||
| 95 | /** | 107 | /** |
| 108 | * enum sum_check_bits - bit position of pq_check_flags | ||
| 109 | */ | ||
| 110 | enum sum_check_bits { | ||
| 111 | SUM_CHECK_P = 0, | ||
| 112 | SUM_CHECK_Q = 1, | ||
| 113 | }; | ||
| 114 | |||
| 115 | /** | ||
| 116 | * enum pq_check_flags - result of async_{xor,pq}_zero_sum operations | ||
| 117 | * @SUM_CHECK_P_RESULT - 1 if xor zero sum error, 0 otherwise | ||
| 118 | * @SUM_CHECK_Q_RESULT - 1 if reed-solomon zero sum error, 0 otherwise | ||
| 119 | */ | ||
| 120 | enum sum_check_flags { | ||
| 121 | SUM_CHECK_P_RESULT = (1 << SUM_CHECK_P), | ||
| 122 | SUM_CHECK_Q_RESULT = (1 << SUM_CHECK_Q), | ||
| 123 | }; | ||
| 124 | |||
| 125 | |||
| 126 | /** | ||
| 96 | * dma_cap_mask_t - capabilities bitmap modeled after cpumask_t. | 127 | * dma_cap_mask_t - capabilities bitmap modeled after cpumask_t. |
| 97 | * See linux/cpumask.h | 128 | * See linux/cpumask.h |
| 98 | */ | 129 | */ |
| @@ -180,8 +211,6 @@ typedef void (*dma_async_tx_callback)(void *dma_async_param); | |||
| 180 | * @flags: flags to augment operation preparation, control completion, and | 211 | * @flags: flags to augment operation preparation, control completion, and |
| 181 | * communicate status | 212 | * communicate status |
| 182 | * @phys: physical address of the descriptor | 213 | * @phys: physical address of the descriptor |
| 183 | * @tx_list: driver common field for operations that require multiple | ||
| 184 | * descriptors | ||
| 185 | * @chan: target channel for this operation | 214 | * @chan: target channel for this operation |
| 186 | * @tx_submit: set the prepared descriptor(s) to be executed by the engine | 215 | * @tx_submit: set the prepared descriptor(s) to be executed by the engine |
| 187 | * @callback: routine to call after this operation is complete | 216 | * @callback: routine to call after this operation is complete |
| @@ -195,7 +224,6 @@ struct dma_async_tx_descriptor { | |||
| 195 | dma_cookie_t cookie; | 224 | dma_cookie_t cookie; |
| 196 | enum dma_ctrl_flags flags; /* not a 'long' to pack with cookie */ | 225 | enum dma_ctrl_flags flags; /* not a 'long' to pack with cookie */ |
| 197 | dma_addr_t phys; | 226 | dma_addr_t phys; |
| 198 | struct list_head tx_list; | ||
| 199 | struct dma_chan *chan; | 227 | struct dma_chan *chan; |
| 200 | dma_cookie_t (*tx_submit)(struct dma_async_tx_descriptor *tx); | 228 | dma_cookie_t (*tx_submit)(struct dma_async_tx_descriptor *tx); |
| 201 | dma_async_tx_callback callback; | 229 | dma_async_tx_callback callback; |
| @@ -213,6 +241,11 @@ struct dma_async_tx_descriptor { | |||
| 213 | * @global_node: list_head for global dma_device_list | 241 | * @global_node: list_head for global dma_device_list |
| 214 | * @cap_mask: one or more dma_capability flags | 242 | * @cap_mask: one or more dma_capability flags |
| 215 | * @max_xor: maximum number of xor sources, 0 if no capability | 243 | * @max_xor: maximum number of xor sources, 0 if no capability |
| 244 | * @max_pq: maximum number of PQ sources and PQ-continue capability | ||
| 245 | * @copy_align: alignment shift for memcpy operations | ||
| 246 | * @xor_align: alignment shift for xor operations | ||
| 247 | * @pq_align: alignment shift for pq operations | ||
| 248 | * @fill_align: alignment shift for memset operations | ||
| 216 | * @dev_id: unique device ID | 249 | * @dev_id: unique device ID |
| 217 | * @dev: struct device reference for dma mapping api | 250 | * @dev: struct device reference for dma mapping api |
| 218 | * @device_alloc_chan_resources: allocate resources and return the | 251 | * @device_alloc_chan_resources: allocate resources and return the |
| @@ -220,7 +253,9 @@ struct dma_async_tx_descriptor { | |||
| 220 | * @device_free_chan_resources: release DMA channel's resources | 253 | * @device_free_chan_resources: release DMA channel's resources |
| 221 | * @device_prep_dma_memcpy: prepares a memcpy operation | 254 | * @device_prep_dma_memcpy: prepares a memcpy operation |
| 222 | * @device_prep_dma_xor: prepares a xor operation | 255 | * @device_prep_dma_xor: prepares a xor operation |
| 223 | * @device_prep_dma_zero_sum: prepares a zero_sum operation | 256 | * @device_prep_dma_xor_val: prepares a xor validation operation |
| 257 | * @device_prep_dma_pq: prepares a pq operation | ||
| 258 | * @device_prep_dma_pq_val: prepares a pqzero_sum operation | ||
| 224 | * @device_prep_dma_memset: prepares a memset operation | 259 | * @device_prep_dma_memset: prepares a memset operation |
| 225 | * @device_prep_dma_interrupt: prepares an end of chain interrupt operation | 260 | * @device_prep_dma_interrupt: prepares an end of chain interrupt operation |
| 226 | * @device_prep_slave_sg: prepares a slave dma operation | 261 | * @device_prep_slave_sg: prepares a slave dma operation |
| @@ -235,7 +270,13 @@ struct dma_device { | |||
| 235 | struct list_head channels; | 270 | struct list_head channels; |
| 236 | struct list_head global_node; | 271 | struct list_head global_node; |
| 237 | dma_cap_mask_t cap_mask; | 272 | dma_cap_mask_t cap_mask; |
| 238 | int max_xor; | 273 | unsigned short max_xor; |
| 274 | unsigned short max_pq; | ||
| 275 | u8 copy_align; | ||
| 276 | u8 xor_align; | ||
| 277 | u8 pq_align; | ||
| 278 | u8 fill_align; | ||
| 279 | #define DMA_HAS_PQ_CONTINUE (1 << 15) | ||
| 239 | 280 | ||
| 240 | int dev_id; | 281 | int dev_id; |
| 241 | struct device *dev; | 282 | struct device *dev; |
| @@ -249,9 +290,17 @@ struct dma_device { | |||
| 249 | struct dma_async_tx_descriptor *(*device_prep_dma_xor)( | 290 | struct dma_async_tx_descriptor *(*device_prep_dma_xor)( |
| 250 | struct dma_chan *chan, dma_addr_t dest, dma_addr_t *src, | 291 | struct dma_chan *chan, dma_addr_t dest, dma_addr_t *src, |
| 251 | unsigned int src_cnt, size_t len, unsigned long flags); | 292 | unsigned int src_cnt, size_t len, unsigned long flags); |
| 252 | struct dma_async_tx_descriptor *(*device_prep_dma_zero_sum)( | 293 | struct dma_async_tx_descriptor *(*device_prep_dma_xor_val)( |
| 253 | struct dma_chan *chan, dma_addr_t *src, unsigned int src_cnt, | 294 | struct dma_chan *chan, dma_addr_t *src, unsigned int src_cnt, |
| 254 | size_t len, u32 *result, unsigned long flags); | 295 | size_t len, enum sum_check_flags *result, unsigned long flags); |
| 296 | struct dma_async_tx_descriptor *(*device_prep_dma_pq)( | ||
| 297 | struct dma_chan *chan, dma_addr_t *dst, dma_addr_t *src, | ||
| 298 | unsigned int src_cnt, const unsigned char *scf, | ||
| 299 | size_t len, unsigned long flags); | ||
| 300 | struct dma_async_tx_descriptor *(*device_prep_dma_pq_val)( | ||
| 301 | struct dma_chan *chan, dma_addr_t *pq, dma_addr_t *src, | ||
| 302 | unsigned int src_cnt, const unsigned char *scf, size_t len, | ||
| 303 | enum sum_check_flags *pqres, unsigned long flags); | ||
| 255 | struct dma_async_tx_descriptor *(*device_prep_dma_memset)( | 304 | struct dma_async_tx_descriptor *(*device_prep_dma_memset)( |
| 256 | struct dma_chan *chan, dma_addr_t dest, int value, size_t len, | 305 | struct dma_chan *chan, dma_addr_t dest, int value, size_t len, |
| 257 | unsigned long flags); | 306 | unsigned long flags); |
| @@ -270,6 +319,96 @@ struct dma_device { | |||
| 270 | void (*device_issue_pending)(struct dma_chan *chan); | 319 | void (*device_issue_pending)(struct dma_chan *chan); |
| 271 | }; | 320 | }; |
| 272 | 321 | ||
| 322 | static inline bool dmaengine_check_align(u8 align, size_t off1, size_t off2, size_t len) | ||
| 323 | { | ||
| 324 | size_t mask; | ||
| 325 | |||
| 326 | if (!align) | ||
| 327 | return true; | ||
| 328 | mask = (1 << align) - 1; | ||
| 329 | if (mask & (off1 | off2 | len)) | ||
| 330 | return false; | ||
| 331 | return true; | ||
| 332 | } | ||
| 333 | |||
| 334 | static inline bool is_dma_copy_aligned(struct dma_device *dev, size_t off1, | ||
| 335 | size_t off2, size_t len) | ||
| 336 | { | ||
| 337 | return dmaengine_check_align(dev->copy_align, off1, off2, len); | ||
| 338 | } | ||
| 339 | |||
| 340 | static inline bool is_dma_xor_aligned(struct dma_device *dev, size_t off1, | ||
| 341 | size_t off2, size_t len) | ||
| 342 | { | ||
| 343 | return dmaengine_check_align(dev->xor_align, off1, off2, len); | ||
| 344 | } | ||
| 345 | |||
| 346 | static inline bool is_dma_pq_aligned(struct dma_device *dev, size_t off1, | ||
| 347 | size_t off2, size_t len) | ||
| 348 | { | ||
| 349 | return dmaengine_check_align(dev->pq_align, off1, off2, len); | ||
| 350 | } | ||
| 351 | |||
| 352 | static inline bool is_dma_fill_aligned(struct dma_device *dev, size_t off1, | ||
| 353 | size_t off2, size_t len) | ||
| 354 | { | ||
| 355 | return dmaengine_check_align(dev->fill_align, off1, off2, len); | ||
| 356 | } | ||
| 357 | |||
| 358 | static inline void | ||
| 359 | dma_set_maxpq(struct dma_device *dma, int maxpq, int has_pq_continue) | ||
| 360 | { | ||
| 361 | dma->max_pq = maxpq; | ||
| 362 | if (has_pq_continue) | ||
| 363 | dma->max_pq |= DMA_HAS_PQ_CONTINUE; | ||
| 364 | } | ||
| 365 | |||
| 366 | static inline bool dmaf_continue(enum dma_ctrl_flags flags) | ||
| 367 | { | ||
| 368 | return (flags & DMA_PREP_CONTINUE) == DMA_PREP_CONTINUE; | ||
| 369 | } | ||
| 370 | |||
| 371 | static inline bool dmaf_p_disabled_continue(enum dma_ctrl_flags flags) | ||
| 372 | { | ||
| 373 | enum dma_ctrl_flags mask = DMA_PREP_CONTINUE | DMA_PREP_PQ_DISABLE_P; | ||
| 374 | |||
| 375 | return (flags & mask) == mask; | ||
| 376 | } | ||
| 377 | |||
| 378 | static inline bool dma_dev_has_pq_continue(struct dma_device *dma) | ||
| 379 | { | ||
| 380 | return (dma->max_pq & DMA_HAS_PQ_CONTINUE) == DMA_HAS_PQ_CONTINUE; | ||
| 381 | } | ||
| 382 | |||
| 383 | static unsigned short dma_dev_to_maxpq(struct dma_device *dma) | ||
| 384 | { | ||
| 385 | return dma->max_pq & ~DMA_HAS_PQ_CONTINUE; | ||
| 386 | } | ||
| 387 | |||
| 388 | /* dma_maxpq - reduce maxpq in the face of continued operations | ||
| 389 | * @dma - dma device with PQ capability | ||
| 390 | * @flags - to check if DMA_PREP_CONTINUE and DMA_PREP_PQ_DISABLE_P are set | ||
| 391 | * | ||
| 392 | * When an engine does not support native continuation we need 3 extra | ||
| 393 | * source slots to reuse P and Q with the following coefficients: | ||
| 394 | * 1/ {00} * P : remove P from Q', but use it as a source for P' | ||
| 395 | * 2/ {01} * Q : use Q to continue Q' calculation | ||
| 396 | * 3/ {00} * Q : subtract Q from P' to cancel (2) | ||
| 397 | * | ||
| 398 | * In the case where P is disabled we only need 1 extra source: | ||
| 399 | * 1/ {01} * Q : use Q to continue Q' calculation | ||
| 400 | */ | ||
| 401 | static inline int dma_maxpq(struct dma_device *dma, enum dma_ctrl_flags flags) | ||
| 402 | { | ||
| 403 | if (dma_dev_has_pq_continue(dma) || !dmaf_continue(flags)) | ||
| 404 | return dma_dev_to_maxpq(dma); | ||
| 405 | else if (dmaf_p_disabled_continue(flags)) | ||
| 406 | return dma_dev_to_maxpq(dma) - 1; | ||
| 407 | else if (dmaf_continue(flags)) | ||
| 408 | return dma_dev_to_maxpq(dma) - 3; | ||
| 409 | BUG(); | ||
| 410 | } | ||
| 411 | |||
| 273 | /* --- public DMA engine API --- */ | 412 | /* --- public DMA engine API --- */ |
| 274 | 413 | ||
| 275 | #ifdef CONFIG_DMA_ENGINE | 414 | #ifdef CONFIG_DMA_ENGINE |
| @@ -299,7 +438,11 @@ static inline void net_dmaengine_put(void) | |||
| 299 | #ifdef CONFIG_ASYNC_TX_DMA | 438 | #ifdef CONFIG_ASYNC_TX_DMA |
| 300 | #define async_dmaengine_get() dmaengine_get() | 439 | #define async_dmaengine_get() dmaengine_get() |
| 301 | #define async_dmaengine_put() dmaengine_put() | 440 | #define async_dmaengine_put() dmaengine_put() |
| 441 | #ifdef CONFIG_ASYNC_TX_DISABLE_CHANNEL_SWITCH | ||
| 442 | #define async_dma_find_channel(type) dma_find_channel(DMA_ASYNC_TX) | ||
| 443 | #else | ||
| 302 | #define async_dma_find_channel(type) dma_find_channel(type) | 444 | #define async_dma_find_channel(type) dma_find_channel(type) |
| 445 | #endif /* CONFIG_ASYNC_TX_DISABLE_CHANNEL_SWITCH */ | ||
| 303 | #else | 446 | #else |
| 304 | static inline void async_dmaengine_get(void) | 447 | static inline void async_dmaengine_get(void) |
| 305 | { | 448 | { |
| @@ -312,7 +455,7 @@ async_dma_find_channel(enum dma_transaction_type type) | |||
| 312 | { | 455 | { |
| 313 | return NULL; | 456 | return NULL; |
| 314 | } | 457 | } |
| 315 | #endif | 458 | #endif /* CONFIG_ASYNC_TX_DMA */ |
| 316 | 459 | ||
| 317 | dma_cookie_t dma_async_memcpy_buf_to_buf(struct dma_chan *chan, | 460 | dma_cookie_t dma_async_memcpy_buf_to_buf(struct dma_chan *chan, |
| 318 | void *dest, void *src, size_t len); | 461 | void *dest, void *src, size_t len); |
diff --git a/include/linux/dmar.h b/include/linux/dmar.h index 4a2b162c256a..5de4c9e5856d 100644 --- a/include/linux/dmar.h +++ b/include/linux/dmar.h | |||
| @@ -208,16 +208,9 @@ struct dmar_atsr_unit { | |||
| 208 | u8 include_all:1; /* include all ports */ | 208 | u8 include_all:1; /* include all ports */ |
| 209 | }; | 209 | }; |
| 210 | 210 | ||
| 211 | /* Intel DMAR initialization functions */ | ||
| 212 | extern int intel_iommu_init(void); | 211 | extern int intel_iommu_init(void); |
| 213 | #else | 212 | #else /* !CONFIG_DMAR: */ |
| 214 | static inline int intel_iommu_init(void) | 213 | static inline int intel_iommu_init(void) { return -ENODEV; } |
| 215 | { | 214 | #endif /* CONFIG_DMAR */ |
| 216 | #ifdef CONFIG_INTR_REMAP | 215 | |
| 217 | return dmar_dev_scope_init(); | ||
| 218 | #else | ||
| 219 | return -ENODEV; | ||
| 220 | #endif | ||
| 221 | } | ||
| 222 | #endif /* !CONFIG_DMAR */ | ||
| 223 | #endif /* __DMAR_H__ */ | 216 | #endif /* __DMAR_H__ */ |
diff --git a/include/linux/dmi.h b/include/linux/dmi.h index bb5489c82c99..a8a3e1ac281d 100644 --- a/include/linux/dmi.h +++ b/include/linux/dmi.h | |||
| @@ -43,7 +43,7 @@ extern const char * dmi_get_system_info(int field); | |||
| 43 | extern const struct dmi_device * dmi_find_device(int type, const char *name, | 43 | extern const struct dmi_device * dmi_find_device(int type, const char *name, |
| 44 | const struct dmi_device *from); | 44 | const struct dmi_device *from); |
| 45 | extern void dmi_scan_machine(void); | 45 | extern void dmi_scan_machine(void); |
| 46 | extern int dmi_get_year(int field); | 46 | extern bool dmi_get_date(int field, int *yearp, int *monthp, int *dayp); |
| 47 | extern int dmi_name_in_vendors(const char *str); | 47 | extern int dmi_name_in_vendors(const char *str); |
| 48 | extern int dmi_name_in_serial(const char *str); | 48 | extern int dmi_name_in_serial(const char *str); |
| 49 | extern int dmi_available; | 49 | extern int dmi_available; |
| @@ -58,7 +58,16 @@ static inline const char * dmi_get_system_info(int field) { return NULL; } | |||
| 58 | static inline const struct dmi_device * dmi_find_device(int type, const char *name, | 58 | static inline const struct dmi_device * dmi_find_device(int type, const char *name, |
| 59 | const struct dmi_device *from) { return NULL; } | 59 | const struct dmi_device *from) { return NULL; } |
| 60 | static inline void dmi_scan_machine(void) { return; } | 60 | static inline void dmi_scan_machine(void) { return; } |
| 61 | static inline int dmi_get_year(int year) { return 0; } | 61 | static inline bool dmi_get_date(int field, int *yearp, int *monthp, int *dayp) |
| 62 | { | ||
| 63 | if (yearp) | ||
| 64 | *yearp = 0; | ||
| 65 | if (monthp) | ||
| 66 | *monthp = 0; | ||
| 67 | if (dayp) | ||
| 68 | *dayp = 0; | ||
| 69 | return false; | ||
| 70 | } | ||
| 62 | static inline int dmi_name_in_vendors(const char *s) { return 0; } | 71 | static inline int dmi_name_in_vendors(const char *s) { return 0; } |
| 63 | static inline int dmi_name_in_serial(const char *s) { return 0; } | 72 | static inline int dmi_name_in_serial(const char *s) { return 0; } |
| 64 | #define dmi_available 0 | 73 | #define dmi_available 0 |
diff --git a/include/linux/dn.h b/include/linux/dn.h index fe9990823193..9c50445462d9 100644 --- a/include/linux/dn.h +++ b/include/linux/dn.h | |||
| @@ -71,14 +71,12 @@ | |||
| 71 | /* Structures */ | 71 | /* Structures */ |
| 72 | 72 | ||
| 73 | 73 | ||
| 74 | struct dn_naddr | 74 | struct dn_naddr { |
| 75 | { | ||
| 76 | __le16 a_len; | 75 | __le16 a_len; |
| 77 | __u8 a_addr[DN_MAXADDL]; /* Two bytes little endian */ | 76 | __u8 a_addr[DN_MAXADDL]; /* Two bytes little endian */ |
| 78 | }; | 77 | }; |
| 79 | 78 | ||
| 80 | struct sockaddr_dn | 79 | struct sockaddr_dn { |
| 81 | { | ||
| 82 | __u16 sdn_family; | 80 | __u16 sdn_family; |
| 83 | __u8 sdn_flags; | 81 | __u8 sdn_flags; |
| 84 | __u8 sdn_objnum; | 82 | __u8 sdn_objnum; |
| @@ -101,8 +99,7 @@ struct optdata_dn { | |||
| 101 | __u8 opt_data[16]; /* User data */ | 99 | __u8 opt_data[16]; /* User data */ |
| 102 | }; | 100 | }; |
| 103 | 101 | ||
| 104 | struct accessdata_dn | 102 | struct accessdata_dn { |
| 105 | { | ||
| 106 | __u8 acc_accl; | 103 | __u8 acc_accl; |
| 107 | __u8 acc_acc[DN_MAXACCL]; | 104 | __u8 acc_acc[DN_MAXACCL]; |
| 108 | __u8 acc_passl; | 105 | __u8 acc_passl; |
diff --git a/include/linux/dtlk.h b/include/linux/dtlk.h index 2896d90118a9..22a7b9a5f5d1 100644 --- a/include/linux/dtlk.h +++ b/include/linux/dtlk.h | |||
| @@ -1,22 +1,3 @@ | |||
| 1 | #if 0 | ||
| 2 | |||
| 3 | #define TRACE_TXT(text) \ | ||
| 4 | { \ | ||
| 5 | if(dtlk_trace) \ | ||
| 6 | { \ | ||
| 7 | console_print(text); \ | ||
| 8 | console_print("\n"); \ | ||
| 9 | } \ | ||
| 10 | } | ||
| 11 | |||
| 12 | #define TRACE_CHR(chr) \ | ||
| 13 | { \ | ||
| 14 | if(dtlk_trace) \ | ||
| 15 | console_print(chr); \ | ||
| 16 | } \ | ||
| 17 | |||
| 18 | #endif | ||
| 19 | |||
| 20 | #define DTLK_MINOR 0 | 1 | #define DTLK_MINOR 0 |
| 21 | #define DTLK_IO_EXTENT 0x02 | 2 | #define DTLK_IO_EXTENT 0x02 |
| 22 | 3 | ||
diff --git a/include/linux/dvb/dmx.h b/include/linux/dvb/dmx.h index fef943738a24..f078f3ac82d4 100644 --- a/include/linux/dvb/dmx.h +++ b/include/linux/dvb/dmx.h | |||
| @@ -151,5 +151,7 @@ struct dmx_stc { | |||
| 151 | #define DMX_GET_CAPS _IOR('o', 48, dmx_caps_t) | 151 | #define DMX_GET_CAPS _IOR('o', 48, dmx_caps_t) |
| 152 | #define DMX_SET_SOURCE _IOW('o', 49, dmx_source_t) | 152 | #define DMX_SET_SOURCE _IOW('o', 49, dmx_source_t) |
| 153 | #define DMX_GET_STC _IOWR('o', 50, struct dmx_stc) | 153 | #define DMX_GET_STC _IOWR('o', 50, struct dmx_stc) |
| 154 | #define DMX_ADD_PID _IOW('o', 51, __u16) | ||
| 155 | #define DMX_REMOVE_PID _IOW('o', 52, __u16) | ||
| 154 | 156 | ||
| 155 | #endif /*_DVBDMX_H_*/ | 157 | #endif /*_DVBDMX_H_*/ |
diff --git a/include/linux/dvb/frontend.h b/include/linux/dvb/frontend.h index 51c8d2d49e42..b6cb5425cde3 100644 --- a/include/linux/dvb/frontend.h +++ b/include/linux/dvb/frontend.h | |||
| @@ -173,7 +173,8 @@ typedef enum fe_modulation { | |||
| 173 | typedef enum fe_transmit_mode { | 173 | typedef enum fe_transmit_mode { |
| 174 | TRANSMISSION_MODE_2K, | 174 | TRANSMISSION_MODE_2K, |
| 175 | TRANSMISSION_MODE_8K, | 175 | TRANSMISSION_MODE_8K, |
| 176 | TRANSMISSION_MODE_AUTO | 176 | TRANSMISSION_MODE_AUTO, |
| 177 | TRANSMISSION_MODE_4K | ||
| 177 | } fe_transmit_mode_t; | 178 | } fe_transmit_mode_t; |
| 178 | 179 | ||
| 179 | typedef enum fe_bandwidth { | 180 | typedef enum fe_bandwidth { |
| @@ -268,15 +269,42 @@ struct dvb_frontend_event { | |||
| 268 | #define DTV_FE_CAPABILITY 16 | 269 | #define DTV_FE_CAPABILITY 16 |
| 269 | #define DTV_DELIVERY_SYSTEM 17 | 270 | #define DTV_DELIVERY_SYSTEM 17 |
| 270 | 271 | ||
| 271 | #define DTV_API_VERSION 35 | 272 | /* ISDB-T and ISDB-Tsb */ |
| 272 | #define DTV_API_VERSION 35 | 273 | #define DTV_ISDBT_PARTIAL_RECEPTION 18 |
| 273 | #define DTV_CODE_RATE_HP 36 | 274 | #define DTV_ISDBT_SOUND_BROADCASTING 19 |
| 274 | #define DTV_CODE_RATE_LP 37 | ||
| 275 | #define DTV_GUARD_INTERVAL 38 | ||
| 276 | #define DTV_TRANSMISSION_MODE 39 | ||
| 277 | #define DTV_HIERARCHY 40 | ||
| 278 | 275 | ||
| 279 | #define DTV_MAX_COMMAND DTV_HIERARCHY | 276 | #define DTV_ISDBT_SB_SUBCHANNEL_ID 20 |
| 277 | #define DTV_ISDBT_SB_SEGMENT_IDX 21 | ||
| 278 | #define DTV_ISDBT_SB_SEGMENT_COUNT 22 | ||
| 279 | |||
| 280 | #define DTV_ISDBT_LAYERA_FEC 23 | ||
| 281 | #define DTV_ISDBT_LAYERA_MODULATION 24 | ||
| 282 | #define DTV_ISDBT_LAYERA_SEGMENT_COUNT 25 | ||
| 283 | #define DTV_ISDBT_LAYERA_TIME_INTERLEAVING 26 | ||
| 284 | |||
| 285 | #define DTV_ISDBT_LAYERB_FEC 27 | ||
| 286 | #define DTV_ISDBT_LAYERB_MODULATION 28 | ||
| 287 | #define DTV_ISDBT_LAYERB_SEGMENT_COUNT 29 | ||
| 288 | #define DTV_ISDBT_LAYERB_TIME_INTERLEAVING 30 | ||
| 289 | |||
| 290 | #define DTV_ISDBT_LAYERC_FEC 31 | ||
| 291 | #define DTV_ISDBT_LAYERC_MODULATION 32 | ||
| 292 | #define DTV_ISDBT_LAYERC_SEGMENT_COUNT 33 | ||
| 293 | #define DTV_ISDBT_LAYERC_TIME_INTERLEAVING 34 | ||
| 294 | |||
| 295 | #define DTV_API_VERSION 35 | ||
| 296 | |||
| 297 | #define DTV_CODE_RATE_HP 36 | ||
| 298 | #define DTV_CODE_RATE_LP 37 | ||
| 299 | #define DTV_GUARD_INTERVAL 38 | ||
| 300 | #define DTV_TRANSMISSION_MODE 39 | ||
| 301 | #define DTV_HIERARCHY 40 | ||
| 302 | |||
| 303 | #define DTV_ISDBT_LAYER_ENABLED 41 | ||
| 304 | |||
| 305 | #define DTV_ISDBS_TS_ID 42 | ||
| 306 | |||
| 307 | #define DTV_MAX_COMMAND DTV_ISDBS_TS_ID | ||
| 280 | 308 | ||
| 281 | typedef enum fe_pilot { | 309 | typedef enum fe_pilot { |
| 282 | PILOT_ON, | 310 | PILOT_ON, |
diff --git a/include/linux/dvb/version.h b/include/linux/dvb/version.h index 25b823b81734..540b0583d9fb 100644 --- a/include/linux/dvb/version.h +++ b/include/linux/dvb/version.h | |||
| @@ -24,6 +24,6 @@ | |||
| 24 | #define _DVBVERSION_H_ | 24 | #define _DVBVERSION_H_ |
| 25 | 25 | ||
| 26 | #define DVB_API_VERSION 5 | 26 | #define DVB_API_VERSION 5 |
| 27 | #define DVB_API_VERSION_MINOR 0 | 27 | #define DVB_API_VERSION_MINOR 1 |
| 28 | 28 | ||
| 29 | #endif /*_DVBVERSION_H_*/ | 29 | #endif /*_DVBVERSION_H_*/ |
diff --git a/include/linux/elf.h b/include/linux/elf.h index 45a937be6d38..90a4ed0ea0e5 100644 --- a/include/linux/elf.h +++ b/include/linux/elf.h | |||
| @@ -361,6 +361,7 @@ typedef struct elf64_shdr { | |||
| 361 | #define NT_PPC_VSX 0x102 /* PowerPC VSX registers */ | 361 | #define NT_PPC_VSX 0x102 /* PowerPC VSX registers */ |
| 362 | #define NT_386_TLS 0x200 /* i386 TLS slots (struct user_desc) */ | 362 | #define NT_386_TLS 0x200 /* i386 TLS slots (struct user_desc) */ |
| 363 | #define NT_386_IOPERM 0x201 /* x86 io permission bitmap (1=deny) */ | 363 | #define NT_386_IOPERM 0x201 /* x86 io permission bitmap (1=deny) */ |
| 364 | #define NT_PRXSTATUS 0x300 /* s390 upper register halves */ | ||
| 364 | 365 | ||
| 365 | 366 | ||
| 366 | /* Note header in a PT_NOTE section */ | 367 | /* Note header in a PT_NOTE section */ |
diff --git a/include/linux/enclosure.h b/include/linux/enclosure.h index 4332442b1b57..90d1c2184112 100644 --- a/include/linux/enclosure.h +++ b/include/linux/enclosure.h | |||
| @@ -122,8 +122,9 @@ enclosure_component_register(struct enclosure_device *, unsigned int, | |||
| 122 | enum enclosure_component_type, const char *); | 122 | enum enclosure_component_type, const char *); |
| 123 | int enclosure_add_device(struct enclosure_device *enclosure, int component, | 123 | int enclosure_add_device(struct enclosure_device *enclosure, int component, |
| 124 | struct device *dev); | 124 | struct device *dev); |
| 125 | int enclosure_remove_device(struct enclosure_device *enclosure, int component); | 125 | int enclosure_remove_device(struct enclosure_device *, struct device *); |
| 126 | struct enclosure_device *enclosure_find(struct device *dev); | 126 | struct enclosure_device *enclosure_find(struct device *dev, |
| 127 | struct enclosure_device *start); | ||
| 127 | int enclosure_for_each_device(int (*fn)(struct enclosure_device *, void *), | 128 | int enclosure_for_each_device(int (*fn)(struct enclosure_device *, void *), |
| 128 | void *data); | 129 | void *data); |
| 129 | 130 | ||
diff --git a/include/linux/errqueue.h b/include/linux/errqueue.h index ec12cc74366f..034072cea853 100644 --- a/include/linux/errqueue.h +++ b/include/linux/errqueue.h | |||
| @@ -3,8 +3,7 @@ | |||
| 3 | 3 | ||
| 4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
| 5 | 5 | ||
| 6 | struct sock_extended_err | 6 | struct sock_extended_err { |
| 7 | { | ||
| 8 | __u32 ee_errno; | 7 | __u32 ee_errno; |
| 9 | __u8 ee_origin; | 8 | __u8 ee_origin; |
| 10 | __u8 ee_type; | 9 | __u8 ee_type; |
| @@ -31,8 +30,7 @@ struct sock_extended_err | |||
| 31 | 30 | ||
| 32 | #define SKB_EXT_ERR(skb) ((struct sock_exterr_skb *) ((skb)->cb)) | 31 | #define SKB_EXT_ERR(skb) ((struct sock_exterr_skb *) ((skb)->cb)) |
| 33 | 32 | ||
| 34 | struct sock_exterr_skb | 33 | struct sock_exterr_skb { |
| 35 | { | ||
| 36 | union { | 34 | union { |
| 37 | struct inet_skb_parm h4; | 35 | struct inet_skb_parm h4; |
| 38 | #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) | 36 | #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) |
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h index 9b660bd2e2b3..ef4a2d84d922 100644 --- a/include/linux/ethtool.h +++ b/include/linux/ethtool.h | |||
| @@ -49,13 +49,14 @@ static inline __u32 ethtool_cmd_speed(struct ethtool_cmd *ep) | |||
| 49 | return (ep->speed_hi << 16) | ep->speed; | 49 | return (ep->speed_hi << 16) | ep->speed; |
| 50 | } | 50 | } |
| 51 | 51 | ||
| 52 | #define ETHTOOL_FWVERS_LEN 32 | ||
| 52 | #define ETHTOOL_BUSINFO_LEN 32 | 53 | #define ETHTOOL_BUSINFO_LEN 32 |
| 53 | /* these strings are set to whatever the driver author decides... */ | 54 | /* these strings are set to whatever the driver author decides... */ |
| 54 | struct ethtool_drvinfo { | 55 | struct ethtool_drvinfo { |
| 55 | __u32 cmd; | 56 | __u32 cmd; |
| 56 | char driver[32]; /* driver short name, "tulip", "eepro100" */ | 57 | char driver[32]; /* driver short name, "tulip", "eepro100" */ |
| 57 | char version[32]; /* driver version string */ | 58 | char version[32]; /* driver version string */ |
| 58 | char fw_version[32]; /* firmware version string, if applicable */ | 59 | char fw_version[ETHTOOL_FWVERS_LEN]; /* firmware version string */ |
| 59 | char bus_info[ETHTOOL_BUSINFO_LEN]; /* Bus info for this IF. */ | 60 | char bus_info[ETHTOOL_BUSINFO_LEN]; /* Bus info for this IF. */ |
| 60 | /* For PCI devices, use pci_name(pci_dev). */ | 61 | /* For PCI devices, use pci_name(pci_dev). */ |
| 61 | char reserved1[32]; | 62 | char reserved1[32]; |
| @@ -362,12 +363,25 @@ struct ethtool_rxnfc { | |||
| 362 | __u32 rule_locs[0]; | 363 | __u32 rule_locs[0]; |
| 363 | }; | 364 | }; |
| 364 | 365 | ||
| 366 | #define ETHTOOL_FLASH_MAX_FILENAME 128 | ||
| 367 | enum ethtool_flash_op_type { | ||
| 368 | ETHTOOL_FLASH_ALL_REGIONS = 0, | ||
| 369 | }; | ||
| 370 | |||
| 371 | /* for passing firmware flashing related parameters */ | ||
| 372 | struct ethtool_flash { | ||
| 373 | __u32 cmd; | ||
| 374 | __u32 region; | ||
| 375 | char data[ETHTOOL_FLASH_MAX_FILENAME]; | ||
| 376 | }; | ||
| 377 | |||
| 365 | #ifdef __KERNEL__ | 378 | #ifdef __KERNEL__ |
| 366 | 379 | ||
| 367 | struct net_device; | 380 | struct net_device; |
| 368 | 381 | ||
| 369 | /* Some generic methods drivers may use in their ethtool_ops */ | 382 | /* Some generic methods drivers may use in their ethtool_ops */ |
| 370 | u32 ethtool_op_get_link(struct net_device *dev); | 383 | u32 ethtool_op_get_link(struct net_device *dev); |
| 384 | u32 ethtool_op_get_rx_csum(struct net_device *dev); | ||
| 371 | u32 ethtool_op_get_tx_csum(struct net_device *dev); | 385 | u32 ethtool_op_get_tx_csum(struct net_device *dev); |
| 372 | int ethtool_op_set_tx_csum(struct net_device *dev, u32 data); | 386 | int ethtool_op_set_tx_csum(struct net_device *dev, u32 data); |
| 373 | int ethtool_op_set_tx_hw_csum(struct net_device *dev, u32 data); | 387 | int ethtool_op_set_tx_hw_csum(struct net_device *dev, u32 data); |
| @@ -482,12 +496,10 @@ struct ethtool_ops { | |||
| 482 | u32 (*get_priv_flags)(struct net_device *); | 496 | u32 (*get_priv_flags)(struct net_device *); |
| 483 | int (*set_priv_flags)(struct net_device *, u32); | 497 | int (*set_priv_flags)(struct net_device *, u32); |
| 484 | int (*get_sset_count)(struct net_device *, int); | 498 | int (*get_sset_count)(struct net_device *, int); |
| 485 | |||
| 486 | /* the following hooks are obsolete */ | ||
| 487 | int (*self_test_count)(struct net_device *);/* use get_sset_count */ | ||
| 488 | int (*get_stats_count)(struct net_device *);/* use get_sset_count */ | ||
| 489 | int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, void *); | 499 | int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, void *); |
| 490 | int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *); | 500 | int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *); |
| 501 | int (*flash_device)(struct net_device *, struct ethtool_flash *); | ||
| 502 | int (*reset)(struct net_device *, u32 *); | ||
| 491 | }; | 503 | }; |
| 492 | #endif /* __KERNEL__ */ | 504 | #endif /* __KERNEL__ */ |
| 493 | 505 | ||
| @@ -544,6 +556,8 @@ struct ethtool_ops { | |||
| 544 | #define ETHTOOL_GRXCLSRLALL 0x00000030 /* Get all RX classification rule */ | 556 | #define ETHTOOL_GRXCLSRLALL 0x00000030 /* Get all RX classification rule */ |
| 545 | #define ETHTOOL_SRXCLSRLDEL 0x00000031 /* Delete RX classification rule */ | 557 | #define ETHTOOL_SRXCLSRLDEL 0x00000031 /* Delete RX classification rule */ |
| 546 | #define ETHTOOL_SRXCLSRLINS 0x00000032 /* Insert RX classification rule */ | 558 | #define ETHTOOL_SRXCLSRLINS 0x00000032 /* Insert RX classification rule */ |
| 559 | #define ETHTOOL_FLASHDEV 0x00000033 /* Flash firmware to device */ | ||
| 560 | #define ETHTOOL_RESET 0x00000034 /* Reset hardware */ | ||
| 547 | 561 | ||
| 548 | /* compatibility with older code */ | 562 | /* compatibility with older code */ |
| 549 | #define SPARC_ETH_GSET ETHTOOL_GSET | 563 | #define SPARC_ETH_GSET ETHTOOL_GSET |
| @@ -618,6 +632,8 @@ struct ethtool_ops { | |||
| 618 | #define PORT_MII 0x02 | 632 | #define PORT_MII 0x02 |
| 619 | #define PORT_FIBRE 0x03 | 633 | #define PORT_FIBRE 0x03 |
| 620 | #define PORT_BNC 0x04 | 634 | #define PORT_BNC 0x04 |
| 635 | #define PORT_DA 0x05 | ||
| 636 | #define PORT_NONE 0xef | ||
| 621 | #define PORT_OTHER 0xff | 637 | #define PORT_OTHER 0xff |
| 622 | 638 | ||
| 623 | /* Which transceiver to use. */ | 639 | /* Which transceiver to use. */ |
| @@ -661,6 +677,8 @@ struct ethtool_ops { | |||
| 661 | #define AH_V6_FLOW 0x0b | 677 | #define AH_V6_FLOW 0x0b |
| 662 | #define ESP_V6_FLOW 0x0c | 678 | #define ESP_V6_FLOW 0x0c |
| 663 | #define IP_USER_FLOW 0x0d | 679 | #define IP_USER_FLOW 0x0d |
| 680 | #define IPV4_FLOW 0x10 | ||
| 681 | #define IPV6_FLOW 0x11 | ||
| 664 | 682 | ||
| 665 | /* L3-L4 network traffic flow hash options */ | 683 | /* L3-L4 network traffic flow hash options */ |
| 666 | #define RXH_L2DA (1 << 1) | 684 | #define RXH_L2DA (1 << 1) |
| @@ -674,4 +692,34 @@ struct ethtool_ops { | |||
| 674 | 692 | ||
| 675 | #define RX_CLS_FLOW_DISC 0xffffffffffffffffULL | 693 | #define RX_CLS_FLOW_DISC 0xffffffffffffffffULL |
| 676 | 694 | ||
| 695 | /* Reset flags */ | ||
| 696 | /* The reset() operation must clear the flags for the components which | ||
| 697 | * were actually reset. On successful return, the flags indicate the | ||
| 698 | * components which were not reset, either because they do not exist | ||
| 699 | * in the hardware or because they cannot be reset independently. The | ||
| 700 | * driver must never reset any components that were not requested. | ||
| 701 | */ | ||
| 702 | enum ethtool_reset_flags { | ||
| 703 | /* These flags represent components dedicated to the interface | ||
| 704 | * the command is addressed to. Shift any flag left by | ||
| 705 | * ETH_RESET_SHARED_SHIFT to reset a shared component of the | ||
| 706 | * same type. | ||
| 707 | */ | ||
| 708 | ETH_RESET_MGMT = 1 << 0, /* Management processor */ | ||
| 709 | ETH_RESET_IRQ = 1 << 1, /* Interrupt requester */ | ||
| 710 | ETH_RESET_DMA = 1 << 2, /* DMA engine */ | ||
| 711 | ETH_RESET_FILTER = 1 << 3, /* Filtering/flow direction */ | ||
| 712 | ETH_RESET_OFFLOAD = 1 << 4, /* Protocol offload */ | ||
| 713 | ETH_RESET_MAC = 1 << 5, /* Media access controller */ | ||
| 714 | ETH_RESET_PHY = 1 << 6, /* Transceiver/PHY */ | ||
| 715 | ETH_RESET_RAM = 1 << 7, /* RAM shared between | ||
| 716 | * multiple components */ | ||
| 717 | |||
| 718 | ETH_RESET_DEDICATED = 0x0000ffff, /* All components dedicated to | ||
| 719 | * this interface */ | ||
| 720 | ETH_RESET_ALL = 0xffffffff, /* All components used by this | ||
| 721 | * interface, even if shared */ | ||
| 722 | }; | ||
| 723 | #define ETH_RESET_SHARED_SHIFT 16 | ||
| 724 | |||
| 677 | #endif /* _LINUX_ETHTOOL_H */ | 725 | #endif /* _LINUX_ETHTOOL_H */ |
diff --git a/include/linux/eventfd.h b/include/linux/eventfd.h index 3b85ba6479f4..94dd10366a78 100644 --- a/include/linux/eventfd.h +++ b/include/linux/eventfd.h | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | 27 | ||
| 28 | #ifdef CONFIG_EVENTFD | 28 | #ifdef CONFIG_EVENTFD |
| 29 | 29 | ||
| 30 | struct file *eventfd_file_create(unsigned int count, int flags); | ||
| 30 | struct eventfd_ctx *eventfd_ctx_get(struct eventfd_ctx *ctx); | 31 | struct eventfd_ctx *eventfd_ctx_get(struct eventfd_ctx *ctx); |
| 31 | void eventfd_ctx_put(struct eventfd_ctx *ctx); | 32 | void eventfd_ctx_put(struct eventfd_ctx *ctx); |
| 32 | struct file *eventfd_fget(int fd); | 33 | struct file *eventfd_fget(int fd); |
| @@ -40,6 +41,11 @@ int eventfd_signal(struct eventfd_ctx *ctx, int n); | |||
| 40 | * Ugly ugly ugly error layer to support modules that uses eventfd but | 41 | * Ugly ugly ugly error layer to support modules that uses eventfd but |
| 41 | * pretend to work in !CONFIG_EVENTFD configurations. Namely, AIO. | 42 | * pretend to work in !CONFIG_EVENTFD configurations. Namely, AIO. |
| 42 | */ | 43 | */ |
| 44 | static inline struct file *eventfd_file_create(unsigned int count, int flags) | ||
| 45 | { | ||
| 46 | return ERR_PTR(-ENOSYS); | ||
| 47 | } | ||
| 48 | |||
| 43 | static inline struct eventfd_ctx *eventfd_ctx_fdget(int fd) | 49 | static inline struct eventfd_ctx *eventfd_ctx_fdget(int fd) |
| 44 | { | 50 | { |
| 45 | return ERR_PTR(-ENOSYS); | 51 | return ERR_PTR(-ENOSYS); |
diff --git a/include/linux/ext3_fs_i.h b/include/linux/ext3_fs_i.h index ca1bfe90004f..93e7428156ba 100644 --- a/include/linux/ext3_fs_i.h +++ b/include/linux/ext3_fs_i.h | |||
| @@ -137,6 +137,14 @@ struct ext3_inode_info { | |||
| 137 | * by other means, so we have truncate_mutex. | 137 | * by other means, so we have truncate_mutex. |
| 138 | */ | 138 | */ |
| 139 | struct mutex truncate_mutex; | 139 | struct mutex truncate_mutex; |
| 140 | |||
| 141 | /* | ||
| 142 | * Transactions that contain inode's metadata needed to complete | ||
| 143 | * fsync and fdatasync, respectively. | ||
| 144 | */ | ||
| 145 | atomic_t i_sync_tid; | ||
| 146 | atomic_t i_datasync_tid; | ||
| 147 | |||
| 140 | struct inode vfs_inode; | 148 | struct inode vfs_inode; |
| 141 | }; | 149 | }; |
| 142 | 150 | ||
diff --git a/include/linux/fb.h b/include/linux/fb.h index f847df9e99b6..de9c722e7b90 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h | |||
| @@ -133,6 +133,7 @@ struct dentry; | |||
| 133 | #define FB_ACCEL_NEOMAGIC_NM2230 96 /* NeoMagic NM2230 */ | 133 | #define FB_ACCEL_NEOMAGIC_NM2230 96 /* NeoMagic NM2230 */ |
| 134 | #define FB_ACCEL_NEOMAGIC_NM2360 97 /* NeoMagic NM2360 */ | 134 | #define FB_ACCEL_NEOMAGIC_NM2360 97 /* NeoMagic NM2360 */ |
| 135 | #define FB_ACCEL_NEOMAGIC_NM2380 98 /* NeoMagic NM2380 */ | 135 | #define FB_ACCEL_NEOMAGIC_NM2380 98 /* NeoMagic NM2380 */ |
| 136 | #define FB_ACCEL_PXA3XX 99 /* PXA3xx */ | ||
| 136 | 137 | ||
| 137 | #define FB_ACCEL_SAVAGE4 0x80 /* S3 Savage4 */ | 138 | #define FB_ACCEL_SAVAGE4 0x80 /* S3 Savage4 */ |
| 138 | #define FB_ACCEL_SAVAGE3D 0x81 /* S3 Savage3D */ | 139 | #define FB_ACCEL_SAVAGE3D 0x81 /* S3 Savage3D */ |
| @@ -668,12 +669,6 @@ struct fb_ops { | |||
| 668 | /* perform fb specific mmap */ | 669 | /* perform fb specific mmap */ |
| 669 | int (*fb_mmap)(struct fb_info *info, struct vm_area_struct *vma); | 670 | int (*fb_mmap)(struct fb_info *info, struct vm_area_struct *vma); |
| 670 | 671 | ||
| 671 | /* save current hardware state */ | ||
| 672 | void (*fb_save_state)(struct fb_info *info); | ||
| 673 | |||
| 674 | /* restore saved state */ | ||
| 675 | void (*fb_restore_state)(struct fb_info *info); | ||
| 676 | |||
| 677 | /* get capability given var */ | 672 | /* get capability given var */ |
| 678 | void (*fb_get_caps)(struct fb_info *info, struct fb_blit_caps *caps, | 673 | void (*fb_get_caps)(struct fb_info *info, struct fb_blit_caps *caps, |
| 679 | struct fb_var_screeninfo *var); | 674 | struct fb_var_screeninfo *var); |
diff --git a/include/linux/fib_rules.h b/include/linux/fib_rules.h index 87b606b63f1e..51da65b68b85 100644 --- a/include/linux/fib_rules.h +++ b/include/linux/fib_rules.h | |||
| @@ -8,13 +8,14 @@ | |||
| 8 | #define FIB_RULE_PERMANENT 0x00000001 | 8 | #define FIB_RULE_PERMANENT 0x00000001 |
| 9 | #define FIB_RULE_INVERT 0x00000002 | 9 | #define FIB_RULE_INVERT 0x00000002 |
| 10 | #define FIB_RULE_UNRESOLVED 0x00000004 | 10 | #define FIB_RULE_UNRESOLVED 0x00000004 |
| 11 | #define FIB_RULE_DEV_DETACHED 0x00000008 | 11 | #define FIB_RULE_IIF_DETACHED 0x00000008 |
| 12 | #define FIB_RULE_DEV_DETACHED FIB_RULE_IIF_DETACHED | ||
| 13 | #define FIB_RULE_OIF_DETACHED 0x00000010 | ||
| 12 | 14 | ||
| 13 | /* try to find source address in routing lookups */ | 15 | /* try to find source address in routing lookups */ |
| 14 | #define FIB_RULE_FIND_SADDR 0x00010000 | 16 | #define FIB_RULE_FIND_SADDR 0x00010000 |
| 15 | 17 | ||
| 16 | struct fib_rule_hdr | 18 | struct fib_rule_hdr { |
| 17 | { | ||
| 18 | __u8 family; | 19 | __u8 family; |
| 19 | __u8 dst_len; | 20 | __u8 dst_len; |
| 20 | __u8 src_len; | 21 | __u8 src_len; |
| @@ -28,12 +29,12 @@ struct fib_rule_hdr | |||
| 28 | __u32 flags; | 29 | __u32 flags; |
| 29 | }; | 30 | }; |
| 30 | 31 | ||
| 31 | enum | 32 | enum { |
| 32 | { | ||
| 33 | FRA_UNSPEC, | 33 | FRA_UNSPEC, |
| 34 | FRA_DST, /* destination address */ | 34 | FRA_DST, /* destination address */ |
| 35 | FRA_SRC, /* source address */ | 35 | FRA_SRC, /* source address */ |
| 36 | FRA_IFNAME, /* interface name */ | 36 | FRA_IIFNAME, /* interface name */ |
| 37 | #define FRA_IFNAME FRA_IIFNAME | ||
| 37 | FRA_GOTO, /* target to jump to (FR_ACT_GOTO) */ | 38 | FRA_GOTO, /* target to jump to (FR_ACT_GOTO) */ |
| 38 | FRA_UNUSED2, | 39 | FRA_UNUSED2, |
| 39 | FRA_PRIORITY, /* priority/preference */ | 40 | FRA_PRIORITY, /* priority/preference */ |
| @@ -47,13 +48,13 @@ enum | |||
| 47 | FRA_UNUSED8, | 48 | FRA_UNUSED8, |
| 48 | FRA_TABLE, /* Extended table id */ | 49 | FRA_TABLE, /* Extended table id */ |
| 49 | FRA_FWMASK, /* mask for netfilter mark */ | 50 | FRA_FWMASK, /* mask for netfilter mark */ |
| 51 | FRA_OIFNAME, | ||
| 50 | __FRA_MAX | 52 | __FRA_MAX |
| 51 | }; | 53 | }; |
| 52 | 54 | ||
| 53 | #define FRA_MAX (__FRA_MAX - 1) | 55 | #define FRA_MAX (__FRA_MAX - 1) |
| 54 | 56 | ||
| 55 | enum | 57 | enum { |
| 56 | { | ||
| 57 | FR_ACT_UNSPEC, | 58 | FR_ACT_UNSPEC, |
| 58 | FR_ACT_TO_TBL, /* Pass to fixed table */ | 59 | FR_ACT_TO_TBL, /* Pass to fixed table */ |
| 59 | FR_ACT_GOTO, /* Jump to another rule */ | 60 | FR_ACT_GOTO, /* Jump to another rule */ |
diff --git a/include/linux/filter.h b/include/linux/filter.h index 1354aaf6abbe..29a0e3db9f43 100644 --- a/include/linux/filter.h +++ b/include/linux/filter.h | |||
| @@ -23,16 +23,14 @@ | |||
| 23 | * the BPF code definitions which need to match so you can share filters | 23 | * the BPF code definitions which need to match so you can share filters |
| 24 | */ | 24 | */ |
| 25 | 25 | ||
| 26 | struct sock_filter /* Filter block */ | 26 | struct sock_filter { /* Filter block */ |
| 27 | { | ||
| 28 | __u16 code; /* Actual filter code */ | 27 | __u16 code; /* Actual filter code */ |
| 29 | __u8 jt; /* Jump true */ | 28 | __u8 jt; /* Jump true */ |
| 30 | __u8 jf; /* Jump false */ | 29 | __u8 jf; /* Jump false */ |
| 31 | __u32 k; /* Generic multiuse field */ | 30 | __u32 k; /* Generic multiuse field */ |
| 32 | }; | 31 | }; |
| 33 | 32 | ||
| 34 | struct sock_fprog /* Required for SO_ATTACH_FILTER. */ | 33 | struct sock_fprog { /* Required for SO_ATTACH_FILTER. */ |
| 35 | { | ||
| 36 | unsigned short len; /* Number of filter blocks */ | 34 | unsigned short len; /* Number of filter blocks */ |
| 37 | struct sock_filter __user *filter; | 35 | struct sock_filter __user *filter; |
| 38 | }; | 36 | }; |
| @@ -123,7 +121,9 @@ struct sock_fprog /* Required for SO_ATTACH_FILTER. */ | |||
| 123 | #define SKF_AD_IFINDEX 8 | 121 | #define SKF_AD_IFINDEX 8 |
| 124 | #define SKF_AD_NLATTR 12 | 122 | #define SKF_AD_NLATTR 12 |
| 125 | #define SKF_AD_NLATTR_NEST 16 | 123 | #define SKF_AD_NLATTR_NEST 16 |
| 126 | #define SKF_AD_MAX 20 | 124 | #define SKF_AD_MARK 20 |
| 125 | #define SKF_AD_QUEUE 24 | ||
| 126 | #define SKF_AD_MAX 28 | ||
| 127 | #define SKF_NET_OFF (-0x100000) | 127 | #define SKF_NET_OFF (-0x100000) |
| 128 | #define SKF_LL_OFF (-0x200000) | 128 | #define SKF_LL_OFF (-0x200000) |
| 129 | 129 | ||
diff --git a/include/linux/fips.h b/include/linux/fips.h new file mode 100644 index 000000000000..f8fb07b0b6b8 --- /dev/null +++ b/include/linux/fips.h | |||
| @@ -0,0 +1,10 @@ | |||
| 1 | #ifndef _FIPS_H | ||
| 2 | #define _FIPS_H | ||
| 3 | |||
| 4 | #ifdef CONFIG_CRYPTO_FIPS | ||
| 5 | extern int fips_enabled; | ||
| 6 | #else | ||
| 7 | #define fips_enabled 0 | ||
| 8 | #endif | ||
| 9 | |||
| 10 | #endif | ||
diff --git a/include/linux/flex_array.h b/include/linux/flex_array.h index 45ff18491514..1d747f72298b 100644 --- a/include/linux/flex_array.h +++ b/include/linux/flex_array.h | |||
| @@ -31,10 +31,32 @@ struct flex_array { | |||
| 31 | }; | 31 | }; |
| 32 | }; | 32 | }; |
| 33 | 33 | ||
| 34 | #define FLEX_ARRAY_INIT(size, total) { { {\ | 34 | /* Number of bytes left in base struct flex_array, excluding metadata */ |
| 35 | .element_size = (size), \ | 35 | #define FLEX_ARRAY_BASE_BYTES_LEFT \ |
| 36 | .total_nr_elements = (total), \ | 36 | (FLEX_ARRAY_BASE_SIZE - offsetof(struct flex_array, parts)) |
| 37 | } } } | 37 | |
| 38 | /* Number of pointers in base to struct flex_array_part pages */ | ||
| 39 | #define FLEX_ARRAY_NR_BASE_PTRS \ | ||
| 40 | (FLEX_ARRAY_BASE_BYTES_LEFT / sizeof(struct flex_array_part *)) | ||
| 41 | |||
| 42 | /* Number of elements of size that fit in struct flex_array_part */ | ||
| 43 | #define FLEX_ARRAY_ELEMENTS_PER_PART(size) \ | ||
| 44 | (FLEX_ARRAY_PART_SIZE / size) | ||
| 45 | |||
| 46 | /* | ||
| 47 | * Defines a statically allocated flex array and ensures its parameters are | ||
| 48 | * valid. | ||
| 49 | */ | ||
| 50 | #define DEFINE_FLEX_ARRAY(__arrayname, __element_size, __total) \ | ||
| 51 | struct flex_array __arrayname = { { { \ | ||
| 52 | .element_size = (__element_size), \ | ||
| 53 | .total_nr_elements = (__total), \ | ||
| 54 | } } }; \ | ||
| 55 | static inline void __arrayname##_invalid_parameter(void) \ | ||
| 56 | { \ | ||
| 57 | BUILD_BUG_ON((__total) > FLEX_ARRAY_NR_BASE_PTRS * \ | ||
| 58 | FLEX_ARRAY_ELEMENTS_PER_PART(__element_size)); \ | ||
| 59 | } | ||
| 38 | 60 | ||
| 39 | struct flex_array *flex_array_alloc(int element_size, unsigned int total, | 61 | struct flex_array *flex_array_alloc(int element_size, unsigned int total, |
| 40 | gfp_t flags); | 62 | gfp_t flags); |
| @@ -44,6 +66,8 @@ void flex_array_free(struct flex_array *fa); | |||
| 44 | void flex_array_free_parts(struct flex_array *fa); | 66 | void flex_array_free_parts(struct flex_array *fa); |
| 45 | int flex_array_put(struct flex_array *fa, unsigned int element_nr, void *src, | 67 | int flex_array_put(struct flex_array *fa, unsigned int element_nr, void *src, |
| 46 | gfp_t flags); | 68 | gfp_t flags); |
| 69 | int flex_array_clear(struct flex_array *fa, unsigned int element_nr); | ||
| 47 | void *flex_array_get(struct flex_array *fa, unsigned int element_nr); | 70 | void *flex_array_get(struct flex_array *fa, unsigned int element_nr); |
| 71 | int flex_array_shrink(struct flex_array *fa); | ||
| 48 | 72 | ||
| 49 | #endif /* _FLEX_ARRAY_H */ | 73 | #endif /* _FLEX_ARRAY_H */ |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 73e9b643e455..2620a8c63571 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -161,8 +161,8 @@ struct inodes_stat_t { | |||
| 161 | * These aren't really reads or writes, they pass down information about | 161 | * These aren't really reads or writes, they pass down information about |
| 162 | * parts of device that are now unused by the file system. | 162 | * parts of device that are now unused by the file system. |
| 163 | */ | 163 | */ |
| 164 | #define DISCARD_NOBARRIER (1 << BIO_RW_DISCARD) | 164 | #define DISCARD_NOBARRIER (WRITE | (1 << BIO_RW_DISCARD)) |
| 165 | #define DISCARD_BARRIER ((1 << BIO_RW_DISCARD) | (1 << BIO_RW_BARRIER)) | 165 | #define DISCARD_BARRIER (DISCARD_NOBARRIER | (1 << BIO_RW_BARRIER)) |
| 166 | 166 | ||
| 167 | #define SEL_IN 1 | 167 | #define SEL_IN 1 |
| 168 | #define SEL_OUT 2 | 168 | #define SEL_OUT 2 |
| @@ -300,6 +300,10 @@ struct inodes_stat_t { | |||
| 300 | #define BLKTRACESTOP _IO(0x12,117) | 300 | #define BLKTRACESTOP _IO(0x12,117) |
| 301 | #define BLKTRACETEARDOWN _IO(0x12,118) | 301 | #define BLKTRACETEARDOWN _IO(0x12,118) |
| 302 | #define BLKDISCARD _IO(0x12,119) | 302 | #define BLKDISCARD _IO(0x12,119) |
| 303 | #define BLKIOMIN _IO(0x12,120) | ||
| 304 | #define BLKIOOPT _IO(0x12,121) | ||
| 305 | #define BLKALIGNOFF _IO(0x12,122) | ||
| 306 | #define BLKPBSZGET _IO(0x12,123) | ||
| 303 | 307 | ||
| 304 | #define BMAP_IOCTL 1 /* obsolete - kept for compatibility */ | 308 | #define BMAP_IOCTL 1 /* obsolete - kept for compatibility */ |
| 305 | #define FIBMAP _IO(0x00,1) /* bmap access */ | 309 | #define FIBMAP _IO(0x00,1) /* bmap access */ |
| @@ -595,6 +599,7 @@ struct address_space_operations { | |||
| 595 | int (*launder_page) (struct page *); | 599 | int (*launder_page) (struct page *); |
| 596 | int (*is_partially_uptodate) (struct page *, read_descriptor_t *, | 600 | int (*is_partially_uptodate) (struct page *, read_descriptor_t *, |
| 597 | unsigned long); | 601 | unsigned long); |
| 602 | int (*error_remove_page)(struct address_space *, struct page *); | ||
| 598 | }; | 603 | }; |
| 599 | 604 | ||
| 600 | /* | 605 | /* |
| @@ -640,7 +645,6 @@ struct block_device { | |||
| 640 | struct super_block * bd_super; | 645 | struct super_block * bd_super; |
| 641 | int bd_openers; | 646 | int bd_openers; |
| 642 | struct mutex bd_mutex; /* open/close mutex */ | 647 | struct mutex bd_mutex; /* open/close mutex */ |
| 643 | struct semaphore bd_mount_sem; | ||
| 644 | struct list_head bd_inodes; | 648 | struct list_head bd_inodes; |
| 645 | void * bd_holder; | 649 | void * bd_holder; |
| 646 | int bd_holders; | 650 | int bd_holders; |
| @@ -655,7 +659,6 @@ struct block_device { | |||
| 655 | int bd_invalidated; | 659 | int bd_invalidated; |
| 656 | struct gendisk * bd_disk; | 660 | struct gendisk * bd_disk; |
| 657 | struct list_head bd_list; | 661 | struct list_head bd_list; |
| 658 | struct backing_dev_info *bd_inode_backing_dev_info; | ||
| 659 | /* | 662 | /* |
| 660 | * Private data. You must have bd_claim'ed the block_device | 663 | * Private data. You must have bd_claim'ed the block_device |
| 661 | * to use this. NOTE: bd_claim allows an owner to claim | 664 | * to use this. NOTE: bd_claim allows an owner to claim |
| @@ -715,7 +718,7 @@ struct posix_acl; | |||
| 715 | 718 | ||
| 716 | struct inode { | 719 | struct inode { |
| 717 | struct hlist_node i_hash; | 720 | struct hlist_node i_hash; |
| 718 | struct list_head i_list; | 721 | struct list_head i_list; /* backing dev IO list */ |
| 719 | struct list_head i_sb_list; | 722 | struct list_head i_sb_list; |
| 720 | struct list_head i_dentry; | 723 | struct list_head i_dentry; |
| 721 | unsigned long i_ino; | 724 | unsigned long i_ino; |
| @@ -1067,8 +1070,8 @@ struct file_lock { | |||
| 1067 | struct fasync_struct * fl_fasync; /* for lease break notifications */ | 1070 | struct fasync_struct * fl_fasync; /* for lease break notifications */ |
| 1068 | unsigned long fl_break_time; /* for nonblocking lease breaks */ | 1071 | unsigned long fl_break_time; /* for nonblocking lease breaks */ |
| 1069 | 1072 | ||
| 1070 | struct file_lock_operations *fl_ops; /* Callbacks for filesystems */ | 1073 | const struct file_lock_operations *fl_ops; /* Callbacks for filesystems */ |
| 1071 | struct lock_manager_operations *fl_lmops; /* Callbacks for lockmanagers */ | 1074 | const struct lock_manager_operations *fl_lmops; /* Callbacks for lockmanagers */ |
| 1072 | union { | 1075 | union { |
| 1073 | struct nfs_lock_info nfs_fl; | 1076 | struct nfs_lock_info nfs_fl; |
| 1074 | struct nfs4_lock_info nfs4_fl; | 1077 | struct nfs4_lock_info nfs4_fl; |
| @@ -1316,11 +1319,11 @@ struct super_block { | |||
| 1316 | unsigned long s_blocksize; | 1319 | unsigned long s_blocksize; |
| 1317 | unsigned char s_blocksize_bits; | 1320 | unsigned char s_blocksize_bits; |
| 1318 | unsigned char s_dirt; | 1321 | unsigned char s_dirt; |
| 1319 | unsigned long long s_maxbytes; /* Max file size */ | 1322 | loff_t s_maxbytes; /* Max file size */ |
| 1320 | struct file_system_type *s_type; | 1323 | struct file_system_type *s_type; |
| 1321 | const struct super_operations *s_op; | 1324 | const struct super_operations *s_op; |
| 1322 | struct dquot_operations *dq_op; | 1325 | const struct dquot_operations *dq_op; |
| 1323 | struct quotactl_ops *s_qcop; | 1326 | const struct quotactl_ops *s_qcop; |
| 1324 | const struct export_operations *s_export_op; | 1327 | const struct export_operations *s_export_op; |
| 1325 | unsigned long s_flags; | 1328 | unsigned long s_flags; |
| 1326 | unsigned long s_magic; | 1329 | unsigned long s_magic; |
| @@ -1336,9 +1339,6 @@ struct super_block { | |||
| 1336 | struct xattr_handler **s_xattr; | 1339 | struct xattr_handler **s_xattr; |
| 1337 | 1340 | ||
| 1338 | struct list_head s_inodes; /* all inodes */ | 1341 | struct list_head s_inodes; /* all inodes */ |
| 1339 | struct list_head s_dirty; /* dirty inodes */ | ||
| 1340 | struct list_head s_io; /* parked for writeback */ | ||
| 1341 | struct list_head s_more_io; /* parked for more writeback */ | ||
| 1342 | struct hlist_head s_anon; /* anonymous dentries for (nfs) exporting */ | 1342 | struct hlist_head s_anon; /* anonymous dentries for (nfs) exporting */ |
| 1343 | struct list_head s_files; | 1343 | struct list_head s_files; |
| 1344 | /* s_dentry_lru and s_nr_dentry_unused are protected by dcache_lock */ | 1344 | /* s_dentry_lru and s_nr_dentry_unused are protected by dcache_lock */ |
| @@ -1346,6 +1346,7 @@ struct super_block { | |||
| 1346 | int s_nr_dentry_unused; /* # of dentry on lru */ | 1346 | int s_nr_dentry_unused; /* # of dentry on lru */ |
| 1347 | 1347 | ||
| 1348 | struct block_device *s_bdev; | 1348 | struct block_device *s_bdev; |
| 1349 | struct backing_dev_info *s_bdi; | ||
| 1349 | struct mtd_info *s_mtd; | 1350 | struct mtd_info *s_mtd; |
| 1350 | struct list_head s_instances; | 1351 | struct list_head s_instances; |
| 1351 | struct quota_info s_dquot; /* Diskquota specific options */ | 1352 | struct quota_info s_dquot; /* Diskquota specific options */ |
| @@ -1458,11 +1459,6 @@ int fiemap_check_flags(struct fiemap_extent_info *fieinfo, u32 fs_flags); | |||
| 1458 | #define DT_SOCK 12 | 1459 | #define DT_SOCK 12 |
| 1459 | #define DT_WHT 14 | 1460 | #define DT_WHT 14 |
| 1460 | 1461 | ||
| 1461 | #define OSYNC_METADATA (1<<0) | ||
| 1462 | #define OSYNC_DATA (1<<1) | ||
| 1463 | #define OSYNC_INODE (1<<2) | ||
| 1464 | int generic_osync_inode(struct inode *, struct address_space *, int); | ||
| 1465 | |||
| 1466 | /* | 1462 | /* |
| 1467 | * This is the "filldir" function type, used by readdir() to let | 1463 | * This is the "filldir" function type, used by readdir() to let |
| 1468 | * the kernel specify what kind of dirent layout it wants to have. | 1464 | * the kernel specify what kind of dirent layout it wants to have. |
| @@ -1528,6 +1524,7 @@ struct inode_operations { | |||
| 1528 | void (*put_link) (struct dentry *, struct nameidata *, void *); | 1524 | void (*put_link) (struct dentry *, struct nameidata *, void *); |
| 1529 | void (*truncate) (struct inode *); | 1525 | void (*truncate) (struct inode *); |
| 1530 | int (*permission) (struct inode *, int); | 1526 | int (*permission) (struct inode *, int); |
| 1527 | int (*check_acl)(struct inode *, int); | ||
| 1531 | int (*setattr) (struct dentry *, struct iattr *); | 1528 | int (*setattr) (struct dentry *, struct iattr *); |
| 1532 | int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *); | 1529 | int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *); |
| 1533 | int (*setxattr) (struct dentry *, const char *,const void *,size_t,int); | 1530 | int (*setxattr) (struct dentry *, const char *,const void *,size_t,int); |
| @@ -1788,6 +1785,7 @@ extern int get_sb_pseudo(struct file_system_type *, char *, | |||
| 1788 | struct vfsmount *mnt); | 1785 | struct vfsmount *mnt); |
| 1789 | extern void simple_set_mnt(struct vfsmount *mnt, struct super_block *sb); | 1786 | extern void simple_set_mnt(struct vfsmount *mnt, struct super_block *sb); |
| 1790 | int __put_super_and_need_restart(struct super_block *sb); | 1787 | int __put_super_and_need_restart(struct super_block *sb); |
| 1788 | void put_super(struct super_block *sb); | ||
| 1791 | 1789 | ||
| 1792 | /* Alas, no aliases. Too much hassle with bringing module.h everywhere */ | 1790 | /* Alas, no aliases. Too much hassle with bringing module.h everywhere */ |
| 1793 | #define fops_get(fops) \ | 1791 | #define fops_get(fops) \ |
| @@ -1998,12 +1996,25 @@ extern void bd_release_from_disk(struct block_device *, struct gendisk *); | |||
| 1998 | #define CHRDEV_MAJOR_HASH_SIZE 255 | 1996 | #define CHRDEV_MAJOR_HASH_SIZE 255 |
| 1999 | extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *); | 1997 | extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *); |
| 2000 | extern int register_chrdev_region(dev_t, unsigned, const char *); | 1998 | extern int register_chrdev_region(dev_t, unsigned, const char *); |
| 2001 | extern int register_chrdev(unsigned int, const char *, | 1999 | extern int __register_chrdev(unsigned int major, unsigned int baseminor, |
| 2002 | const struct file_operations *); | 2000 | unsigned int count, const char *name, |
| 2003 | extern void unregister_chrdev(unsigned int, const char *); | 2001 | const struct file_operations *fops); |
| 2002 | extern void __unregister_chrdev(unsigned int major, unsigned int baseminor, | ||
| 2003 | unsigned int count, const char *name); | ||
| 2004 | extern void unregister_chrdev_region(dev_t, unsigned); | 2004 | extern void unregister_chrdev_region(dev_t, unsigned); |
| 2005 | extern void chrdev_show(struct seq_file *,off_t); | 2005 | extern void chrdev_show(struct seq_file *,off_t); |
| 2006 | 2006 | ||
| 2007 | static inline int register_chrdev(unsigned int major, const char *name, | ||
| 2008 | const struct file_operations *fops) | ||
| 2009 | { | ||
| 2010 | return __register_chrdev(major, 0, 256, name, fops); | ||
| 2011 | } | ||
| 2012 | |||
| 2013 | static inline void unregister_chrdev(unsigned int major, const char *name) | ||
| 2014 | { | ||
| 2015 | __unregister_chrdev(major, 0, 256, name); | ||
| 2016 | } | ||
| 2017 | |||
| 2007 | /* fs/block_dev.c */ | 2018 | /* fs/block_dev.c */ |
| 2008 | #define BDEVNAME_SIZE 32 /* Largest string for a blockdev identifier */ | 2019 | #define BDEVNAME_SIZE 32 /* Largest string for a blockdev identifier */ |
| 2009 | #define BDEVT_SIZE 10 /* Largest string for MAJ:MIN for blkdev */ | 2020 | #define BDEVT_SIZE 10 /* Largest string for MAJ:MIN for blkdev */ |
| @@ -2070,12 +2081,12 @@ static inline void invalidate_remote_inode(struct inode *inode) | |||
| 2070 | extern int invalidate_inode_pages2(struct address_space *mapping); | 2081 | extern int invalidate_inode_pages2(struct address_space *mapping); |
| 2071 | extern int invalidate_inode_pages2_range(struct address_space *mapping, | 2082 | extern int invalidate_inode_pages2_range(struct address_space *mapping, |
| 2072 | pgoff_t start, pgoff_t end); | 2083 | pgoff_t start, pgoff_t end); |
| 2073 | extern void generic_sync_sb_inodes(struct super_block *sb, | ||
| 2074 | struct writeback_control *wbc); | ||
| 2075 | extern int write_inode_now(struct inode *, int); | 2084 | extern int write_inode_now(struct inode *, int); |
| 2076 | extern int filemap_fdatawrite(struct address_space *); | 2085 | extern int filemap_fdatawrite(struct address_space *); |
| 2077 | extern int filemap_flush(struct address_space *); | 2086 | extern int filemap_flush(struct address_space *); |
| 2078 | extern int filemap_fdatawait(struct address_space *); | 2087 | extern int filemap_fdatawait(struct address_space *); |
| 2088 | extern int filemap_fdatawait_range(struct address_space *, loff_t lstart, | ||
| 2089 | loff_t lend); | ||
| 2079 | extern int filemap_write_and_wait(struct address_space *mapping); | 2090 | extern int filemap_write_and_wait(struct address_space *mapping); |
| 2080 | extern int filemap_write_and_wait_range(struct address_space *mapping, | 2091 | extern int filemap_write_and_wait_range(struct address_space *mapping, |
| 2081 | loff_t lstart, loff_t lend); | 2092 | loff_t lstart, loff_t lend); |
| @@ -2086,7 +2097,10 @@ extern int __filemap_fdatawrite_range(struct address_space *mapping, | |||
| 2086 | extern int filemap_fdatawrite_range(struct address_space *mapping, | 2097 | extern int filemap_fdatawrite_range(struct address_space *mapping, |
| 2087 | loff_t start, loff_t end); | 2098 | loff_t start, loff_t end); |
| 2088 | 2099 | ||
| 2100 | extern int vfs_fsync_range(struct file *file, struct dentry *dentry, | ||
| 2101 | loff_t start, loff_t end, int datasync); | ||
| 2089 | extern int vfs_fsync(struct file *file, struct dentry *dentry, int datasync); | 2102 | extern int vfs_fsync(struct file *file, struct dentry *dentry, int datasync); |
| 2103 | extern int generic_write_sync(struct file *file, loff_t pos, loff_t count); | ||
| 2090 | extern void sync_supers(void); | 2104 | extern void sync_supers(void); |
| 2091 | extern void emergency_sync(void); | 2105 | extern void emergency_sync(void); |
| 2092 | extern void emergency_remount(void); | 2106 | extern void emergency_remount(void); |
| @@ -2146,6 +2160,7 @@ extern ino_t iunique(struct super_block *, ino_t); | |||
| 2146 | extern int inode_needs_sync(struct inode *inode); | 2160 | extern int inode_needs_sync(struct inode *inode); |
| 2147 | extern void generic_delete_inode(struct inode *inode); | 2161 | extern void generic_delete_inode(struct inode *inode); |
| 2148 | extern void generic_drop_inode(struct inode *inode); | 2162 | extern void generic_drop_inode(struct inode *inode); |
| 2163 | extern int generic_detach_inode(struct inode *inode); | ||
| 2149 | 2164 | ||
| 2150 | extern struct inode *ilookup5_nowait(struct super_block *sb, | 2165 | extern struct inode *ilookup5_nowait(struct super_block *sb, |
| 2151 | unsigned long hashval, int (*test)(struct inode *, void *), | 2166 | unsigned long hashval, int (*test)(struct inode *, void *), |
| @@ -2186,16 +2201,15 @@ extern int bdev_read_only(struct block_device *); | |||
| 2186 | extern int set_blocksize(struct block_device *, int); | 2201 | extern int set_blocksize(struct block_device *, int); |
| 2187 | extern int sb_set_blocksize(struct super_block *, int); | 2202 | extern int sb_set_blocksize(struct super_block *, int); |
| 2188 | extern int sb_min_blocksize(struct super_block *, int); | 2203 | extern int sb_min_blocksize(struct super_block *, int); |
| 2189 | extern int sb_has_dirty_inodes(struct super_block *); | ||
| 2190 | 2204 | ||
| 2191 | extern int generic_file_mmap(struct file *, struct vm_area_struct *); | 2205 | extern int generic_file_mmap(struct file *, struct vm_area_struct *); |
| 2192 | extern int generic_file_readonly_mmap(struct file *, struct vm_area_struct *); | 2206 | extern int generic_file_readonly_mmap(struct file *, struct vm_area_struct *); |
| 2193 | extern int file_read_actor(read_descriptor_t * desc, struct page *page, unsigned long offset, unsigned long size); | 2207 | extern int file_read_actor(read_descriptor_t * desc, struct page *page, unsigned long offset, unsigned long size); |
| 2194 | int generic_write_checks(struct file *file, loff_t *pos, size_t *count, int isblk); | 2208 | int generic_write_checks(struct file *file, loff_t *pos, size_t *count, int isblk); |
| 2195 | extern ssize_t generic_file_aio_read(struct kiocb *, const struct iovec *, unsigned long, loff_t); | 2209 | extern ssize_t generic_file_aio_read(struct kiocb *, const struct iovec *, unsigned long, loff_t); |
| 2210 | extern ssize_t __generic_file_aio_write(struct kiocb *, const struct iovec *, unsigned long, | ||
| 2211 | loff_t *); | ||
| 2196 | extern ssize_t generic_file_aio_write(struct kiocb *, const struct iovec *, unsigned long, loff_t); | 2212 | extern ssize_t generic_file_aio_write(struct kiocb *, const struct iovec *, unsigned long, loff_t); |
| 2197 | extern ssize_t generic_file_aio_write_nolock(struct kiocb *, const struct iovec *, | ||
| 2198 | unsigned long, loff_t); | ||
| 2199 | extern ssize_t generic_file_direct_write(struct kiocb *, const struct iovec *, | 2213 | extern ssize_t generic_file_direct_write(struct kiocb *, const struct iovec *, |
| 2200 | unsigned long *, loff_t, loff_t *, size_t, size_t); | 2214 | unsigned long *, loff_t, loff_t *, size_t, size_t); |
| 2201 | extern ssize_t generic_file_buffered_write(struct kiocb *, const struct iovec *, | 2215 | extern ssize_t generic_file_buffered_write(struct kiocb *, const struct iovec *, |
| @@ -2205,6 +2219,10 @@ extern ssize_t do_sync_write(struct file *filp, const char __user *buf, size_t l | |||
| 2205 | extern int generic_segment_checks(const struct iovec *iov, | 2219 | extern int generic_segment_checks(const struct iovec *iov, |
| 2206 | unsigned long *nr_segs, size_t *count, int access_flags); | 2220 | unsigned long *nr_segs, size_t *count, int access_flags); |
| 2207 | 2221 | ||
| 2222 | /* fs/block_dev.c */ | ||
| 2223 | extern ssize_t blkdev_aio_write(struct kiocb *iocb, const struct iovec *iov, | ||
| 2224 | unsigned long nr_segs, loff_t pos); | ||
| 2225 | |||
| 2208 | /* fs/splice.c */ | 2226 | /* fs/splice.c */ |
| 2209 | extern ssize_t generic_file_splice_read(struct file *, loff_t *, | 2227 | extern ssize_t generic_file_splice_read(struct file *, loff_t *, |
| 2210 | struct pipe_inode_info *, size_t, unsigned int); | 2228 | struct pipe_inode_info *, size_t, unsigned int); |
| @@ -2321,6 +2339,7 @@ extern void get_filesystem(struct file_system_type *fs); | |||
| 2321 | extern void put_filesystem(struct file_system_type *fs); | 2339 | extern void put_filesystem(struct file_system_type *fs); |
| 2322 | extern struct file_system_type *get_fs_type(const char *name); | 2340 | extern struct file_system_type *get_fs_type(const char *name); |
| 2323 | extern struct super_block *get_super(struct block_device *); | 2341 | extern struct super_block *get_super(struct block_device *); |
| 2342 | extern struct super_block *get_active_super(struct block_device *bdev); | ||
| 2324 | extern struct super_block *user_get_super(dev_t); | 2343 | extern struct super_block *user_get_super(dev_t); |
| 2325 | extern void drop_super(struct super_block *sb); | 2344 | extern void drop_super(struct super_block *sb); |
| 2326 | 2345 | ||
| @@ -2368,7 +2387,8 @@ extern int buffer_migrate_page(struct address_space *, | |||
| 2368 | #define buffer_migrate_page NULL | 2387 | #define buffer_migrate_page NULL |
| 2369 | #endif | 2388 | #endif |
| 2370 | 2389 | ||
| 2371 | extern int inode_change_ok(struct inode *, struct iattr *); | 2390 | extern int inode_change_ok(const struct inode *, struct iattr *); |
| 2391 | extern int inode_newsize_ok(const struct inode *, loff_t offset); | ||
| 2372 | extern int __must_check inode_setattr(struct inode *, struct iattr *); | 2392 | extern int __must_check inode_setattr(struct inode *, struct iattr *); |
| 2373 | 2393 | ||
| 2374 | extern void file_update_time(struct file *file); | 2394 | extern void file_update_time(struct file *file); |
| @@ -2430,7 +2450,7 @@ static int __fops ## _open(struct inode *inode, struct file *file) \ | |||
| 2430 | __simple_attr_check_format(__fmt, 0ull); \ | 2450 | __simple_attr_check_format(__fmt, 0ull); \ |
| 2431 | return simple_attr_open(inode, file, __get, __set, __fmt); \ | 2451 | return simple_attr_open(inode, file, __get, __set, __fmt); \ |
| 2432 | } \ | 2452 | } \ |
| 2433 | static struct file_operations __fops = { \ | 2453 | static const struct file_operations __fops = { \ |
| 2434 | .owner = THIS_MODULE, \ | 2454 | .owner = THIS_MODULE, \ |
| 2435 | .open = __fops ## _open, \ | 2455 | .open = __fops ## _open, \ |
| 2436 | .release = simple_attr_release, \ | 2456 | .release = simple_attr_release, \ |
| @@ -2454,7 +2474,7 @@ ssize_t simple_attr_write(struct file *file, const char __user *buf, | |||
| 2454 | size_t len, loff_t *ppos); | 2474 | size_t len, loff_t *ppos); |
| 2455 | 2475 | ||
| 2456 | struct ctl_table; | 2476 | struct ctl_table; |
| 2457 | int proc_nr_files(struct ctl_table *table, int write, struct file *filp, | 2477 | int proc_nr_files(struct ctl_table *table, int write, |
| 2458 | void __user *buffer, size_t *lenp, loff_t *ppos); | 2478 | void __user *buffer, size_t *lenp, loff_t *ppos); |
| 2459 | 2479 | ||
| 2460 | int __init get_filesystem_list(char *buf); | 2480 | int __init get_filesystem_list(char *buf); |
diff --git a/include/linux/fscache-cache.h b/include/linux/fscache-cache.h index 84d3532dd3ea..7be0c6fbe880 100644 --- a/include/linux/fscache-cache.h +++ b/include/linux/fscache-cache.h | |||
| @@ -91,6 +91,8 @@ struct fscache_operation { | |||
| 91 | #define FSCACHE_OP_WAITING 4 /* cleared when op is woken */ | 91 | #define FSCACHE_OP_WAITING 4 /* cleared when op is woken */ |
| 92 | #define FSCACHE_OP_EXCLUSIVE 5 /* exclusive op, other ops must wait */ | 92 | #define FSCACHE_OP_EXCLUSIVE 5 /* exclusive op, other ops must wait */ |
| 93 | #define FSCACHE_OP_DEAD 6 /* op is now dead */ | 93 | #define FSCACHE_OP_DEAD 6 /* op is now dead */ |
| 94 | #define FSCACHE_OP_DEC_READ_CNT 7 /* decrement object->n_reads on destruction */ | ||
| 95 | #define FSCACHE_OP_KEEP_FLAGS 0xc0 /* flags to keep when repurposing an op */ | ||
| 94 | 96 | ||
| 95 | atomic_t usage; | 97 | atomic_t usage; |
| 96 | unsigned debug_id; /* debugging ID */ | 98 | unsigned debug_id; /* debugging ID */ |
| @@ -102,6 +104,16 @@ struct fscache_operation { | |||
| 102 | 104 | ||
| 103 | /* operation releaser */ | 105 | /* operation releaser */ |
| 104 | fscache_operation_release_t release; | 106 | fscache_operation_release_t release; |
| 107 | |||
| 108 | #ifdef CONFIG_SLOW_WORK_PROC | ||
| 109 | const char *name; /* operation name */ | ||
| 110 | const char *state; /* operation state */ | ||
| 111 | #define fscache_set_op_name(OP, N) do { (OP)->name = (N); } while(0) | ||
| 112 | #define fscache_set_op_state(OP, S) do { (OP)->state = (S); } while(0) | ||
| 113 | #else | ||
| 114 | #define fscache_set_op_name(OP, N) do { } while(0) | ||
| 115 | #define fscache_set_op_state(OP, S) do { } while(0) | ||
| 116 | #endif | ||
| 105 | }; | 117 | }; |
| 106 | 118 | ||
| 107 | extern atomic_t fscache_op_debug_id; | 119 | extern atomic_t fscache_op_debug_id; |
| @@ -125,6 +137,7 @@ static inline void fscache_operation_init(struct fscache_operation *op, | |||
| 125 | op->debug_id = atomic_inc_return(&fscache_op_debug_id); | 137 | op->debug_id = atomic_inc_return(&fscache_op_debug_id); |
| 126 | op->release = release; | 138 | op->release = release; |
| 127 | INIT_LIST_HEAD(&op->pend_link); | 139 | INIT_LIST_HEAD(&op->pend_link); |
| 140 | fscache_set_op_state(op, "Init"); | ||
| 128 | } | 141 | } |
| 129 | 142 | ||
| 130 | /** | 143 | /** |
| @@ -221,8 +234,10 @@ struct fscache_cache_ops { | |||
| 221 | struct fscache_object *(*alloc_object)(struct fscache_cache *cache, | 234 | struct fscache_object *(*alloc_object)(struct fscache_cache *cache, |
| 222 | struct fscache_cookie *cookie); | 235 | struct fscache_cookie *cookie); |
| 223 | 236 | ||
| 224 | /* look up the object for a cookie */ | 237 | /* look up the object for a cookie |
| 225 | void (*lookup_object)(struct fscache_object *object); | 238 | * - return -ETIMEDOUT to be requeued |
| 239 | */ | ||
| 240 | int (*lookup_object)(struct fscache_object *object); | ||
| 226 | 241 | ||
| 227 | /* finished looking up */ | 242 | /* finished looking up */ |
| 228 | void (*lookup_complete)(struct fscache_object *object); | 243 | void (*lookup_complete)(struct fscache_object *object); |
| @@ -297,12 +312,14 @@ struct fscache_cookie { | |||
| 297 | atomic_t usage; /* number of users of this cookie */ | 312 | atomic_t usage; /* number of users of this cookie */ |
| 298 | atomic_t n_children; /* number of children of this cookie */ | 313 | atomic_t n_children; /* number of children of this cookie */ |
| 299 | spinlock_t lock; | 314 | spinlock_t lock; |
| 315 | spinlock_t stores_lock; /* lock on page store tree */ | ||
| 300 | struct hlist_head backing_objects; /* object(s) backing this file/index */ | 316 | struct hlist_head backing_objects; /* object(s) backing this file/index */ |
| 301 | const struct fscache_cookie_def *def; /* definition */ | 317 | const struct fscache_cookie_def *def; /* definition */ |
| 302 | struct fscache_cookie *parent; /* parent of this entry */ | 318 | struct fscache_cookie *parent; /* parent of this entry */ |
| 303 | void *netfs_data; /* back pointer to netfs */ | 319 | void *netfs_data; /* back pointer to netfs */ |
| 304 | struct radix_tree_root stores; /* pages to be stored on this cookie */ | 320 | struct radix_tree_root stores; /* pages to be stored on this cookie */ |
| 305 | #define FSCACHE_COOKIE_PENDING_TAG 0 /* pages tag: pending write to cache */ | 321 | #define FSCACHE_COOKIE_PENDING_TAG 0 /* pages tag: pending write to cache */ |
| 322 | #define FSCACHE_COOKIE_STORING_TAG 1 /* pages tag: writing to cache */ | ||
| 306 | 323 | ||
| 307 | unsigned long flags; | 324 | unsigned long flags; |
| 308 | #define FSCACHE_COOKIE_LOOKING_UP 0 /* T if non-index cookie being looked up still */ | 325 | #define FSCACHE_COOKIE_LOOKING_UP 0 /* T if non-index cookie being looked up still */ |
| @@ -337,6 +354,7 @@ struct fscache_object { | |||
| 337 | FSCACHE_OBJECT_RECYCLING, /* retiring object */ | 354 | FSCACHE_OBJECT_RECYCLING, /* retiring object */ |
| 338 | FSCACHE_OBJECT_WITHDRAWING, /* withdrawing object */ | 355 | FSCACHE_OBJECT_WITHDRAWING, /* withdrawing object */ |
| 339 | FSCACHE_OBJECT_DEAD, /* object is now dead */ | 356 | FSCACHE_OBJECT_DEAD, /* object is now dead */ |
| 357 | FSCACHE_OBJECT__NSTATES | ||
| 340 | } state; | 358 | } state; |
| 341 | 359 | ||
| 342 | int debug_id; /* debugging ID */ | 360 | int debug_id; /* debugging ID */ |
| @@ -345,6 +363,7 @@ struct fscache_object { | |||
| 345 | int n_obj_ops; /* number of object ops outstanding on object */ | 363 | int n_obj_ops; /* number of object ops outstanding on object */ |
| 346 | int n_in_progress; /* number of ops in progress */ | 364 | int n_in_progress; /* number of ops in progress */ |
| 347 | int n_exclusive; /* number of exclusive ops queued */ | 365 | int n_exclusive; /* number of exclusive ops queued */ |
| 366 | atomic_t n_reads; /* number of read ops in progress */ | ||
| 348 | spinlock_t lock; /* state and operations lock */ | 367 | spinlock_t lock; /* state and operations lock */ |
| 349 | 368 | ||
| 350 | unsigned long lookup_jif; /* time at which lookup started */ | 369 | unsigned long lookup_jif; /* time at which lookup started */ |
| @@ -358,6 +377,7 @@ struct fscache_object { | |||
| 358 | #define FSCACHE_OBJECT_EV_RELEASE 4 /* T if netfs requested object release */ | 377 | #define FSCACHE_OBJECT_EV_RELEASE 4 /* T if netfs requested object release */ |
| 359 | #define FSCACHE_OBJECT_EV_RETIRE 5 /* T if netfs requested object retirement */ | 378 | #define FSCACHE_OBJECT_EV_RETIRE 5 /* T if netfs requested object retirement */ |
| 360 | #define FSCACHE_OBJECT_EV_WITHDRAW 6 /* T if cache requested object withdrawal */ | 379 | #define FSCACHE_OBJECT_EV_WITHDRAW 6 /* T if cache requested object withdrawal */ |
| 380 | #define FSCACHE_OBJECT_EVENTS_MASK 0x7f /* mask of all events*/ | ||
| 361 | 381 | ||
| 362 | unsigned long flags; | 382 | unsigned long flags; |
| 363 | #define FSCACHE_OBJECT_LOCK 0 /* T if object is busy being processed */ | 383 | #define FSCACHE_OBJECT_LOCK 0 /* T if object is busy being processed */ |
| @@ -373,7 +393,11 @@ struct fscache_object { | |||
| 373 | struct list_head dependents; /* FIFO of dependent objects */ | 393 | struct list_head dependents; /* FIFO of dependent objects */ |
| 374 | struct list_head dep_link; /* link in parent's dependents list */ | 394 | struct list_head dep_link; /* link in parent's dependents list */ |
| 375 | struct list_head pending_ops; /* unstarted operations on this object */ | 395 | struct list_head pending_ops; /* unstarted operations on this object */ |
| 396 | #ifdef CONFIG_FSCACHE_OBJECT_LIST | ||
| 397 | struct rb_node objlist_link; /* link in global object list */ | ||
| 398 | #endif | ||
| 376 | pgoff_t store_limit; /* current storage limit */ | 399 | pgoff_t store_limit; /* current storage limit */ |
| 400 | loff_t store_limit_l; /* current storage limit */ | ||
| 377 | }; | 401 | }; |
| 378 | 402 | ||
| 379 | extern const char *fscache_object_states[]; | 403 | extern const char *fscache_object_states[]; |
| @@ -383,6 +407,10 @@ extern const char *fscache_object_states[]; | |||
| 383 | (obj)->state >= FSCACHE_OBJECT_AVAILABLE && \ | 407 | (obj)->state >= FSCACHE_OBJECT_AVAILABLE && \ |
| 384 | (obj)->state < FSCACHE_OBJECT_DYING) | 408 | (obj)->state < FSCACHE_OBJECT_DYING) |
| 385 | 409 | ||
| 410 | #define fscache_object_is_dead(obj) \ | ||
| 411 | (test_bit(FSCACHE_IOERROR, &(obj)->cache->flags) && \ | ||
| 412 | (obj)->state >= FSCACHE_OBJECT_DYING) | ||
| 413 | |||
| 386 | extern const struct slow_work_ops fscache_object_slow_work_ops; | 414 | extern const struct slow_work_ops fscache_object_slow_work_ops; |
| 387 | 415 | ||
| 388 | /** | 416 | /** |
| @@ -414,6 +442,7 @@ void fscache_object_init(struct fscache_object *object, | |||
| 414 | object->events = object->event_mask = 0; | 442 | object->events = object->event_mask = 0; |
| 415 | object->flags = 0; | 443 | object->flags = 0; |
| 416 | object->store_limit = 0; | 444 | object->store_limit = 0; |
| 445 | object->store_limit_l = 0; | ||
| 417 | object->cache = cache; | 446 | object->cache = cache; |
| 418 | object->cookie = cookie; | 447 | object->cookie = cookie; |
| 419 | object->parent = NULL; | 448 | object->parent = NULL; |
| @@ -422,6 +451,12 @@ void fscache_object_init(struct fscache_object *object, | |||
| 422 | extern void fscache_object_lookup_negative(struct fscache_object *object); | 451 | extern void fscache_object_lookup_negative(struct fscache_object *object); |
| 423 | extern void fscache_obtained_object(struct fscache_object *object); | 452 | extern void fscache_obtained_object(struct fscache_object *object); |
| 424 | 453 | ||
| 454 | #ifdef CONFIG_FSCACHE_OBJECT_LIST | ||
| 455 | extern void fscache_object_destroy(struct fscache_object *object); | ||
| 456 | #else | ||
| 457 | #define fscache_object_destroy(object) do {} while(0) | ||
| 458 | #endif | ||
| 459 | |||
| 425 | /** | 460 | /** |
| 426 | * fscache_object_destroyed - Note destruction of an object in a cache | 461 | * fscache_object_destroyed - Note destruction of an object in a cache |
| 427 | * @cache: The cache from which the object came | 462 | * @cache: The cache from which the object came |
| @@ -460,6 +495,7 @@ static inline void fscache_object_lookup_error(struct fscache_object *object) | |||
| 460 | static inline | 495 | static inline |
| 461 | void fscache_set_store_limit(struct fscache_object *object, loff_t i_size) | 496 | void fscache_set_store_limit(struct fscache_object *object, loff_t i_size) |
| 462 | { | 497 | { |
| 498 | object->store_limit_l = i_size; | ||
| 463 | object->store_limit = i_size >> PAGE_SHIFT; | 499 | object->store_limit = i_size >> PAGE_SHIFT; |
| 464 | if (i_size & ~PAGE_MASK) | 500 | if (i_size & ~PAGE_MASK) |
| 465 | object->store_limit++; | 501 | object->store_limit++; |
diff --git a/include/linux/fscache.h b/include/linux/fscache.h index 6d8ee466e0a0..595ce49288b7 100644 --- a/include/linux/fscache.h +++ b/include/linux/fscache.h | |||
| @@ -202,6 +202,8 @@ extern int __fscache_write_page(struct fscache_cookie *, struct page *, gfp_t); | |||
| 202 | extern void __fscache_uncache_page(struct fscache_cookie *, struct page *); | 202 | extern void __fscache_uncache_page(struct fscache_cookie *, struct page *); |
| 203 | extern bool __fscache_check_page_write(struct fscache_cookie *, struct page *); | 203 | extern bool __fscache_check_page_write(struct fscache_cookie *, struct page *); |
| 204 | extern void __fscache_wait_on_page_write(struct fscache_cookie *, struct page *); | 204 | extern void __fscache_wait_on_page_write(struct fscache_cookie *, struct page *); |
| 205 | extern bool __fscache_maybe_release_page(struct fscache_cookie *, struct page *, | ||
| 206 | gfp_t); | ||
| 205 | 207 | ||
| 206 | /** | 208 | /** |
| 207 | * fscache_register_netfs - Register a filesystem as desiring caching services | 209 | * fscache_register_netfs - Register a filesystem as desiring caching services |
| @@ -615,4 +617,29 @@ void fscache_wait_on_page_write(struct fscache_cookie *cookie, | |||
| 615 | __fscache_wait_on_page_write(cookie, page); | 617 | __fscache_wait_on_page_write(cookie, page); |
| 616 | } | 618 | } |
| 617 | 619 | ||
| 620 | /** | ||
| 621 | * fscache_maybe_release_page - Consider releasing a page, cancelling a store | ||
| 622 | * @cookie: The cookie representing the cache object | ||
| 623 | * @page: The netfs page that is being cached. | ||
| 624 | * @gfp: The gfp flags passed to releasepage() | ||
| 625 | * | ||
| 626 | * Consider releasing a page for the vmscan algorithm, on behalf of the netfs's | ||
| 627 | * releasepage() call. A storage request on the page may cancelled if it is | ||
| 628 | * not currently being processed. | ||
| 629 | * | ||
| 630 | * The function returns true if the page no longer has a storage request on it, | ||
| 631 | * and false if a storage request is left in place. If true is returned, the | ||
| 632 | * page will have been passed to fscache_uncache_page(). If false is returned | ||
| 633 | * the page cannot be freed yet. | ||
| 634 | */ | ||
| 635 | static inline | ||
| 636 | bool fscache_maybe_release_page(struct fscache_cookie *cookie, | ||
| 637 | struct page *page, | ||
| 638 | gfp_t gfp) | ||
| 639 | { | ||
| 640 | if (fscache_cookie_valid(cookie) && PageFsCache(page)) | ||
| 641 | return __fscache_maybe_release_page(cookie, page, gfp); | ||
| 642 | return false; | ||
| 643 | } | ||
| 644 | |||
| 618 | #endif /* _LINUX_FSCACHE_H */ | 645 | #endif /* _LINUX_FSCACHE_H */ |
diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h index dc3b1328aaeb..0b4f97d24d7f 100644 --- a/include/linux/ftrace.h +++ b/include/linux/ftrace.h | |||
| @@ -19,7 +19,7 @@ | |||
| 19 | extern int ftrace_enabled; | 19 | extern int ftrace_enabled; |
| 20 | extern int | 20 | extern int |
| 21 | ftrace_enable_sysctl(struct ctl_table *table, int write, | 21 | ftrace_enable_sysctl(struct ctl_table *table, int write, |
| 22 | struct file *filp, void __user *buffer, size_t *lenp, | 22 | void __user *buffer, size_t *lenp, |
| 23 | loff_t *ppos); | 23 | loff_t *ppos); |
| 24 | 24 | ||
| 25 | typedef void (*ftrace_func_t)(unsigned long ip, unsigned long parent_ip); | 25 | typedef void (*ftrace_func_t)(unsigned long ip, unsigned long parent_ip); |
| @@ -94,7 +94,7 @@ static inline void ftrace_start(void) { } | |||
| 94 | extern int stack_tracer_enabled; | 94 | extern int stack_tracer_enabled; |
| 95 | int | 95 | int |
| 96 | stack_trace_sysctl(struct ctl_table *table, int write, | 96 | stack_trace_sysctl(struct ctl_table *table, int write, |
| 97 | struct file *file, void __user *buffer, size_t *lenp, | 97 | void __user *buffer, size_t *lenp, |
| 98 | loff_t *ppos); | 98 | loff_t *ppos); |
| 99 | #endif | 99 | #endif |
| 100 | 100 | ||
| @@ -241,7 +241,7 @@ extern void ftrace_enable_daemon(void); | |||
| 241 | # define ftrace_set_filter(buf, len, reset) do { } while (0) | 241 | # define ftrace_set_filter(buf, len, reset) do { } while (0) |
| 242 | # define ftrace_disable_daemon() do { } while (0) | 242 | # define ftrace_disable_daemon() do { } while (0) |
| 243 | # define ftrace_enable_daemon() do { } while (0) | 243 | # define ftrace_enable_daemon() do { } while (0) |
| 244 | static inline void ftrace_release(void *start, unsigned long size) { } | 244 | static inline void ftrace_release_mod(struct module *mod) {} |
| 245 | static inline int register_ftrace_command(struct ftrace_func_command *cmd) | 245 | static inline int register_ftrace_command(struct ftrace_func_command *cmd) |
| 246 | { | 246 | { |
| 247 | return -EINVAL; | 247 | return -EINVAL; |
| @@ -446,7 +446,6 @@ static inline void unpause_graph_tracing(void) { } | |||
| 446 | #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ | 446 | #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ |
| 447 | 447 | ||
| 448 | #ifdef CONFIG_TRACING | 448 | #ifdef CONFIG_TRACING |
| 449 | #include <linux/sched.h> | ||
| 450 | 449 | ||
| 451 | /* flags for current->trace */ | 450 | /* flags for current->trace */ |
| 452 | enum { | 451 | enum { |
diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h index a81170de7f6b..47bbdf9c38d0 100644 --- a/include/linux/ftrace_event.h +++ b/include/linux/ftrace_event.h | |||
| @@ -1,9 +1,10 @@ | |||
| 1 | #ifndef _LINUX_FTRACE_EVENT_H | 1 | #ifndef _LINUX_FTRACE_EVENT_H |
| 2 | #define _LINUX_FTRACE_EVENT_H | 2 | #define _LINUX_FTRACE_EVENT_H |
| 3 | 3 | ||
| 4 | #include <linux/trace_seq.h> | ||
| 5 | #include <linux/ring_buffer.h> | 4 | #include <linux/ring_buffer.h> |
| 5 | #include <linux/trace_seq.h> | ||
| 6 | #include <linux/percpu.h> | 6 | #include <linux/percpu.h> |
| 7 | #include <linux/hardirq.h> | ||
| 7 | 8 | ||
| 8 | struct trace_array; | 9 | struct trace_array; |
| 9 | struct tracer; | 10 | struct tracer; |
| @@ -34,7 +35,7 @@ struct trace_entry { | |||
| 34 | unsigned char flags; | 35 | unsigned char flags; |
| 35 | unsigned char preempt_count; | 36 | unsigned char preempt_count; |
| 36 | int pid; | 37 | int pid; |
| 37 | int tgid; | 38 | int lock_depth; |
| 38 | }; | 39 | }; |
| 39 | 40 | ||
| 40 | #define FTRACE_MAX_EVENT \ | 41 | #define FTRACE_MAX_EVENT \ |
| @@ -93,16 +94,22 @@ void tracing_generic_entry_update(struct trace_entry *entry, | |||
| 93 | unsigned long flags, | 94 | unsigned long flags, |
| 94 | int pc); | 95 | int pc); |
| 95 | struct ring_buffer_event * | 96 | struct ring_buffer_event * |
| 96 | trace_current_buffer_lock_reserve(int type, unsigned long len, | 97 | trace_current_buffer_lock_reserve(struct ring_buffer **current_buffer, |
| 98 | int type, unsigned long len, | ||
| 97 | unsigned long flags, int pc); | 99 | unsigned long flags, int pc); |
| 98 | void trace_current_buffer_unlock_commit(struct ring_buffer_event *event, | 100 | void trace_current_buffer_unlock_commit(struct ring_buffer *buffer, |
| 101 | struct ring_buffer_event *event, | ||
| 99 | unsigned long flags, int pc); | 102 | unsigned long flags, int pc); |
| 100 | void trace_nowake_buffer_unlock_commit(struct ring_buffer_event *event, | 103 | void trace_nowake_buffer_unlock_commit(struct ring_buffer *buffer, |
| 104 | struct ring_buffer_event *event, | ||
| 101 | unsigned long flags, int pc); | 105 | unsigned long flags, int pc); |
| 102 | void trace_current_buffer_discard_commit(struct ring_buffer_event *event); | 106 | void trace_current_buffer_discard_commit(struct ring_buffer *buffer, |
| 107 | struct ring_buffer_event *event); | ||
| 103 | 108 | ||
| 104 | void tracing_record_cmdline(struct task_struct *tsk); | 109 | void tracing_record_cmdline(struct task_struct *tsk); |
| 105 | 110 | ||
| 111 | struct event_filter; | ||
| 112 | |||
| 106 | struct ftrace_event_call { | 113 | struct ftrace_event_call { |
| 107 | struct list_head list; | 114 | struct list_head list; |
| 108 | char *name; | 115 | char *name; |
| @@ -110,34 +117,52 @@ struct ftrace_event_call { | |||
| 110 | struct dentry *dir; | 117 | struct dentry *dir; |
| 111 | struct trace_event *event; | 118 | struct trace_event *event; |
| 112 | int enabled; | 119 | int enabled; |
| 113 | int (*regfunc)(void); | 120 | int (*regfunc)(struct ftrace_event_call *); |
| 114 | void (*unregfunc)(void); | 121 | void (*unregfunc)(struct ftrace_event_call *); |
| 115 | int id; | 122 | int id; |
| 116 | int (*raw_init)(void); | 123 | int (*raw_init)(struct ftrace_event_call *); |
| 117 | int (*show_format)(struct trace_seq *s); | 124 | int (*show_format)(struct ftrace_event_call *, |
| 118 | int (*define_fields)(void); | 125 | struct trace_seq *); |
| 126 | int (*define_fields)(struct ftrace_event_call *); | ||
| 119 | struct list_head fields; | 127 | struct list_head fields; |
| 120 | int filter_active; | 128 | int filter_active; |
| 121 | void *filter; | 129 | struct event_filter *filter; |
| 122 | void *mod; | 130 | void *mod; |
| 131 | void *data; | ||
| 123 | 132 | ||
| 124 | atomic_t profile_count; | 133 | atomic_t profile_count; |
| 125 | int (*profile_enable)(struct ftrace_event_call *); | 134 | int (*profile_enable)(struct ftrace_event_call *); |
| 126 | void (*profile_disable)(struct ftrace_event_call *); | 135 | void (*profile_disable)(struct ftrace_event_call *); |
| 127 | }; | 136 | }; |
| 128 | 137 | ||
| 138 | #define FTRACE_MAX_PROFILE_SIZE 2048 | ||
| 139 | |||
| 140 | extern char *perf_trace_buf; | ||
| 141 | extern char *perf_trace_buf_nmi; | ||
| 142 | |||
| 129 | #define MAX_FILTER_PRED 32 | 143 | #define MAX_FILTER_PRED 32 |
| 130 | #define MAX_FILTER_STR_VAL 128 | 144 | #define MAX_FILTER_STR_VAL 256 /* Should handle KSYM_SYMBOL_LEN */ |
| 131 | 145 | ||
| 132 | extern int init_preds(struct ftrace_event_call *call); | ||
| 133 | extern void destroy_preds(struct ftrace_event_call *call); | 146 | extern void destroy_preds(struct ftrace_event_call *call); |
| 134 | extern int filter_match_preds(struct ftrace_event_call *call, void *rec); | 147 | extern int filter_match_preds(struct event_filter *filter, void *rec); |
| 135 | extern int filter_current_check_discard(struct ftrace_event_call *call, | 148 | extern int filter_current_check_discard(struct ring_buffer *buffer, |
| 149 | struct ftrace_event_call *call, | ||
| 136 | void *rec, | 150 | void *rec, |
| 137 | struct ring_buffer_event *event); | 151 | struct ring_buffer_event *event); |
| 138 | 152 | ||
| 139 | extern int trace_define_field(struct ftrace_event_call *call, char *type, | 153 | enum { |
| 140 | char *name, int offset, int size, int is_signed); | 154 | FILTER_OTHER = 0, |
| 155 | FILTER_STATIC_STRING, | ||
| 156 | FILTER_DYN_STRING, | ||
| 157 | FILTER_PTR_STRING, | ||
| 158 | }; | ||
| 159 | |||
| 160 | extern int trace_define_common_fields(struct ftrace_event_call *call); | ||
| 161 | extern int trace_define_field(struct ftrace_event_call *call, const char *type, | ||
| 162 | const char *name, int offset, int size, | ||
| 163 | int is_signed, int filter_type); | ||
| 164 | extern int trace_add_event_call(struct ftrace_event_call *call); | ||
| 165 | extern void trace_remove_event_call(struct ftrace_event_call *call); | ||
| 141 | 166 | ||
| 142 | #define is_signed_type(type) (((type)(-1)) < 0) | 167 | #define is_signed_type(type) (((type)(-1)) < 0) |
| 143 | 168 | ||
| @@ -162,11 +187,13 @@ do { \ | |||
| 162 | __trace_printk(ip, fmt, ##args); \ | 187 | __trace_printk(ip, fmt, ##args); \ |
| 163 | } while (0) | 188 | } while (0) |
| 164 | 189 | ||
| 165 | #define __common_field(type, item, is_signed) \ | 190 | #ifdef CONFIG_EVENT_PROFILE |
| 166 | ret = trace_define_field(event_call, #type, "common_" #item, \ | 191 | struct perf_event; |
| 167 | offsetof(typeof(field.ent), item), \ | 192 | extern int ftrace_profile_enable(int event_id); |
| 168 | sizeof(field.ent.item), is_signed); \ | 193 | extern void ftrace_profile_disable(int event_id); |
| 169 | if (ret) \ | 194 | extern int ftrace_profile_set_filter(struct perf_event *event, int event_id, |
| 170 | return ret; | 195 | char *filter_str); |
| 196 | extern void ftrace_profile_free_filter(struct perf_event *event); | ||
| 197 | #endif | ||
| 171 | 198 | ||
| 172 | #endif /* _LINUX_FTRACE_EVENT_H */ | 199 | #endif /* _LINUX_FTRACE_EVENT_H */ |
diff --git a/include/linux/fuse.h b/include/linux/fuse.h index cf593bf9fd32..3e2925a34bf0 100644 --- a/include/linux/fuse.h +++ b/include/linux/fuse.h | |||
| @@ -30,6 +30,10 @@ | |||
| 30 | * - add umask flag to input argument of open, mknod and mkdir | 30 | * - add umask flag to input argument of open, mknod and mkdir |
| 31 | * - add notification messages for invalidation of inodes and | 31 | * - add notification messages for invalidation of inodes and |
| 32 | * directory entries | 32 | * directory entries |
| 33 | * | ||
| 34 | * 7.13 | ||
| 35 | * - make max number of background requests and congestion threshold | ||
| 36 | * tunables | ||
| 33 | */ | 37 | */ |
| 34 | 38 | ||
| 35 | #ifndef _LINUX_FUSE_H | 39 | #ifndef _LINUX_FUSE_H |
| @@ -37,11 +41,31 @@ | |||
| 37 | 41 | ||
| 38 | #include <linux/types.h> | 42 | #include <linux/types.h> |
| 39 | 43 | ||
| 44 | /* | ||
| 45 | * Version negotiation: | ||
| 46 | * | ||
| 47 | * Both the kernel and userspace send the version they support in the | ||
| 48 | * INIT request and reply respectively. | ||
| 49 | * | ||
| 50 | * If the major versions match then both shall use the smallest | ||
| 51 | * of the two minor versions for communication. | ||
| 52 | * | ||
| 53 | * If the kernel supports a larger major version, then userspace shall | ||
| 54 | * reply with the major version it supports, ignore the rest of the | ||
| 55 | * INIT message and expect a new INIT message from the kernel with a | ||
| 56 | * matching major version. | ||
| 57 | * | ||
| 58 | * If the library supports a larger major version, then it shall fall | ||
| 59 | * back to the major protocol version sent by the kernel for | ||
| 60 | * communication and reply with that major version (and an arbitrary | ||
| 61 | * supported minor version). | ||
| 62 | */ | ||
| 63 | |||
| 40 | /** Version number of this interface */ | 64 | /** Version number of this interface */ |
| 41 | #define FUSE_KERNEL_VERSION 7 | 65 | #define FUSE_KERNEL_VERSION 7 |
| 42 | 66 | ||
| 43 | /** Minor version number of this interface */ | 67 | /** Minor version number of this interface */ |
| 44 | #define FUSE_KERNEL_MINOR_VERSION 12 | 68 | #define FUSE_KERNEL_MINOR_VERSION 13 |
| 45 | 69 | ||
| 46 | /** The node ID of the root inode */ | 70 | /** The node ID of the root inode */ |
| 47 | #define FUSE_ROOT_ID 1 | 71 | #define FUSE_ROOT_ID 1 |
| @@ -427,7 +451,8 @@ struct fuse_init_out { | |||
| 427 | __u32 minor; | 451 | __u32 minor; |
| 428 | __u32 max_readahead; | 452 | __u32 max_readahead; |
| 429 | __u32 flags; | 453 | __u32 flags; |
| 430 | __u32 unused; | 454 | __u16 max_background; |
| 455 | __u16 congestion_threshold; | ||
| 431 | __u32 max_write; | 456 | __u32 max_write; |
| 432 | }; | 457 | }; |
| 433 | 458 | ||
diff --git a/include/linux/futex.h b/include/linux/futex.h index 34956c8fdebf..1e5a26d79232 100644 --- a/include/linux/futex.h +++ b/include/linux/futex.h | |||
| @@ -4,11 +4,6 @@ | |||
| 4 | #include <linux/compiler.h> | 4 | #include <linux/compiler.h> |
| 5 | #include <linux/types.h> | 5 | #include <linux/types.h> |
| 6 | 6 | ||
| 7 | struct inode; | ||
| 8 | struct mm_struct; | ||
| 9 | struct task_struct; | ||
| 10 | union ktime; | ||
| 11 | |||
| 12 | /* Second argument to futex syscall */ | 7 | /* Second argument to futex syscall */ |
| 13 | 8 | ||
| 14 | 9 | ||
| @@ -38,8 +33,8 @@ union ktime; | |||
| 38 | #define FUTEX_LOCK_PI_PRIVATE (FUTEX_LOCK_PI | FUTEX_PRIVATE_FLAG) | 33 | #define FUTEX_LOCK_PI_PRIVATE (FUTEX_LOCK_PI | FUTEX_PRIVATE_FLAG) |
| 39 | #define FUTEX_UNLOCK_PI_PRIVATE (FUTEX_UNLOCK_PI | FUTEX_PRIVATE_FLAG) | 34 | #define FUTEX_UNLOCK_PI_PRIVATE (FUTEX_UNLOCK_PI | FUTEX_PRIVATE_FLAG) |
| 40 | #define FUTEX_TRYLOCK_PI_PRIVATE (FUTEX_TRYLOCK_PI | FUTEX_PRIVATE_FLAG) | 35 | #define FUTEX_TRYLOCK_PI_PRIVATE (FUTEX_TRYLOCK_PI | FUTEX_PRIVATE_FLAG) |
| 41 | #define FUTEX_WAIT_BITSET_PRIVATE (FUTEX_WAIT_BITS | FUTEX_PRIVATE_FLAG) | 36 | #define FUTEX_WAIT_BITSET_PRIVATE (FUTEX_WAIT_BITSET | FUTEX_PRIVATE_FLAG) |
| 42 | #define FUTEX_WAKE_BITSET_PRIVATE (FUTEX_WAKE_BITS | FUTEX_PRIVATE_FLAG) | 37 | #define FUTEX_WAKE_BITSET_PRIVATE (FUTEX_WAKE_BITSET | FUTEX_PRIVATE_FLAG) |
| 43 | #define FUTEX_WAIT_REQUEUE_PI_PRIVATE (FUTEX_WAIT_REQUEUE_PI | \ | 38 | #define FUTEX_WAIT_REQUEUE_PI_PRIVATE (FUTEX_WAIT_REQUEUE_PI | \ |
| 44 | FUTEX_PRIVATE_FLAG) | 39 | FUTEX_PRIVATE_FLAG) |
| 45 | #define FUTEX_CMP_REQUEUE_PI_PRIVATE (FUTEX_CMP_REQUEUE_PI | \ | 40 | #define FUTEX_CMP_REQUEUE_PI_PRIVATE (FUTEX_CMP_REQUEUE_PI | \ |
| @@ -129,6 +124,11 @@ struct robust_list_head { | |||
| 129 | #define FUTEX_BITSET_MATCH_ANY 0xffffffff | 124 | #define FUTEX_BITSET_MATCH_ANY 0xffffffff |
| 130 | 125 | ||
| 131 | #ifdef __KERNEL__ | 126 | #ifdef __KERNEL__ |
| 127 | struct inode; | ||
| 128 | struct mm_struct; | ||
| 129 | struct task_struct; | ||
| 130 | union ktime; | ||
| 131 | |||
| 132 | long do_futex(u32 __user *uaddr, int op, u32 val, union ktime *timeout, | 132 | long do_futex(u32 __user *uaddr, int op, u32 val, union ktime *timeout, |
| 133 | u32 __user *uaddr2, u32 val2, u32 val3); | 133 | u32 __user *uaddr2, u32 val2, u32 val3); |
| 134 | 134 | ||
diff --git a/include/linux/gen_stats.h b/include/linux/gen_stats.h index 710e901085d0..552c8a0a12d1 100644 --- a/include/linux/gen_stats.h +++ b/include/linux/gen_stats.h | |||
| @@ -18,13 +18,11 @@ enum { | |||
| 18 | * @bytes: number of seen bytes | 18 | * @bytes: number of seen bytes |
| 19 | * @packets: number of seen packets | 19 | * @packets: number of seen packets |
| 20 | */ | 20 | */ |
| 21 | struct gnet_stats_basic | 21 | struct gnet_stats_basic { |
| 22 | { | ||
| 23 | __u64 bytes; | 22 | __u64 bytes; |
| 24 | __u32 packets; | 23 | __u32 packets; |
| 25 | }; | 24 | }; |
| 26 | struct gnet_stats_basic_packed | 25 | struct gnet_stats_basic_packed { |
| 27 | { | ||
| 28 | __u64 bytes; | 26 | __u64 bytes; |
| 29 | __u32 packets; | 27 | __u32 packets; |
| 30 | } __attribute__ ((packed)); | 28 | } __attribute__ ((packed)); |
| @@ -34,8 +32,7 @@ struct gnet_stats_basic_packed | |||
| 34 | * @bps: current byte rate | 32 | * @bps: current byte rate |
| 35 | * @pps: current packet rate | 33 | * @pps: current packet rate |
| 36 | */ | 34 | */ |
| 37 | struct gnet_stats_rate_est | 35 | struct gnet_stats_rate_est { |
| 38 | { | ||
| 39 | __u32 bps; | 36 | __u32 bps; |
| 40 | __u32 pps; | 37 | __u32 pps; |
| 41 | }; | 38 | }; |
| @@ -48,8 +45,7 @@ struct gnet_stats_rate_est | |||
| 48 | * @requeues: number of requeues | 45 | * @requeues: number of requeues |
| 49 | * @overlimits: number of enqueues over the limit | 46 | * @overlimits: number of enqueues over the limit |
| 50 | */ | 47 | */ |
| 51 | struct gnet_stats_queue | 48 | struct gnet_stats_queue { |
| 52 | { | ||
| 53 | __u32 qlen; | 49 | __u32 qlen; |
| 54 | __u32 backlog; | 50 | __u32 backlog; |
| 55 | __u32 drops; | 51 | __u32 drops; |
| @@ -62,8 +58,7 @@ struct gnet_stats_queue | |||
| 62 | * @interval: sampling period | 58 | * @interval: sampling period |
| 63 | * @ewma_log: the log of measurement window weight | 59 | * @ewma_log: the log of measurement window weight |
| 64 | */ | 60 | */ |
| 65 | struct gnet_estimator | 61 | struct gnet_estimator { |
| 66 | { | ||
| 67 | signed char interval; | 62 | signed char interval; |
| 68 | unsigned char ewma_log; | 63 | unsigned char ewma_log; |
| 69 | }; | 64 | }; |
diff --git a/include/linux/genhd.h b/include/linux/genhd.h index 45fc320a53c6..297df45ffd0a 100644 --- a/include/linux/genhd.h +++ b/include/linux/genhd.h | |||
| @@ -98,7 +98,7 @@ struct hd_struct { | |||
| 98 | int make_it_fail; | 98 | int make_it_fail; |
| 99 | #endif | 99 | #endif |
| 100 | unsigned long stamp; | 100 | unsigned long stamp; |
| 101 | int in_flight; | 101 | int in_flight[2]; |
| 102 | #ifdef CONFIG_SMP | 102 | #ifdef CONFIG_SMP |
| 103 | struct disk_stats *dkstats; | 103 | struct disk_stats *dkstats; |
| 104 | #else | 104 | #else |
| @@ -142,7 +142,7 @@ struct gendisk { | |||
| 142 | * disks that can't be partitioned. */ | 142 | * disks that can't be partitioned. */ |
| 143 | 143 | ||
| 144 | char disk_name[DISK_NAME_LEN]; /* name of major driver */ | 144 | char disk_name[DISK_NAME_LEN]; /* name of major driver */ |
| 145 | char *(*nodename)(struct gendisk *gd); | 145 | char *(*devnode)(struct gendisk *gd, mode_t *mode); |
| 146 | /* Array of pointers to partitions indexed by partno. | 146 | /* Array of pointers to partitions indexed by partno. |
| 147 | * Protected with matching bdev lock but stat and other | 147 | * Protected with matching bdev lock but stat and other |
| 148 | * non-critical accesses use RCU. Always access through | 148 | * non-critical accesses use RCU. Always access through |
| @@ -151,7 +151,7 @@ struct gendisk { | |||
| 151 | struct disk_part_tbl *part_tbl; | 151 | struct disk_part_tbl *part_tbl; |
| 152 | struct hd_struct part0; | 152 | struct hd_struct part0; |
| 153 | 153 | ||
| 154 | struct block_device_operations *fops; | 154 | const struct block_device_operations *fops; |
| 155 | struct request_queue *queue; | 155 | struct request_queue *queue; |
| 156 | void *private_data; | 156 | void *private_data; |
| 157 | 157 | ||
| @@ -322,18 +322,23 @@ static inline void free_part_stats(struct hd_struct *part) | |||
| 322 | #define part_stat_sub(cpu, gendiskp, field, subnd) \ | 322 | #define part_stat_sub(cpu, gendiskp, field, subnd) \ |
| 323 | part_stat_add(cpu, gendiskp, field, -subnd) | 323 | part_stat_add(cpu, gendiskp, field, -subnd) |
| 324 | 324 | ||
| 325 | static inline void part_inc_in_flight(struct hd_struct *part) | 325 | static inline void part_inc_in_flight(struct hd_struct *part, int rw) |
| 326 | { | 326 | { |
| 327 | part->in_flight++; | 327 | part->in_flight[rw]++; |
| 328 | if (part->partno) | 328 | if (part->partno) |
| 329 | part_to_disk(part)->part0.in_flight++; | 329 | part_to_disk(part)->part0.in_flight[rw]++; |
| 330 | } | 330 | } |
| 331 | 331 | ||
| 332 | static inline void part_dec_in_flight(struct hd_struct *part) | 332 | static inline void part_dec_in_flight(struct hd_struct *part, int rw) |
| 333 | { | 333 | { |
| 334 | part->in_flight--; | 334 | part->in_flight[rw]--; |
| 335 | if (part->partno) | 335 | if (part->partno) |
| 336 | part_to_disk(part)->part0.in_flight--; | 336 | part_to_disk(part)->part0.in_flight[rw]--; |
| 337 | } | ||
| 338 | |||
| 339 | static inline int part_in_flight(struct hd_struct *part) | ||
| 340 | { | ||
| 341 | return part->in_flight[0] + part->in_flight[1]; | ||
| 337 | } | 342 | } |
| 338 | 343 | ||
| 339 | /* block/blk-core.c */ | 344 | /* block/blk-core.c */ |
| @@ -546,6 +551,8 @@ extern ssize_t part_size_show(struct device *dev, | |||
| 546 | struct device_attribute *attr, char *buf); | 551 | struct device_attribute *attr, char *buf); |
| 547 | extern ssize_t part_stat_show(struct device *dev, | 552 | extern ssize_t part_stat_show(struct device *dev, |
| 548 | struct device_attribute *attr, char *buf); | 553 | struct device_attribute *attr, char *buf); |
| 554 | extern ssize_t part_inflight_show(struct device *dev, | ||
| 555 | struct device_attribute *attr, char *buf); | ||
| 549 | #ifdef CONFIG_FAIL_MAKE_REQUEST | 556 | #ifdef CONFIG_FAIL_MAKE_REQUEST |
| 550 | extern ssize_t part_fail_show(struct device *dev, | 557 | extern ssize_t part_fail_show(struct device *dev, |
| 551 | struct device_attribute *attr, char *buf); | 558 | struct device_attribute *attr, char *buf); |
diff --git a/include/linux/gfp.h b/include/linux/gfp.h index 7c777a0da17a..557bdad320b6 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h | |||
| @@ -220,7 +220,7 @@ static inline enum zone_type gfp_zone(gfp_t flags) | |||
| 220 | ((1 << ZONES_SHIFT) - 1); | 220 | ((1 << ZONES_SHIFT) - 1); |
| 221 | 221 | ||
| 222 | if (__builtin_constant_p(bit)) | 222 | if (__builtin_constant_p(bit)) |
| 223 | BUILD_BUG_ON((GFP_ZONE_BAD >> bit) & 1); | 223 | MAYBE_BUILD_BUG_ON((GFP_ZONE_BAD >> bit) & 1); |
| 224 | else { | 224 | else { |
| 225 | #ifdef CONFIG_DEBUG_VM | 225 | #ifdef CONFIG_DEBUG_VM |
| 226 | BUG_ON((GFP_ZONE_BAD >> bit) & 1); | 226 | BUG_ON((GFP_ZONE_BAD >> bit) & 1); |
| @@ -326,7 +326,6 @@ void free_pages_exact(void *virt, size_t size); | |||
| 326 | extern void __free_pages(struct page *page, unsigned int order); | 326 | extern void __free_pages(struct page *page, unsigned int order); |
| 327 | extern void free_pages(unsigned long addr, unsigned int order); | 327 | extern void free_pages(unsigned long addr, unsigned int order); |
| 328 | extern void free_hot_page(struct page *page); | 328 | extern void free_hot_page(struct page *page); |
| 329 | extern void free_cold_page(struct page *page); | ||
| 330 | 329 | ||
| 331 | #define __free_page(page) __free_pages((page), 0) | 330 | #define __free_page(page) __free_pages((page), 0) |
| 332 | #define free_page(addr) free_pages((addr),0) | 331 | #define free_page(addr) free_pages((addr),0) |
| @@ -336,18 +335,6 @@ void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp); | |||
| 336 | void drain_all_pages(void); | 335 | void drain_all_pages(void); |
| 337 | void drain_local_pages(void *dummy); | 336 | void drain_local_pages(void *dummy); |
| 338 | 337 | ||
| 339 | extern bool oom_killer_disabled; | ||
| 340 | |||
| 341 | static inline void oom_killer_disable(void) | ||
| 342 | { | ||
| 343 | oom_killer_disabled = true; | ||
| 344 | } | ||
| 345 | |||
| 346 | static inline void oom_killer_enable(void) | ||
| 347 | { | ||
| 348 | oom_killer_disabled = false; | ||
| 349 | } | ||
| 350 | |||
| 351 | extern gfp_t gfp_allowed_mask; | 338 | extern gfp_t gfp_allowed_mask; |
| 352 | 339 | ||
| 353 | static inline void set_gfp_allowed_mask(gfp_t mask) | 340 | static inline void set_gfp_allowed_mask(gfp_t mask) |
diff --git a/include/linux/gfs2_ondisk.h b/include/linux/gfs2_ondisk.h index c56b4bce56d0..81f90a59cda6 100644 --- a/include/linux/gfs2_ondisk.h +++ b/include/linux/gfs2_ondisk.h | |||
| @@ -81,7 +81,11 @@ struct gfs2_meta_header { | |||
| 81 | __be32 mh_type; | 81 | __be32 mh_type; |
| 82 | __be64 __pad0; /* Was generation number in gfs1 */ | 82 | __be64 __pad0; /* Was generation number in gfs1 */ |
| 83 | __be32 mh_format; | 83 | __be32 mh_format; |
| 84 | __be32 __pad1; /* Was incarnation number in gfs1 */ | 84 | /* This union is to keep userspace happy */ |
| 85 | union { | ||
| 86 | __be32 mh_jid; /* Was incarnation number in gfs1 */ | ||
| 87 | __be32 __pad1; | ||
| 88 | }; | ||
| 85 | }; | 89 | }; |
| 86 | 90 | ||
| 87 | /* | 91 | /* |
| @@ -333,6 +337,28 @@ struct gfs2_leaf { | |||
| 333 | 337 | ||
| 334 | /* | 338 | /* |
| 335 | * Extended attribute header format | 339 | * Extended attribute header format |
| 340 | * | ||
| 341 | * This works in a similar way to dirents. There is a fixed size header | ||
| 342 | * followed by a variable length section made up of the name and the | ||
| 343 | * associated data. In the case of a "stuffed" entry, the value is | ||
| 344 | * inline directly after the name, the ea_num_ptrs entry will be | ||
| 345 | * zero in that case. For non-"stuffed" entries, there will be | ||
| 346 | * a set of pointers (aligned to 8 byte boundary) to the block(s) | ||
| 347 | * containing the value. | ||
| 348 | * | ||
| 349 | * The blocks containing the values and the blocks containing the | ||
| 350 | * extended attribute headers themselves all start with the common | ||
| 351 | * metadata header. Each inode, if it has extended attributes, will | ||
| 352 | * have either a single block containing the extended attribute headers | ||
| 353 | * or a single indirect block pointing to blocks containing the | ||
| 354 | * extended attribure headers. | ||
| 355 | * | ||
| 356 | * The maximim size of the data part of an extended attribute is 64k | ||
| 357 | * so the number of blocks required depends upon block size. Since the | ||
| 358 | * block size also determines the number of pointers in an indirect | ||
| 359 | * block, its a fairly complicated calculation to work out the maximum | ||
| 360 | * number of blocks that an inode may have relating to extended attributes. | ||
| 361 | * | ||
| 336 | */ | 362 | */ |
| 337 | 363 | ||
| 338 | #define GFS2_EA_MAX_NAME_LEN 255 | 364 | #define GFS2_EA_MAX_NAME_LEN 255 |
diff --git a/include/linux/gpio.h b/include/linux/gpio.h index e10c49a5b96e..059bd189d35d 100644 --- a/include/linux/gpio.h +++ b/include/linux/gpio.h | |||
| @@ -12,6 +12,8 @@ | |||
| 12 | #include <linux/types.h> | 12 | #include <linux/types.h> |
| 13 | #include <linux/errno.h> | 13 | #include <linux/errno.h> |
| 14 | 14 | ||
| 15 | struct device; | ||
| 16 | |||
| 15 | /* | 17 | /* |
| 16 | * Some platforms don't support the GPIO programming interface. | 18 | * Some platforms don't support the GPIO programming interface. |
| 17 | * | 19 | * |
| @@ -89,6 +91,15 @@ static inline int gpio_export(unsigned gpio, bool direction_may_change) | |||
| 89 | return -EINVAL; | 91 | return -EINVAL; |
| 90 | } | 92 | } |
| 91 | 93 | ||
| 94 | static inline int gpio_export_link(struct device *dev, const char *name, | ||
| 95 | unsigned gpio) | ||
| 96 | { | ||
| 97 | /* GPIO can never have been exported */ | ||
| 98 | WARN_ON(1); | ||
| 99 | return -EINVAL; | ||
| 100 | } | ||
| 101 | |||
| 102 | |||
| 92 | static inline void gpio_unexport(unsigned gpio) | 103 | static inline void gpio_unexport(unsigned gpio) |
| 93 | { | 104 | { |
| 94 | /* GPIO can never have been exported */ | 105 | /* GPIO can never have been exported */ |
diff --git a/include/linux/hardirq.h b/include/linux/hardirq.h index 8246c697863d..d5b387669dab 100644 --- a/include/linux/hardirq.h +++ b/include/linux/hardirq.h | |||
| @@ -64,6 +64,12 @@ | |||
| 64 | #define HARDIRQ_OFFSET (1UL << HARDIRQ_SHIFT) | 64 | #define HARDIRQ_OFFSET (1UL << HARDIRQ_SHIFT) |
| 65 | #define NMI_OFFSET (1UL << NMI_SHIFT) | 65 | #define NMI_OFFSET (1UL << NMI_SHIFT) |
| 66 | 66 | ||
| 67 | #ifndef PREEMPT_ACTIVE | ||
| 68 | #define PREEMPT_ACTIVE_BITS 1 | ||
| 69 | #define PREEMPT_ACTIVE_SHIFT (NMI_SHIFT + NMI_BITS) | ||
| 70 | #define PREEMPT_ACTIVE (__IRQ_MASK(PREEMPT_ACTIVE_BITS) << PREEMPT_ACTIVE_SHIFT) | ||
| 71 | #endif | ||
| 72 | |||
| 67 | #if PREEMPT_ACTIVE < (1 << (NMI_SHIFT + NMI_BITS)) | 73 | #if PREEMPT_ACTIVE < (1 << (NMI_SHIFT + NMI_BITS)) |
| 68 | #error PREEMPT_ACTIVE is too low! | 74 | #error PREEMPT_ACTIVE is too low! |
| 69 | #endif | 75 | #endif |
| @@ -132,17 +138,41 @@ static inline void account_system_vtime(struct task_struct *tsk) | |||
| 132 | } | 138 | } |
| 133 | #endif | 139 | #endif |
| 134 | 140 | ||
| 135 | #if defined(CONFIG_NO_HZ) && !defined(CONFIG_CLASSIC_RCU) | 141 | #if defined(CONFIG_NO_HZ) |
| 142 | #if defined(CONFIG_TINY_RCU) | ||
| 143 | extern void rcu_enter_nohz(void); | ||
| 144 | extern void rcu_exit_nohz(void); | ||
| 145 | |||
| 146 | static inline void rcu_irq_enter(void) | ||
| 147 | { | ||
| 148 | rcu_exit_nohz(); | ||
| 149 | } | ||
| 150 | |||
| 151 | static inline void rcu_irq_exit(void) | ||
| 152 | { | ||
| 153 | rcu_enter_nohz(); | ||
| 154 | } | ||
| 155 | |||
| 156 | static inline void rcu_nmi_enter(void) | ||
| 157 | { | ||
| 158 | } | ||
| 159 | |||
| 160 | static inline void rcu_nmi_exit(void) | ||
| 161 | { | ||
| 162 | } | ||
| 163 | |||
| 164 | #else | ||
| 136 | extern void rcu_irq_enter(void); | 165 | extern void rcu_irq_enter(void); |
| 137 | extern void rcu_irq_exit(void); | 166 | extern void rcu_irq_exit(void); |
| 138 | extern void rcu_nmi_enter(void); | 167 | extern void rcu_nmi_enter(void); |
| 139 | extern void rcu_nmi_exit(void); | 168 | extern void rcu_nmi_exit(void); |
| 169 | #endif | ||
| 140 | #else | 170 | #else |
| 141 | # define rcu_irq_enter() do { } while (0) | 171 | # define rcu_irq_enter() do { } while (0) |
| 142 | # define rcu_irq_exit() do { } while (0) | 172 | # define rcu_irq_exit() do { } while (0) |
| 143 | # define rcu_nmi_enter() do { } while (0) | 173 | # define rcu_nmi_enter() do { } while (0) |
| 144 | # define rcu_nmi_exit() do { } while (0) | 174 | # define rcu_nmi_exit() do { } while (0) |
| 145 | #endif /* #if defined(CONFIG_NO_HZ) && !defined(CONFIG_CLASSIC_RCU) */ | 175 | #endif /* #if defined(CONFIG_NO_HZ) */ |
| 146 | 176 | ||
| 147 | /* | 177 | /* |
| 148 | * It is safe to do non-atomic ops on ->hardirq_context, | 178 | * It is safe to do non-atomic ops on ->hardirq_context, |
diff --git a/include/linux/hayesesp.h b/include/linux/hayesesp.h index 940aeb51d53f..92b08cfe4a75 100644 --- a/include/linux/hayesesp.h +++ b/include/linux/hayesesp.h | |||
| @@ -96,7 +96,6 @@ struct esp_struct { | |||
| 96 | int xmit_head; | 96 | int xmit_head; |
| 97 | int xmit_tail; | 97 | int xmit_tail; |
| 98 | int xmit_cnt; | 98 | int xmit_cnt; |
| 99 | wait_queue_head_t delta_msr_wait; | ||
| 100 | wait_queue_head_t break_wait; | 99 | wait_queue_head_t break_wait; |
| 101 | struct async_icount icount; /* kernel counters for the 4 input interrupts */ | 100 | struct async_icount icount; /* kernel counters for the 4 input interrupts */ |
| 102 | struct hayes_esp_config config; /* port configuration */ | 101 | struct hayes_esp_config config; /* port configuration */ |
diff --git a/include/linux/hdlc.h b/include/linux/hdlc.h index 6a6e701f1631..ee275c8b3df1 100644 --- a/include/linux/hdlc.h +++ b/include/linux/hdlc.h | |||
| @@ -38,7 +38,7 @@ struct hdlc_proto { | |||
| 38 | int (*ioctl)(struct net_device *dev, struct ifreq *ifr); | 38 | int (*ioctl)(struct net_device *dev, struct ifreq *ifr); |
| 39 | __be16 (*type_trans)(struct sk_buff *skb, struct net_device *dev); | 39 | __be16 (*type_trans)(struct sk_buff *skb, struct net_device *dev); |
| 40 | int (*netif_rx)(struct sk_buff *skb); | 40 | int (*netif_rx)(struct sk_buff *skb); |
| 41 | int (*xmit)(struct sk_buff *skb, struct net_device *dev); | 41 | netdev_tx_t (*xmit)(struct sk_buff *skb, struct net_device *dev); |
| 42 | struct module *module; | 42 | struct module *module; |
| 43 | struct hdlc_proto *next; /* next protocol in the list */ | 43 | struct hdlc_proto *next; /* next protocol in the list */ |
| 44 | }; | 44 | }; |
| @@ -51,7 +51,7 @@ typedef struct hdlc_device { | |||
| 51 | unsigned short encoding, unsigned short parity); | 51 | unsigned short encoding, unsigned short parity); |
| 52 | 52 | ||
| 53 | /* hardware driver must handle this instead of dev->hard_start_xmit */ | 53 | /* hardware driver must handle this instead of dev->hard_start_xmit */ |
| 54 | int (*xmit)(struct sk_buff *skb, struct net_device *dev); | 54 | netdev_tx_t (*xmit)(struct sk_buff *skb, struct net_device *dev); |
| 55 | 55 | ||
| 56 | /* Things below are for HDLC layer internal use only */ | 56 | /* Things below are for HDLC layer internal use only */ |
| 57 | const struct hdlc_proto *proto; | 57 | const struct hdlc_proto *proto; |
| @@ -60,7 +60,7 @@ typedef struct hdlc_device { | |||
| 60 | spinlock_t state_lock; | 60 | spinlock_t state_lock; |
| 61 | void *state; | 61 | void *state; |
| 62 | void *priv; | 62 | void *priv; |
| 63 | }hdlc_device; | 63 | } hdlc_device; |
| 64 | 64 | ||
| 65 | 65 | ||
| 66 | 66 | ||
| @@ -106,7 +106,7 @@ void hdlc_close(struct net_device *dev); | |||
| 106 | /* May be used by hardware driver */ | 106 | /* May be used by hardware driver */ |
| 107 | int hdlc_change_mtu(struct net_device *dev, int new_mtu); | 107 | int hdlc_change_mtu(struct net_device *dev, int new_mtu); |
| 108 | /* Must be pointed to by hw driver's dev->netdev_ops->ndo_start_xmit */ | 108 | /* Must be pointed to by hw driver's dev->netdev_ops->ndo_start_xmit */ |
| 109 | int hdlc_start_xmit(struct sk_buff *skb, struct net_device *dev); | 109 | netdev_tx_t hdlc_start_xmit(struct sk_buff *skb, struct net_device *dev); |
| 110 | 110 | ||
| 111 | int attach_hdlc_protocol(struct net_device *dev, struct hdlc_proto *proto, | 111 | int attach_hdlc_protocol(struct net_device *dev, struct hdlc_proto *proto, |
| 112 | size_t size); | 112 | size_t size); |
diff --git a/include/linux/hid-debug.h b/include/linux/hid-debug.h index 50d568ec178a..53744fa1c8b7 100644 --- a/include/linux/hid-debug.h +++ b/include/linux/hid-debug.h | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | #define __HID_DEBUG_H | 2 | #define __HID_DEBUG_H |
| 3 | 3 | ||
| 4 | /* | 4 | /* |
| 5 | * Copyright (c) 2007 Jiri Kosina | 5 | * Copyright (c) 2007-2009 Jiri Kosina |
| 6 | */ | 6 | */ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| @@ -22,24 +22,44 @@ | |||
| 22 | * | 22 | * |
| 23 | */ | 23 | */ |
| 24 | 24 | ||
| 25 | #ifdef CONFIG_HID_DEBUG | 25 | #define HID_DEBUG_BUFSIZE 512 |
| 26 | 26 | ||
| 27 | void hid_dump_input(struct hid_usage *, __s32); | 27 | #ifdef CONFIG_DEBUG_FS |
| 28 | void hid_dump_device(struct hid_device *); | 28 | |
| 29 | void hid_dump_field(struct hid_field *, int); | 29 | void hid_dump_input(struct hid_device *, struct hid_usage *, __s32); |
| 30 | void hid_resolv_usage(unsigned); | 30 | void hid_dump_device(struct hid_device *, struct seq_file *); |
| 31 | void hid_resolv_event(__u8, __u16); | 31 | void hid_dump_field(struct hid_field *, int, struct seq_file *); |
| 32 | char *hid_resolv_usage(unsigned, struct seq_file *); | ||
| 33 | void hid_debug_register(struct hid_device *, const char *); | ||
| 34 | void hid_debug_unregister(struct hid_device *); | ||
| 35 | void hid_debug_init(void); | ||
| 36 | void hid_debug_exit(void); | ||
| 37 | void hid_debug_event(struct hid_device *, char *); | ||
| 32 | 38 | ||
| 33 | #else | ||
| 34 | 39 | ||
| 35 | #define hid_dump_input(a,b) do { } while (0) | 40 | struct hid_debug_list { |
| 36 | #define hid_dump_device(c) do { } while (0) | 41 | char *hid_debug_buf; |
| 37 | #define hid_dump_field(a,b) do { } while (0) | 42 | int head; |
| 38 | #define hid_resolv_usage(a) do { } while (0) | 43 | int tail; |
| 39 | #define hid_resolv_event(a,b) do { } while (0) | 44 | struct fasync_struct *fasync; |
| 45 | struct hid_device *hdev; | ||
| 46 | struct list_head node; | ||
| 47 | struct mutex read_mutex; | ||
| 48 | }; | ||
| 40 | 49 | ||
| 41 | #endif /* CONFIG_HID_DEBUG */ | 50 | #else |
| 42 | 51 | ||
| 52 | #define hid_dump_input(a,b,c) do { } while (0) | ||
| 53 | #define hid_dump_device(a,b) do { } while (0) | ||
| 54 | #define hid_dump_field(a,b,c) do { } while (0) | ||
| 55 | #define hid_resolv_usage(a,b) do { } while (0) | ||
| 56 | #define hid_debug_register(a, b) do { } while (0) | ||
| 57 | #define hid_debug_unregister(a) do { } while (0) | ||
| 58 | #define hid_debug_init() do { } while (0) | ||
| 59 | #define hid_debug_exit() do { } while (0) | ||
| 60 | #define hid_debug_event(a,b) do { } while (0) | ||
| 61 | |||
| 62 | #endif | ||
| 43 | 63 | ||
| 44 | #endif | 64 | #endif |
| 45 | 65 | ||
diff --git a/include/linux/hid.h b/include/linux/hid.h index 53489fd4d700..10f628416740 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h | |||
| @@ -494,12 +494,21 @@ struct hid_device { /* device report descriptor */ | |||
| 494 | 494 | ||
| 495 | /* hiddev event handler */ | 495 | /* hiddev event handler */ |
| 496 | int (*hiddev_connect)(struct hid_device *, unsigned int); | 496 | int (*hiddev_connect)(struct hid_device *, unsigned int); |
| 497 | void (*hiddev_disconnect)(struct hid_device *); | ||
| 497 | void (*hiddev_hid_event) (struct hid_device *, struct hid_field *field, | 498 | void (*hiddev_hid_event) (struct hid_device *, struct hid_field *field, |
| 498 | struct hid_usage *, __s32); | 499 | struct hid_usage *, __s32); |
| 499 | void (*hiddev_report_event) (struct hid_device *, struct hid_report *); | 500 | void (*hiddev_report_event) (struct hid_device *, struct hid_report *); |
| 500 | 501 | ||
| 501 | /* handler for raw output data, used by hidraw */ | 502 | /* handler for raw output data, used by hidraw */ |
| 502 | int (*hid_output_raw_report) (struct hid_device *, __u8 *, size_t); | 503 | int (*hid_output_raw_report) (struct hid_device *, __u8 *, size_t); |
| 504 | |||
| 505 | /* debugging support via debugfs */ | ||
| 506 | unsigned short debug; | ||
| 507 | struct dentry *debug_dir; | ||
| 508 | struct dentry *debug_rdesc; | ||
| 509 | struct dentry *debug_events; | ||
| 510 | struct list_head debug_list; | ||
| 511 | wait_queue_head_t debug_wait; | ||
| 503 | }; | 512 | }; |
| 504 | 513 | ||
| 505 | static inline void *hid_get_drvdata(struct hid_device *hdev) | 514 | static inline void *hid_get_drvdata(struct hid_device *hdev) |
| @@ -657,9 +666,7 @@ struct hid_ll_driver { | |||
| 657 | 666 | ||
| 658 | /* HID core API */ | 667 | /* HID core API */ |
| 659 | 668 | ||
| 660 | #ifdef CONFIG_HID_DEBUG | ||
| 661 | extern int hid_debug; | 669 | extern int hid_debug; |
| 662 | #endif | ||
| 663 | 670 | ||
| 664 | extern int hid_add_device(struct hid_device *); | 671 | extern int hid_add_device(struct hid_device *); |
| 665 | extern void hid_destroy_device(struct hid_device *); | 672 | extern void hid_destroy_device(struct hid_device *); |
| @@ -685,6 +692,7 @@ struct hid_device *hid_allocate_device(void); | |||
| 685 | int hid_parse_report(struct hid_device *hid, __u8 *start, unsigned size); | 692 | int hid_parse_report(struct hid_device *hid, __u8 *start, unsigned size); |
| 686 | int hid_check_keys_pressed(struct hid_device *hid); | 693 | int hid_check_keys_pressed(struct hid_device *hid); |
| 687 | int hid_connect(struct hid_device *hid, unsigned int connect_mask); | 694 | int hid_connect(struct hid_device *hid, unsigned int connect_mask); |
| 695 | void hid_disconnect(struct hid_device *hid); | ||
| 688 | 696 | ||
| 689 | /** | 697 | /** |
| 690 | * hid_map_usage - map usage input bits | 698 | * hid_map_usage - map usage input bits |
| @@ -794,6 +802,7 @@ static inline int __must_check hid_hw_start(struct hid_device *hdev, | |||
| 794 | */ | 802 | */ |
| 795 | static inline void hid_hw_stop(struct hid_device *hdev) | 803 | static inline void hid_hw_stop(struct hid_device *hdev) |
| 796 | { | 804 | { |
| 805 | hid_disconnect(hdev); | ||
| 797 | hdev->ll_driver->stop(hdev); | 806 | hdev->ll_driver->stop(hdev); |
| 798 | } | 807 | } |
| 799 | 808 | ||
| @@ -815,21 +824,9 @@ int hid_pidff_init(struct hid_device *hid); | |||
| 815 | #define hid_pidff_init NULL | 824 | #define hid_pidff_init NULL |
| 816 | #endif | 825 | #endif |
| 817 | 826 | ||
| 818 | #ifdef CONFIG_HID_DEBUG | ||
| 819 | #define dbg_hid(format, arg...) if (hid_debug) \ | 827 | #define dbg_hid(format, arg...) if (hid_debug) \ |
| 820 | printk(KERN_DEBUG "%s: " format ,\ | 828 | printk(KERN_DEBUG "%s: " format ,\ |
| 821 | __FILE__ , ## arg) | 829 | __FILE__ , ## arg) |
| 822 | #define dbg_hid_line(format, arg...) if (hid_debug) \ | ||
| 823 | printk(format, ## arg) | ||
| 824 | #else | ||
| 825 | static inline int __attribute__((format(printf, 1, 2))) | ||
| 826 | dbg_hid(const char *fmt, ...) | ||
| 827 | { | ||
| 828 | return 0; | ||
| 829 | } | ||
| 830 | #define dbg_hid_line dbg_hid | ||
| 831 | #endif /* HID_DEBUG */ | ||
| 832 | |||
| 833 | #define err_hid(format, arg...) printk(KERN_ERR "%s: " format "\n" , \ | 830 | #define err_hid(format, arg...) printk(KERN_ERR "%s: " format "\n" , \ |
| 834 | __FILE__ , ## arg) | 831 | __FILE__ , ## arg) |
| 835 | #endif /* HID_FF */ | 832 | #endif /* HID_FF */ |
diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h index 4759917adc71..ff037f0b1b4e 100644 --- a/include/linux/hrtimer.h +++ b/include/linux/hrtimer.h | |||
| @@ -91,7 +91,6 @@ enum hrtimer_restart { | |||
| 91 | * @function: timer expiry callback function | 91 | * @function: timer expiry callback function |
| 92 | * @base: pointer to the timer base (per cpu and per clock) | 92 | * @base: pointer to the timer base (per cpu and per clock) |
| 93 | * @state: state information (See bit values above) | 93 | * @state: state information (See bit values above) |
| 94 | * @cb_entry: list head to enqueue an expired timer into the callback list | ||
| 95 | * @start_site: timer statistics field to store the site where the timer | 94 | * @start_site: timer statistics field to store the site where the timer |
| 96 | * was started | 95 | * was started |
| 97 | * @start_comm: timer statistics field to store the name of the process which | 96 | * @start_comm: timer statistics field to store the name of the process which |
| @@ -108,7 +107,6 @@ struct hrtimer { | |||
| 108 | enum hrtimer_restart (*function)(struct hrtimer *); | 107 | enum hrtimer_restart (*function)(struct hrtimer *); |
| 109 | struct hrtimer_clock_base *base; | 108 | struct hrtimer_clock_base *base; |
| 110 | unsigned long state; | 109 | unsigned long state; |
| 111 | struct list_head cb_entry; | ||
| 112 | #ifdef CONFIG_TIMER_STATS | 110 | #ifdef CONFIG_TIMER_STATS |
| 113 | int start_pid; | 111 | int start_pid; |
| 114 | void *start_site; | 112 | void *start_site; |
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index 5cbc620bdfe0..41a59afc70fa 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h | |||
| @@ -3,15 +3,15 @@ | |||
| 3 | 3 | ||
| 4 | #include <linux/fs.h> | 4 | #include <linux/fs.h> |
| 5 | 5 | ||
| 6 | struct ctl_table; | ||
| 7 | struct user_struct; | ||
| 8 | |||
| 6 | #ifdef CONFIG_HUGETLB_PAGE | 9 | #ifdef CONFIG_HUGETLB_PAGE |
| 7 | 10 | ||
| 8 | #include <linux/mempolicy.h> | 11 | #include <linux/mempolicy.h> |
| 9 | #include <linux/shm.h> | 12 | #include <linux/shm.h> |
| 10 | #include <asm/tlbflush.h> | 13 | #include <asm/tlbflush.h> |
| 11 | 14 | ||
| 12 | struct ctl_table; | ||
| 13 | struct user_struct; | ||
| 14 | |||
| 15 | int PageHuge(struct page *page); | 15 | int PageHuge(struct page *page); |
| 16 | 16 | ||
| 17 | static inline int is_vm_hugetlb_page(struct vm_area_struct *vma) | 17 | static inline int is_vm_hugetlb_page(struct vm_area_struct *vma) |
| @@ -20,11 +20,13 @@ static inline int is_vm_hugetlb_page(struct vm_area_struct *vma) | |||
| 20 | } | 20 | } |
| 21 | 21 | ||
| 22 | void reset_vma_resv_huge_pages(struct vm_area_struct *vma); | 22 | void reset_vma_resv_huge_pages(struct vm_area_struct *vma); |
| 23 | int hugetlb_sysctl_handler(struct ctl_table *, int, struct file *, void __user *, size_t *, loff_t *); | 23 | int hugetlb_sysctl_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *); |
| 24 | int hugetlb_overcommit_handler(struct ctl_table *, int, struct file *, void __user *, size_t *, loff_t *); | 24 | int hugetlb_overcommit_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *); |
| 25 | int hugetlb_treat_movable_handler(struct ctl_table *, int, struct file *, void __user *, size_t *, loff_t *); | 25 | int hugetlb_treat_movable_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *); |
| 26 | int copy_hugetlb_page_range(struct mm_struct *, struct mm_struct *, struct vm_area_struct *); | 26 | int copy_hugetlb_page_range(struct mm_struct *, struct mm_struct *, struct vm_area_struct *); |
| 27 | int follow_hugetlb_page(struct mm_struct *, struct vm_area_struct *, struct page **, struct vm_area_struct **, unsigned long *, int *, int, int); | 27 | int follow_hugetlb_page(struct mm_struct *, struct vm_area_struct *, |
| 28 | struct page **, struct vm_area_struct **, | ||
| 29 | unsigned long *, int *, int, unsigned int flags); | ||
| 28 | void unmap_hugepage_range(struct vm_area_struct *, | 30 | void unmap_hugepage_range(struct vm_area_struct *, |
| 29 | unsigned long, unsigned long, struct page *); | 31 | unsigned long, unsigned long, struct page *); |
| 30 | void __unmap_hugepage_range(struct vm_area_struct *, | 32 | void __unmap_hugepage_range(struct vm_area_struct *, |
| @@ -110,6 +112,21 @@ static inline void hugetlb_report_meminfo(struct seq_file *m) | |||
| 110 | 112 | ||
| 111 | #endif /* !CONFIG_HUGETLB_PAGE */ | 113 | #endif /* !CONFIG_HUGETLB_PAGE */ |
| 112 | 114 | ||
| 115 | #define HUGETLB_ANON_FILE "anon_hugepage" | ||
| 116 | |||
| 117 | enum { | ||
| 118 | /* | ||
| 119 | * The file will be used as an shm file so shmfs accounting rules | ||
| 120 | * apply | ||
| 121 | */ | ||
| 122 | HUGETLB_SHMFS_INODE = 1, | ||
| 123 | /* | ||
| 124 | * The file is being created on the internal vfs mount and shmfs | ||
| 125 | * accounting rules do not apply | ||
| 126 | */ | ||
| 127 | HUGETLB_ANONHUGE_INODE = 2, | ||
| 128 | }; | ||
| 129 | |||
| 113 | #ifdef CONFIG_HUGETLBFS | 130 | #ifdef CONFIG_HUGETLBFS |
| 114 | struct hugetlbfs_config { | 131 | struct hugetlbfs_config { |
| 115 | uid_t uid; | 132 | uid_t uid; |
| @@ -146,9 +163,9 @@ static inline struct hugetlbfs_sb_info *HUGETLBFS_SB(struct super_block *sb) | |||
| 146 | } | 163 | } |
| 147 | 164 | ||
| 148 | extern const struct file_operations hugetlbfs_file_operations; | 165 | extern const struct file_operations hugetlbfs_file_operations; |
| 149 | extern struct vm_operations_struct hugetlb_vm_ops; | 166 | extern const struct vm_operations_struct hugetlb_vm_ops; |
| 150 | struct file *hugetlb_file_setup(const char *name, size_t size, int acct, | 167 | struct file *hugetlb_file_setup(const char *name, size_t size, int acct, |
| 151 | struct user_struct **user); | 168 | struct user_struct **user, int creat_flags); |
| 152 | int hugetlb_get_quota(struct address_space *mapping, long delta); | 169 | int hugetlb_get_quota(struct address_space *mapping, long delta); |
| 153 | void hugetlb_put_quota(struct address_space *mapping, long delta); | 170 | void hugetlb_put_quota(struct address_space *mapping, long delta); |
| 154 | 171 | ||
| @@ -170,7 +187,11 @@ static inline void set_file_hugepages(struct file *file) | |||
| 170 | 187 | ||
| 171 | #define is_file_hugepages(file) 0 | 188 | #define is_file_hugepages(file) 0 |
| 172 | #define set_file_hugepages(file) BUG() | 189 | #define set_file_hugepages(file) BUG() |
| 173 | #define hugetlb_file_setup(name,size,acct,user) ERR_PTR(-ENOSYS) | 190 | static inline struct file *hugetlb_file_setup(const char *name, size_t size, |
| 191 | int acctflag, struct user_struct **user, int creat_flags) | ||
| 192 | { | ||
| 193 | return ERR_PTR(-ENOSYS); | ||
| 194 | } | ||
| 174 | 195 | ||
| 175 | #endif /* !CONFIG_HUGETLBFS */ | 196 | #endif /* !CONFIG_HUGETLBFS */ |
| 176 | 197 | ||
| @@ -185,7 +206,8 @@ unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr, | |||
| 185 | #define HSTATE_NAME_LEN 32 | 206 | #define HSTATE_NAME_LEN 32 |
| 186 | /* Defines one hugetlb page size */ | 207 | /* Defines one hugetlb page size */ |
| 187 | struct hstate { | 208 | struct hstate { |
| 188 | int hugetlb_next_nid; | 209 | int next_nid_to_alloc; |
| 210 | int next_nid_to_free; | ||
| 189 | unsigned int order; | 211 | unsigned int order; |
| 190 | unsigned long mask; | 212 | unsigned long mask; |
| 191 | unsigned long max_huge_pages; | 213 | unsigned long max_huge_pages; |
diff --git a/include/linux/hw_breakpoint.h b/include/linux/hw_breakpoint.h new file mode 100644 index 000000000000..a03daed08c59 --- /dev/null +++ b/include/linux/hw_breakpoint.h | |||
| @@ -0,0 +1,131 @@ | |||
| 1 | #ifndef _LINUX_HW_BREAKPOINT_H | ||
| 2 | #define _LINUX_HW_BREAKPOINT_H | ||
| 3 | |||
| 4 | enum { | ||
| 5 | HW_BREAKPOINT_LEN_1 = 1, | ||
| 6 | HW_BREAKPOINT_LEN_2 = 2, | ||
| 7 | HW_BREAKPOINT_LEN_4 = 4, | ||
| 8 | HW_BREAKPOINT_LEN_8 = 8, | ||
| 9 | }; | ||
| 10 | |||
| 11 | enum { | ||
| 12 | HW_BREAKPOINT_R = 1, | ||
| 13 | HW_BREAKPOINT_W = 2, | ||
| 14 | HW_BREAKPOINT_X = 4, | ||
| 15 | }; | ||
| 16 | |||
| 17 | #ifdef __KERNEL__ | ||
| 18 | |||
| 19 | #include <linux/perf_event.h> | ||
| 20 | |||
| 21 | #ifdef CONFIG_HAVE_HW_BREAKPOINT | ||
| 22 | |||
| 23 | /* As it's for in-kernel or ptrace use, we want it to be pinned */ | ||
| 24 | #define DEFINE_BREAKPOINT_ATTR(name) \ | ||
| 25 | struct perf_event_attr name = { \ | ||
| 26 | .type = PERF_TYPE_BREAKPOINT, \ | ||
| 27 | .size = sizeof(name), \ | ||
| 28 | .pinned = 1, \ | ||
| 29 | }; | ||
| 30 | |||
| 31 | static inline void hw_breakpoint_init(struct perf_event_attr *attr) | ||
| 32 | { | ||
| 33 | attr->type = PERF_TYPE_BREAKPOINT; | ||
| 34 | attr->size = sizeof(*attr); | ||
| 35 | attr->pinned = 1; | ||
| 36 | } | ||
| 37 | |||
| 38 | static inline unsigned long hw_breakpoint_addr(struct perf_event *bp) | ||
| 39 | { | ||
| 40 | return bp->attr.bp_addr; | ||
| 41 | } | ||
| 42 | |||
| 43 | static inline int hw_breakpoint_type(struct perf_event *bp) | ||
| 44 | { | ||
| 45 | return bp->attr.bp_type; | ||
| 46 | } | ||
| 47 | |||
| 48 | static inline int hw_breakpoint_len(struct perf_event *bp) | ||
| 49 | { | ||
| 50 | return bp->attr.bp_len; | ||
| 51 | } | ||
| 52 | |||
| 53 | extern struct perf_event * | ||
| 54 | register_user_hw_breakpoint(struct perf_event_attr *attr, | ||
| 55 | perf_callback_t triggered, | ||
| 56 | struct task_struct *tsk); | ||
| 57 | |||
| 58 | /* FIXME: only change from the attr, and don't unregister */ | ||
| 59 | extern struct perf_event * | ||
| 60 | modify_user_hw_breakpoint(struct perf_event *bp, | ||
| 61 | struct perf_event_attr *attr, | ||
| 62 | perf_callback_t triggered, | ||
| 63 | struct task_struct *tsk); | ||
| 64 | |||
| 65 | /* | ||
| 66 | * Kernel breakpoints are not associated with any particular thread. | ||
| 67 | */ | ||
| 68 | extern struct perf_event * | ||
| 69 | register_wide_hw_breakpoint_cpu(struct perf_event_attr *attr, | ||
| 70 | perf_callback_t triggered, | ||
| 71 | int cpu); | ||
| 72 | |||
| 73 | extern struct perf_event ** | ||
| 74 | register_wide_hw_breakpoint(struct perf_event_attr *attr, | ||
| 75 | perf_callback_t triggered); | ||
| 76 | |||
| 77 | extern int register_perf_hw_breakpoint(struct perf_event *bp); | ||
| 78 | extern int __register_perf_hw_breakpoint(struct perf_event *bp); | ||
| 79 | extern void unregister_hw_breakpoint(struct perf_event *bp); | ||
| 80 | extern void unregister_wide_hw_breakpoint(struct perf_event **cpu_events); | ||
| 81 | |||
| 82 | extern int reserve_bp_slot(struct perf_event *bp); | ||
| 83 | extern void release_bp_slot(struct perf_event *bp); | ||
| 84 | |||
| 85 | extern void flush_ptrace_hw_breakpoint(struct task_struct *tsk); | ||
| 86 | |||
| 87 | static inline struct arch_hw_breakpoint *counter_arch_bp(struct perf_event *bp) | ||
| 88 | { | ||
| 89 | return &bp->hw.info; | ||
| 90 | } | ||
| 91 | |||
| 92 | #else /* !CONFIG_HAVE_HW_BREAKPOINT */ | ||
| 93 | |||
| 94 | static inline struct perf_event * | ||
| 95 | register_user_hw_breakpoint(struct perf_event_attr *attr, | ||
| 96 | perf_callback_t triggered, | ||
| 97 | struct task_struct *tsk) { return NULL; } | ||
| 98 | static inline struct perf_event * | ||
| 99 | modify_user_hw_breakpoint(struct perf_event *bp, | ||
| 100 | struct perf_event_attr *attr, | ||
| 101 | perf_callback_t triggered, | ||
| 102 | struct task_struct *tsk) { return NULL; } | ||
| 103 | static inline struct perf_event * | ||
| 104 | register_wide_hw_breakpoint_cpu(struct perf_event_attr *attr, | ||
| 105 | perf_callback_t triggered, | ||
| 106 | int cpu) { return NULL; } | ||
| 107 | static inline struct perf_event ** | ||
| 108 | register_wide_hw_breakpoint(struct perf_event_attr *attr, | ||
| 109 | perf_callback_t triggered) { return NULL; } | ||
| 110 | static inline int | ||
| 111 | register_perf_hw_breakpoint(struct perf_event *bp) { return -ENOSYS; } | ||
| 112 | static inline int | ||
| 113 | __register_perf_hw_breakpoint(struct perf_event *bp) { return -ENOSYS; } | ||
| 114 | static inline void unregister_hw_breakpoint(struct perf_event *bp) { } | ||
| 115 | static inline void | ||
| 116 | unregister_wide_hw_breakpoint(struct perf_event **cpu_events) { } | ||
| 117 | static inline int | ||
| 118 | reserve_bp_slot(struct perf_event *bp) {return -ENOSYS; } | ||
| 119 | static inline void release_bp_slot(struct perf_event *bp) { } | ||
| 120 | |||
| 121 | static inline void flush_ptrace_hw_breakpoint(struct task_struct *tsk) { } | ||
| 122 | |||
| 123 | static inline struct arch_hw_breakpoint *counter_arch_bp(struct perf_event *bp) | ||
| 124 | { | ||
| 125 | return NULL; | ||
| 126 | } | ||
| 127 | |||
| 128 | #endif /* CONFIG_HAVE_HW_BREAKPOINT */ | ||
| 129 | #endif /* __KERNEL__ */ | ||
| 130 | |||
| 131 | #endif /* _LINUX_HW_BREAKPOINT_H */ | ||
diff --git a/include/linux/i2c-id.h b/include/linux/i2c-id.h index c9087de5c6c6..e844a0b18695 100644 --- a/include/linux/i2c-id.h +++ b/include/linux/i2c-id.h | |||
| @@ -28,17 +28,6 @@ | |||
| 28 | identify a legacy client. If you don't need them, just don't set them. */ | 28 | identify a legacy client. If you don't need them, just don't set them. */ |
| 29 | 29 | ||
| 30 | /* | 30 | /* |
| 31 | * ---- Driver types ----------------------------------------------------- | ||
| 32 | */ | ||
| 33 | |||
| 34 | #define I2C_DRIVERID_MSP3400 1 | ||
| 35 | #define I2C_DRIVERID_TUNER 2 | ||
| 36 | #define I2C_DRIVERID_TDA7432 27 /* Stereo sound processor */ | ||
| 37 | #define I2C_DRIVERID_TVAUDIO 29 /* Generic TV sound driver */ | ||
| 38 | #define I2C_DRIVERID_SAA711X 73 /* saa711x video encoders */ | ||
| 39 | #define I2C_DRIVERID_INFRARED 75 /* I2C InfraRed on Video boards */ | ||
| 40 | |||
| 41 | /* | ||
| 42 | * ---- Adapter types ---------------------------------------------------- | 31 | * ---- Adapter types ---------------------------------------------------- |
| 43 | */ | 32 | */ |
| 44 | 33 | ||
diff --git a/include/linux/i2c-pnx.h b/include/linux/i2c-pnx.h index f13255e06406..9eb07bbc6522 100644 --- a/include/linux/i2c-pnx.h +++ b/include/linux/i2c-pnx.h | |||
| @@ -21,7 +21,7 @@ struct i2c_pnx_mif { | |||
| 21 | int mode; /* Interface mode */ | 21 | int mode; /* Interface mode */ |
| 22 | struct completion complete; /* I/O completion */ | 22 | struct completion complete; /* I/O completion */ |
| 23 | struct timer_list timer; /* Timeout */ | 23 | struct timer_list timer; /* Timeout */ |
| 24 | char * buf; /* Data buffer */ | 24 | u8 * buf; /* Data buffer */ |
| 25 | int len; /* Length of data buffer */ | 25 | int len; /* Length of data buffer */ |
| 26 | }; | 26 | }; |
| 27 | 27 | ||
diff --git a/include/linux/i2c.h b/include/linux/i2c.h index f4784c0fe975..419ab546b266 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h | |||
| @@ -98,7 +98,6 @@ extern s32 i2c_smbus_write_i2c_block_data(struct i2c_client *client, | |||
| 98 | 98 | ||
| 99 | /** | 99 | /** |
| 100 | * struct i2c_driver - represent an I2C device driver | 100 | * struct i2c_driver - represent an I2C device driver |
| 101 | * @id: Unique driver ID (optional) | ||
| 102 | * @class: What kind of i2c device we instantiate (for detect) | 101 | * @class: What kind of i2c device we instantiate (for detect) |
| 103 | * @attach_adapter: Callback for bus addition (for legacy drivers) | 102 | * @attach_adapter: Callback for bus addition (for legacy drivers) |
| 104 | * @detach_adapter: Callback for bus removal (for legacy drivers) | 103 | * @detach_adapter: Callback for bus removal (for legacy drivers) |
| @@ -111,7 +110,7 @@ extern s32 i2c_smbus_write_i2c_block_data(struct i2c_client *client, | |||
| 111 | * @driver: Device driver model driver | 110 | * @driver: Device driver model driver |
| 112 | * @id_table: List of I2C devices supported by this driver | 111 | * @id_table: List of I2C devices supported by this driver |
| 113 | * @detect: Callback for device detection | 112 | * @detect: Callback for device detection |
| 114 | * @address_data: The I2C addresses to probe, ignore or force (for detect) | 113 | * @address_data: The I2C addresses to probe (for detect) |
| 115 | * @clients: List of detected clients we created (for i2c-core use only) | 114 | * @clients: List of detected clients we created (for i2c-core use only) |
| 116 | * | 115 | * |
| 117 | * The driver.owner field should be set to the module owner of this driver. | 116 | * The driver.owner field should be set to the module owner of this driver. |
| @@ -135,7 +134,6 @@ extern s32 i2c_smbus_write_i2c_block_data(struct i2c_client *client, | |||
| 135 | * not allowed. | 134 | * not allowed. |
| 136 | */ | 135 | */ |
| 137 | struct i2c_driver { | 136 | struct i2c_driver { |
| 138 | int id; | ||
| 139 | unsigned int class; | 137 | unsigned int class; |
| 140 | 138 | ||
| 141 | /* Notifies the driver that a new bus has appeared or is about to be | 139 | /* Notifies the driver that a new bus has appeared or is about to be |
| @@ -340,8 +338,7 @@ struct i2c_adapter { | |||
| 340 | void *algo_data; | 338 | void *algo_data; |
| 341 | 339 | ||
| 342 | /* data fields that are valid for all devices */ | 340 | /* data fields that are valid for all devices */ |
| 343 | u8 level; /* nesting level for lockdep */ | 341 | struct rt_mutex bus_lock; |
| 344 | struct mutex bus_lock; | ||
| 345 | 342 | ||
| 346 | int timeout; /* in jiffies */ | 343 | int timeout; /* in jiffies */ |
| 347 | int retries; | 344 | int retries; |
| @@ -363,6 +360,24 @@ static inline void i2c_set_adapdata(struct i2c_adapter *dev, void *data) | |||
| 363 | dev_set_drvdata(&dev->dev, data); | 360 | dev_set_drvdata(&dev->dev, data); |
| 364 | } | 361 | } |
| 365 | 362 | ||
| 363 | /** | ||
| 364 | * i2c_lock_adapter - Prevent access to an I2C bus segment | ||
| 365 | * @adapter: Target I2C bus segment | ||
| 366 | */ | ||
| 367 | static inline void i2c_lock_adapter(struct i2c_adapter *adapter) | ||
| 368 | { | ||
| 369 | rt_mutex_lock(&adapter->bus_lock); | ||
| 370 | } | ||
| 371 | |||
| 372 | /** | ||
| 373 | * i2c_unlock_adapter - Reauthorize access to an I2C bus segment | ||
| 374 | * @adapter: Target I2C bus segment | ||
| 375 | */ | ||
| 376 | static inline void i2c_unlock_adapter(struct i2c_adapter *adapter) | ||
| 377 | { | ||
| 378 | rt_mutex_unlock(&adapter->bus_lock); | ||
| 379 | } | ||
| 380 | |||
| 366 | /*flags for the client struct: */ | 381 | /*flags for the client struct: */ |
| 367 | #define I2C_CLIENT_PEC 0x04 /* Use Packet Error Checking */ | 382 | #define I2C_CLIENT_PEC 0x04 /* Use Packet Error Checking */ |
| 368 | #define I2C_CLIENT_TEN 0x10 /* we have a ten bit chip address */ | 383 | #define I2C_CLIENT_TEN 0x10 /* we have a ten bit chip address */ |
| @@ -382,9 +397,6 @@ static inline void i2c_set_adapdata(struct i2c_adapter *dev, void *data) | |||
| 382 | */ | 397 | */ |
| 383 | struct i2c_client_address_data { | 398 | struct i2c_client_address_data { |
| 384 | const unsigned short *normal_i2c; | 399 | const unsigned short *normal_i2c; |
| 385 | const unsigned short *probe; | ||
| 386 | const unsigned short *ignore; | ||
| 387 | const unsigned short * const *forces; | ||
| 388 | }; | 400 | }; |
| 389 | 401 | ||
| 390 | /* Internal numbers to terminate lists */ | 402 | /* Internal numbers to terminate lists */ |
| @@ -598,134 +610,48 @@ union i2c_smbus_data { | |||
| 598 | module_param_array(var, short, &var##_num, 0); \ | 610 | module_param_array(var, short, &var##_num, 0); \ |
| 599 | MODULE_PARM_DESC(var, desc) | 611 | MODULE_PARM_DESC(var, desc) |
| 600 | 612 | ||
| 601 | #define I2C_CLIENT_MODULE_PARM_FORCE(name) \ | ||
| 602 | I2C_CLIENT_MODULE_PARM(force_##name, \ | ||
| 603 | "List of adapter,address pairs which are " \ | ||
| 604 | "unquestionably assumed to contain a `" \ | ||
| 605 | # name "' chip") | ||
| 606 | |||
| 607 | |||
| 608 | #define I2C_CLIENT_INSMOD_COMMON \ | 613 | #define I2C_CLIENT_INSMOD_COMMON \ |
| 609 | I2C_CLIENT_MODULE_PARM(probe, "List of adapter,address pairs to scan " \ | ||
| 610 | "additionally"); \ | ||
| 611 | I2C_CLIENT_MODULE_PARM(ignore, "List of adapter,address pairs not to " \ | ||
| 612 | "scan"); \ | ||
| 613 | static const struct i2c_client_address_data addr_data = { \ | 614 | static const struct i2c_client_address_data addr_data = { \ |
| 614 | .normal_i2c = normal_i2c, \ | 615 | .normal_i2c = normal_i2c, \ |
| 615 | .probe = probe, \ | ||
| 616 | .ignore = ignore, \ | ||
| 617 | .forces = forces, \ | ||
| 618 | } | 616 | } |
| 619 | 617 | ||
| 620 | #define I2C_CLIENT_FORCE_TEXT \ | ||
| 621 | "List of adapter,address pairs to boldly assume to be present" | ||
| 622 | |||
| 623 | /* These are the ones you want to use in your own drivers. Pick the one | 618 | /* These are the ones you want to use in your own drivers. Pick the one |
| 624 | which matches the number of devices the driver differenciates between. */ | 619 | which matches the number of devices the driver differenciates between. */ |
| 625 | #define I2C_CLIENT_INSMOD \ | 620 | #define I2C_CLIENT_INSMOD \ |
| 626 | I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \ | ||
| 627 | static const unsigned short * const forces[] = { force, NULL }; \ | ||
| 628 | I2C_CLIENT_INSMOD_COMMON | 621 | I2C_CLIENT_INSMOD_COMMON |
| 629 | 622 | ||
| 630 | #define I2C_CLIENT_INSMOD_1(chip1) \ | 623 | #define I2C_CLIENT_INSMOD_1(chip1) \ |
| 631 | enum chips { any_chip, chip1 }; \ | 624 | enum chips { any_chip, chip1 }; \ |
| 632 | I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \ | ||
| 633 | I2C_CLIENT_MODULE_PARM_FORCE(chip1); \ | ||
| 634 | static const unsigned short * const forces[] = { force, \ | ||
| 635 | force_##chip1, NULL }; \ | ||
| 636 | I2C_CLIENT_INSMOD_COMMON | 625 | I2C_CLIENT_INSMOD_COMMON |
| 637 | 626 | ||
| 638 | #define I2C_CLIENT_INSMOD_2(chip1, chip2) \ | 627 | #define I2C_CLIENT_INSMOD_2(chip1, chip2) \ |
| 639 | enum chips { any_chip, chip1, chip2 }; \ | 628 | enum chips { any_chip, chip1, chip2 }; \ |
| 640 | I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \ | ||
| 641 | I2C_CLIENT_MODULE_PARM_FORCE(chip1); \ | ||
| 642 | I2C_CLIENT_MODULE_PARM_FORCE(chip2); \ | ||
| 643 | static const unsigned short * const forces[] = { force, \ | ||
| 644 | force_##chip1, force_##chip2, NULL }; \ | ||
| 645 | I2C_CLIENT_INSMOD_COMMON | 629 | I2C_CLIENT_INSMOD_COMMON |
| 646 | 630 | ||
| 647 | #define I2C_CLIENT_INSMOD_3(chip1, chip2, chip3) \ | 631 | #define I2C_CLIENT_INSMOD_3(chip1, chip2, chip3) \ |
| 648 | enum chips { any_chip, chip1, chip2, chip3 }; \ | 632 | enum chips { any_chip, chip1, chip2, chip3 }; \ |
| 649 | I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \ | ||
| 650 | I2C_CLIENT_MODULE_PARM_FORCE(chip1); \ | ||
| 651 | I2C_CLIENT_MODULE_PARM_FORCE(chip2); \ | ||
| 652 | I2C_CLIENT_MODULE_PARM_FORCE(chip3); \ | ||
| 653 | static const unsigned short * const forces[] = { force, \ | ||
| 654 | force_##chip1, force_##chip2, force_##chip3, NULL }; \ | ||
| 655 | I2C_CLIENT_INSMOD_COMMON | 633 | I2C_CLIENT_INSMOD_COMMON |
| 656 | 634 | ||
| 657 | #define I2C_CLIENT_INSMOD_4(chip1, chip2, chip3, chip4) \ | 635 | #define I2C_CLIENT_INSMOD_4(chip1, chip2, chip3, chip4) \ |
| 658 | enum chips { any_chip, chip1, chip2, chip3, chip4 }; \ | 636 | enum chips { any_chip, chip1, chip2, chip3, chip4 }; \ |
| 659 | I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \ | ||
| 660 | I2C_CLIENT_MODULE_PARM_FORCE(chip1); \ | ||
| 661 | I2C_CLIENT_MODULE_PARM_FORCE(chip2); \ | ||
| 662 | I2C_CLIENT_MODULE_PARM_FORCE(chip3); \ | ||
| 663 | I2C_CLIENT_MODULE_PARM_FORCE(chip4); \ | ||
| 664 | static const unsigned short * const forces[] = { force, \ | ||
| 665 | force_##chip1, force_##chip2, force_##chip3, \ | ||
| 666 | force_##chip4, NULL}; \ | ||
| 667 | I2C_CLIENT_INSMOD_COMMON | 637 | I2C_CLIENT_INSMOD_COMMON |
| 668 | 638 | ||
| 669 | #define I2C_CLIENT_INSMOD_5(chip1, chip2, chip3, chip4, chip5) \ | 639 | #define I2C_CLIENT_INSMOD_5(chip1, chip2, chip3, chip4, chip5) \ |
| 670 | enum chips { any_chip, chip1, chip2, chip3, chip4, chip5 }; \ | 640 | enum chips { any_chip, chip1, chip2, chip3, chip4, chip5 }; \ |
| 671 | I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \ | ||
| 672 | I2C_CLIENT_MODULE_PARM_FORCE(chip1); \ | ||
| 673 | I2C_CLIENT_MODULE_PARM_FORCE(chip2); \ | ||
| 674 | I2C_CLIENT_MODULE_PARM_FORCE(chip3); \ | ||
| 675 | I2C_CLIENT_MODULE_PARM_FORCE(chip4); \ | ||
| 676 | I2C_CLIENT_MODULE_PARM_FORCE(chip5); \ | ||
| 677 | static const unsigned short * const forces[] = { force, \ | ||
| 678 | force_##chip1, force_##chip2, force_##chip3, \ | ||
| 679 | force_##chip4, force_##chip5, NULL }; \ | ||
| 680 | I2C_CLIENT_INSMOD_COMMON | 641 | I2C_CLIENT_INSMOD_COMMON |
| 681 | 642 | ||
| 682 | #define I2C_CLIENT_INSMOD_6(chip1, chip2, chip3, chip4, chip5, chip6) \ | 643 | #define I2C_CLIENT_INSMOD_6(chip1, chip2, chip3, chip4, chip5, chip6) \ |
| 683 | enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6 }; \ | 644 | enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6 }; \ |
| 684 | I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \ | ||
| 685 | I2C_CLIENT_MODULE_PARM_FORCE(chip1); \ | ||
| 686 | I2C_CLIENT_MODULE_PARM_FORCE(chip2); \ | ||
| 687 | I2C_CLIENT_MODULE_PARM_FORCE(chip3); \ | ||
| 688 | I2C_CLIENT_MODULE_PARM_FORCE(chip4); \ | ||
| 689 | I2C_CLIENT_MODULE_PARM_FORCE(chip5); \ | ||
| 690 | I2C_CLIENT_MODULE_PARM_FORCE(chip6); \ | ||
| 691 | static const unsigned short * const forces[] = { force, \ | ||
| 692 | force_##chip1, force_##chip2, force_##chip3, \ | ||
| 693 | force_##chip4, force_##chip5, force_##chip6, NULL }; \ | ||
| 694 | I2C_CLIENT_INSMOD_COMMON | 645 | I2C_CLIENT_INSMOD_COMMON |
| 695 | 646 | ||
| 696 | #define I2C_CLIENT_INSMOD_7(chip1, chip2, chip3, chip4, chip5, chip6, chip7) \ | 647 | #define I2C_CLIENT_INSMOD_7(chip1, chip2, chip3, chip4, chip5, chip6, chip7) \ |
| 697 | enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6, \ | 648 | enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6, \ |
| 698 | chip7 }; \ | 649 | chip7 }; \ |
| 699 | I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \ | ||
| 700 | I2C_CLIENT_MODULE_PARM_FORCE(chip1); \ | ||
| 701 | I2C_CLIENT_MODULE_PARM_FORCE(chip2); \ | ||
| 702 | I2C_CLIENT_MODULE_PARM_FORCE(chip3); \ | ||
| 703 | I2C_CLIENT_MODULE_PARM_FORCE(chip4); \ | ||
| 704 | I2C_CLIENT_MODULE_PARM_FORCE(chip5); \ | ||
| 705 | I2C_CLIENT_MODULE_PARM_FORCE(chip6); \ | ||
| 706 | I2C_CLIENT_MODULE_PARM_FORCE(chip7); \ | ||
| 707 | static const unsigned short * const forces[] = { force, \ | ||
| 708 | force_##chip1, force_##chip2, force_##chip3, \ | ||
| 709 | force_##chip4, force_##chip5, force_##chip6, \ | ||
| 710 | force_##chip7, NULL }; \ | ||
| 711 | I2C_CLIENT_INSMOD_COMMON | 650 | I2C_CLIENT_INSMOD_COMMON |
| 712 | 651 | ||
| 713 | #define I2C_CLIENT_INSMOD_8(chip1, chip2, chip3, chip4, chip5, chip6, chip7, chip8) \ | 652 | #define I2C_CLIENT_INSMOD_8(chip1, chip2, chip3, chip4, chip5, chip6, chip7, chip8) \ |
| 714 | enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6, \ | 653 | enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6, \ |
| 715 | chip7, chip8 }; \ | 654 | chip7, chip8 }; \ |
| 716 | I2C_CLIENT_MODULE_PARM(force, I2C_CLIENT_FORCE_TEXT); \ | ||
| 717 | I2C_CLIENT_MODULE_PARM_FORCE(chip1); \ | ||
| 718 | I2C_CLIENT_MODULE_PARM_FORCE(chip2); \ | ||
| 719 | I2C_CLIENT_MODULE_PARM_FORCE(chip3); \ | ||
| 720 | I2C_CLIENT_MODULE_PARM_FORCE(chip4); \ | ||
| 721 | I2C_CLIENT_MODULE_PARM_FORCE(chip5); \ | ||
| 722 | I2C_CLIENT_MODULE_PARM_FORCE(chip6); \ | ||
| 723 | I2C_CLIENT_MODULE_PARM_FORCE(chip7); \ | ||
| 724 | I2C_CLIENT_MODULE_PARM_FORCE(chip8); \ | ||
| 725 | static const unsigned short * const forces[] = { force, \ | ||
| 726 | force_##chip1, force_##chip2, force_##chip3, \ | ||
| 727 | force_##chip4, force_##chip5, force_##chip6, \ | ||
| 728 | force_##chip7, force_##chip8, NULL }; \ | ||
| 729 | I2C_CLIENT_INSMOD_COMMON | 655 | I2C_CLIENT_INSMOD_COMMON |
| 730 | #endif /* __KERNEL__ */ | 656 | #endif /* __KERNEL__ */ |
| 731 | #endif /* _LINUX_I2C_H */ | 657 | #endif /* _LINUX_I2C_H */ |
diff --git a/include/linux/i2c/adp5588.h b/include/linux/i2c/adp5588.h new file mode 100644 index 000000000000..fc5db826b48e --- /dev/null +++ b/include/linux/i2c/adp5588.h | |||
| @@ -0,0 +1,92 @@ | |||
| 1 | /* | ||
| 2 | * Analog Devices ADP5588 I/O Expander and QWERTY Keypad Controller | ||
| 3 | * | ||
| 4 | * Copyright 2009 Analog Devices Inc. | ||
| 5 | * | ||
| 6 | * Licensed under the GPL-2 or later. | ||
| 7 | */ | ||
| 8 | |||
| 9 | #ifndef _ADP5588_H | ||
| 10 | #define _ADP5588_H | ||
| 11 | |||
| 12 | #define DEV_ID 0x00 /* Device ID */ | ||
| 13 | #define CFG 0x01 /* Configuration Register1 */ | ||
| 14 | #define INT_STAT 0x02 /* Interrupt Status Register */ | ||
| 15 | #define KEY_LCK_EC_STAT 0x03 /* Key Lock and Event Counter Register */ | ||
| 16 | #define Key_EVENTA 0x04 /* Key Event Register A */ | ||
| 17 | #define Key_EVENTB 0x05 /* Key Event Register B */ | ||
| 18 | #define Key_EVENTC 0x06 /* Key Event Register C */ | ||
| 19 | #define Key_EVENTD 0x07 /* Key Event Register D */ | ||
| 20 | #define Key_EVENTE 0x08 /* Key Event Register E */ | ||
| 21 | #define Key_EVENTF 0x09 /* Key Event Register F */ | ||
| 22 | #define Key_EVENTG 0x0A /* Key Event Register G */ | ||
| 23 | #define Key_EVENTH 0x0B /* Key Event Register H */ | ||
| 24 | #define Key_EVENTI 0x0C /* Key Event Register I */ | ||
| 25 | #define Key_EVENTJ 0x0D /* Key Event Register J */ | ||
| 26 | #define KP_LCK_TMR 0x0E /* Keypad Lock1 to Lock2 Timer */ | ||
| 27 | #define UNLOCK1 0x0F /* Unlock Key1 */ | ||
| 28 | #define UNLOCK2 0x10 /* Unlock Key2 */ | ||
| 29 | #define GPIO_INT_STAT1 0x11 /* GPIO Interrupt Status */ | ||
| 30 | #define GPIO_INT_STAT2 0x12 /* GPIO Interrupt Status */ | ||
| 31 | #define GPIO_INT_STAT3 0x13 /* GPIO Interrupt Status */ | ||
| 32 | #define GPIO_DAT_STAT1 0x14 /* GPIO Data Status, Read twice to clear */ | ||
| 33 | #define GPIO_DAT_STAT2 0x15 /* GPIO Data Status, Read twice to clear */ | ||
| 34 | #define GPIO_DAT_STAT3 0x16 /* GPIO Data Status, Read twice to clear */ | ||
| 35 | #define GPIO_DAT_OUT1 0x17 /* GPIO DATA OUT */ | ||
| 36 | #define GPIO_DAT_OUT2 0x18 /* GPIO DATA OUT */ | ||
| 37 | #define GPIO_DAT_OUT3 0x19 /* GPIO DATA OUT */ | ||
| 38 | #define GPIO_INT_EN1 0x1A /* GPIO Interrupt Enable */ | ||
| 39 | #define GPIO_INT_EN2 0x1B /* GPIO Interrupt Enable */ | ||
| 40 | #define GPIO_INT_EN3 0x1C /* GPIO Interrupt Enable */ | ||
| 41 | #define KP_GPIO1 0x1D /* Keypad or GPIO Selection */ | ||
| 42 | #define KP_GPIO2 0x1E /* Keypad or GPIO Selection */ | ||
| 43 | #define KP_GPIO3 0x1F /* Keypad or GPIO Selection */ | ||
| 44 | #define GPI_EM1 0x20 /* GPI Event Mode 1 */ | ||
| 45 | #define GPI_EM2 0x21 /* GPI Event Mode 2 */ | ||
| 46 | #define GPI_EM3 0x22 /* GPI Event Mode 3 */ | ||
| 47 | #define GPIO_DIR1 0x23 /* GPIO Data Direction */ | ||
| 48 | #define GPIO_DIR2 0x24 /* GPIO Data Direction */ | ||
| 49 | #define GPIO_DIR3 0x25 /* GPIO Data Direction */ | ||
| 50 | #define GPIO_INT_LVL1 0x26 /* GPIO Edge/Level Detect */ | ||
| 51 | #define GPIO_INT_LVL2 0x27 /* GPIO Edge/Level Detect */ | ||
| 52 | #define GPIO_INT_LVL3 0x28 /* GPIO Edge/Level Detect */ | ||
| 53 | #define Debounce_DIS1 0x29 /* Debounce Disable */ | ||
| 54 | #define Debounce_DIS2 0x2A /* Debounce Disable */ | ||
| 55 | #define Debounce_DIS3 0x2B /* Debounce Disable */ | ||
| 56 | #define GPIO_PULL1 0x2C /* GPIO Pull Disable */ | ||
| 57 | #define GPIO_PULL2 0x2D /* GPIO Pull Disable */ | ||
| 58 | #define GPIO_PULL3 0x2E /* GPIO Pull Disable */ | ||
| 59 | #define CMP_CFG_STAT 0x30 /* Comparator Configuration and Status Register */ | ||
| 60 | #define CMP_CONFG_SENS1 0x31 /* Sensor1 Comparator Configuration Register */ | ||
| 61 | #define CMP_CONFG_SENS2 0x32 /* L2 Light Sensor Reference Level, Output Falling for Sensor 1 */ | ||
| 62 | #define CMP1_LVL2_TRIP 0x33 /* L2 Light Sensor Hysteresis (Active when Output Rising) for Sensor 1 */ | ||
| 63 | #define CMP1_LVL2_HYS 0x34 /* L3 Light Sensor Reference Level, Output Falling For Sensor 1 */ | ||
| 64 | #define CMP1_LVL3_TRIP 0x35 /* L3 Light Sensor Hysteresis (Active when Output Rising) For Sensor 1 */ | ||
| 65 | #define CMP1_LVL3_HYS 0x36 /* Sensor 2 Comparator Configuration Register */ | ||
| 66 | #define CMP2_LVL2_TRIP 0x37 /* L2 Light Sensor Reference Level, Output Falling for Sensor 2 */ | ||
| 67 | #define CMP2_LVL2_HYS 0x38 /* L2 Light Sensor Hysteresis (Active when Output Rising) for Sensor 2 */ | ||
| 68 | #define CMP2_LVL3_TRIP 0x39 /* L3 Light Sensor Reference Level, Output Falling For Sensor 2 */ | ||
| 69 | #define CMP2_LVL3_HYS 0x3A /* L3 Light Sensor Hysteresis (Active when Output Rising) For Sensor 2 */ | ||
| 70 | #define CMP1_ADC_DAT_R1 0x3B /* Comparator 1 ADC data Register1 */ | ||
| 71 | #define CMP1_ADC_DAT_R2 0x3C /* Comparator 1 ADC data Register2 */ | ||
| 72 | #define CMP2_ADC_DAT_R1 0x3D /* Comparator 2 ADC data Register1 */ | ||
| 73 | #define CMP2_ADC_DAT_R2 0x3E /* Comparator 2 ADC data Register2 */ | ||
| 74 | |||
| 75 | #define ADP5588_DEVICE_ID_MASK 0xF | ||
| 76 | |||
| 77 | /* Put one of these structures in i2c_board_info platform_data */ | ||
| 78 | |||
| 79 | #define ADP5588_KEYMAPSIZE 80 | ||
| 80 | |||
| 81 | struct adp5588_kpad_platform_data { | ||
| 82 | int rows; /* Number of rows */ | ||
| 83 | int cols; /* Number of columns */ | ||
| 84 | const unsigned short *keymap; /* Pointer to keymap */ | ||
| 85 | unsigned short keymapsize; /* Keymap size */ | ||
| 86 | unsigned repeat:1; /* Enable key repeat */ | ||
| 87 | unsigned en_keylock:1; /* Enable Key Lock feature */ | ||
| 88 | unsigned short unlock_key1; /* Unlock Key 1 */ | ||
| 89 | unsigned short unlock_key2; /* Unlock Key 2 */ | ||
| 90 | }; | ||
| 91 | |||
| 92 | #endif | ||
diff --git a/include/linux/i2c/mcs5000_ts.h b/include/linux/i2c/mcs5000_ts.h new file mode 100644 index 000000000000..5a117b5ca15e --- /dev/null +++ b/include/linux/i2c/mcs5000_ts.h | |||
| @@ -0,0 +1,24 @@ | |||
| 1 | /* | ||
| 2 | * mcs5000_ts.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2009 Samsung Electronics Co.Ltd | ||
| 5 | * Author: Joonyoung Shim <jy0922.shim@samsung.com> | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify it | ||
| 8 | * under the terms of the GNU General Public License as published by the | ||
| 9 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 10 | * option) any later version. | ||
| 11 | * | ||
| 12 | */ | ||
| 13 | |||
| 14 | #ifndef __LINUX_MCS5000_TS_H | ||
| 15 | #define __LINUX_MCS5000_TS_H | ||
| 16 | |||
| 17 | /* platform data for the MELFAS MCS-5000 touchscreen driver */ | ||
| 18 | struct mcs5000_ts_platform_data { | ||
| 19 | void (*cfg_pin)(void); | ||
| 20 | int x_size; | ||
| 21 | int y_size; | ||
| 22 | }; | ||
| 23 | |||
| 24 | #endif /* __LINUX_MCS5000_TS_H */ | ||
diff --git a/include/linux/i2c/twl4030.h b/include/linux/i2c/twl4030.h index 0dc80ef24975..5306a759cbde 100644 --- a/include/linux/i2c/twl4030.h +++ b/include/linux/i2c/twl4030.h | |||
| @@ -25,6 +25,9 @@ | |||
| 25 | #ifndef __TWL4030_H_ | 25 | #ifndef __TWL4030_H_ |
| 26 | #define __TWL4030_H_ | 26 | #define __TWL4030_H_ |
| 27 | 27 | ||
| 28 | #include <linux/types.h> | ||
| 29 | #include <linux/input/matrix_keypad.h> | ||
| 30 | |||
| 28 | /* | 31 | /* |
| 29 | * Using the twl4030 core we address registers using a pair | 32 | * Using the twl4030 core we address registers using a pair |
| 30 | * { module id, relative register offset } | 33 | * { module id, relative register offset } |
| @@ -220,19 +223,28 @@ int twl4030_i2c_read(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes); | |||
| 220 | 223 | ||
| 221 | /* Power bus message definitions */ | 224 | /* Power bus message definitions */ |
| 222 | 225 | ||
| 223 | #define DEV_GRP_NULL 0x0 | 226 | /* The TWL4030/5030 splits its power-management resources (the various |
| 224 | #define DEV_GRP_P1 0x1 | 227 | * regulators, clock and reset lines) into 3 processor groups - P1, P2 and |
| 225 | #define DEV_GRP_P2 0x2 | 228 | * P3. These groups can then be configured to transition between sleep, wait-on |
| 226 | #define DEV_GRP_P3 0x4 | 229 | * and active states by sending messages to the power bus. See Section 5.4.2 |
| 230 | * Power Resources of TWL4030 TRM | ||
| 231 | */ | ||
| 227 | 232 | ||
| 228 | #define RES_GRP_RES 0x0 | 233 | /* Processor groups */ |
| 229 | #define RES_GRP_PP 0x1 | 234 | #define DEV_GRP_NULL 0x0 |
| 230 | #define RES_GRP_RC 0x2 | 235 | #define DEV_GRP_P1 0x1 /* P1: all OMAP devices */ |
| 236 | #define DEV_GRP_P2 0x2 /* P2: all Modem devices */ | ||
| 237 | #define DEV_GRP_P3 0x4 /* P3: all peripheral devices */ | ||
| 238 | |||
| 239 | /* Resource groups */ | ||
| 240 | #define RES_GRP_RES 0x0 /* Reserved */ | ||
| 241 | #define RES_GRP_PP 0x1 /* Power providers */ | ||
| 242 | #define RES_GRP_RC 0x2 /* Reset and control */ | ||
| 231 | #define RES_GRP_PP_RC 0x3 | 243 | #define RES_GRP_PP_RC 0x3 |
| 232 | #define RES_GRP_PR 0x4 | 244 | #define RES_GRP_PR 0x4 /* Power references */ |
| 233 | #define RES_GRP_PP_PR 0x5 | 245 | #define RES_GRP_PP_PR 0x5 |
| 234 | #define RES_GRP_RC_PR 0x6 | 246 | #define RES_GRP_RC_PR 0x6 |
| 235 | #define RES_GRP_ALL 0x7 | 247 | #define RES_GRP_ALL 0x7 /* All resource groups */ |
| 236 | 248 | ||
| 237 | #define RES_TYPE2_R0 0x0 | 249 | #define RES_TYPE2_R0 0x0 |
| 238 | 250 | ||
| @@ -243,6 +255,41 @@ int twl4030_i2c_read(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes); | |||
| 243 | #define RES_STATE_SLEEP 0x8 | 255 | #define RES_STATE_SLEEP 0x8 |
| 244 | #define RES_STATE_OFF 0x0 | 256 | #define RES_STATE_OFF 0x0 |
| 245 | 257 | ||
| 258 | /* Power resources */ | ||
| 259 | |||
| 260 | /* Power providers */ | ||
| 261 | #define RES_VAUX1 1 | ||
| 262 | #define RES_VAUX2 2 | ||
| 263 | #define RES_VAUX3 3 | ||
| 264 | #define RES_VAUX4 4 | ||
| 265 | #define RES_VMMC1 5 | ||
| 266 | #define RES_VMMC2 6 | ||
| 267 | #define RES_VPLL1 7 | ||
| 268 | #define RES_VPLL2 8 | ||
| 269 | #define RES_VSIM 9 | ||
| 270 | #define RES_VDAC 10 | ||
| 271 | #define RES_VINTANA1 11 | ||
| 272 | #define RES_VINTANA2 12 | ||
| 273 | #define RES_VINTDIG 13 | ||
| 274 | #define RES_VIO 14 | ||
| 275 | #define RES_VDD1 15 | ||
| 276 | #define RES_VDD2 16 | ||
| 277 | #define RES_VUSB_1V5 17 | ||
| 278 | #define RES_VUSB_1V8 18 | ||
| 279 | #define RES_VUSB_3V1 19 | ||
| 280 | #define RES_VUSBCP 20 | ||
| 281 | #define RES_REGEN 21 | ||
| 282 | /* Reset and control */ | ||
| 283 | #define RES_NRES_PWRON 22 | ||
| 284 | #define RES_CLKEN 23 | ||
| 285 | #define RES_SYSEN 24 | ||
| 286 | #define RES_HFCLKOUT 25 | ||
| 287 | #define RES_32KCLKOUT 26 | ||
| 288 | #define RES_RESET 27 | ||
| 289 | /* Power Reference */ | ||
| 290 | #define RES_Main_Ref 28 | ||
| 291 | |||
| 292 | #define TOTAL_RESOURCES 28 | ||
| 246 | /* | 293 | /* |
| 247 | * Power Bus Message Format ... these can be sent individually by Linux, | 294 | * Power Bus Message Format ... these can be sent individually by Linux, |
| 248 | * but are usually part of downloaded scripts that are run when various | 295 | * but are usually part of downloaded scripts that are run when various |
| @@ -302,13 +349,17 @@ struct twl4030_madc_platform_data { | |||
| 302 | int irq_line; | 349 | int irq_line; |
| 303 | }; | 350 | }; |
| 304 | 351 | ||
| 352 | /* Boards have uniqe mappings of {row, col} --> keycode. | ||
| 353 | * Column and row are 8 bits each, but range only from 0..7. | ||
| 354 | * a PERSISTENT_KEY is "always on" and never reported. | ||
| 355 | */ | ||
| 356 | #define PERSISTENT_KEY(r, c) KEY((r), (c), KEY_RESERVED) | ||
| 357 | |||
| 305 | struct twl4030_keypad_data { | 358 | struct twl4030_keypad_data { |
| 306 | int rows; | 359 | const struct matrix_keymap_data *keymap_data; |
| 307 | int cols; | 360 | unsigned rows; |
| 308 | int *keymap; | 361 | unsigned cols; |
| 309 | int irq; | 362 | bool rep; |
| 310 | unsigned int keymapsize; | ||
| 311 | unsigned int rep:1; | ||
| 312 | }; | 363 | }; |
| 313 | 364 | ||
| 314 | enum twl4030_usb_mode { | 365 | enum twl4030_usb_mode { |
| @@ -320,6 +371,54 @@ struct twl4030_usb_data { | |||
| 320 | enum twl4030_usb_mode usb_mode; | 371 | enum twl4030_usb_mode usb_mode; |
| 321 | }; | 372 | }; |
| 322 | 373 | ||
| 374 | struct twl4030_ins { | ||
| 375 | u16 pmb_message; | ||
| 376 | u8 delay; | ||
| 377 | }; | ||
| 378 | |||
| 379 | struct twl4030_script { | ||
| 380 | struct twl4030_ins *script; | ||
| 381 | unsigned size; | ||
| 382 | u8 flags; | ||
| 383 | #define TWL4030_WRST_SCRIPT (1<<0) | ||
| 384 | #define TWL4030_WAKEUP12_SCRIPT (1<<1) | ||
| 385 | #define TWL4030_WAKEUP3_SCRIPT (1<<2) | ||
| 386 | #define TWL4030_SLEEP_SCRIPT (1<<3) | ||
| 387 | }; | ||
| 388 | |||
| 389 | struct twl4030_resconfig { | ||
| 390 | u8 resource; | ||
| 391 | u8 devgroup; /* Processor group that Power resource belongs to */ | ||
| 392 | u8 type; /* Power resource addressed, 6 / broadcast message */ | ||
| 393 | u8 type2; /* Power resource addressed, 3 / broadcast message */ | ||
| 394 | }; | ||
| 395 | |||
| 396 | struct twl4030_power_data { | ||
| 397 | struct twl4030_script **scripts; | ||
| 398 | unsigned num; | ||
| 399 | struct twl4030_resconfig *resource_config; | ||
| 400 | }; | ||
| 401 | |||
| 402 | extern void twl4030_power_init(struct twl4030_power_data *triton2_scripts); | ||
| 403 | |||
| 404 | struct twl4030_codec_audio_data { | ||
| 405 | unsigned int audio_mclk; | ||
| 406 | unsigned int ramp_delay_value; | ||
| 407 | unsigned int hs_extmute:1; | ||
| 408 | void (*set_hs_extmute)(int mute); | ||
| 409 | }; | ||
| 410 | |||
| 411 | struct twl4030_codec_vibra_data { | ||
| 412 | unsigned int audio_mclk; | ||
| 413 | unsigned int coexist; | ||
| 414 | }; | ||
| 415 | |||
| 416 | struct twl4030_codec_data { | ||
| 417 | unsigned int audio_mclk; | ||
| 418 | struct twl4030_codec_audio_data *audio; | ||
| 419 | struct twl4030_codec_vibra_data *vibra; | ||
| 420 | }; | ||
| 421 | |||
| 323 | struct twl4030_platform_data { | 422 | struct twl4030_platform_data { |
| 324 | unsigned irq_base, irq_end; | 423 | unsigned irq_base, irq_end; |
| 325 | struct twl4030_bci_platform_data *bci; | 424 | struct twl4030_bci_platform_data *bci; |
| @@ -327,6 +426,8 @@ struct twl4030_platform_data { | |||
| 327 | struct twl4030_madc_platform_data *madc; | 426 | struct twl4030_madc_platform_data *madc; |
| 328 | struct twl4030_keypad_data *keypad; | 427 | struct twl4030_keypad_data *keypad; |
| 329 | struct twl4030_usb_data *usb; | 428 | struct twl4030_usb_data *usb; |
| 429 | struct twl4030_power_data *power; | ||
| 430 | struct twl4030_codec_data *codec; | ||
| 330 | 431 | ||
| 331 | /* LDO regulators */ | 432 | /* LDO regulators */ |
| 332 | struct regulator_init_data *vdac; | 433 | struct regulator_init_data *vdac; |
| @@ -357,7 +458,6 @@ int twl4030_sih_setup(int module); | |||
| 357 | #define TWL4030_VAUX3_DEV_GRP 0x1F | 458 | #define TWL4030_VAUX3_DEV_GRP 0x1F |
| 358 | #define TWL4030_VAUX3_DEDICATED 0x22 | 459 | #define TWL4030_VAUX3_DEDICATED 0x22 |
| 359 | 460 | ||
| 360 | |||
| 361 | #if defined(CONFIG_TWL4030_BCI_BATTERY) || \ | 461 | #if defined(CONFIG_TWL4030_BCI_BATTERY) || \ |
| 362 | defined(CONFIG_TWL4030_BCI_BATTERY_MODULE) | 462 | defined(CONFIG_TWL4030_BCI_BATTERY_MODULE) |
| 363 | extern int twl4030charger_usb_en(int enable); | 463 | extern int twl4030charger_usb_en(int enable); |
diff --git a/include/linux/i8042.h b/include/linux/i8042.h index 7907a72403ee..60c3360ef6ad 100644 --- a/include/linux/i8042.h +++ b/include/linux/i8042.h | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | * the Free Software Foundation. | 7 | * the Free Software Foundation. |
| 8 | */ | 8 | */ |
| 9 | 9 | ||
| 10 | #include <linux/types.h> | ||
| 10 | 11 | ||
| 11 | /* | 12 | /* |
| 12 | * Standard commands. | 13 | * Standard commands. |
| @@ -30,6 +31,35 @@ | |||
| 30 | #define I8042_CMD_MUX_PFX 0x0090 | 31 | #define I8042_CMD_MUX_PFX 0x0090 |
| 31 | #define I8042_CMD_MUX_SEND 0x1090 | 32 | #define I8042_CMD_MUX_SEND 0x1090 |
| 32 | 33 | ||
| 34 | struct serio; | ||
| 35 | |||
| 36 | #if defined(CONFIG_SERIO_I8042) || defined(CONFIG_SERIO_I8042_MODULE) | ||
| 37 | |||
| 38 | void i8042_lock_chip(void); | ||
| 39 | void i8042_unlock_chip(void); | ||
| 33 | int i8042_command(unsigned char *param, int command); | 40 | int i8042_command(unsigned char *param, int command); |
| 41 | bool i8042_check_port_owner(const struct serio *); | ||
| 42 | |||
| 43 | #else | ||
| 44 | |||
| 45 | void i8042_lock_chip(void) | ||
| 46 | { | ||
| 47 | } | ||
| 48 | |||
| 49 | void i8042_unlock_chip(void) | ||
| 50 | { | ||
| 51 | } | ||
| 52 | |||
| 53 | int i8042_command(unsigned char *param, int command) | ||
| 54 | { | ||
| 55 | return -ENOSYS; | ||
| 56 | } | ||
| 57 | |||
| 58 | bool i8042_check_port_owner(const struct serio *serio) | ||
| 59 | { | ||
| 60 | return false; | ||
| 61 | } | ||
| 62 | |||
| 63 | #endif | ||
| 34 | 64 | ||
| 35 | #endif | 65 | #endif |
diff --git a/include/linux/i82593.h b/include/linux/i82593.h new file mode 100644 index 000000000000..afac5c7a323d --- /dev/null +++ b/include/linux/i82593.h | |||
| @@ -0,0 +1,229 @@ | |||
| 1 | /* | ||
| 2 | * Definitions for Intel 82593 CSMA/CD Core LAN Controller | ||
| 3 | * The definitions are taken from the 1992 users manual with Intel | ||
| 4 | * order number 297125-001. | ||
| 5 | * | ||
| 6 | * /usr/src/pc/RCS/i82593.h,v 1.1 1996/07/17 15:23:12 root Exp | ||
| 7 | * | ||
| 8 | * Copyright 1994, Anders Klemets <klemets@it.kth.se> | ||
| 9 | * | ||
| 10 | * HISTORY | ||
| 11 | * i82593.h,v | ||
| 12 | * Revision 1.4 2005/11/4 09:15:00 baroniunas | ||
| 13 | * Modified copyright with permission of author as follows: | ||
| 14 | * | ||
| 15 | * "If I82539.H is the only file with my copyright statement | ||
| 16 | * that is included in the Source Forge project, then you have | ||
| 17 | * my approval to change the copyright statement to be a GPL | ||
| 18 | * license, in the way you proposed on October 10." | ||
| 19 | * | ||
| 20 | * Revision 1.1 1996/07/17 15:23:12 root | ||
| 21 | * Initial revision | ||
| 22 | * | ||
| 23 | * Revision 1.3 1995/04/05 15:13:58 adj | ||
| 24 | * Initial alpha release | ||
| 25 | * | ||
| 26 | * Revision 1.2 1994/06/16 23:57:31 klemets | ||
| 27 | * Mirrored all the fields in the configuration block. | ||
| 28 | * | ||
| 29 | * Revision 1.1 1994/06/02 20:25:34 klemets | ||
| 30 | * Initial revision | ||
| 31 | * | ||
| 32 | * | ||
| 33 | */ | ||
| 34 | #ifndef _I82593_H | ||
| 35 | #define _I82593_H | ||
| 36 | |||
| 37 | /* Intel 82593 CSMA/CD Core LAN Controller */ | ||
| 38 | |||
| 39 | /* Port 0 Command Register definitions */ | ||
| 40 | |||
| 41 | /* Execution operations */ | ||
| 42 | #define OP0_NOP 0 /* CHNL = 0 */ | ||
| 43 | #define OP0_SWIT_TO_PORT_1 0 /* CHNL = 1 */ | ||
| 44 | #define OP0_IA_SETUP 1 | ||
| 45 | #define OP0_CONFIGURE 2 | ||
| 46 | #define OP0_MC_SETUP 3 | ||
| 47 | #define OP0_TRANSMIT 4 | ||
| 48 | #define OP0_TDR 5 | ||
| 49 | #define OP0_DUMP 6 | ||
| 50 | #define OP0_DIAGNOSE 7 | ||
| 51 | #define OP0_TRANSMIT_NO_CRC 9 | ||
| 52 | #define OP0_RETRANSMIT 12 | ||
| 53 | #define OP0_ABORT 13 | ||
| 54 | /* Reception operations */ | ||
| 55 | #define OP0_RCV_ENABLE 8 | ||
| 56 | #define OP0_RCV_DISABLE 10 | ||
| 57 | #define OP0_STOP_RCV 11 | ||
| 58 | /* Status pointer control operations */ | ||
| 59 | #define OP0_FIX_PTR 15 /* CHNL = 1 */ | ||
| 60 | #define OP0_RLS_PTR 15 /* CHNL = 0 */ | ||
| 61 | #define OP0_RESET 14 | ||
| 62 | |||
| 63 | #define CR0_CHNL (1 << 4) /* 0=Channel 0, 1=Channel 1 */ | ||
| 64 | #define CR0_STATUS_0 0x00 | ||
| 65 | #define CR0_STATUS_1 0x20 | ||
| 66 | #define CR0_STATUS_2 0x40 | ||
| 67 | #define CR0_STATUS_3 0x60 | ||
| 68 | #define CR0_INT_ACK (1 << 7) /* 0=No ack, 1=acknowledge */ | ||
| 69 | |||
| 70 | /* Port 0 Status Register definitions */ | ||
| 71 | |||
| 72 | #define SR0_NO_RESULT 0 /* dummy */ | ||
| 73 | #define SR0_EVENT_MASK 0x0f | ||
| 74 | #define SR0_IA_SETUP_DONE 1 | ||
| 75 | #define SR0_CONFIGURE_DONE 2 | ||
| 76 | #define SR0_MC_SETUP_DONE 3 | ||
| 77 | #define SR0_TRANSMIT_DONE 4 | ||
| 78 | #define SR0_TDR_DONE 5 | ||
| 79 | #define SR0_DUMP_DONE 6 | ||
| 80 | #define SR0_DIAGNOSE_PASSED 7 | ||
| 81 | #define SR0_TRANSMIT_NO_CRC_DONE 9 | ||
| 82 | #define SR0_RETRANSMIT_DONE 12 | ||
| 83 | #define SR0_EXECUTION_ABORTED 13 | ||
| 84 | #define SR0_END_OF_FRAME 8 | ||
| 85 | #define SR0_RECEPTION_ABORTED 10 | ||
| 86 | #define SR0_DIAGNOSE_FAILED 15 | ||
| 87 | #define SR0_STOP_REG_HIT 11 | ||
| 88 | |||
| 89 | #define SR0_CHNL (1 << 4) | ||
| 90 | #define SR0_EXECUTION (1 << 5) | ||
| 91 | #define SR0_RECEPTION (1 << 6) | ||
| 92 | #define SR0_INTERRUPT (1 << 7) | ||
| 93 | #define SR0_BOTH_RX_TX (SR0_EXECUTION | SR0_RECEPTION) | ||
| 94 | |||
| 95 | #define SR3_EXEC_STATE_MASK 0x03 | ||
| 96 | #define SR3_EXEC_IDLE 0 | ||
| 97 | #define SR3_TX_ABORT_IN_PROGRESS 1 | ||
| 98 | #define SR3_EXEC_ACTIVE 2 | ||
| 99 | #define SR3_ABORT_IN_PROGRESS 3 | ||
| 100 | #define SR3_EXEC_CHNL (1 << 2) | ||
| 101 | #define SR3_STP_ON_NO_RSRC (1 << 3) | ||
| 102 | #define SR3_RCVING_NO_RSRC (1 << 4) | ||
| 103 | #define SR3_RCV_STATE_MASK 0x60 | ||
| 104 | #define SR3_RCV_IDLE 0x00 | ||
| 105 | #define SR3_RCV_READY 0x20 | ||
| 106 | #define SR3_RCV_ACTIVE 0x40 | ||
| 107 | #define SR3_RCV_STOP_IN_PROG 0x60 | ||
| 108 | #define SR3_RCV_CHNL (1 << 7) | ||
| 109 | |||
| 110 | /* Port 1 Command Register definitions */ | ||
| 111 | |||
| 112 | #define OP1_NOP 0 | ||
| 113 | #define OP1_SWIT_TO_PORT_0 1 | ||
| 114 | #define OP1_INT_DISABLE 2 | ||
| 115 | #define OP1_INT_ENABLE 3 | ||
| 116 | #define OP1_SET_TS 5 | ||
| 117 | #define OP1_RST_TS 7 | ||
| 118 | #define OP1_POWER_DOWN 8 | ||
| 119 | #define OP1_RESET_RING_MNGMT 11 | ||
| 120 | #define OP1_RESET 14 | ||
| 121 | #define OP1_SEL_RST 15 | ||
| 122 | |||
| 123 | #define CR1_STATUS_4 0x00 | ||
| 124 | #define CR1_STATUS_5 0x20 | ||
| 125 | #define CR1_STATUS_6 0x40 | ||
| 126 | #define CR1_STOP_REG_UPDATE (1 << 7) | ||
| 127 | |||
| 128 | /* Receive frame status bits */ | ||
| 129 | |||
| 130 | #define RX_RCLD (1 << 0) | ||
| 131 | #define RX_IA_MATCH (1 << 1) | ||
| 132 | #define RX_NO_AD_MATCH (1 << 2) | ||
| 133 | #define RX_NO_SFD (1 << 3) | ||
| 134 | #define RX_SRT_FRM (1 << 7) | ||
| 135 | #define RX_OVRRUN (1 << 8) | ||
| 136 | #define RX_ALG_ERR (1 << 10) | ||
| 137 | #define RX_CRC_ERR (1 << 11) | ||
| 138 | #define RX_LEN_ERR (1 << 12) | ||
| 139 | #define RX_RCV_OK (1 << 13) | ||
| 140 | #define RX_TYP_LEN (1 << 15) | ||
| 141 | |||
| 142 | /* Transmit status bits */ | ||
| 143 | |||
| 144 | #define TX_NCOL_MASK 0x0f | ||
| 145 | #define TX_FRTL (1 << 4) | ||
| 146 | #define TX_MAX_COL (1 << 5) | ||
| 147 | #define TX_HRT_BEAT (1 << 6) | ||
| 148 | #define TX_DEFER (1 << 7) | ||
| 149 | #define TX_UND_RUN (1 << 8) | ||
| 150 | #define TX_LOST_CTS (1 << 9) | ||
| 151 | #define TX_LOST_CRS (1 << 10) | ||
| 152 | #define TX_LTCOL (1 << 11) | ||
| 153 | #define TX_OK (1 << 13) | ||
| 154 | #define TX_COLL (1 << 15) | ||
| 155 | |||
| 156 | struct i82593_conf_block { | ||
| 157 | u_char fifo_limit : 4, | ||
| 158 | forgnesi : 1, | ||
| 159 | fifo_32 : 1, | ||
| 160 | d6mod : 1, | ||
| 161 | throttle_enb : 1; | ||
| 162 | u_char throttle : 6, | ||
| 163 | cntrxint : 1, | ||
| 164 | contin : 1; | ||
| 165 | u_char addr_len : 3, | ||
| 166 | acloc : 1, | ||
| 167 | preamb_len : 2, | ||
| 168 | loopback : 2; | ||
| 169 | u_char lin_prio : 3, | ||
| 170 | tbofstop : 1, | ||
| 171 | exp_prio : 3, | ||
| 172 | bof_met : 1; | ||
| 173 | u_char : 4, | ||
| 174 | ifrm_spc : 4; | ||
| 175 | u_char : 5, | ||
| 176 | slottim_low : 3; | ||
| 177 | u_char slottim_hi : 3, | ||
| 178 | : 1, | ||
| 179 | max_retr : 4; | ||
| 180 | u_char prmisc : 1, | ||
| 181 | bc_dis : 1, | ||
| 182 | : 1, | ||
| 183 | crs_1 : 1, | ||
| 184 | nocrc_ins : 1, | ||
| 185 | crc_1632 : 1, | ||
| 186 | : 1, | ||
| 187 | crs_cdt : 1; | ||
| 188 | u_char cs_filter : 3, | ||
| 189 | crs_src : 1, | ||
| 190 | cd_filter : 3, | ||
| 191 | : 1; | ||
| 192 | u_char : 2, | ||
| 193 | min_fr_len : 6; | ||
| 194 | u_char lng_typ : 1, | ||
| 195 | lng_fld : 1, | ||
| 196 | rxcrc_xf : 1, | ||
| 197 | artx : 1, | ||
| 198 | sarec : 1, | ||
| 199 | tx_jabber : 1, /* why is this called max_len in the manual? */ | ||
| 200 | hash_1 : 1, | ||
| 201 | lbpkpol : 1; | ||
| 202 | u_char : 6, | ||
| 203 | fdx : 1, | ||
| 204 | : 1; | ||
| 205 | u_char dummy_6 : 6, /* supposed to be ones */ | ||
| 206 | mult_ia : 1, | ||
| 207 | dis_bof : 1; | ||
| 208 | u_char dummy_1 : 1, /* supposed to be one */ | ||
| 209 | tx_ifs_retrig : 2, | ||
| 210 | mc_all : 1, | ||
| 211 | rcv_mon : 2, | ||
| 212 | frag_acpt : 1, | ||
| 213 | tstrttrs : 1; | ||
| 214 | u_char fretx : 1, | ||
| 215 | runt_eop : 1, | ||
| 216 | hw_sw_pin : 1, | ||
| 217 | big_endn : 1, | ||
| 218 | syncrqs : 1, | ||
| 219 | sttlen : 1, | ||
| 220 | tx_eop : 1, | ||
| 221 | rx_eop : 1; | ||
| 222 | u_char rbuf_size : 5, | ||
| 223 | rcvstop : 1, | ||
| 224 | : 2; | ||
| 225 | }; | ||
| 226 | |||
| 227 | #define I82593_MAX_MULTICAST_ADDRESSES 128 /* Hardware hashed filter */ | ||
| 228 | |||
| 229 | #endif /* _I82593_H */ | ||
diff --git a/include/linux/icmpv6.h b/include/linux/icmpv6.h index b6a85183c333..c0d8357917e2 100644 --- a/include/linux/icmpv6.h +++ b/include/linux/icmpv6.h | |||
| @@ -171,8 +171,6 @@ struct icmp6_filter { | |||
| 171 | #ifdef __KERNEL__ | 171 | #ifdef __KERNEL__ |
| 172 | 172 | ||
| 173 | #include <linux/netdevice.h> | 173 | #include <linux/netdevice.h> |
| 174 | #include <linux/skbuff.h> | ||
| 175 | |||
| 176 | 174 | ||
| 177 | extern void icmpv6_send(struct sk_buff *skb, | 175 | extern void icmpv6_send(struct sk_buff *skb, |
| 178 | u8 type, u8 code, | 176 | u8 type, u8 code, |
diff --git a/include/linux/ide.h b/include/linux/ide.h index edc93a6d931d..e4135d6e0556 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
| @@ -258,6 +258,7 @@ enum { | |||
| 258 | IDE_TFLAG_DYN = (1 << 5), | 258 | IDE_TFLAG_DYN = (1 << 5), |
| 259 | IDE_TFLAG_FS = (1 << 6), | 259 | IDE_TFLAG_FS = (1 << 6), |
| 260 | IDE_TFLAG_MULTI_PIO = (1 << 7), | 260 | IDE_TFLAG_MULTI_PIO = (1 << 7), |
| 261 | IDE_TFLAG_SET_XFER = (1 << 8), | ||
| 261 | }; | 262 | }; |
| 262 | 263 | ||
| 263 | enum { | 264 | enum { |
| @@ -294,7 +295,7 @@ struct ide_cmd { | |||
| 294 | } out, in; | 295 | } out, in; |
| 295 | } valid; | 296 | } valid; |
| 296 | 297 | ||
| 297 | u8 tf_flags; | 298 | u16 tf_flags; |
| 298 | u8 ftf_flags; /* for TASKFILE ioctl */ | 299 | u8 ftf_flags; /* for TASKFILE ioctl */ |
| 299 | int protocol; | 300 | int protocol; |
| 300 | 301 | ||
| @@ -918,8 +919,7 @@ __IDE_PROC_DEVSET(_name, _min, _max, NULL, NULL) | |||
| 918 | typedef struct { | 919 | typedef struct { |
| 919 | const char *name; | 920 | const char *name; |
| 920 | mode_t mode; | 921 | mode_t mode; |
| 921 | read_proc_t *read_proc; | 922 | const struct file_operations *proc_fops; |
| 922 | write_proc_t *write_proc; | ||
| 923 | } ide_proc_entry_t; | 923 | } ide_proc_entry_t; |
| 924 | 924 | ||
| 925 | void proc_ide_create(void); | 925 | void proc_ide_create(void); |
| @@ -931,24 +931,8 @@ void ide_proc_unregister_port(ide_hwif_t *); | |||
| 931 | void ide_proc_register_driver(ide_drive_t *, struct ide_driver *); | 931 | void ide_proc_register_driver(ide_drive_t *, struct ide_driver *); |
| 932 | void ide_proc_unregister_driver(ide_drive_t *, struct ide_driver *); | 932 | void ide_proc_unregister_driver(ide_drive_t *, struct ide_driver *); |
| 933 | 933 | ||
| 934 | read_proc_t proc_ide_read_capacity; | 934 | extern const struct file_operations ide_capacity_proc_fops; |
| 935 | read_proc_t proc_ide_read_geometry; | 935 | extern const struct file_operations ide_geometry_proc_fops; |
| 936 | |||
| 937 | /* | ||
| 938 | * Standard exit stuff: | ||
| 939 | */ | ||
| 940 | #define PROC_IDE_READ_RETURN(page,start,off,count,eof,len) \ | ||
| 941 | { \ | ||
| 942 | len -= off; \ | ||
| 943 | if (len < count) { \ | ||
| 944 | *eof = 1; \ | ||
| 945 | if (len <= 0) \ | ||
| 946 | return 0; \ | ||
| 947 | } else \ | ||
| 948 | len = count; \ | ||
| 949 | *start = page + off; \ | ||
| 950 | return len; \ | ||
| 951 | } | ||
| 952 | #else | 936 | #else |
| 953 | static inline void proc_ide_create(void) { ; } | 937 | static inline void proc_ide_create(void) { ; } |
| 954 | static inline void proc_ide_destroy(void) { ; } | 938 | static inline void proc_ide_destroy(void) { ; } |
| @@ -960,7 +944,6 @@ static inline void ide_proc_register_driver(ide_drive_t *drive, | |||
| 960 | struct ide_driver *driver) { ; } | 944 | struct ide_driver *driver) { ; } |
| 961 | static inline void ide_proc_unregister_driver(ide_drive_t *drive, | 945 | static inline void ide_proc_unregister_driver(ide_drive_t *drive, |
| 962 | struct ide_driver *driver) { ; } | 946 | struct ide_driver *driver) { ; } |
| 963 | #define PROC_IDE_READ_RETURN(page,start,off,count,eof,len) return 0; | ||
| 964 | #endif | 947 | #endif |
| 965 | 948 | ||
| 966 | enum { | 949 | enum { |
| @@ -1081,6 +1064,7 @@ extern void ide_fixstring(u8 *, const int, const int); | |||
| 1081 | 1064 | ||
| 1082 | int ide_busy_sleep(ide_drive_t *, unsigned long, int); | 1065 | int ide_busy_sleep(ide_drive_t *, unsigned long, int); |
| 1083 | 1066 | ||
| 1067 | int __ide_wait_stat(ide_drive_t *, u8, u8, unsigned long, u8 *); | ||
| 1084 | int ide_wait_stat(ide_startstop_t *, ide_drive_t *, u8, u8, unsigned long); | 1068 | int ide_wait_stat(ide_startstop_t *, ide_drive_t *, u8, u8, unsigned long); |
| 1085 | 1069 | ||
| 1086 | ide_startstop_t ide_do_park_unpark(ide_drive_t *, struct request *); | 1070 | ide_startstop_t ide_do_park_unpark(ide_drive_t *, struct request *); |
| @@ -1169,7 +1153,7 @@ int ide_no_data_taskfile(ide_drive_t *, struct ide_cmd *); | |||
| 1169 | 1153 | ||
| 1170 | int ide_taskfile_ioctl(ide_drive_t *, unsigned long); | 1154 | int ide_taskfile_ioctl(ide_drive_t *, unsigned long); |
| 1171 | 1155 | ||
| 1172 | int ide_dev_read_id(ide_drive_t *, u8, u16 *); | 1156 | int ide_dev_read_id(ide_drive_t *, u8, u16 *, int); |
| 1173 | 1157 | ||
| 1174 | extern int ide_driveid_update(ide_drive_t *); | 1158 | extern int ide_driveid_update(ide_drive_t *); |
| 1175 | extern int ide_config_drive_speed(ide_drive_t *, u8); | 1159 | extern int ide_config_drive_speed(ide_drive_t *, u8); |
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index a9173d5434d1..d9724a28c0c2 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h | |||
| @@ -115,7 +115,6 @@ | |||
| 115 | #define IEEE80211_MAX_SSID_LEN 32 | 115 | #define IEEE80211_MAX_SSID_LEN 32 |
| 116 | 116 | ||
| 117 | #define IEEE80211_MAX_MESH_ID_LEN 32 | 117 | #define IEEE80211_MAX_MESH_ID_LEN 32 |
| 118 | #define IEEE80211_MESH_CONFIG_LEN 19 | ||
| 119 | 118 | ||
| 120 | #define IEEE80211_QOS_CTL_LEN 2 | 119 | #define IEEE80211_QOS_CTL_LEN 2 |
| 121 | #define IEEE80211_QOS_CTL_TID_MASK 0x000F | 120 | #define IEEE80211_QOS_CTL_TID_MASK 0x000F |
| @@ -472,7 +471,7 @@ static inline int ieee80211_is_cfendack(__le16 fc) | |||
| 472 | } | 471 | } |
| 473 | 472 | ||
| 474 | /** | 473 | /** |
| 475 | * ieee80211_is_nullfunc - check if FTYPE=IEEE80211_FTYPE_DATA and STYPE=IEEE80211_STYPE_NULLFUNC | 474 | * ieee80211_is_nullfunc - check if frame is a regular (non-QoS) nullfunc frame |
| 476 | * @fc: frame control bytes in little-endian byteorder | 475 | * @fc: frame control bytes in little-endian byteorder |
| 477 | */ | 476 | */ |
| 478 | static inline int ieee80211_is_nullfunc(__le16 fc) | 477 | static inline int ieee80211_is_nullfunc(__le16 fc) |
| @@ -481,6 +480,16 @@ static inline int ieee80211_is_nullfunc(__le16 fc) | |||
| 481 | cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_NULLFUNC); | 480 | cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_NULLFUNC); |
| 482 | } | 481 | } |
| 483 | 482 | ||
| 483 | /** | ||
| 484 | * ieee80211_is_qos_nullfunc - check if frame is a QoS nullfunc frame | ||
| 485 | * @fc: frame control bytes in little-endian byteorder | ||
| 486 | */ | ||
| 487 | static inline int ieee80211_is_qos_nullfunc(__le16 fc) | ||
| 488 | { | ||
| 489 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == | ||
| 490 | cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_QOS_NULLFUNC); | ||
| 491 | } | ||
| 492 | |||
| 484 | struct ieee80211s_hdr { | 493 | struct ieee80211s_hdr { |
| 485 | u8 flags; | 494 | u8 flags; |
| 486 | u8 ttl; | 495 | u8 ttl; |
| @@ -544,6 +553,35 @@ struct ieee80211_tim_ie { | |||
| 544 | u8 virtual_map[1]; | 553 | u8 virtual_map[1]; |
| 545 | } __attribute__ ((packed)); | 554 | } __attribute__ ((packed)); |
| 546 | 555 | ||
| 556 | /** | ||
| 557 | * struct ieee80211_meshconf_ie | ||
| 558 | * | ||
| 559 | * This structure refers to "Mesh Configuration information element" | ||
| 560 | */ | ||
| 561 | struct ieee80211_meshconf_ie { | ||
| 562 | u8 meshconf_psel; | ||
| 563 | u8 meshconf_pmetric; | ||
| 564 | u8 meshconf_congest; | ||
| 565 | u8 meshconf_synch; | ||
| 566 | u8 meshconf_auth; | ||
| 567 | u8 meshconf_form; | ||
| 568 | u8 meshconf_cap; | ||
| 569 | } __attribute__ ((packed)); | ||
| 570 | |||
| 571 | /** | ||
| 572 | * struct ieee80211_rann_ie | ||
| 573 | * | ||
| 574 | * This structure refers to "Root Announcement information element" | ||
| 575 | */ | ||
| 576 | struct ieee80211_rann_ie { | ||
| 577 | u8 rann_flags; | ||
| 578 | u8 rann_hopcount; | ||
| 579 | u8 rann_ttl; | ||
| 580 | u8 rann_addr[6]; | ||
| 581 | u32 rann_seq; | ||
| 582 | u32 rann_metric; | ||
| 583 | } __attribute__ ((packed)); | ||
| 584 | |||
| 547 | #define WLAN_SA_QUERY_TR_ID_LEN 2 | 585 | #define WLAN_SA_QUERY_TR_ID_LEN 2 |
| 548 | 586 | ||
| 549 | struct ieee80211_mgmt { | 587 | struct ieee80211_mgmt { |
| @@ -802,6 +840,31 @@ struct ieee80211_ht_cap { | |||
| 802 | #define IEEE80211_HT_AMPDU_PARM_FACTOR 0x03 | 840 | #define IEEE80211_HT_AMPDU_PARM_FACTOR 0x03 |
| 803 | #define IEEE80211_HT_AMPDU_PARM_DENSITY 0x1C | 841 | #define IEEE80211_HT_AMPDU_PARM_DENSITY 0x1C |
| 804 | 842 | ||
| 843 | /* | ||
| 844 | * Maximum length of AMPDU that the STA can receive. | ||
| 845 | * Length = 2 ^ (13 + max_ampdu_length_exp) - 1 (octets) | ||
| 846 | */ | ||
| 847 | enum ieee80211_max_ampdu_length_exp { | ||
| 848 | IEEE80211_HT_MAX_AMPDU_8K = 0, | ||
| 849 | IEEE80211_HT_MAX_AMPDU_16K = 1, | ||
| 850 | IEEE80211_HT_MAX_AMPDU_32K = 2, | ||
| 851 | IEEE80211_HT_MAX_AMPDU_64K = 3 | ||
| 852 | }; | ||
| 853 | |||
| 854 | #define IEEE80211_HT_MAX_AMPDU_FACTOR 13 | ||
| 855 | |||
| 856 | /* Minimum MPDU start spacing */ | ||
| 857 | enum ieee80211_min_mpdu_spacing { | ||
| 858 | IEEE80211_HT_MPDU_DENSITY_NONE = 0, /* No restriction */ | ||
| 859 | IEEE80211_HT_MPDU_DENSITY_0_25 = 1, /* 1/4 usec */ | ||
| 860 | IEEE80211_HT_MPDU_DENSITY_0_5 = 2, /* 1/2 usec */ | ||
| 861 | IEEE80211_HT_MPDU_DENSITY_1 = 3, /* 1 usec */ | ||
| 862 | IEEE80211_HT_MPDU_DENSITY_2 = 4, /* 2 usec */ | ||
| 863 | IEEE80211_HT_MPDU_DENSITY_4 = 5, /* 4 usec */ | ||
| 864 | IEEE80211_HT_MPDU_DENSITY_8 = 6, /* 8 usec */ | ||
| 865 | IEEE80211_HT_MPDU_DENSITY_16 = 7 /* 16 usec */ | ||
| 866 | }; | ||
| 867 | |||
| 805 | /** | 868 | /** |
| 806 | * struct ieee80211_ht_info - HT information | 869 | * struct ieee80211_ht_info - HT information |
| 807 | * | 870 | * |
| @@ -1035,6 +1098,7 @@ enum ieee80211_eid { | |||
| 1035 | WLAN_EID_PREQ = 68, | 1098 | WLAN_EID_PREQ = 68, |
| 1036 | WLAN_EID_PREP = 69, | 1099 | WLAN_EID_PREP = 69, |
| 1037 | WLAN_EID_PERR = 70, | 1100 | WLAN_EID_PERR = 70, |
| 1101 | WLAN_EID_RANN = 49, /* compatible with FreeBSD */ | ||
| 1038 | /* 802.11h */ | 1102 | /* 802.11h */ |
| 1039 | WLAN_EID_PWR_CONSTRAINT = 32, | 1103 | WLAN_EID_PWR_CONSTRAINT = 32, |
| 1040 | WLAN_EID_PWR_CAPABILITY = 33, | 1104 | WLAN_EID_PWR_CAPABILITY = 33, |
| @@ -1196,8 +1260,14 @@ enum ieee80211_sa_query_action { | |||
| 1196 | #define WLAN_CIPHER_SUITE_WEP104 0x000FAC05 | 1260 | #define WLAN_CIPHER_SUITE_WEP104 0x000FAC05 |
| 1197 | #define WLAN_CIPHER_SUITE_AES_CMAC 0x000FAC06 | 1261 | #define WLAN_CIPHER_SUITE_AES_CMAC 0x000FAC06 |
| 1198 | 1262 | ||
| 1263 | /* AKM suite selectors */ | ||
| 1264 | #define WLAN_AKM_SUITE_8021X 0x000FAC01 | ||
| 1265 | #define WLAN_AKM_SUITE_PSK 0x000FAC02 | ||
| 1266 | |||
| 1199 | #define WLAN_MAX_KEY_LEN 32 | 1267 | #define WLAN_MAX_KEY_LEN 32 |
| 1200 | 1268 | ||
| 1269 | #define WLAN_PMKID_LEN 16 | ||
| 1270 | |||
| 1201 | /** | 1271 | /** |
| 1202 | * ieee80211_get_qos_ctl - get pointer to qos control bytes | 1272 | * ieee80211_get_qos_ctl - get pointer to qos control bytes |
| 1203 | * @hdr: the frame | 1273 | * @hdr: the frame |
diff --git a/include/linux/if.h b/include/linux/if.h index b9a6229f3be7..3a9f410a296b 100644 --- a/include/linux/if.h +++ b/include/linux/if.h | |||
| @@ -70,6 +70,7 @@ | |||
| 70 | #define IFF_XMIT_DST_RELEASE 0x400 /* dev_hard_start_xmit() is allowed to | 70 | #define IFF_XMIT_DST_RELEASE 0x400 /* dev_hard_start_xmit() is allowed to |
| 71 | * release skb->dst | 71 | * release skb->dst |
| 72 | */ | 72 | */ |
| 73 | #define IFF_DONT_BRIDGE 0x800 /* disallow bridging this ether dev */ | ||
| 73 | 74 | ||
| 74 | #define IF_GET_IFACE 0x0001 /* for querying only */ | 75 | #define IF_GET_IFACE 0x0001 /* for querying only */ |
| 75 | #define IF_GET_PROTO 0x0002 | 76 | #define IF_GET_PROTO 0x0002 |
| @@ -125,8 +126,7 @@ enum { | |||
| 125 | * being very small might be worth keeping for clean configuration. | 126 | * being very small might be worth keeping for clean configuration. |
| 126 | */ | 127 | */ |
| 127 | 128 | ||
| 128 | struct ifmap | 129 | struct ifmap { |
| 129 | { | ||
| 130 | unsigned long mem_start; | 130 | unsigned long mem_start; |
| 131 | unsigned long mem_end; | 131 | unsigned long mem_end; |
| 132 | unsigned short base_addr; | 132 | unsigned short base_addr; |
| @@ -136,8 +136,7 @@ struct ifmap | |||
| 136 | /* 3 bytes spare */ | 136 | /* 3 bytes spare */ |
| 137 | }; | 137 | }; |
| 138 | 138 | ||
| 139 | struct if_settings | 139 | struct if_settings { |
| 140 | { | ||
| 141 | unsigned int type; /* Type of physical device or protocol */ | 140 | unsigned int type; /* Type of physical device or protocol */ |
| 142 | unsigned int size; /* Size of the data allocated by the caller */ | 141 | unsigned int size; /* Size of the data allocated by the caller */ |
| 143 | union { | 142 | union { |
| @@ -161,8 +160,7 @@ struct if_settings | |||
| 161 | * remainder may be interface specific. | 160 | * remainder may be interface specific. |
| 162 | */ | 161 | */ |
| 163 | 162 | ||
| 164 | struct ifreq | 163 | struct ifreq { |
| 165 | { | ||
| 166 | #define IFHWADDRLEN 6 | 164 | #define IFHWADDRLEN 6 |
| 167 | union | 165 | union |
| 168 | { | 166 | { |
| @@ -211,11 +209,9 @@ struct ifreq | |||
| 211 | * must know all networks accessible). | 209 | * must know all networks accessible). |
| 212 | */ | 210 | */ |
| 213 | 211 | ||
| 214 | struct ifconf | 212 | struct ifconf { |
| 215 | { | ||
| 216 | int ifc_len; /* size of buffer */ | 213 | int ifc_len; /* size of buffer */ |
| 217 | union | 214 | union { |
| 218 | { | ||
| 219 | char __user *ifcu_buf; | 215 | char __user *ifcu_buf; |
| 220 | struct ifreq __user *ifcu_req; | 216 | struct ifreq __user *ifcu_req; |
| 221 | } ifc_ifcu; | 217 | } ifc_ifcu; |
diff --git a/include/linux/if_addr.h b/include/linux/if_addr.h index a60c821be44c..23357ab81a77 100644 --- a/include/linux/if_addr.h +++ b/include/linux/if_addr.h | |||
| @@ -4,8 +4,7 @@ | |||
| 4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
| 5 | #include <linux/netlink.h> | 5 | #include <linux/netlink.h> |
| 6 | 6 | ||
| 7 | struct ifaddrmsg | 7 | struct ifaddrmsg { |
| 8 | { | ||
| 9 | __u8 ifa_family; | 8 | __u8 ifa_family; |
| 10 | __u8 ifa_prefixlen; /* The prefix length */ | 9 | __u8 ifa_prefixlen; /* The prefix length */ |
| 11 | __u8 ifa_flags; /* Flags */ | 10 | __u8 ifa_flags; /* Flags */ |
| @@ -20,8 +19,7 @@ struct ifaddrmsg | |||
| 20 | * but for point-to-point IFA_ADDRESS is DESTINATION address, | 19 | * but for point-to-point IFA_ADDRESS is DESTINATION address, |
| 21 | * local address is supplied in IFA_LOCAL attribute. | 20 | * local address is supplied in IFA_LOCAL attribute. |
| 22 | */ | 21 | */ |
| 23 | enum | 22 | enum { |
| 24 | { | ||
| 25 | IFA_UNSPEC, | 23 | IFA_UNSPEC, |
| 26 | IFA_ADDRESS, | 24 | IFA_ADDRESS, |
| 27 | IFA_LOCAL, | 25 | IFA_LOCAL, |
| @@ -41,13 +39,13 @@ enum | |||
| 41 | 39 | ||
| 42 | #define IFA_F_NODAD 0x02 | 40 | #define IFA_F_NODAD 0x02 |
| 43 | #define IFA_F_OPTIMISTIC 0x04 | 41 | #define IFA_F_OPTIMISTIC 0x04 |
| 42 | #define IFA_F_DADFAILED 0x08 | ||
| 44 | #define IFA_F_HOMEADDRESS 0x10 | 43 | #define IFA_F_HOMEADDRESS 0x10 |
| 45 | #define IFA_F_DEPRECATED 0x20 | 44 | #define IFA_F_DEPRECATED 0x20 |
| 46 | #define IFA_F_TENTATIVE 0x40 | 45 | #define IFA_F_TENTATIVE 0x40 |
| 47 | #define IFA_F_PERMANENT 0x80 | 46 | #define IFA_F_PERMANENT 0x80 |
| 48 | 47 | ||
| 49 | struct ifa_cacheinfo | 48 | struct ifa_cacheinfo { |
| 50 | { | ||
| 51 | __u32 ifa_prefered; | 49 | __u32 ifa_prefered; |
| 52 | __u32 ifa_valid; | 50 | __u32 ifa_valid; |
| 53 | __u32 cstamp; /* created timestamp, hundredths of seconds */ | 51 | __u32 cstamp; /* created timestamp, hundredths of seconds */ |
diff --git a/include/linux/if_addrlabel.h b/include/linux/if_addrlabel.h index 89571f65d6de..54580c298187 100644 --- a/include/linux/if_addrlabel.h +++ b/include/linux/if_addrlabel.h | |||
| @@ -12,8 +12,7 @@ | |||
| 12 | 12 | ||
| 13 | #include <linux/types.h> | 13 | #include <linux/types.h> |
| 14 | 14 | ||
| 15 | struct ifaddrlblmsg | 15 | struct ifaddrlblmsg { |
| 16 | { | ||
| 17 | __u8 ifal_family; /* Address family */ | 16 | __u8 ifal_family; /* Address family */ |
| 18 | __u8 __ifal_reserved; /* Reserved */ | 17 | __u8 __ifal_reserved; /* Reserved */ |
| 19 | __u8 ifal_prefixlen; /* Prefix length */ | 18 | __u8 ifal_prefixlen; /* Prefix length */ |
| @@ -22,8 +21,7 @@ struct ifaddrlblmsg | |||
| 22 | __u32 ifal_seq; /* sequence number */ | 21 | __u32 ifal_seq; /* sequence number */ |
| 23 | }; | 22 | }; |
| 24 | 23 | ||
| 25 | enum | 24 | enum { |
| 26 | { | ||
| 27 | IFAL_ADDRESS = 1, | 25 | IFAL_ADDRESS = 1, |
| 28 | IFAL_LABEL = 2, | 26 | IFAL_LABEL = 2, |
| 29 | __IFAL_MAX | 27 | __IFAL_MAX |
diff --git a/include/linux/if_arcnet.h b/include/linux/if_arcnet.h index 0835debab115..46e34bd0e783 100644 --- a/include/linux/if_arcnet.h +++ b/include/linux/if_arcnet.h | |||
| @@ -56,8 +56,7 @@ | |||
| 56 | /* | 56 | /* |
| 57 | * The RFC1201-specific components of an arcnet packet header. | 57 | * The RFC1201-specific components of an arcnet packet header. |
| 58 | */ | 58 | */ |
| 59 | struct arc_rfc1201 | 59 | struct arc_rfc1201 { |
| 60 | { | ||
| 61 | __u8 proto; /* protocol ID field - varies */ | 60 | __u8 proto; /* protocol ID field - varies */ |
| 62 | __u8 split_flag; /* for use with split packets */ | 61 | __u8 split_flag; /* for use with split packets */ |
| 63 | __be16 sequence; /* sequence number */ | 62 | __be16 sequence; /* sequence number */ |
| @@ -69,8 +68,7 @@ struct arc_rfc1201 | |||
| 69 | /* | 68 | /* |
| 70 | * The RFC1051-specific components. | 69 | * The RFC1051-specific components. |
| 71 | */ | 70 | */ |
| 72 | struct arc_rfc1051 | 71 | struct arc_rfc1051 { |
| 73 | { | ||
| 74 | __u8 proto; /* ARC_P_RFC1051_ARP/RFC1051_IP */ | 72 | __u8 proto; /* ARC_P_RFC1051_ARP/RFC1051_IP */ |
| 75 | __u8 payload[0]; /* 507 bytes */ | 73 | __u8 payload[0]; /* 507 bytes */ |
| 76 | }; | 74 | }; |
| @@ -81,8 +79,7 @@ struct arc_rfc1051 | |||
| 81 | * The ethernet-encap-specific components. We have a real ethernet header | 79 | * The ethernet-encap-specific components. We have a real ethernet header |
| 82 | * and some data. | 80 | * and some data. |
| 83 | */ | 81 | */ |
| 84 | struct arc_eth_encap | 82 | struct arc_eth_encap { |
| 85 | { | ||
| 86 | __u8 proto; /* Always ARC_P_ETHER */ | 83 | __u8 proto; /* Always ARC_P_ETHER */ |
| 87 | struct ethhdr eth; /* standard ethernet header (yuck!) */ | 84 | struct ethhdr eth; /* standard ethernet header (yuck!) */ |
| 88 | __u8 payload[0]; /* 493 bytes */ | 85 | __u8 payload[0]; /* 493 bytes */ |
| @@ -90,8 +87,7 @@ struct arc_eth_encap | |||
| 90 | #define ETH_ENCAP_HDR_SIZE 14 | 87 | #define ETH_ENCAP_HDR_SIZE 14 |
| 91 | 88 | ||
| 92 | 89 | ||
| 93 | struct arc_cap | 90 | struct arc_cap { |
| 94 | { | ||
| 95 | __u8 proto; | 91 | __u8 proto; |
| 96 | __u8 cookie[sizeof(int)]; /* Actually NOT sent over the network */ | 92 | __u8 cookie[sizeof(int)]; /* Actually NOT sent over the network */ |
| 97 | union { | 93 | union { |
| @@ -108,8 +104,7 @@ struct arc_cap | |||
| 108 | * the _end_ of the 512-byte buffer. We hide this complexity inside the | 104 | * the _end_ of the 512-byte buffer. We hide this complexity inside the |
| 109 | * driver. | 105 | * driver. |
| 110 | */ | 106 | */ |
| 111 | struct arc_hardware | 107 | struct arc_hardware { |
| 112 | { | ||
| 113 | __u8 source, /* source ARCnet - filled in automagically */ | 108 | __u8 source, /* source ARCnet - filled in automagically */ |
| 114 | dest, /* destination ARCnet - 0 for broadcast */ | 109 | dest, /* destination ARCnet - 0 for broadcast */ |
| 115 | offset[2]; /* offset bytes (some weird semantics) */ | 110 | offset[2]; /* offset bytes (some weird semantics) */ |
| @@ -120,8 +115,7 @@ struct arc_hardware | |||
| 120 | * This is an ARCnet frame header, as seen by the kernel (and userspace, | 115 | * This is an ARCnet frame header, as seen by the kernel (and userspace, |
| 121 | * when you do a raw packet capture). | 116 | * when you do a raw packet capture). |
| 122 | */ | 117 | */ |
| 123 | struct archdr | 118 | struct archdr { |
| 124 | { | ||
| 125 | /* hardware requirements */ | 119 | /* hardware requirements */ |
| 126 | struct arc_hardware hard; | 120 | struct arc_hardware hard; |
| 127 | 121 | ||
diff --git a/include/linux/if_arp.h b/include/linux/if_arp.h index b554300ef8bf..e80b7f88f7c6 100644 --- a/include/linux/if_arp.h +++ b/include/linux/if_arp.h | |||
| @@ -87,7 +87,6 @@ | |||
| 87 | #define ARPHRD_IEEE80211_PRISM 802 /* IEEE 802.11 + Prism2 header */ | 87 | #define ARPHRD_IEEE80211_PRISM 802 /* IEEE 802.11 + Prism2 header */ |
| 88 | #define ARPHRD_IEEE80211_RADIOTAP 803 /* IEEE 802.11 + radiotap header */ | 88 | #define ARPHRD_IEEE80211_RADIOTAP 803 /* IEEE 802.11 + radiotap header */ |
| 89 | #define ARPHRD_IEEE802154 804 | 89 | #define ARPHRD_IEEE802154 804 |
| 90 | #define ARPHRD_IEEE802154_PHY 805 | ||
| 91 | 90 | ||
| 92 | #define ARPHRD_PHONET 820 /* PhoNet media type */ | 91 | #define ARPHRD_PHONET 820 /* PhoNet media type */ |
| 93 | #define ARPHRD_PHONET_PIPE 821 /* PhoNet pipe header */ | 92 | #define ARPHRD_PHONET_PIPE 821 /* PhoNet pipe header */ |
| @@ -134,8 +133,7 @@ struct arpreq_old { | |||
| 134 | * This structure defines an ethernet arp header. | 133 | * This structure defines an ethernet arp header. |
| 135 | */ | 134 | */ |
| 136 | 135 | ||
| 137 | struct arphdr | 136 | struct arphdr { |
| 138 | { | ||
| 139 | __be16 ar_hrd; /* format of hardware address */ | 137 | __be16 ar_hrd; /* format of hardware address */ |
| 140 | __be16 ar_pro; /* format of protocol address */ | 138 | __be16 ar_pro; /* format of protocol address */ |
| 141 | unsigned char ar_hln; /* length of hardware address */ | 139 | unsigned char ar_hln; /* length of hardware address */ |
diff --git a/include/linux/if_bonding.h b/include/linux/if_bonding.h index 65c2d247068b..cd525fae3c98 100644 --- a/include/linux/if_bonding.h +++ b/include/linux/if_bonding.h | |||
| @@ -94,8 +94,7 @@ typedef struct ifbond { | |||
| 94 | __s32 miimon; | 94 | __s32 miimon; |
| 95 | } ifbond; | 95 | } ifbond; |
| 96 | 96 | ||
| 97 | typedef struct ifslave | 97 | typedef struct ifslave { |
| 98 | { | ||
| 99 | __s32 slave_id; /* Used as an IN param to the BOND_SLAVE_INFO_QUERY ioctl */ | 98 | __s32 slave_id; /* Used as an IN param to the BOND_SLAVE_INFO_QUERY ioctl */ |
| 100 | char slave_name[IFNAMSIZ]; | 99 | char slave_name[IFNAMSIZ]; |
| 101 | __s8 link; | 100 | __s8 link; |
diff --git a/include/linux/if_bridge.h b/include/linux/if_bridge.h index 6badb3e2c4e4..938b7e81df95 100644 --- a/include/linux/if_bridge.h +++ b/include/linux/if_bridge.h | |||
| @@ -49,8 +49,7 @@ | |||
| 49 | #define BR_STATE_FORWARDING 3 | 49 | #define BR_STATE_FORWARDING 3 |
| 50 | #define BR_STATE_BLOCKING 4 | 50 | #define BR_STATE_BLOCKING 4 |
| 51 | 51 | ||
| 52 | struct __bridge_info | 52 | struct __bridge_info { |
| 53 | { | ||
| 54 | __u64 designated_root; | 53 | __u64 designated_root; |
| 55 | __u64 bridge_id; | 54 | __u64 bridge_id; |
| 56 | __u32 root_path_cost; | 55 | __u32 root_path_cost; |
| @@ -72,8 +71,7 @@ struct __bridge_info | |||
| 72 | __u32 gc_timer_value; | 71 | __u32 gc_timer_value; |
| 73 | }; | 72 | }; |
| 74 | 73 | ||
| 75 | struct __port_info | 74 | struct __port_info { |
| 76 | { | ||
| 77 | __u64 designated_root; | 75 | __u64 designated_root; |
| 78 | __u64 designated_bridge; | 76 | __u64 designated_bridge; |
| 79 | __u16 port_id; | 77 | __u16 port_id; |
| @@ -89,8 +87,7 @@ struct __port_info | |||
| 89 | __u32 hold_timer_value; | 87 | __u32 hold_timer_value; |
| 90 | }; | 88 | }; |
| 91 | 89 | ||
| 92 | struct __fdb_entry | 90 | struct __fdb_entry { |
| 93 | { | ||
| 94 | __u8 mac_addr[6]; | 91 | __u8 mac_addr[6]; |
| 95 | __u8 port_no; | 92 | __u8 port_no; |
| 96 | __u8 is_local; | 93 | __u8 is_local; |
diff --git a/include/linux/if_ec.h b/include/linux/if_ec.h index e7499aa79783..d85f9f48129f 100644 --- a/include/linux/if_ec.h +++ b/include/linux/if_ec.h | |||
| @@ -5,14 +5,12 @@ | |||
| 5 | 5 | ||
| 6 | /* User visible stuff. Glibc provides its own but libc5 folk will use these */ | 6 | /* User visible stuff. Glibc provides its own but libc5 folk will use these */ |
| 7 | 7 | ||
| 8 | struct ec_addr | 8 | struct ec_addr { |
| 9 | { | ||
| 10 | unsigned char station; /* Station number. */ | 9 | unsigned char station; /* Station number. */ |
| 11 | unsigned char net; /* Network number. */ | 10 | unsigned char net; /* Network number. */ |
| 12 | }; | 11 | }; |
| 13 | 12 | ||
| 14 | struct sockaddr_ec | 13 | struct sockaddr_ec { |
| 15 | { | ||
| 16 | unsigned short sec_family; | 14 | unsigned short sec_family; |
| 17 | unsigned char port; /* Port number. */ | 15 | unsigned char port; /* Port number. */ |
| 18 | unsigned char cb; /* Control/flag byte. */ | 16 | unsigned char cb; /* Control/flag byte. */ |
| @@ -37,8 +35,7 @@ struct sockaddr_ec | |||
| 37 | #define EC_HLEN 6 | 35 | #define EC_HLEN 6 |
| 38 | 36 | ||
| 39 | /* This is what an Econet frame looks like on the wire. */ | 37 | /* This is what an Econet frame looks like on the wire. */ |
| 40 | struct ec_framehdr | 38 | struct ec_framehdr { |
| 41 | { | ||
| 42 | unsigned char dst_stn; | 39 | unsigned char dst_stn; |
| 43 | unsigned char dst_net; | 40 | unsigned char dst_net; |
| 44 | unsigned char src_stn; | 41 | unsigned char src_stn; |
| @@ -62,8 +59,7 @@ static inline struct econet_sock *ec_sk(const struct sock *sk) | |||
| 62 | return (struct econet_sock *)sk; | 59 | return (struct econet_sock *)sk; |
| 63 | } | 60 | } |
| 64 | 61 | ||
| 65 | struct ec_device | 62 | struct ec_device { |
| 66 | { | ||
| 67 | unsigned char station, net; /* Econet protocol address */ | 63 | unsigned char station, net; /* Econet protocol address */ |
| 68 | }; | 64 | }; |
| 69 | 65 | ||
diff --git a/include/linux/if_ether.h b/include/linux/if_ether.h index 70fdba2bbf71..005e1525ab86 100644 --- a/include/linux/if_ether.h +++ b/include/linux/if_ether.h | |||
| @@ -136,13 +136,9 @@ extern struct ctl_table ether_table[]; | |||
| 136 | 136 | ||
| 137 | extern ssize_t sysfs_format_mac(char *buf, const unsigned char *addr, int len); | 137 | extern ssize_t sysfs_format_mac(char *buf, const unsigned char *addr, int len); |
| 138 | 138 | ||
| 139 | /* | ||
| 140 | * Display a 6 byte device address (MAC) in a readable format. | ||
| 141 | */ | ||
| 142 | extern char *print_mac(char *buf, const unsigned char *addr); | ||
| 143 | #define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x" | 139 | #define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x" |
| 144 | #define MAC_BUF_SIZE 18 | 140 | #define MAC_BUF_SIZE 18 |
| 145 | #define DECLARE_MAC_BUF(var) char var[MAC_BUF_SIZE] __maybe_unused | 141 | #define DECLARE_MAC_BUF(var) char var[MAC_BUF_SIZE] |
| 146 | 142 | ||
| 147 | #endif | 143 | #endif |
| 148 | 144 | ||
diff --git a/include/linux/if_fddi.h b/include/linux/if_fddi.h index 45de1046dbbf..5459c5c09930 100644 --- a/include/linux/if_fddi.h +++ b/include/linux/if_fddi.h | |||
| @@ -63,36 +63,32 @@ | |||
| 63 | #define FDDI_UI_CMD 0x03 | 63 | #define FDDI_UI_CMD 0x03 |
| 64 | 64 | ||
| 65 | /* Define 802.2 Type 1 header */ | 65 | /* Define 802.2 Type 1 header */ |
| 66 | struct fddi_8022_1_hdr | 66 | struct fddi_8022_1_hdr { |
| 67 | { | ||
| 68 | __u8 dsap; /* destination service access point */ | 67 | __u8 dsap; /* destination service access point */ |
| 69 | __u8 ssap; /* source service access point */ | 68 | __u8 ssap; /* source service access point */ |
| 70 | __u8 ctrl; /* control byte #1 */ | 69 | __u8 ctrl; /* control byte #1 */ |
| 71 | } __attribute__ ((packed)); | 70 | } __attribute__ ((packed)); |
| 72 | 71 | ||
| 73 | /* Define 802.2 Type 2 header */ | 72 | /* Define 802.2 Type 2 header */ |
| 74 | struct fddi_8022_2_hdr | 73 | struct fddi_8022_2_hdr { |
| 75 | { | ||
| 76 | __u8 dsap; /* destination service access point */ | 74 | __u8 dsap; /* destination service access point */ |
| 77 | __u8 ssap; /* source service access point */ | 75 | __u8 ssap; /* source service access point */ |
| 78 | __u8 ctrl_1; /* control byte #1 */ | 76 | __u8 ctrl_1; /* control byte #1 */ |
| 79 | __u8 ctrl_2; /* control byte #2 */ | 77 | __u8 ctrl_2; /* control byte #2 */ |
| 80 | } __attribute__ ((packed)); | 78 | } __attribute__ ((packed)); |
| 81 | 79 | ||
| 82 | /* Define 802.2 SNAP header */ | 80 | /* Define 802.2 SNAP header */ |
| 83 | #define FDDI_K_OUI_LEN 3 | 81 | #define FDDI_K_OUI_LEN 3 |
| 84 | struct fddi_snap_hdr | 82 | struct fddi_snap_hdr { |
| 85 | { | ||
| 86 | __u8 dsap; /* always 0xAA */ | 83 | __u8 dsap; /* always 0xAA */ |
| 87 | __u8 ssap; /* always 0xAA */ | 84 | __u8 ssap; /* always 0xAA */ |
| 88 | __u8 ctrl; /* always 0x03 */ | 85 | __u8 ctrl; /* always 0x03 */ |
| 89 | __u8 oui[FDDI_K_OUI_LEN]; /* organizational universal id */ | 86 | __u8 oui[FDDI_K_OUI_LEN]; /* organizational universal id */ |
| 90 | __be16 ethertype; /* packet type ID field */ | 87 | __be16 ethertype; /* packet type ID field */ |
| 91 | } __attribute__ ((packed)); | 88 | } __attribute__ ((packed)); |
| 92 | 89 | ||
| 93 | /* Define FDDI LLC frame header */ | 90 | /* Define FDDI LLC frame header */ |
| 94 | struct fddihdr | 91 | struct fddihdr { |
| 95 | { | ||
| 96 | __u8 fc; /* frame control */ | 92 | __u8 fc; /* frame control */ |
| 97 | __u8 daddr[FDDI_K_ALEN]; /* destination address */ | 93 | __u8 daddr[FDDI_K_ALEN]; /* destination address */ |
| 98 | __u8 saddr[FDDI_K_ALEN]; /* source address */ | 94 | __u8 saddr[FDDI_K_ALEN]; /* source address */ |
| @@ -102,7 +98,7 @@ struct fddihdr | |||
| 102 | struct fddi_8022_2_hdr llc_8022_2; | 98 | struct fddi_8022_2_hdr llc_8022_2; |
| 103 | struct fddi_snap_hdr llc_snap; | 99 | struct fddi_snap_hdr llc_snap; |
| 104 | } hdr; | 100 | } hdr; |
| 105 | } __attribute__ ((packed)); | 101 | } __attribute__ ((packed)); |
| 106 | 102 | ||
| 107 | #ifdef __KERNEL__ | 103 | #ifdef __KERNEL__ |
| 108 | #include <linux/netdevice.h> | 104 | #include <linux/netdevice.h> |
| @@ -197,7 +193,7 @@ struct fddi_statistics { | |||
| 197 | __u32 port_pc_withhold[2]; | 193 | __u32 port_pc_withhold[2]; |
| 198 | __u32 port_ler_flag[2]; | 194 | __u32 port_ler_flag[2]; |
| 199 | __u32 port_hardware_present[2]; | 195 | __u32 port_hardware_present[2]; |
| 200 | }; | 196 | }; |
| 201 | #endif /* __KERNEL__ */ | 197 | #endif /* __KERNEL__ */ |
| 202 | 198 | ||
| 203 | #endif /* _LINUX_IF_FDDI_H */ | 199 | #endif /* _LINUX_IF_FDDI_H */ |
diff --git a/include/linux/if_frad.h b/include/linux/if_frad.h index 673f2209453d..80b3a1056a5f 100644 --- a/include/linux/if_frad.h +++ b/include/linux/if_frad.h | |||
| @@ -69,11 +69,6 @@ struct dlci_conf { | |||
| 69 | 69 | ||
| 70 | #define DLCI_VALID_FLAGS 0x000B | 70 | #define DLCI_VALID_FLAGS 0x000B |
| 71 | 71 | ||
| 72 | /* FRAD driver uses these to indicate what it did with packet */ | ||
| 73 | #define DLCI_RET_OK 0x00 | ||
| 74 | #define DLCI_RET_ERR 0x01 | ||
| 75 | #define DLCI_RET_DROP 0x02 | ||
| 76 | |||
| 77 | /* defines for the actual Frame Relay hardware */ | 72 | /* defines for the actual Frame Relay hardware */ |
| 78 | #define FRAD_GET_CONF (SIOCDEVPRIVATE) | 73 | #define FRAD_GET_CONF (SIOCDEVPRIVATE) |
| 79 | #define FRAD_SET_CONF (SIOCDEVPRIVATE + 1) | 74 | #define FRAD_SET_CONF (SIOCDEVPRIVATE + 1) |
diff --git a/include/linux/if_hippi.h b/include/linux/if_hippi.h index 4a7c9940b080..8d038eb8db5c 100644 --- a/include/linux/if_hippi.h +++ b/include/linux/if_hippi.h | |||
| @@ -51,8 +51,7 @@ | |||
| 51 | * HIPPI statistics collection data. | 51 | * HIPPI statistics collection data. |
| 52 | */ | 52 | */ |
| 53 | 53 | ||
| 54 | struct hipnet_statistics | 54 | struct hipnet_statistics { |
| 55 | { | ||
| 56 | int rx_packets; /* total packets received */ | 55 | int rx_packets; /* total packets received */ |
| 57 | int tx_packets; /* total packets transmitted */ | 56 | int tx_packets; /* total packets transmitted */ |
| 58 | int rx_errors; /* bad packets received */ | 57 | int rx_errors; /* bad packets received */ |
| @@ -77,8 +76,7 @@ struct hipnet_statistics | |||
| 77 | }; | 76 | }; |
| 78 | 77 | ||
| 79 | 78 | ||
| 80 | struct hippi_fp_hdr | 79 | struct hippi_fp_hdr { |
| 81 | { | ||
| 82 | #if 0 | 80 | #if 0 |
| 83 | __u8 ulp; /* must contain 4 */ | 81 | __u8 ulp; /* must contain 4 */ |
| 84 | #if defined (__BIG_ENDIAN_BITFIELD) | 82 | #if defined (__BIG_ENDIAN_BITFIELD) |
| @@ -108,8 +106,7 @@ struct hippi_fp_hdr | |||
| 108 | __be32 d2_size; | 106 | __be32 d2_size; |
| 109 | } __attribute__ ((packed)); | 107 | } __attribute__ ((packed)); |
| 110 | 108 | ||
| 111 | struct hippi_le_hdr | 109 | struct hippi_le_hdr { |
| 112 | { | ||
| 113 | #if defined (__BIG_ENDIAN_BITFIELD) | 110 | #if defined (__BIG_ENDIAN_BITFIELD) |
| 114 | __u8 fc:3; | 111 | __u8 fc:3; |
| 115 | __u8 double_wide:1; | 112 | __u8 double_wide:1; |
| @@ -139,8 +136,7 @@ struct hippi_le_hdr | |||
| 139 | * Looks like the dsap and ssap fields have been swapped by mistake in | 136 | * Looks like the dsap and ssap fields have been swapped by mistake in |
| 140 | * RFC 2067 "IP over HIPPI". | 137 | * RFC 2067 "IP over HIPPI". |
| 141 | */ | 138 | */ |
| 142 | struct hippi_snap_hdr | 139 | struct hippi_snap_hdr { |
| 143 | { | ||
| 144 | __u8 dsap; /* always 0xAA */ | 140 | __u8 dsap; /* always 0xAA */ |
| 145 | __u8 ssap; /* always 0xAA */ | 141 | __u8 ssap; /* always 0xAA */ |
| 146 | __u8 ctrl; /* always 0x03 */ | 142 | __u8 ctrl; /* always 0x03 */ |
| @@ -148,8 +144,7 @@ struct hippi_snap_hdr | |||
| 148 | __be16 ethertype; /* packet type ID field */ | 144 | __be16 ethertype; /* packet type ID field */ |
| 149 | } __attribute__ ((packed)); | 145 | } __attribute__ ((packed)); |
| 150 | 146 | ||
| 151 | struct hippi_hdr | 147 | struct hippi_hdr { |
| 152 | { | ||
| 153 | struct hippi_fp_hdr fp; | 148 | struct hippi_fp_hdr fp; |
| 154 | struct hippi_le_hdr le; | 149 | struct hippi_le_hdr le; |
| 155 | struct hippi_snap_hdr snap; | 150 | struct hippi_snap_hdr snap; |
diff --git a/include/linux/if_link.h b/include/linux/if_link.h index 176c5182c515..6674791622ca 100644 --- a/include/linux/if_link.h +++ b/include/linux/if_link.h | |||
| @@ -5,8 +5,7 @@ | |||
| 5 | #include <linux/netlink.h> | 5 | #include <linux/netlink.h> |
| 6 | 6 | ||
| 7 | /* The struct should be in sync with struct net_device_stats */ | 7 | /* The struct should be in sync with struct net_device_stats */ |
| 8 | struct rtnl_link_stats | 8 | struct rtnl_link_stats { |
| 9 | { | ||
| 10 | __u32 rx_packets; /* total packets received */ | 9 | __u32 rx_packets; /* total packets received */ |
| 11 | __u32 tx_packets; /* total packets transmitted */ | 10 | __u32 tx_packets; /* total packets transmitted */ |
| 12 | __u32 rx_bytes; /* total bytes received */ | 11 | __u32 rx_bytes; /* total bytes received */ |
| @@ -39,8 +38,7 @@ struct rtnl_link_stats | |||
| 39 | }; | 38 | }; |
| 40 | 39 | ||
| 41 | /* The struct should be in sync with struct ifmap */ | 40 | /* The struct should be in sync with struct ifmap */ |
| 42 | struct rtnl_link_ifmap | 41 | struct rtnl_link_ifmap { |
| 43 | { | ||
| 44 | __u64 mem_start; | 42 | __u64 mem_start; |
| 45 | __u64 mem_end; | 43 | __u64 mem_end; |
| 46 | __u64 base_addr; | 44 | __u64 base_addr; |
| @@ -49,8 +47,7 @@ struct rtnl_link_ifmap | |||
| 49 | __u8 port; | 47 | __u8 port; |
| 50 | }; | 48 | }; |
| 51 | 49 | ||
| 52 | enum | 50 | enum { |
| 53 | { | ||
| 54 | IFLA_UNSPEC, | 51 | IFLA_UNSPEC, |
| 55 | IFLA_ADDRESS, | 52 | IFLA_ADDRESS, |
| 56 | IFLA_BROADCAST, | 53 | IFLA_BROADCAST, |
| @@ -123,8 +120,7 @@ enum | |||
| 123 | */ | 120 | */ |
| 124 | 121 | ||
| 125 | /* Subtype attributes for IFLA_PROTINFO */ | 122 | /* Subtype attributes for IFLA_PROTINFO */ |
| 126 | enum | 123 | enum { |
| 127 | { | ||
| 128 | IFLA_INET6_UNSPEC, | 124 | IFLA_INET6_UNSPEC, |
| 129 | IFLA_INET6_FLAGS, /* link flags */ | 125 | IFLA_INET6_FLAGS, /* link flags */ |
| 130 | IFLA_INET6_CONF, /* sysctl parameters */ | 126 | IFLA_INET6_CONF, /* sysctl parameters */ |
| @@ -137,16 +133,14 @@ enum | |||
| 137 | 133 | ||
| 138 | #define IFLA_INET6_MAX (__IFLA_INET6_MAX - 1) | 134 | #define IFLA_INET6_MAX (__IFLA_INET6_MAX - 1) |
| 139 | 135 | ||
| 140 | struct ifla_cacheinfo | 136 | struct ifla_cacheinfo { |
| 141 | { | ||
| 142 | __u32 max_reasm_len; | 137 | __u32 max_reasm_len; |
| 143 | __u32 tstamp; /* ipv6InterfaceTable updated timestamp */ | 138 | __u32 tstamp; /* ipv6InterfaceTable updated timestamp */ |
| 144 | __u32 reachable_time; | 139 | __u32 reachable_time; |
| 145 | __u32 retrans_time; | 140 | __u32 retrans_time; |
| 146 | }; | 141 | }; |
| 147 | 142 | ||
| 148 | enum | 143 | enum { |
| 149 | { | ||
| 150 | IFLA_INFO_UNSPEC, | 144 | IFLA_INFO_UNSPEC, |
| 151 | IFLA_INFO_KIND, | 145 | IFLA_INFO_KIND, |
| 152 | IFLA_INFO_DATA, | 146 | IFLA_INFO_DATA, |
| @@ -158,8 +152,7 @@ enum | |||
| 158 | 152 | ||
| 159 | /* VLAN section */ | 153 | /* VLAN section */ |
| 160 | 154 | ||
| 161 | enum | 155 | enum { |
| 162 | { | ||
| 163 | IFLA_VLAN_UNSPEC, | 156 | IFLA_VLAN_UNSPEC, |
| 164 | IFLA_VLAN_ID, | 157 | IFLA_VLAN_ID, |
| 165 | IFLA_VLAN_FLAGS, | 158 | IFLA_VLAN_FLAGS, |
| @@ -175,8 +168,7 @@ struct ifla_vlan_flags { | |||
| 175 | __u32 mask; | 168 | __u32 mask; |
| 176 | }; | 169 | }; |
| 177 | 170 | ||
| 178 | enum | 171 | enum { |
| 179 | { | ||
| 180 | IFLA_VLAN_QOS_UNSPEC, | 172 | IFLA_VLAN_QOS_UNSPEC, |
| 181 | IFLA_VLAN_QOS_MAPPING, | 173 | IFLA_VLAN_QOS_MAPPING, |
| 182 | __IFLA_VLAN_QOS_MAX | 174 | __IFLA_VLAN_QOS_MAX |
| @@ -184,10 +176,24 @@ enum | |||
| 184 | 176 | ||
| 185 | #define IFLA_VLAN_QOS_MAX (__IFLA_VLAN_QOS_MAX - 1) | 177 | #define IFLA_VLAN_QOS_MAX (__IFLA_VLAN_QOS_MAX - 1) |
| 186 | 178 | ||
| 187 | struct ifla_vlan_qos_mapping | 179 | struct ifla_vlan_qos_mapping { |
| 188 | { | ||
| 189 | __u32 from; | 180 | __u32 from; |
| 190 | __u32 to; | 181 | __u32 to; |
| 191 | }; | 182 | }; |
| 192 | 183 | ||
| 184 | /* MACVLAN section */ | ||
| 185 | enum { | ||
| 186 | IFLA_MACVLAN_UNSPEC, | ||
| 187 | IFLA_MACVLAN_MODE, | ||
| 188 | __IFLA_MACVLAN_MAX, | ||
| 189 | }; | ||
| 190 | |||
| 191 | #define IFLA_MACVLAN_MAX (__IFLA_MACVLAN_MAX - 1) | ||
| 192 | |||
| 193 | enum macvlan_mode { | ||
| 194 | MACVLAN_MODE_PRIVATE = 1, /* don't talk to other macvlans */ | ||
| 195 | MACVLAN_MODE_VEPA = 2, /* talk to other ports through ext bridge */ | ||
| 196 | MACVLAN_MODE_BRIDGE = 4, /* talk to bridge ports directly */ | ||
| 197 | }; | ||
| 198 | |||
| 193 | #endif /* _LINUX_IF_LINK_H */ | 199 | #endif /* _LINUX_IF_LINK_H */ |
diff --git a/include/linux/if_packet.h b/include/linux/if_packet.h index dea7d6b7cf98..4021d47cc437 100644 --- a/include/linux/if_packet.h +++ b/include/linux/if_packet.h | |||
| @@ -3,15 +3,13 @@ | |||
| 3 | 3 | ||
| 4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
| 5 | 5 | ||
| 6 | struct sockaddr_pkt | 6 | struct sockaddr_pkt { |
| 7 | { | ||
| 8 | unsigned short spkt_family; | 7 | unsigned short spkt_family; |
| 9 | unsigned char spkt_device[14]; | 8 | unsigned char spkt_device[14]; |
| 10 | __be16 spkt_protocol; | 9 | __be16 spkt_protocol; |
| 11 | }; | 10 | }; |
| 12 | 11 | ||
| 13 | struct sockaddr_ll | 12 | struct sockaddr_ll { |
| 14 | { | ||
| 15 | unsigned short sll_family; | 13 | unsigned short sll_family; |
| 16 | __be16 sll_protocol; | 14 | __be16 sll_protocol; |
| 17 | int sll_ifindex; | 15 | int sll_ifindex; |
| @@ -49,14 +47,12 @@ struct sockaddr_ll | |||
| 49 | #define PACKET_TX_RING 13 | 47 | #define PACKET_TX_RING 13 |
| 50 | #define PACKET_LOSS 14 | 48 | #define PACKET_LOSS 14 |
| 51 | 49 | ||
| 52 | struct tpacket_stats | 50 | struct tpacket_stats { |
| 53 | { | ||
| 54 | unsigned int tp_packets; | 51 | unsigned int tp_packets; |
| 55 | unsigned int tp_drops; | 52 | unsigned int tp_drops; |
| 56 | }; | 53 | }; |
| 57 | 54 | ||
| 58 | struct tpacket_auxdata | 55 | struct tpacket_auxdata { |
| 59 | { | ||
| 60 | __u32 tp_status; | 56 | __u32 tp_status; |
| 61 | __u32 tp_len; | 57 | __u32 tp_len; |
| 62 | __u32 tp_snaplen; | 58 | __u32 tp_snaplen; |
| @@ -78,8 +74,7 @@ struct tpacket_auxdata | |||
| 78 | #define TP_STATUS_SENDING 0x2 | 74 | #define TP_STATUS_SENDING 0x2 |
| 79 | #define TP_STATUS_WRONG_FORMAT 0x4 | 75 | #define TP_STATUS_WRONG_FORMAT 0x4 |
| 80 | 76 | ||
| 81 | struct tpacket_hdr | 77 | struct tpacket_hdr { |
| 82 | { | ||
| 83 | unsigned long tp_status; | 78 | unsigned long tp_status; |
| 84 | unsigned int tp_len; | 79 | unsigned int tp_len; |
| 85 | unsigned int tp_snaplen; | 80 | unsigned int tp_snaplen; |
| @@ -93,8 +88,7 @@ struct tpacket_hdr | |||
| 93 | #define TPACKET_ALIGN(x) (((x)+TPACKET_ALIGNMENT-1)&~(TPACKET_ALIGNMENT-1)) | 88 | #define TPACKET_ALIGN(x) (((x)+TPACKET_ALIGNMENT-1)&~(TPACKET_ALIGNMENT-1)) |
| 94 | #define TPACKET_HDRLEN (TPACKET_ALIGN(sizeof(struct tpacket_hdr)) + sizeof(struct sockaddr_ll)) | 89 | #define TPACKET_HDRLEN (TPACKET_ALIGN(sizeof(struct tpacket_hdr)) + sizeof(struct sockaddr_ll)) |
| 95 | 90 | ||
| 96 | struct tpacket2_hdr | 91 | struct tpacket2_hdr { |
| 97 | { | ||
| 98 | __u32 tp_status; | 92 | __u32 tp_status; |
| 99 | __u32 tp_len; | 93 | __u32 tp_len; |
| 100 | __u32 tp_snaplen; | 94 | __u32 tp_snaplen; |
| @@ -107,8 +101,7 @@ struct tpacket2_hdr | |||
| 107 | 101 | ||
| 108 | #define TPACKET2_HDRLEN (TPACKET_ALIGN(sizeof(struct tpacket2_hdr)) + sizeof(struct sockaddr_ll)) | 102 | #define TPACKET2_HDRLEN (TPACKET_ALIGN(sizeof(struct tpacket2_hdr)) + sizeof(struct sockaddr_ll)) |
| 109 | 103 | ||
| 110 | enum tpacket_versions | 104 | enum tpacket_versions { |
| 111 | { | ||
| 112 | TPACKET_V1, | 105 | TPACKET_V1, |
| 113 | TPACKET_V2, | 106 | TPACKET_V2, |
| 114 | }; | 107 | }; |
| @@ -126,16 +119,14 @@ enum tpacket_versions | |||
| 126 | - Pad to align to TPACKET_ALIGNMENT=16 | 119 | - Pad to align to TPACKET_ALIGNMENT=16 |
| 127 | */ | 120 | */ |
| 128 | 121 | ||
| 129 | struct tpacket_req | 122 | struct tpacket_req { |
| 130 | { | ||
| 131 | unsigned int tp_block_size; /* Minimal size of contiguous block */ | 123 | unsigned int tp_block_size; /* Minimal size of contiguous block */ |
| 132 | unsigned int tp_block_nr; /* Number of blocks */ | 124 | unsigned int tp_block_nr; /* Number of blocks */ |
| 133 | unsigned int tp_frame_size; /* Size of frame */ | 125 | unsigned int tp_frame_size; /* Size of frame */ |
| 134 | unsigned int tp_frame_nr; /* Total number of frames */ | 126 | unsigned int tp_frame_nr; /* Total number of frames */ |
| 135 | }; | 127 | }; |
| 136 | 128 | ||
| 137 | struct packet_mreq | 129 | struct packet_mreq { |
| 138 | { | ||
| 139 | int mr_ifindex; | 130 | int mr_ifindex; |
| 140 | unsigned short mr_type; | 131 | unsigned short mr_type; |
| 141 | unsigned short mr_alen; | 132 | unsigned short mr_alen; |
diff --git a/include/linux/if_plip.h b/include/linux/if_plip.h index 153a649915a2..6298c7e88b2b 100644 --- a/include/linux/if_plip.h +++ b/include/linux/if_plip.h | |||
| @@ -15,8 +15,7 @@ | |||
| 15 | 15 | ||
| 16 | #define SIOCDEVPLIP SIOCDEVPRIVATE | 16 | #define SIOCDEVPLIP SIOCDEVPRIVATE |
| 17 | 17 | ||
| 18 | struct plipconf | 18 | struct plipconf { |
| 19 | { | ||
| 20 | unsigned short pcmd; | 19 | unsigned short pcmd; |
| 21 | unsigned long nibble; | 20 | unsigned long nibble; |
| 22 | unsigned long trigger; | 21 | unsigned long trigger; |
diff --git a/include/linux/if_pppol2tp.h b/include/linux/if_pppol2tp.h index 3a14b088c8ec..c58baea4a25b 100644 --- a/include/linux/if_pppol2tp.h +++ b/include/linux/if_pppol2tp.h | |||
| @@ -24,8 +24,7 @@ | |||
| 24 | /* Structure used to connect() the socket to a particular tunnel UDP | 24 | /* Structure used to connect() the socket to a particular tunnel UDP |
| 25 | * socket. | 25 | * socket. |
| 26 | */ | 26 | */ |
| 27 | struct pppol2tp_addr | 27 | struct pppol2tp_addr { |
| 28 | { | ||
| 29 | __kernel_pid_t pid; /* pid that owns the fd. | 28 | __kernel_pid_t pid; /* pid that owns the fd. |
| 30 | * 0 => current */ | 29 | * 0 => current */ |
| 31 | int fd; /* FD of UDP socket to use */ | 30 | int fd; /* FD of UDP socket to use */ |
diff --git a/include/linux/if_tun.h b/include/linux/if_tun.h index 915ba5789f0e..3f5fd523b49d 100644 --- a/include/linux/if_tun.h +++ b/include/linux/if_tun.h | |||
| @@ -62,6 +62,7 @@ | |||
| 62 | #define TUN_F_TSO4 0x02 /* I can handle TSO for IPv4 packets */ | 62 | #define TUN_F_TSO4 0x02 /* I can handle TSO for IPv4 packets */ |
| 63 | #define TUN_F_TSO6 0x04 /* I can handle TSO for IPv6 packets */ | 63 | #define TUN_F_TSO6 0x04 /* I can handle TSO for IPv6 packets */ |
| 64 | #define TUN_F_TSO_ECN 0x08 /* I can handle TSO with ECN bits. */ | 64 | #define TUN_F_TSO_ECN 0x08 /* I can handle TSO with ECN bits. */ |
| 65 | #define TUN_F_UFO 0x10 /* I can handle UFO packets */ | ||
| 65 | 66 | ||
| 66 | /* Protocol info prepended to the packets (when IFF_NO_PI is not set) */ | 67 | /* Protocol info prepended to the packets (when IFF_NO_PI is not set) */ |
| 67 | #define TUN_PKT_STRIP 0x0001 | 68 | #define TUN_PKT_STRIP 0x0001 |
diff --git a/include/linux/if_tunnel.h b/include/linux/if_tunnel.h index 5eb9b0f857e0..1822d635be6b 100644 --- a/include/linux/if_tunnel.h +++ b/include/linux/if_tunnel.h | |||
| @@ -5,6 +5,7 @@ | |||
| 5 | 5 | ||
| 6 | #ifdef __KERNEL__ | 6 | #ifdef __KERNEL__ |
| 7 | #include <linux/ip.h> | 7 | #include <linux/ip.h> |
| 8 | #include <linux/in6.h> | ||
| 8 | #endif | 9 | #endif |
| 9 | 10 | ||
| 10 | #define SIOCGETTUNNEL (SIOCDEVPRIVATE + 0) | 11 | #define SIOCGETTUNNEL (SIOCDEVPRIVATE + 0) |
| @@ -15,6 +16,10 @@ | |||
| 15 | #define SIOCADDPRL (SIOCDEVPRIVATE + 5) | 16 | #define SIOCADDPRL (SIOCDEVPRIVATE + 5) |
| 16 | #define SIOCDELPRL (SIOCDEVPRIVATE + 6) | 17 | #define SIOCDELPRL (SIOCDEVPRIVATE + 6) |
| 17 | #define SIOCCHGPRL (SIOCDEVPRIVATE + 7) | 18 | #define SIOCCHGPRL (SIOCDEVPRIVATE + 7) |
| 19 | #define SIOCGET6RD (SIOCDEVPRIVATE + 8) | ||
| 20 | #define SIOCADD6RD (SIOCDEVPRIVATE + 9) | ||
| 21 | #define SIOCDEL6RD (SIOCDEVPRIVATE + 10) | ||
| 22 | #define SIOCCHG6RD (SIOCDEVPRIVATE + 11) | ||
| 18 | 23 | ||
| 19 | #define GRE_CSUM __cpu_to_be16(0x8000) | 24 | #define GRE_CSUM __cpu_to_be16(0x8000) |
| 20 | #define GRE_ROUTING __cpu_to_be16(0x4000) | 25 | #define GRE_ROUTING __cpu_to_be16(0x4000) |
| @@ -25,8 +30,7 @@ | |||
| 25 | #define GRE_FLAGS __cpu_to_be16(0x00F8) | 30 | #define GRE_FLAGS __cpu_to_be16(0x00F8) |
| 26 | #define GRE_VERSION __cpu_to_be16(0x0007) | 31 | #define GRE_VERSION __cpu_to_be16(0x0007) |
| 27 | 32 | ||
| 28 | struct ip_tunnel_parm | 33 | struct ip_tunnel_parm { |
| 29 | { | ||
| 30 | char name[IFNAMSIZ]; | 34 | char name[IFNAMSIZ]; |
| 31 | int link; | 35 | int link; |
| 32 | __be16 i_flags; | 36 | __be16 i_flags; |
| @@ -44,15 +48,21 @@ struct ip_tunnel_prl { | |||
| 44 | __u16 flags; | 48 | __u16 flags; |
| 45 | __u16 __reserved; | 49 | __u16 __reserved; |
| 46 | __u32 datalen; | 50 | __u32 datalen; |
| 47 | __u32 rs_delay; | 51 | __u32 __reserved2; |
| 48 | /* data follows */ | 52 | /* data follows */ |
| 49 | }; | 53 | }; |
| 50 | 54 | ||
| 51 | /* PRL flags */ | 55 | /* PRL flags */ |
| 52 | #define PRL_DEFAULT 0x0001 | 56 | #define PRL_DEFAULT 0x0001 |
| 53 | 57 | ||
| 54 | enum | 58 | struct ip_tunnel_6rd { |
| 55 | { | 59 | struct in6_addr prefix; |
| 60 | __be32 relay_prefix; | ||
| 61 | __u16 prefixlen; | ||
| 62 | __u16 relay_prefixlen; | ||
| 63 | }; | ||
| 64 | |||
| 65 | enum { | ||
| 56 | IFLA_GRE_UNSPEC, | 66 | IFLA_GRE_UNSPEC, |
| 57 | IFLA_GRE_LINK, | 67 | IFLA_GRE_LINK, |
| 58 | IFLA_GRE_IFLAGS, | 68 | IFLA_GRE_IFLAGS, |
diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h index 7ff9af1d0f05..3d870fda8c4f 100644 --- a/include/linux/if_vlan.h +++ b/include/linux/if_vlan.h | |||
| @@ -63,7 +63,11 @@ static inline struct vlan_ethhdr *vlan_eth_hdr(const struct sk_buff *skb) | |||
| 63 | return (struct vlan_ethhdr *)skb_mac_header(skb); | 63 | return (struct vlan_ethhdr *)skb_mac_header(skb); |
| 64 | } | 64 | } |
| 65 | 65 | ||
| 66 | #define VLAN_VID_MASK 0xfff | 66 | #define VLAN_PRIO_MASK 0xe000 /* Priority Code Point */ |
| 67 | #define VLAN_PRIO_SHIFT 13 | ||
| 68 | #define VLAN_CFI_MASK 0x1000 /* Canonical Format Indicator */ | ||
| 69 | #define VLAN_TAG_PRESENT VLAN_CFI_MASK | ||
| 70 | #define VLAN_VID_MASK 0x0fff /* VLAN Identifier */ | ||
| 67 | 71 | ||
| 68 | /* found in socket.c */ | 72 | /* found in socket.c */ |
| 69 | extern void vlan_ioctl_set(int (*hook)(struct net *, void __user *)); | 73 | extern void vlan_ioctl_set(int (*hook)(struct net *, void __user *)); |
| @@ -81,6 +85,7 @@ struct vlan_group { | |||
| 81 | * the vlan is attached to. | 85 | * the vlan is attached to. |
| 82 | */ | 86 | */ |
| 83 | unsigned int nr_vlans; | 87 | unsigned int nr_vlans; |
| 88 | int killall; | ||
| 84 | struct hlist_node hlist; /* linked list */ | 89 | struct hlist_node hlist; /* linked list */ |
| 85 | struct net_device **vlan_devices_arrays[VLAN_GROUP_ARRAY_SPLIT_PARTS]; | 90 | struct net_device **vlan_devices_arrays[VLAN_GROUP_ARRAY_SPLIT_PARTS]; |
| 86 | struct rcu_head rcu; | 91 | struct rcu_head rcu; |
| @@ -105,8 +110,8 @@ static inline void vlan_group_set_device(struct vlan_group *vg, | |||
| 105 | array[vlan_id % VLAN_GROUP_ARRAY_PART_LEN] = dev; | 110 | array[vlan_id % VLAN_GROUP_ARRAY_PART_LEN] = dev; |
| 106 | } | 111 | } |
| 107 | 112 | ||
| 108 | #define vlan_tx_tag_present(__skb) ((__skb)->vlan_tci) | 113 | #define vlan_tx_tag_present(__skb) ((__skb)->vlan_tci & VLAN_TAG_PRESENT) |
| 109 | #define vlan_tx_tag_get(__skb) ((__skb)->vlan_tci) | 114 | #define vlan_tx_tag_get(__skb) ((__skb)->vlan_tci & ~VLAN_TAG_PRESENT) |
| 110 | 115 | ||
| 111 | #if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE) | 116 | #if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE) |
| 112 | extern struct net_device *vlan_dev_real_dev(const struct net_device *dev); | 117 | extern struct net_device *vlan_dev_real_dev(const struct net_device *dev); |
| @@ -115,10 +120,12 @@ extern u16 vlan_dev_vlan_id(const struct net_device *dev); | |||
| 115 | extern int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp, | 120 | extern int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp, |
| 116 | u16 vlan_tci, int polling); | 121 | u16 vlan_tci, int polling); |
| 117 | extern int vlan_hwaccel_do_receive(struct sk_buff *skb); | 122 | extern int vlan_hwaccel_do_receive(struct sk_buff *skb); |
| 118 | extern int vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp, | 123 | extern gro_result_t |
| 119 | unsigned int vlan_tci, struct sk_buff *skb); | 124 | vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp, |
| 120 | extern int vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp, | 125 | unsigned int vlan_tci, struct sk_buff *skb); |
| 121 | unsigned int vlan_tci); | 126 | extern gro_result_t |
| 127 | vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp, | ||
| 128 | unsigned int vlan_tci); | ||
| 122 | 129 | ||
| 123 | #else | 130 | #else |
| 124 | static inline struct net_device *vlan_dev_real_dev(const struct net_device *dev) | 131 | static inline struct net_device *vlan_dev_real_dev(const struct net_device *dev) |
| @@ -145,17 +152,18 @@ static inline int vlan_hwaccel_do_receive(struct sk_buff *skb) | |||
| 145 | return 0; | 152 | return 0; |
| 146 | } | 153 | } |
| 147 | 154 | ||
| 148 | static inline int vlan_gro_receive(struct napi_struct *napi, | 155 | static inline gro_result_t |
| 149 | struct vlan_group *grp, | 156 | vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp, |
| 150 | unsigned int vlan_tci, struct sk_buff *skb) | 157 | unsigned int vlan_tci, struct sk_buff *skb) |
| 151 | { | 158 | { |
| 152 | return NET_RX_DROP; | 159 | return GRO_DROP; |
| 153 | } | 160 | } |
| 154 | 161 | ||
| 155 | static inline int vlan_gro_frags(struct napi_struct *napi, | 162 | static inline gro_result_t |
| 156 | struct vlan_group *grp, unsigned int vlan_tci) | 163 | vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp, |
| 164 | unsigned int vlan_tci) | ||
| 157 | { | 165 | { |
| 158 | return NET_RX_DROP; | 166 | return GRO_DROP; |
| 159 | } | 167 | } |
| 160 | #endif | 168 | #endif |
| 161 | 169 | ||
| @@ -231,7 +239,7 @@ static inline struct sk_buff *__vlan_put_tag(struct sk_buff *skb, u16 vlan_tci) | |||
| 231 | static inline struct sk_buff *__vlan_hwaccel_put_tag(struct sk_buff *skb, | 239 | static inline struct sk_buff *__vlan_hwaccel_put_tag(struct sk_buff *skb, |
| 232 | u16 vlan_tci) | 240 | u16 vlan_tci) |
| 233 | { | 241 | { |
| 234 | skb->vlan_tci = vlan_tci; | 242 | skb->vlan_tci = VLAN_TAG_PRESENT | vlan_tci; |
| 235 | return skb; | 243 | return skb; |
| 236 | } | 244 | } |
| 237 | 245 | ||
| @@ -284,7 +292,7 @@ static inline int __vlan_hwaccel_get_tag(const struct sk_buff *skb, | |||
| 284 | u16 *vlan_tci) | 292 | u16 *vlan_tci) |
| 285 | { | 293 | { |
| 286 | if (vlan_tx_tag_present(skb)) { | 294 | if (vlan_tx_tag_present(skb)) { |
| 287 | *vlan_tci = skb->vlan_tci; | 295 | *vlan_tci = vlan_tx_tag_get(skb); |
| 288 | return 0; | 296 | return 0; |
| 289 | } else { | 297 | } else { |
| 290 | *vlan_tci = 0; | 298 | *vlan_tci = 0; |
| @@ -331,6 +339,7 @@ enum vlan_ioctl_cmds { | |||
| 331 | enum vlan_flags { | 339 | enum vlan_flags { |
| 332 | VLAN_FLAG_REORDER_HDR = 0x1, | 340 | VLAN_FLAG_REORDER_HDR = 0x1, |
| 333 | VLAN_FLAG_GVRP = 0x2, | 341 | VLAN_FLAG_GVRP = 0x2, |
| 342 | VLAN_FLAG_LOOSE_BINDING = 0x4, | ||
| 334 | }; | 343 | }; |
| 335 | 344 | ||
| 336 | enum vlan_name_types { | 345 | enum vlan_name_types { |
diff --git a/include/linux/igmp.h b/include/linux/igmp.h index 92fbd8cbd68f..724c27e5d173 100644 --- a/include/linux/igmp.h +++ b/include/linux/igmp.h | |||
| @@ -27,8 +27,7 @@ | |||
| 27 | * Header in on cable format | 27 | * Header in on cable format |
| 28 | */ | 28 | */ |
| 29 | 29 | ||
| 30 | struct igmphdr | 30 | struct igmphdr { |
| 31 | { | ||
| 32 | __u8 type; | 31 | __u8 type; |
| 33 | __u8 code; /* For newer IGMP */ | 32 | __u8 code; /* For newer IGMP */ |
| 34 | __sum16 csum; | 33 | __sum16 csum; |
| @@ -151,8 +150,7 @@ static inline struct igmpv3_query * | |||
| 151 | extern int sysctl_igmp_max_memberships; | 150 | extern int sysctl_igmp_max_memberships; |
| 152 | extern int sysctl_igmp_max_msf; | 151 | extern int sysctl_igmp_max_msf; |
| 153 | 152 | ||
| 154 | struct ip_sf_socklist | 153 | struct ip_sf_socklist { |
| 155 | { | ||
| 156 | unsigned int sl_max; | 154 | unsigned int sl_max; |
| 157 | unsigned int sl_count; | 155 | unsigned int sl_count; |
| 158 | __be32 sl_addr[0]; | 156 | __be32 sl_addr[0]; |
| @@ -167,16 +165,14 @@ struct ip_sf_socklist | |||
| 167 | this list never used in fast path code | 165 | this list never used in fast path code |
| 168 | */ | 166 | */ |
| 169 | 167 | ||
| 170 | struct ip_mc_socklist | 168 | struct ip_mc_socklist { |
| 171 | { | ||
| 172 | struct ip_mc_socklist *next; | 169 | struct ip_mc_socklist *next; |
| 173 | struct ip_mreqn multi; | 170 | struct ip_mreqn multi; |
| 174 | unsigned int sfmode; /* MCAST_{INCLUDE,EXCLUDE} */ | 171 | unsigned int sfmode; /* MCAST_{INCLUDE,EXCLUDE} */ |
| 175 | struct ip_sf_socklist *sflist; | 172 | struct ip_sf_socklist *sflist; |
| 176 | }; | 173 | }; |
| 177 | 174 | ||
| 178 | struct ip_sf_list | 175 | struct ip_sf_list { |
| 179 | { | ||
| 180 | struct ip_sf_list *sf_next; | 176 | struct ip_sf_list *sf_next; |
| 181 | __be32 sf_inaddr; | 177 | __be32 sf_inaddr; |
| 182 | unsigned long sf_count[2]; /* include/exclude counts */ | 178 | unsigned long sf_count[2]; /* include/exclude counts */ |
| @@ -185,8 +181,7 @@ struct ip_sf_list | |||
| 185 | unsigned char sf_crcount; /* retrans. left to send */ | 181 | unsigned char sf_crcount; /* retrans. left to send */ |
| 186 | }; | 182 | }; |
| 187 | 183 | ||
| 188 | struct ip_mc_list | 184 | struct ip_mc_list { |
| 189 | { | ||
| 190 | struct in_device *interface; | 185 | struct in_device *interface; |
| 191 | __be32 multiaddr; | 186 | __be32 multiaddr; |
| 192 | struct ip_sf_list *sources; | 187 | struct ip_sf_list *sources; |
| @@ -233,6 +228,8 @@ extern void ip_mc_init_dev(struct in_device *); | |||
| 233 | extern void ip_mc_destroy_dev(struct in_device *); | 228 | extern void ip_mc_destroy_dev(struct in_device *); |
| 234 | extern void ip_mc_up(struct in_device *); | 229 | extern void ip_mc_up(struct in_device *); |
| 235 | extern void ip_mc_down(struct in_device *); | 230 | extern void ip_mc_down(struct in_device *); |
| 231 | extern void ip_mc_unmap(struct in_device *); | ||
| 232 | extern void ip_mc_remap(struct in_device *); | ||
| 236 | extern void ip_mc_dec_group(struct in_device *in_dev, __be32 addr); | 233 | extern void ip_mc_dec_group(struct in_device *in_dev, __be32 addr); |
| 237 | extern void ip_mc_inc_group(struct in_device *in_dev, __be32 addr); | 234 | extern void ip_mc_inc_group(struct in_device *in_dev, __be32 addr); |
| 238 | extern void ip_mc_rejoin_group(struct ip_mc_list *im); | 235 | extern void ip_mc_rejoin_group(struct ip_mc_list *im); |
diff --git a/include/linux/in.h b/include/linux/in.h index cf196da04ec9..b615649db129 100644 --- a/include/linux/in.h +++ b/include/linux/in.h | |||
| @@ -118,14 +118,12 @@ struct in_addr { | |||
| 118 | 118 | ||
| 119 | /* Request struct for multicast socket ops */ | 119 | /* Request struct for multicast socket ops */ |
| 120 | 120 | ||
| 121 | struct ip_mreq | 121 | struct ip_mreq { |
| 122 | { | ||
| 123 | struct in_addr imr_multiaddr; /* IP multicast address of group */ | 122 | struct in_addr imr_multiaddr; /* IP multicast address of group */ |
| 124 | struct in_addr imr_interface; /* local IP address of interface */ | 123 | struct in_addr imr_interface; /* local IP address of interface */ |
| 125 | }; | 124 | }; |
| 126 | 125 | ||
| 127 | struct ip_mreqn | 126 | struct ip_mreqn { |
| 128 | { | ||
| 129 | struct in_addr imr_multiaddr; /* IP multicast address of group */ | 127 | struct in_addr imr_multiaddr; /* IP multicast address of group */ |
| 130 | struct in_addr imr_address; /* local IP address of interface */ | 128 | struct in_addr imr_address; /* local IP address of interface */ |
| 131 | int imr_ifindex; /* Interface index */ | 129 | int imr_ifindex; /* Interface index */ |
| @@ -149,21 +147,18 @@ struct ip_msfilter { | |||
| 149 | (sizeof(struct ip_msfilter) - sizeof(__u32) \ | 147 | (sizeof(struct ip_msfilter) - sizeof(__u32) \ |
| 150 | + (numsrc) * sizeof(__u32)) | 148 | + (numsrc) * sizeof(__u32)) |
| 151 | 149 | ||
| 152 | struct group_req | 150 | struct group_req { |
| 153 | { | ||
| 154 | __u32 gr_interface; /* interface index */ | 151 | __u32 gr_interface; /* interface index */ |
| 155 | struct __kernel_sockaddr_storage gr_group; /* group address */ | 152 | struct __kernel_sockaddr_storage gr_group; /* group address */ |
| 156 | }; | 153 | }; |
| 157 | 154 | ||
| 158 | struct group_source_req | 155 | struct group_source_req { |
| 159 | { | ||
| 160 | __u32 gsr_interface; /* interface index */ | 156 | __u32 gsr_interface; /* interface index */ |
| 161 | struct __kernel_sockaddr_storage gsr_group; /* group address */ | 157 | struct __kernel_sockaddr_storage gsr_group; /* group address */ |
| 162 | struct __kernel_sockaddr_storage gsr_source; /* source address */ | 158 | struct __kernel_sockaddr_storage gsr_source; /* source address */ |
| 163 | }; | 159 | }; |
| 164 | 160 | ||
| 165 | struct group_filter | 161 | struct group_filter { |
| 166 | { | ||
| 167 | __u32 gf_interface; /* interface index */ | 162 | __u32 gf_interface; /* interface index */ |
| 168 | struct __kernel_sockaddr_storage gf_group; /* multicast address */ | 163 | struct __kernel_sockaddr_storage gf_group; /* multicast address */ |
| 169 | __u32 gf_fmode; /* filter mode */ | 164 | __u32 gf_fmode; /* filter mode */ |
| @@ -175,8 +170,7 @@ struct group_filter | |||
| 175 | (sizeof(struct group_filter) - sizeof(struct __kernel_sockaddr_storage) \ | 170 | (sizeof(struct group_filter) - sizeof(struct __kernel_sockaddr_storage) \ |
| 176 | + (numsrc) * sizeof(struct __kernel_sockaddr_storage)) | 171 | + (numsrc) * sizeof(struct __kernel_sockaddr_storage)) |
| 177 | 172 | ||
| 178 | struct in_pktinfo | 173 | struct in_pktinfo { |
| 179 | { | ||
| 180 | int ipi_ifindex; | 174 | int ipi_ifindex; |
| 181 | struct in_addr ipi_spec_dst; | 175 | struct in_addr ipi_spec_dst; |
| 182 | struct in_addr ipi_addr; | 176 | struct in_addr ipi_addr; |
diff --git a/include/linux/in6.h b/include/linux/in6.h index 718bf21c5754..dfa29168e6ab 100644 --- a/include/linux/in6.h +++ b/include/linux/in6.h | |||
| @@ -27,10 +27,8 @@ | |||
| 27 | * IPv6 address structure | 27 | * IPv6 address structure |
| 28 | */ | 28 | */ |
| 29 | 29 | ||
| 30 | struct in6_addr | 30 | struct in6_addr { |
| 31 | { | 31 | union { |
| 32 | union | ||
| 33 | { | ||
| 34 | __u8 u6_addr8[16]; | 32 | __u8 u6_addr8[16]; |
| 35 | __be16 u6_addr16[8]; | 33 | __be16 u6_addr16[8]; |
| 36 | __be32 u6_addr32[4]; | 34 | __be32 u6_addr32[4]; |
| @@ -75,8 +73,7 @@ struct ipv6_mreq { | |||
| 75 | 73 | ||
| 76 | #define ipv6mr_acaddr ipv6mr_multiaddr | 74 | #define ipv6mr_acaddr ipv6mr_multiaddr |
| 77 | 75 | ||
| 78 | struct in6_flowlabel_req | 76 | struct in6_flowlabel_req { |
| 79 | { | ||
| 80 | struct in6_addr flr_dst; | 77 | struct in6_addr flr_dst; |
| 81 | __be32 flr_label; | 78 | __be32 flr_label; |
| 82 | __u8 flr_action; | 79 | __u8 flr_action; |
diff --git a/include/linux/inetdevice.h b/include/linux/inetdevice.h index ad27c7da8798..699e85c01a4d 100644 --- a/include/linux/inetdevice.h +++ b/include/linux/inetdevice.h | |||
| @@ -10,15 +10,13 @@ | |||
| 10 | #include <linux/timer.h> | 10 | #include <linux/timer.h> |
| 11 | #include <linux/sysctl.h> | 11 | #include <linux/sysctl.h> |
| 12 | 12 | ||
| 13 | struct ipv4_devconf | 13 | struct ipv4_devconf { |
| 14 | { | ||
| 15 | void *sysctl; | 14 | void *sysctl; |
| 16 | int data[__NET_IPV4_CONF_MAX - 1]; | 15 | int data[__NET_IPV4_CONF_MAX - 1]; |
| 17 | DECLARE_BITMAP(state, __NET_IPV4_CONF_MAX - 1); | 16 | DECLARE_BITMAP(state, __NET_IPV4_CONF_MAX - 1); |
| 18 | }; | 17 | }; |
| 19 | 18 | ||
| 20 | struct in_device | 19 | struct in_device { |
| 21 | { | ||
| 22 | struct net_device *dev; | 20 | struct net_device *dev; |
| 23 | atomic_t refcnt; | 21 | atomic_t refcnt; |
| 24 | int dead; | 22 | int dead; |
| @@ -85,6 +83,7 @@ static inline void ipv4_devconf_setall(struct in_device *in_dev) | |||
| 85 | #define IN_DEV_RPFILTER(in_dev) IN_DEV_MAXCONF((in_dev), RP_FILTER) | 83 | #define IN_DEV_RPFILTER(in_dev) IN_DEV_MAXCONF((in_dev), RP_FILTER) |
| 86 | #define IN_DEV_SOURCE_ROUTE(in_dev) IN_DEV_ANDCONF((in_dev), \ | 84 | #define IN_DEV_SOURCE_ROUTE(in_dev) IN_DEV_ANDCONF((in_dev), \ |
| 87 | ACCEPT_SOURCE_ROUTE) | 85 | ACCEPT_SOURCE_ROUTE) |
| 86 | #define IN_DEV_ACCEPT_LOCAL(in_dev) IN_DEV_ORCONF((in_dev), ACCEPT_LOCAL) | ||
| 88 | #define IN_DEV_BOOTP_RELAY(in_dev) IN_DEV_ANDCONF((in_dev), BOOTP_RELAY) | 87 | #define IN_DEV_BOOTP_RELAY(in_dev) IN_DEV_ANDCONF((in_dev), BOOTP_RELAY) |
| 89 | 88 | ||
| 90 | #define IN_DEV_LOG_MARTIANS(in_dev) IN_DEV_ORCONF((in_dev), LOG_MARTIANS) | 89 | #define IN_DEV_LOG_MARTIANS(in_dev) IN_DEV_ORCONF((in_dev), LOG_MARTIANS) |
| @@ -110,8 +109,7 @@ static inline void ipv4_devconf_setall(struct in_device *in_dev) | |||
| 110 | #define IN_DEV_ARP_IGNORE(in_dev) IN_DEV_MAXCONF((in_dev), ARP_IGNORE) | 109 | #define IN_DEV_ARP_IGNORE(in_dev) IN_DEV_MAXCONF((in_dev), ARP_IGNORE) |
| 111 | #define IN_DEV_ARP_NOTIFY(in_dev) IN_DEV_MAXCONF((in_dev), ARP_NOTIFY) | 110 | #define IN_DEV_ARP_NOTIFY(in_dev) IN_DEV_MAXCONF((in_dev), ARP_NOTIFY) |
| 112 | 111 | ||
| 113 | struct in_ifaddr | 112 | struct in_ifaddr { |
| 114 | { | ||
| 115 | struct in_ifaddr *ifa_next; | 113 | struct in_ifaddr *ifa_next; |
| 116 | struct in_device *ifa_dev; | 114 | struct in_device *ifa_dev; |
| 117 | struct rcu_head rcu_head; | 115 | struct rcu_head rcu_head; |
diff --git a/include/linux/init.h b/include/linux/init.h index 13b633ed695e..ff8bde520d03 100644 --- a/include/linux/init.h +++ b/include/linux/init.h | |||
| @@ -103,8 +103,8 @@ | |||
| 103 | #define __INIT .section ".init.text","ax" | 103 | #define __INIT .section ".init.text","ax" |
| 104 | #define __FINIT .previous | 104 | #define __FINIT .previous |
| 105 | 105 | ||
| 106 | #define __INITDATA .section ".init.data","aw" | 106 | #define __INITDATA .section ".init.data","aw",%progbits |
| 107 | #define __INITRODATA .section ".init.rodata","a" | 107 | #define __INITRODATA .section ".init.rodata","a",%progbits |
| 108 | #define __FINITDATA .previous | 108 | #define __FINITDATA .previous |
| 109 | 109 | ||
| 110 | #define __DEVINIT .section ".devinit.text", "ax" | 110 | #define __DEVINIT .section ".devinit.text", "ax" |
| @@ -271,6 +271,7 @@ void __init parse_early_options(char *cmdline); | |||
| 271 | #else /* MODULE */ | 271 | #else /* MODULE */ |
| 272 | 272 | ||
| 273 | /* Don't use these in modules, but some people do... */ | 273 | /* Don't use these in modules, but some people do... */ |
| 274 | #define early_initcall(fn) module_init(fn) | ||
| 274 | #define core_initcall(fn) module_init(fn) | 275 | #define core_initcall(fn) module_init(fn) |
| 275 | #define postcore_initcall(fn) module_init(fn) | 276 | #define postcore_initcall(fn) module_init(fn) |
| 276 | #define arch_initcall(fn) module_init(fn) | 277 | #define arch_initcall(fn) module_init(fn) |
| @@ -305,9 +306,17 @@ void __init parse_early_options(char *cmdline); | |||
| 305 | #ifdef CONFIG_MODULES | 306 | #ifdef CONFIG_MODULES |
| 306 | #define __init_or_module | 307 | #define __init_or_module |
| 307 | #define __initdata_or_module | 308 | #define __initdata_or_module |
| 309 | #define __initconst_or_module | ||
| 310 | #define __INIT_OR_MODULE .text | ||
| 311 | #define __INITDATA_OR_MODULE .data | ||
| 312 | #define __INITRODATA_OR_MODULE .section ".rodata","a",%progbits | ||
| 308 | #else | 313 | #else |
| 309 | #define __init_or_module __init | 314 | #define __init_or_module __init |
| 310 | #define __initdata_or_module __initdata | 315 | #define __initdata_or_module __initdata |
| 316 | #define __initconst_or_module __initconst | ||
| 317 | #define __INIT_OR_MODULE __INIT | ||
| 318 | #define __INITDATA_OR_MODULE __INITDATA | ||
| 319 | #define __INITRODATA_OR_MODULE __INITRODATA | ||
| 311 | #endif /*CONFIG_MODULES*/ | 320 | #endif /*CONFIG_MODULES*/ |
| 312 | 321 | ||
| 313 | /* Functions marked as __devexit may be discarded at kernel link time, depending | 322 | /* Functions marked as __devexit may be discarded at kernel link time, depending |
diff --git a/include/linux/init_task.h b/include/linux/init_task.h index 7fc01b13be43..8d10aa7fd4c9 100644 --- a/include/linux/init_task.h +++ b/include/linux/init_task.h | |||
| @@ -83,26 +83,32 @@ extern struct group_info init_groups; | |||
| 83 | #define INIT_IDS | 83 | #define INIT_IDS |
| 84 | #endif | 84 | #endif |
| 85 | 85 | ||
| 86 | #ifdef CONFIG_SECURITY_FILE_CAPABILITIES | ||
| 87 | /* | 86 | /* |
| 88 | * Because of the reduced scope of CAP_SETPCAP when filesystem | 87 | * Because of the reduced scope of CAP_SETPCAP when filesystem |
| 89 | * capabilities are in effect, it is safe to allow CAP_SETPCAP to | 88 | * capabilities are in effect, it is safe to allow CAP_SETPCAP to |
| 90 | * be available in the default configuration. | 89 | * be available in the default configuration. |
| 91 | */ | 90 | */ |
| 92 | # define CAP_INIT_BSET CAP_FULL_SET | 91 | # define CAP_INIT_BSET CAP_FULL_SET |
| 92 | |||
| 93 | #ifdef CONFIG_TREE_PREEMPT_RCU | ||
| 94 | #define INIT_TASK_RCU_PREEMPT(tsk) \ | ||
| 95 | .rcu_read_lock_nesting = 0, \ | ||
| 96 | .rcu_read_unlock_special = 0, \ | ||
| 97 | .rcu_blocked_node = NULL, \ | ||
| 98 | .rcu_node_entry = LIST_HEAD_INIT(tsk.rcu_node_entry), | ||
| 93 | #else | 99 | #else |
| 94 | # define CAP_INIT_BSET CAP_INIT_EFF_SET | 100 | #define INIT_TASK_RCU_PREEMPT(tsk) |
| 95 | #endif | 101 | #endif |
| 96 | 102 | ||
| 97 | extern struct cred init_cred; | 103 | extern struct cred init_cred; |
| 98 | 104 | ||
| 99 | #ifdef CONFIG_PERF_COUNTERS | 105 | #ifdef CONFIG_PERF_EVENTS |
| 100 | # define INIT_PERF_COUNTERS(tsk) \ | 106 | # define INIT_PERF_EVENTS(tsk) \ |
| 101 | .perf_counter_mutex = \ | 107 | .perf_event_mutex = \ |
| 102 | __MUTEX_INITIALIZER(tsk.perf_counter_mutex), \ | 108 | __MUTEX_INITIALIZER(tsk.perf_event_mutex), \ |
| 103 | .perf_counter_list = LIST_HEAD_INIT(tsk.perf_counter_list), | 109 | .perf_event_list = LIST_HEAD_INIT(tsk.perf_event_list), |
| 104 | #else | 110 | #else |
| 105 | # define INIT_PERF_COUNTERS(tsk) | 111 | # define INIT_PERF_EVENTS(tsk) |
| 106 | #endif | 112 | #endif |
| 107 | 113 | ||
| 108 | /* | 114 | /* |
| @@ -168,11 +174,12 @@ extern struct cred init_cred; | |||
| 168 | }, \ | 174 | }, \ |
| 169 | .dirties = INIT_PROP_LOCAL_SINGLE(dirties), \ | 175 | .dirties = INIT_PROP_LOCAL_SINGLE(dirties), \ |
| 170 | INIT_IDS \ | 176 | INIT_IDS \ |
| 171 | INIT_PERF_COUNTERS(tsk) \ | 177 | INIT_PERF_EVENTS(tsk) \ |
| 172 | INIT_TRACE_IRQFLAGS \ | 178 | INIT_TRACE_IRQFLAGS \ |
| 173 | INIT_LOCKDEP \ | 179 | INIT_LOCKDEP \ |
| 174 | INIT_FTRACE_GRAPH \ | 180 | INIT_FTRACE_GRAPH \ |
| 175 | INIT_TRACE_RECURSION \ | 181 | INIT_TRACE_RECURSION \ |
| 182 | INIT_TASK_RCU_PREEMPT(tsk) \ | ||
| 176 | } | 183 | } |
| 177 | 184 | ||
| 178 | 185 | ||
diff --git a/include/linux/input.h b/include/linux/input.h index 8b3bc3e0d146..c2b1a7d244d9 100644 --- a/include/linux/input.h +++ b/include/linux/input.h | |||
| @@ -1123,7 +1123,7 @@ struct input_dev { | |||
| 1123 | struct mutex mutex; | 1123 | struct mutex mutex; |
| 1124 | 1124 | ||
| 1125 | unsigned int users; | 1125 | unsigned int users; |
| 1126 | int going_away; | 1126 | bool going_away; |
| 1127 | 1127 | ||
| 1128 | struct device dev; | 1128 | struct device dev; |
| 1129 | 1129 | ||
| @@ -1377,6 +1377,10 @@ extern struct class input_class; | |||
| 1377 | * methods; erase() is optional. set_gain() and set_autocenter() need | 1377 | * methods; erase() is optional. set_gain() and set_autocenter() need |
| 1378 | * only be implemented if driver sets up FF_GAIN and FF_AUTOCENTER | 1378 | * only be implemented if driver sets up FF_GAIN and FF_AUTOCENTER |
| 1379 | * bits. | 1379 | * bits. |
| 1380 | * | ||
| 1381 | * Note that playback(), set_gain() and set_autocenter() are called with | ||
| 1382 | * dev->event_lock spinlock held and interrupts off and thus may not | ||
| 1383 | * sleep. | ||
| 1380 | */ | 1384 | */ |
| 1381 | struct ff_device { | 1385 | struct ff_device { |
| 1382 | int (*upload)(struct input_dev *dev, struct ff_effect *effect, | 1386 | int (*upload)(struct input_dev *dev, struct ff_effect *effect, |
diff --git a/include/linux/input/eeti_ts.h b/include/linux/input/eeti_ts.h new file mode 100644 index 000000000000..f875b316249d --- /dev/null +++ b/include/linux/input/eeti_ts.h | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | #ifndef LINUX_INPUT_EETI_TS_H | ||
| 2 | #define LINUX_INPUT_EETI_TS_H | ||
| 3 | |||
| 4 | struct eeti_ts_platform_data { | ||
| 5 | unsigned int irq_active_high; | ||
| 6 | }; | ||
| 7 | |||
| 8 | #endif /* LINUX_INPUT_EETI_TS_H */ | ||
| 9 | |||
diff --git a/include/linux/input/matrix_keypad.h b/include/linux/input/matrix_keypad.h index 15d5903af2dd..b3cd42d50e16 100644 --- a/include/linux/input/matrix_keypad.h +++ b/include/linux/input/matrix_keypad.h | |||
| @@ -63,4 +63,36 @@ struct matrix_keypad_platform_data { | |||
| 63 | bool wakeup; | 63 | bool wakeup; |
| 64 | }; | 64 | }; |
| 65 | 65 | ||
| 66 | /** | ||
| 67 | * matrix_keypad_build_keymap - convert platform keymap into matrix keymap | ||
| 68 | * @keymap_data: keymap supplied by the platform code | ||
| 69 | * @row_shift: number of bits to shift row value by to advance to the next | ||
| 70 | * line in the keymap | ||
| 71 | * @keymap: expanded version of keymap that is suitable for use by | ||
| 72 | * matrix keyboad driver | ||
| 73 | * @keybit: pointer to bitmap of keys supported by input device | ||
| 74 | * | ||
| 75 | * This function converts platform keymap (encoded with KEY() macro) into | ||
| 76 | * an array of keycodes that is suitable for using in a standard matrix | ||
| 77 | * keyboard driver that uses row and col as indices. | ||
| 78 | */ | ||
| 79 | static inline void | ||
| 80 | matrix_keypad_build_keymap(const struct matrix_keymap_data *keymap_data, | ||
| 81 | unsigned int row_shift, | ||
| 82 | unsigned short *keymap, unsigned long *keybit) | ||
| 83 | { | ||
| 84 | int i; | ||
| 85 | |||
| 86 | for (i = 0; i < keymap_data->keymap_size; i++) { | ||
| 87 | unsigned int key = keymap_data->keymap[i]; | ||
| 88 | unsigned int row = KEY_ROW(key); | ||
| 89 | unsigned int col = KEY_COL(key); | ||
| 90 | unsigned short code = KEY_VAL(key); | ||
| 91 | |||
| 92 | keymap[MATRIX_SCAN_CODE(row, col, row_shift)] = code; | ||
| 93 | __set_bit(code, keybit); | ||
| 94 | } | ||
| 95 | __clear_bit(KEY_RESERVED, keybit); | ||
| 96 | } | ||
| 97 | |||
| 66 | #endif /* _MATRIX_KEYPAD_H */ | 98 | #endif /* _MATRIX_KEYPAD_H */ |
diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h index 482dc91fd53a..4f0a72a9740c 100644 --- a/include/linux/intel-iommu.h +++ b/include/linux/intel-iommu.h | |||
| @@ -360,4 +360,6 @@ extern void qi_flush_dev_iotlb(struct intel_iommu *iommu, u16 sid, u16 qdep, | |||
| 360 | 360 | ||
| 361 | extern int qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu); | 361 | extern int qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu); |
| 362 | 362 | ||
| 363 | extern int dmar_ir_support(void); | ||
| 364 | |||
| 363 | #endif | 365 | #endif |
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 35e7df1e9f30..75f3f00ac1e5 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
| @@ -10,7 +10,6 @@ | |||
| 10 | #include <linux/irqreturn.h> | 10 | #include <linux/irqreturn.h> |
| 11 | #include <linux/irqnr.h> | 11 | #include <linux/irqnr.h> |
| 12 | #include <linux/hardirq.h> | 12 | #include <linux/hardirq.h> |
| 13 | #include <linux/sched.h> | ||
| 14 | #include <linux/irqflags.h> | 13 | #include <linux/irqflags.h> |
| 15 | #include <linux/smp.h> | 14 | #include <linux/smp.h> |
| 16 | #include <linux/percpu.h> | 15 | #include <linux/percpu.h> |
| @@ -50,6 +49,9 @@ | |||
| 50 | * IRQF_IRQPOLL - Interrupt is used for polling (only the interrupt that is | 49 | * IRQF_IRQPOLL - Interrupt is used for polling (only the interrupt that is |
| 51 | * registered first in an shared interrupt is considered for | 50 | * registered first in an shared interrupt is considered for |
| 52 | * performance reasons) | 51 | * performance reasons) |
| 52 | * IRQF_ONESHOT - Interrupt is not reenabled after the hardirq handler finished. | ||
| 53 | * Used by threaded interrupts which need to keep the | ||
| 54 | * irq line disabled until the threaded handler has been run. | ||
| 53 | */ | 55 | */ |
| 54 | #define IRQF_DISABLED 0x00000020 | 56 | #define IRQF_DISABLED 0x00000020 |
| 55 | #define IRQF_SAMPLE_RANDOM 0x00000040 | 57 | #define IRQF_SAMPLE_RANDOM 0x00000040 |
| @@ -59,6 +61,7 @@ | |||
| 59 | #define IRQF_PERCPU 0x00000400 | 61 | #define IRQF_PERCPU 0x00000400 |
| 60 | #define IRQF_NOBALANCING 0x00000800 | 62 | #define IRQF_NOBALANCING 0x00000800 |
| 61 | #define IRQF_IRQPOLL 0x00001000 | 63 | #define IRQF_IRQPOLL 0x00001000 |
| 64 | #define IRQF_ONESHOT 0x00002000 | ||
| 62 | 65 | ||
| 63 | /* | 66 | /* |
| 64 | * Bits used by threaded handlers: | 67 | * Bits used by threaded handlers: |
| @@ -80,7 +83,6 @@ typedef irqreturn_t (*irq_handler_t)(int, void *); | |||
| 80 | * struct irqaction - per interrupt action descriptor | 83 | * struct irqaction - per interrupt action descriptor |
| 81 | * @handler: interrupt handler function | 84 | * @handler: interrupt handler function |
| 82 | * @flags: flags (see IRQF_* above) | 85 | * @flags: flags (see IRQF_* above) |
| 83 | * @mask: no comment as it is useless and about to be removed | ||
| 84 | * @name: name of the device | 86 | * @name: name of the device |
| 85 | * @dev_id: cookie to identify the device | 87 | * @dev_id: cookie to identify the device |
| 86 | * @next: pointer to the next irqaction for shared interrupts | 88 | * @next: pointer to the next irqaction for shared interrupts |
| @@ -93,7 +95,6 @@ typedef irqreturn_t (*irq_handler_t)(int, void *); | |||
| 93 | struct irqaction { | 95 | struct irqaction { |
| 94 | irq_handler_t handler; | 96 | irq_handler_t handler; |
| 95 | unsigned long flags; | 97 | unsigned long flags; |
| 96 | cpumask_t mask; | ||
| 97 | const char *name; | 98 | const char *name; |
| 98 | void *dev_id; | 99 | void *dev_id; |
| 99 | struct irqaction *next; | 100 | struct irqaction *next; |
| @@ -344,6 +345,7 @@ enum | |||
| 344 | NET_TX_SOFTIRQ, | 345 | NET_TX_SOFTIRQ, |
| 345 | NET_RX_SOFTIRQ, | 346 | NET_RX_SOFTIRQ, |
| 346 | BLOCK_SOFTIRQ, | 347 | BLOCK_SOFTIRQ, |
| 348 | BLOCK_IOPOLL_SOFTIRQ, | ||
| 347 | TASKLET_SOFTIRQ, | 349 | TASKLET_SOFTIRQ, |
| 348 | SCHED_SOFTIRQ, | 350 | SCHED_SOFTIRQ, |
| 349 | HRTIMER_SOFTIRQ, | 351 | HRTIMER_SOFTIRQ, |
| @@ -601,12 +603,7 @@ static inline void init_irq_proc(void) | |||
| 601 | } | 603 | } |
| 602 | #endif | 604 | #endif |
| 603 | 605 | ||
| 604 | #if defined(CONFIG_GENERIC_HARDIRQS) && defined(CONFIG_DEBUG_SHIRQ) | 606 | struct seq_file; |
| 605 | extern void debug_poll_all_shared_irqs(void); | ||
| 606 | #else | ||
| 607 | static inline void debug_poll_all_shared_irqs(void) { } | ||
| 608 | #endif | ||
| 609 | |||
| 610 | int show_interrupts(struct seq_file *p, void *v); | 607 | int show_interrupts(struct seq_file *p, void *v); |
| 611 | 608 | ||
| 612 | struct irq_desc; | 609 | struct irq_desc; |
diff --git a/include/linux/io-mapping.h b/include/linux/io-mapping.h index 0adb0f91568c..97eb928b4924 100644 --- a/include/linux/io-mapping.h +++ b/include/linux/io-mapping.h | |||
| @@ -49,23 +49,30 @@ static inline struct io_mapping * | |||
| 49 | io_mapping_create_wc(resource_size_t base, unsigned long size) | 49 | io_mapping_create_wc(resource_size_t base, unsigned long size) |
| 50 | { | 50 | { |
| 51 | struct io_mapping *iomap; | 51 | struct io_mapping *iomap; |
| 52 | 52 | pgprot_t prot; | |
| 53 | if (!is_io_mapping_possible(base, size)) | ||
| 54 | return NULL; | ||
| 55 | 53 | ||
| 56 | iomap = kmalloc(sizeof(*iomap), GFP_KERNEL); | 54 | iomap = kmalloc(sizeof(*iomap), GFP_KERNEL); |
| 57 | if (!iomap) | 55 | if (!iomap) |
| 58 | return NULL; | 56 | goto out_err; |
| 57 | |||
| 58 | if (iomap_create_wc(base, size, &prot)) | ||
| 59 | goto out_free; | ||
| 59 | 60 | ||
| 60 | iomap->base = base; | 61 | iomap->base = base; |
| 61 | iomap->size = size; | 62 | iomap->size = size; |
| 62 | iomap->prot = pgprot_writecombine(__pgprot(__PAGE_KERNEL)); | 63 | iomap->prot = prot; |
| 63 | return iomap; | 64 | return iomap; |
| 65 | |||
| 66 | out_free: | ||
| 67 | kfree(iomap); | ||
| 68 | out_err: | ||
| 69 | return NULL; | ||
| 64 | } | 70 | } |
| 65 | 71 | ||
| 66 | static inline void | 72 | static inline void |
| 67 | io_mapping_free(struct io_mapping *mapping) | 73 | io_mapping_free(struct io_mapping *mapping) |
| 68 | { | 74 | { |
| 75 | iomap_free(mapping->base, mapping->size); | ||
| 69 | kfree(mapping); | 76 | kfree(mapping); |
| 70 | } | 77 | } |
| 71 | 78 | ||
diff --git a/include/linux/ioport.h b/include/linux/ioport.h index 786e7b8cece9..83aa81297ea3 100644 --- a/include/linux/ioport.h +++ b/include/linux/ioport.h | |||
| @@ -184,5 +184,9 @@ extern void __devm_release_region(struct device *dev, struct resource *parent, | |||
| 184 | extern int iomem_map_sanity_check(resource_size_t addr, unsigned long size); | 184 | extern int iomem_map_sanity_check(resource_size_t addr, unsigned long size); |
| 185 | extern int iomem_is_exclusive(u64 addr); | 185 | extern int iomem_is_exclusive(u64 addr); |
| 186 | 186 | ||
| 187 | extern int | ||
| 188 | walk_system_ram_range(unsigned long start_pfn, unsigned long nr_pages, | ||
| 189 | void *arg, int (*func)(unsigned long, unsigned long, void *)); | ||
| 190 | |||
| 187 | #endif /* __ASSEMBLY__ */ | 191 | #endif /* __ASSEMBLY__ */ |
| 188 | #endif /* _LINUX_IOPORT_H */ | 192 | #endif /* _LINUX_IOPORT_H */ |
diff --git a/include/linux/iova.h b/include/linux/iova.h index 228f6c94b69c..76a0759e88ec 100644 --- a/include/linux/iova.h +++ b/include/linux/iova.h | |||
| @@ -28,7 +28,6 @@ struct iova { | |||
| 28 | 28 | ||
| 29 | /* holds all the iova translations for a domain */ | 29 | /* holds all the iova translations for a domain */ |
| 30 | struct iova_domain { | 30 | struct iova_domain { |
| 31 | spinlock_t iova_alloc_lock;/* Lock to protect iova allocation */ | ||
| 32 | spinlock_t iova_rbtree_lock; /* Lock to protect update of rbtree */ | 31 | spinlock_t iova_rbtree_lock; /* Lock to protect update of rbtree */ |
| 33 | struct rb_root rbroot; /* iova domain rbtree root */ | 32 | struct rb_root rbroot; /* iova domain rbtree root */ |
| 34 | struct rb_node *cached32_node; /* Save last alloced node */ | 33 | struct rb_node *cached32_node; /* Save last alloced node */ |
diff --git a/include/linux/ip_vs.h b/include/linux/ip_vs.h index 148265e63e8d..dfc170362842 100644 --- a/include/linux/ip_vs.h +++ b/include/linux/ip_vs.h | |||
| @@ -127,8 +127,7 @@ struct ip_vs_dest_user { | |||
| 127 | /* | 127 | /* |
| 128 | * IPVS statistics object (for user space) | 128 | * IPVS statistics object (for user space) |
| 129 | */ | 129 | */ |
| 130 | struct ip_vs_stats_user | 130 | struct ip_vs_stats_user { |
| 131 | { | ||
| 132 | __u32 conns; /* connections scheduled */ | 131 | __u32 conns; /* connections scheduled */ |
| 133 | __u32 inpkts; /* incoming packets */ | 132 | __u32 inpkts; /* incoming packets */ |
| 134 | __u32 outpkts; /* outgoing packets */ | 133 | __u32 outpkts; /* outgoing packets */ |
diff --git a/include/linux/ipc.h b/include/linux/ipc.h index b8826107b518..3b1594d662b0 100644 --- a/include/linux/ipc.h +++ b/include/linux/ipc.h | |||
| @@ -78,8 +78,6 @@ struct ipc_kludge { | |||
| 78 | #define IPCCALL(version,op) ((version)<<16 | (op)) | 78 | #define IPCCALL(version,op) ((version)<<16 | (op)) |
| 79 | 79 | ||
| 80 | #ifdef __KERNEL__ | 80 | #ifdef __KERNEL__ |
| 81 | |||
| 82 | #include <linux/kref.h> | ||
| 83 | #include <linux/spinlock.h> | 81 | #include <linux/spinlock.h> |
| 84 | 82 | ||
| 85 | #define IPCMNI 32768 /* <= MAX_INT limit for ipc arrays (including sysctl changes) */ | 83 | #define IPCMNI 32768 /* <= MAX_INT limit for ipc arrays (including sysctl changes) */ |
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h index c662efa68289..e0cc9a7db2b5 100644 --- a/include/linux/ipv6.h +++ b/include/linux/ipv6.h | |||
| @@ -167,6 +167,7 @@ struct ipv6_devconf { | |||
| 167 | #endif | 167 | #endif |
| 168 | __s32 disable_ipv6; | 168 | __s32 disable_ipv6; |
| 169 | __s32 accept_dad; | 169 | __s32 accept_dad; |
| 170 | __s32 force_tllao; | ||
| 170 | void *sysctl; | 171 | void *sysctl; |
| 171 | }; | 172 | }; |
| 172 | 173 | ||
| @@ -207,6 +208,7 @@ enum { | |||
| 207 | DEVCONF_MC_FORWARDING, | 208 | DEVCONF_MC_FORWARDING, |
| 208 | DEVCONF_DISABLE_IPV6, | 209 | DEVCONF_DISABLE_IPV6, |
| 209 | DEVCONF_ACCEPT_DAD, | 210 | DEVCONF_ACCEPT_DAD, |
| 211 | DEVCONF_FORCE_TLLAO, | ||
| 210 | DEVCONF_MAX | 212 | DEVCONF_MAX |
| 211 | }; | 213 | }; |
| 212 | 214 | ||
| @@ -503,7 +505,7 @@ static inline struct raw6_sock *raw6_sk(const struct sock *sk) | |||
| 503 | 505 | ||
| 504 | #define INET6_MATCH(__sk, __net, __hash, __saddr, __daddr, __ports, __dif)\ | 506 | #define INET6_MATCH(__sk, __net, __hash, __saddr, __daddr, __ports, __dif)\ |
| 505 | (((__sk)->sk_hash == (__hash)) && sock_net((__sk)) == (__net) && \ | 507 | (((__sk)->sk_hash == (__hash)) && sock_net((__sk)) == (__net) && \ |
| 506 | ((*((__portpair *)&(inet_sk(__sk)->dport))) == (__ports)) && \ | 508 | ((*((__portpair *)&(inet_sk(__sk)->inet_dport))) == (__ports)) && \ |
| 507 | ((__sk)->sk_family == AF_INET6) && \ | 509 | ((__sk)->sk_family == AF_INET6) && \ |
| 508 | ipv6_addr_equal(&inet6_sk(__sk)->daddr, (__saddr)) && \ | 510 | ipv6_addr_equal(&inet6_sk(__sk)->daddr, (__saddr)) && \ |
| 509 | ipv6_addr_equal(&inet6_sk(__sk)->rcv_saddr, (__daddr)) && \ | 511 | ipv6_addr_equal(&inet6_sk(__sk)->rcv_saddr, (__daddr)) && \ |
diff --git a/include/linux/irq.h b/include/linux/irq.h index cb2e77a3f7f7..ae9653dbcd78 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h | |||
| @@ -69,6 +69,8 @@ typedef void (*irq_flow_handler_t)(unsigned int irq, | |||
| 69 | #define IRQ_MOVE_PCNTXT 0x01000000 /* IRQ migration from process context */ | 69 | #define IRQ_MOVE_PCNTXT 0x01000000 /* IRQ migration from process context */ |
| 70 | #define IRQ_AFFINITY_SET 0x02000000 /* IRQ affinity was set from userspace*/ | 70 | #define IRQ_AFFINITY_SET 0x02000000 /* IRQ affinity was set from userspace*/ |
| 71 | #define IRQ_SUSPENDED 0x04000000 /* IRQ has gone through suspend sequence */ | 71 | #define IRQ_SUSPENDED 0x04000000 /* IRQ has gone through suspend sequence */ |
| 72 | #define IRQ_ONESHOT 0x08000000 /* IRQ is not unmasked after hardirq */ | ||
| 73 | #define IRQ_NESTED_THREAD 0x10000000 /* IRQ is nested into another, no own handler thread */ | ||
| 72 | 74 | ||
| 73 | #ifdef CONFIG_IRQ_PER_CPU | 75 | #ifdef CONFIG_IRQ_PER_CPU |
| 74 | # define CHECK_IRQ_PER_CPU(var) ((var) & IRQ_PER_CPU) | 76 | # define CHECK_IRQ_PER_CPU(var) ((var) & IRQ_PER_CPU) |
| @@ -100,6 +102,9 @@ struct msi_desc; | |||
| 100 | * @set_type: set the flow type (IRQ_TYPE_LEVEL/etc.) of an IRQ | 102 | * @set_type: set the flow type (IRQ_TYPE_LEVEL/etc.) of an IRQ |
| 101 | * @set_wake: enable/disable power-management wake-on of an IRQ | 103 | * @set_wake: enable/disable power-management wake-on of an IRQ |
| 102 | * | 104 | * |
| 105 | * @bus_lock: function to lock access to slow bus (i2c) chips | ||
| 106 | * @bus_sync_unlock: function to sync and unlock slow bus (i2c) chips | ||
| 107 | * | ||
| 103 | * @release: release function solely used by UML | 108 | * @release: release function solely used by UML |
| 104 | * @typename: obsoleted by name, kept as migration helper | 109 | * @typename: obsoleted by name, kept as migration helper |
| 105 | */ | 110 | */ |
| @@ -123,6 +128,9 @@ struct irq_chip { | |||
| 123 | int (*set_type)(unsigned int irq, unsigned int flow_type); | 128 | int (*set_type)(unsigned int irq, unsigned int flow_type); |
| 124 | int (*set_wake)(unsigned int irq, unsigned int on); | 129 | int (*set_wake)(unsigned int irq, unsigned int on); |
| 125 | 130 | ||
| 131 | void (*bus_lock)(unsigned int irq); | ||
| 132 | void (*bus_sync_unlock)(unsigned int irq); | ||
| 133 | |||
| 126 | /* Currently used only by UML, might disappear one day.*/ | 134 | /* Currently used only by UML, might disappear one day.*/ |
| 127 | #ifdef CONFIG_IRQ_RELEASE_METHOD | 135 | #ifdef CONFIG_IRQ_RELEASE_METHOD |
| 128 | void (*release)(unsigned int irq, void *dev_id); | 136 | void (*release)(unsigned int irq, void *dev_id); |
| @@ -220,13 +228,6 @@ static inline struct irq_desc *move_irq_desc(struct irq_desc *desc, int node) | |||
| 220 | extern struct irq_desc *irq_to_desc_alloc_node(unsigned int irq, int node); | 228 | extern struct irq_desc *irq_to_desc_alloc_node(unsigned int irq, int node); |
| 221 | 229 | ||
| 222 | /* | 230 | /* |
| 223 | * Migration helpers for obsolete names, they will go away: | ||
| 224 | */ | ||
| 225 | #define hw_interrupt_type irq_chip | ||
| 226 | #define no_irq_type no_irq_chip | ||
| 227 | typedef struct irq_desc irq_desc_t; | ||
| 228 | |||
| 229 | /* | ||
| 230 | * Pick up the arch-dependent methods: | 231 | * Pick up the arch-dependent methods: |
| 231 | */ | 232 | */ |
| 232 | #include <asm/hw_irq.h> | 233 | #include <asm/hw_irq.h> |
| @@ -289,6 +290,7 @@ extern void handle_edge_irq(unsigned int irq, struct irq_desc *desc); | |||
| 289 | extern void handle_simple_irq(unsigned int irq, struct irq_desc *desc); | 290 | extern void handle_simple_irq(unsigned int irq, struct irq_desc *desc); |
| 290 | extern void handle_percpu_irq(unsigned int irq, struct irq_desc *desc); | 291 | extern void handle_percpu_irq(unsigned int irq, struct irq_desc *desc); |
| 291 | extern void handle_bad_irq(unsigned int irq, struct irq_desc *desc); | 292 | extern void handle_bad_irq(unsigned int irq, struct irq_desc *desc); |
| 293 | extern void handle_nested_irq(unsigned int irq); | ||
| 292 | 294 | ||
| 293 | /* | 295 | /* |
| 294 | * Monolithic do_IRQ implementation. | 296 | * Monolithic do_IRQ implementation. |
| @@ -379,6 +381,8 @@ set_irq_chained_handler(unsigned int irq, | |||
| 379 | __set_irq_handler(irq, handle, 1, NULL); | 381 | __set_irq_handler(irq, handle, 1, NULL); |
| 380 | } | 382 | } |
| 381 | 383 | ||
| 384 | extern void set_irq_nested_thread(unsigned int irq, int nest); | ||
| 385 | |||
| 382 | extern void set_irq_noprobe(unsigned int irq); | 386 | extern void set_irq_noprobe(unsigned int irq); |
| 383 | extern void set_irq_probe(unsigned int irq); | 387 | extern void set_irq_probe(unsigned int irq); |
| 384 | 388 | ||
diff --git a/include/linux/irqflags.h b/include/linux/irqflags.h index b02a3f1d46a0..006bf45eae30 100644 --- a/include/linux/irqflags.h +++ b/include/linux/irqflags.h | |||
| @@ -124,6 +124,6 @@ | |||
| 124 | typecheck(unsigned long, flags); \ | 124 | typecheck(unsigned long, flags); \ |
| 125 | raw_irqs_disabled_flags(flags); \ | 125 | raw_irqs_disabled_flags(flags); \ |
| 126 | }) | 126 | }) |
| 127 | #endif /* CONFIG_X86 */ | 127 | #endif /* CONFIG_TRACE_IRQFLAGS_SUPPORT */ |
| 128 | 128 | ||
| 129 | #endif | 129 | #endif |
diff --git a/include/linux/irqnr.h b/include/linux/irqnr.h index ec87b212ff7d..7bf89bc8cbca 100644 --- a/include/linux/irqnr.h +++ b/include/linux/irqnr.h | |||
| @@ -41,6 +41,12 @@ extern struct irq_desc *irq_to_desc(unsigned int irq); | |||
| 41 | ; \ | 41 | ; \ |
| 42 | else | 42 | else |
| 43 | 43 | ||
| 44 | #ifdef CONFIG_SMP | ||
| 45 | #define irq_node(irq) (irq_to_desc(irq)->node) | ||
| 46 | #else | ||
| 47 | #define irq_node(irq) 0 | ||
| 48 | #endif | ||
| 49 | |||
| 44 | #endif /* CONFIG_GENERIC_HARDIRQS */ | 50 | #endif /* CONFIG_GENERIC_HARDIRQS */ |
| 45 | 51 | ||
| 46 | #define for_each_irq_nr(irq) \ | 52 | #define for_each_irq_nr(irq) \ |
diff --git a/include/linux/isdn/hdlc.h b/include/linux/isdn/hdlc.h new file mode 100644 index 000000000000..4b3ecc40889a --- /dev/null +++ b/include/linux/isdn/hdlc.h | |||
| @@ -0,0 +1,82 @@ | |||
| 1 | /* | ||
| 2 | * hdlc.h -- General purpose ISDN HDLC decoder. | ||
| 3 | * | ||
| 4 | * Implementation of a HDLC decoder/encoder in software. | ||
| 5 | * Neccessary because some ISDN devices don't have HDLC | ||
| 6 | * controllers. | ||
| 7 | * | ||
| 8 | * Copyright (C) | ||
| 9 | * 2009 Karsten Keil <keil@b1-systems.de> | ||
| 10 | * 2002 Wolfgang Mües <wolfgang@iksw-muees.de> | ||
| 11 | * 2001 Frode Isaksen <fisaksen@bewan.com> | ||
| 12 | * 2001 Kai Germaschewski <kai.germaschewski@gmx.de> | ||
| 13 | * | ||
| 14 | * This program is free software; you can redistribute it and/or modify | ||
| 15 | * it under the terms of the GNU General Public License as published by | ||
| 16 | * the Free Software Foundation; either version 2 of the License, or | ||
| 17 | * (at your option) any later version. | ||
| 18 | * | ||
| 19 | * This program is distributed in the hope that it will be useful, | ||
| 20 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 21 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 22 | * GNU General Public License for more details. | ||
| 23 | * | ||
| 24 | * You should have received a copy of the GNU General Public License | ||
| 25 | * along with this program; if not, write to the Free Software | ||
| 26 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 27 | */ | ||
| 28 | |||
| 29 | #ifndef __ISDNHDLC_H__ | ||
| 30 | #define __ISDNHDLC_H__ | ||
| 31 | |||
| 32 | struct isdnhdlc_vars { | ||
| 33 | int bit_shift; | ||
| 34 | int hdlc_bits1; | ||
| 35 | int data_bits; | ||
| 36 | int ffbit_shift; /* encoding only */ | ||
| 37 | int state; | ||
| 38 | int dstpos; | ||
| 39 | |||
| 40 | u16 crc; | ||
| 41 | |||
| 42 | u8 cbin; | ||
| 43 | u8 shift_reg; | ||
| 44 | u8 ffvalue; | ||
| 45 | |||
| 46 | /* set if transferring data */ | ||
| 47 | u32 data_received:1; | ||
| 48 | /* set if D channel (send idle instead of flags) */ | ||
| 49 | u32 dchannel:1; | ||
| 50 | /* set if 56K adaptation */ | ||
| 51 | u32 do_adapt56:1; | ||
| 52 | /* set if in closing phase (need to send CRC + flag) */ | ||
| 53 | u32 do_closing:1; | ||
| 54 | /* set if data is bitreverse */ | ||
| 55 | u32 do_bitreverse:1; | ||
| 56 | }; | ||
| 57 | |||
| 58 | /* Feature Flags */ | ||
| 59 | #define HDLC_56KBIT 0x01 | ||
| 60 | #define HDLC_DCHANNEL 0x02 | ||
| 61 | #define HDLC_BITREVERSE 0x04 | ||
| 62 | |||
| 63 | /* | ||
| 64 | The return value from isdnhdlc_decode is | ||
| 65 | the frame length, 0 if no complete frame was decoded, | ||
| 66 | or a negative error number | ||
| 67 | */ | ||
| 68 | #define HDLC_FRAMING_ERROR 1 | ||
| 69 | #define HDLC_CRC_ERROR 2 | ||
| 70 | #define HDLC_LENGTH_ERROR 3 | ||
| 71 | |||
| 72 | extern void isdnhdlc_rcv_init(struct isdnhdlc_vars *hdlc, u32 features); | ||
| 73 | |||
| 74 | extern int isdnhdlc_decode(struct isdnhdlc_vars *hdlc, const u8 *src, | ||
| 75 | int slen, int *count, u8 *dst, int dsize); | ||
| 76 | |||
| 77 | extern void isdnhdlc_out_init(struct isdnhdlc_vars *hdlc, u32 features); | ||
| 78 | |||
| 79 | extern int isdnhdlc_encode(struct isdnhdlc_vars *hdlc, const u8 *src, | ||
| 80 | u16 slen, int *count, u8 *dst, int dsize); | ||
| 81 | |||
| 82 | #endif /* __ISDNHDLC_H__ */ | ||
diff --git a/include/linux/isdn_ppp.h b/include/linux/isdn_ppp.h index 4c218ee7587a..8687a7dc0632 100644 --- a/include/linux/isdn_ppp.h +++ b/include/linux/isdn_ppp.h | |||
| @@ -157,7 +157,7 @@ typedef struct { | |||
| 157 | 157 | ||
| 158 | typedef struct { | 158 | typedef struct { |
| 159 | int mp_mrru; /* unused */ | 159 | int mp_mrru; /* unused */ |
| 160 | struct sk_buff_head frags; /* fragments sl list */ | 160 | struct sk_buff * frags; /* fragments sl list -- use skb->next */ |
| 161 | long frames; /* number of frames in the frame list */ | 161 | long frames; /* number of frames in the frame list */ |
| 162 | unsigned int seq; /* last processed packet seq #: any packets | 162 | unsigned int seq; /* last processed packet seq #: any packets |
| 163 | * with smaller seq # will be dropped | 163 | * with smaller seq # will be dropped |
diff --git a/include/linux/jbd.h b/include/linux/jbd.h index c2049a04fa0b..331530cd3cc6 100644 --- a/include/linux/jbd.h +++ b/include/linux/jbd.h | |||
| @@ -446,7 +446,7 @@ struct transaction_s | |||
| 446 | /* | 446 | /* |
| 447 | * Where in the log does this transaction's commit start? [no locking] | 447 | * Where in the log does this transaction's commit start? [no locking] |
| 448 | */ | 448 | */ |
| 449 | unsigned long t_log_start; | 449 | unsigned int t_log_start; |
| 450 | 450 | ||
| 451 | /* Number of buffers on the t_buffers list [j_list_lock] */ | 451 | /* Number of buffers on the t_buffers list [j_list_lock] */ |
| 452 | int t_nr_buffers; | 452 | int t_nr_buffers; |
| @@ -556,7 +556,7 @@ struct transaction_s | |||
| 556 | * This transaction is being forced and some process is | 556 | * This transaction is being forced and some process is |
| 557 | * waiting for it to finish. | 557 | * waiting for it to finish. |
| 558 | */ | 558 | */ |
| 559 | int t_synchronous_commit:1; | 559 | unsigned int t_synchronous_commit:1; |
| 560 | }; | 560 | }; |
| 561 | 561 | ||
| 562 | /** | 562 | /** |
| @@ -701,26 +701,26 @@ struct journal_s | |||
| 701 | * Journal head: identifies the first unused block in the journal. | 701 | * Journal head: identifies the first unused block in the journal. |
| 702 | * [j_state_lock] | 702 | * [j_state_lock] |
| 703 | */ | 703 | */ |
| 704 | unsigned long j_head; | 704 | unsigned int j_head; |
| 705 | 705 | ||
| 706 | /* | 706 | /* |
| 707 | * Journal tail: identifies the oldest still-used block in the journal. | 707 | * Journal tail: identifies the oldest still-used block in the journal. |
| 708 | * [j_state_lock] | 708 | * [j_state_lock] |
| 709 | */ | 709 | */ |
| 710 | unsigned long j_tail; | 710 | unsigned int j_tail; |
| 711 | 711 | ||
| 712 | /* | 712 | /* |
| 713 | * Journal free: how many free blocks are there in the journal? | 713 | * Journal free: how many free blocks are there in the journal? |
| 714 | * [j_state_lock] | 714 | * [j_state_lock] |
| 715 | */ | 715 | */ |
| 716 | unsigned long j_free; | 716 | unsigned int j_free; |
| 717 | 717 | ||
| 718 | /* | 718 | /* |
| 719 | * Journal start and end: the block numbers of the first usable block | 719 | * Journal start and end: the block numbers of the first usable block |
| 720 | * and one beyond the last usable block in the journal. [j_state_lock] | 720 | * and one beyond the last usable block in the journal. [j_state_lock] |
| 721 | */ | 721 | */ |
| 722 | unsigned long j_first; | 722 | unsigned int j_first; |
| 723 | unsigned long j_last; | 723 | unsigned int j_last; |
| 724 | 724 | ||
| 725 | /* | 725 | /* |
| 726 | * Device, blocksize and starting block offset for the location where we | 726 | * Device, blocksize and starting block offset for the location where we |
| @@ -728,7 +728,7 @@ struct journal_s | |||
| 728 | */ | 728 | */ |
| 729 | struct block_device *j_dev; | 729 | struct block_device *j_dev; |
| 730 | int j_blocksize; | 730 | int j_blocksize; |
| 731 | unsigned long j_blk_offset; | 731 | unsigned int j_blk_offset; |
| 732 | 732 | ||
| 733 | /* | 733 | /* |
| 734 | * Device which holds the client fs. For internal journal this will be | 734 | * Device which holds the client fs. For internal journal this will be |
| @@ -859,7 +859,7 @@ extern void __journal_clean_data_list(transaction_t *transaction); | |||
| 859 | 859 | ||
| 860 | /* Log buffer allocation */ | 860 | /* Log buffer allocation */ |
| 861 | extern struct journal_head * journal_get_descriptor_buffer(journal_t *); | 861 | extern struct journal_head * journal_get_descriptor_buffer(journal_t *); |
| 862 | int journal_next_log_block(journal_t *, unsigned long *); | 862 | int journal_next_log_block(journal_t *, unsigned int *); |
| 863 | 863 | ||
| 864 | /* Commit management */ | 864 | /* Commit management */ |
| 865 | extern void journal_commit_transaction(journal_t *); | 865 | extern void journal_commit_transaction(journal_t *); |
| @@ -874,7 +874,7 @@ extern int | |||
| 874 | journal_write_metadata_buffer(transaction_t *transaction, | 874 | journal_write_metadata_buffer(transaction_t *transaction, |
| 875 | struct journal_head *jh_in, | 875 | struct journal_head *jh_in, |
| 876 | struct journal_head **jh_out, | 876 | struct journal_head **jh_out, |
| 877 | unsigned long blocknr); | 877 | unsigned int blocknr); |
| 878 | 878 | ||
| 879 | /* Transaction locking */ | 879 | /* Transaction locking */ |
| 880 | extern void __wait_on_journal (journal_t *); | 880 | extern void __wait_on_journal (journal_t *); |
| @@ -942,7 +942,7 @@ extern void journal_abort (journal_t *, int); | |||
| 942 | extern int journal_errno (journal_t *); | 942 | extern int journal_errno (journal_t *); |
| 943 | extern void journal_ack_err (journal_t *); | 943 | extern void journal_ack_err (journal_t *); |
| 944 | extern int journal_clear_err (journal_t *); | 944 | extern int journal_clear_err (journal_t *); |
| 945 | extern int journal_bmap(journal_t *, unsigned long, unsigned long *); | 945 | extern int journal_bmap(journal_t *, unsigned int, unsigned int *); |
| 946 | extern int journal_force_commit(journal_t *); | 946 | extern int journal_force_commit(journal_t *); |
| 947 | 947 | ||
| 948 | /* | 948 | /* |
| @@ -976,14 +976,14 @@ extern int journal_init_revoke_caches(void); | |||
| 976 | 976 | ||
| 977 | extern void journal_destroy_revoke(journal_t *); | 977 | extern void journal_destroy_revoke(journal_t *); |
| 978 | extern int journal_revoke (handle_t *, | 978 | extern int journal_revoke (handle_t *, |
| 979 | unsigned long, struct buffer_head *); | 979 | unsigned int, struct buffer_head *); |
| 980 | extern int journal_cancel_revoke(handle_t *, struct journal_head *); | 980 | extern int journal_cancel_revoke(handle_t *, struct journal_head *); |
| 981 | extern void journal_write_revoke_records(journal_t *, | 981 | extern void journal_write_revoke_records(journal_t *, |
| 982 | transaction_t *, int); | 982 | transaction_t *, int); |
| 983 | 983 | ||
| 984 | /* Recovery revoke support */ | 984 | /* Recovery revoke support */ |
| 985 | extern int journal_set_revoke(journal_t *, unsigned long, tid_t); | 985 | extern int journal_set_revoke(journal_t *, unsigned int, tid_t); |
| 986 | extern int journal_test_revoke(journal_t *, unsigned long, tid_t); | 986 | extern int journal_test_revoke(journal_t *, unsigned int, tid_t); |
| 987 | extern void journal_clear_revoke(journal_t *); | 987 | extern void journal_clear_revoke(journal_t *); |
| 988 | extern void journal_switch_revoke_table(journal_t *journal); | 988 | extern void journal_switch_revoke_table(journal_t *journal); |
| 989 | 989 | ||
diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h index d97eb652d6ca..f1011f7f3d41 100644 --- a/include/linux/jbd2.h +++ b/include/linux/jbd2.h | |||
| @@ -464,9 +464,9 @@ struct handle_s | |||
| 464 | */ | 464 | */ |
| 465 | struct transaction_chp_stats_s { | 465 | struct transaction_chp_stats_s { |
| 466 | unsigned long cs_chp_time; | 466 | unsigned long cs_chp_time; |
| 467 | unsigned long cs_forced_to_close; | 467 | __u32 cs_forced_to_close; |
| 468 | unsigned long cs_written; | 468 | __u32 cs_written; |
| 469 | unsigned long cs_dropped; | 469 | __u32 cs_dropped; |
| 470 | }; | 470 | }; |
| 471 | 471 | ||
| 472 | /* The transaction_t type is the guts of the journaling mechanism. It | 472 | /* The transaction_t type is the guts of the journaling mechanism. It |
| @@ -652,7 +652,7 @@ struct transaction_s | |||
| 652 | * This transaction is being forced and some process is | 652 | * This transaction is being forced and some process is |
| 653 | * waiting for it to finish. | 653 | * waiting for it to finish. |
| 654 | */ | 654 | */ |
| 655 | int t_synchronous_commit:1; | 655 | unsigned int t_synchronous_commit:1; |
| 656 | 656 | ||
| 657 | /* | 657 | /* |
| 658 | * For use by the filesystem to store fs-specific data | 658 | * For use by the filesystem to store fs-specific data |
| @@ -668,23 +668,16 @@ struct transaction_run_stats_s { | |||
| 668 | unsigned long rs_flushing; | 668 | unsigned long rs_flushing; |
| 669 | unsigned long rs_logging; | 669 | unsigned long rs_logging; |
| 670 | 670 | ||
| 671 | unsigned long rs_handle_count; | 671 | __u32 rs_handle_count; |
| 672 | unsigned long rs_blocks; | 672 | __u32 rs_blocks; |
| 673 | unsigned long rs_blocks_logged; | 673 | __u32 rs_blocks_logged; |
| 674 | }; | 674 | }; |
| 675 | 675 | ||
| 676 | struct transaction_stats_s { | 676 | struct transaction_stats_s { |
| 677 | int ts_type; | ||
| 678 | unsigned long ts_tid; | 677 | unsigned long ts_tid; |
| 679 | union { | 678 | struct transaction_run_stats_s run; |
| 680 | struct transaction_run_stats_s run; | ||
| 681 | struct transaction_chp_stats_s chp; | ||
| 682 | } u; | ||
| 683 | }; | 679 | }; |
| 684 | 680 | ||
| 685 | #define JBD2_STATS_RUN 1 | ||
| 686 | #define JBD2_STATS_CHECKPOINT 2 | ||
| 687 | |||
| 688 | static inline unsigned long | 681 | static inline unsigned long |
| 689 | jbd2_time_diff(unsigned long start, unsigned long end) | 682 | jbd2_time_diff(unsigned long start, unsigned long end) |
| 690 | { | 683 | { |
| @@ -988,12 +981,6 @@ struct journal_s | |||
| 988 | /* | 981 | /* |
| 989 | * Journal statistics | 982 | * Journal statistics |
| 990 | */ | 983 | */ |
| 991 | struct transaction_stats_s *j_history; | ||
| 992 | int j_history_max; | ||
| 993 | int j_history_cur; | ||
| 994 | /* | ||
| 995 | * Protect the transactions statistics history | ||
| 996 | */ | ||
| 997 | spinlock_t j_history_lock; | 984 | spinlock_t j_history_lock; |
| 998 | struct proc_dir_entry *j_proc_entry; | 985 | struct proc_dir_entry *j_proc_entry; |
| 999 | struct transaction_stats_s j_stats; | 986 | struct transaction_stats_s j_stats; |
diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h index 1a9cf78bfce5..6811f4bfc6e7 100644 --- a/include/linux/jiffies.h +++ b/include/linux/jiffies.h | |||
| @@ -307,6 +307,7 @@ extern clock_t jiffies_to_clock_t(long x); | |||
| 307 | extern unsigned long clock_t_to_jiffies(unsigned long x); | 307 | extern unsigned long clock_t_to_jiffies(unsigned long x); |
| 308 | extern u64 jiffies_64_to_clock_t(u64 x); | 308 | extern u64 jiffies_64_to_clock_t(u64 x); |
| 309 | extern u64 nsec_to_clock_t(u64 x); | 309 | extern u64 nsec_to_clock_t(u64 x); |
| 310 | extern unsigned long nsecs_to_jiffies(u64 n); | ||
| 310 | 311 | ||
| 311 | #define TIMESTAMP_SIZE 30 | 312 | #define TIMESTAMP_SIZE 30 |
| 312 | 313 | ||
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index d6320a3e8def..3fa4c590cf12 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
| @@ -15,7 +15,6 @@ | |||
| 15 | #include <linux/bitops.h> | 15 | #include <linux/bitops.h> |
| 16 | #include <linux/log2.h> | 16 | #include <linux/log2.h> |
| 17 | #include <linux/typecheck.h> | 17 | #include <linux/typecheck.h> |
| 18 | #include <linux/ratelimit.h> | ||
| 19 | #include <linux/dynamic_debug.h> | 18 | #include <linux/dynamic_debug.h> |
| 20 | #include <asm/byteorder.h> | 19 | #include <asm/byteorder.h> |
| 21 | #include <asm/bug.h> | 20 | #include <asm/bug.h> |
| @@ -125,7 +124,7 @@ extern int _cond_resched(void); | |||
| 125 | #endif | 124 | #endif |
| 126 | 125 | ||
| 127 | #ifdef CONFIG_DEBUG_SPINLOCK_SLEEP | 126 | #ifdef CONFIG_DEBUG_SPINLOCK_SLEEP |
| 128 | void __might_sleep(char *file, int line); | 127 | void __might_sleep(char *file, int line, int preempt_offset); |
| 129 | /** | 128 | /** |
| 130 | * might_sleep - annotation for functions that can sleep | 129 | * might_sleep - annotation for functions that can sleep |
| 131 | * | 130 | * |
| @@ -137,15 +136,16 @@ extern int _cond_resched(void); | |||
| 137 | * supposed to. | 136 | * supposed to. |
| 138 | */ | 137 | */ |
| 139 | # define might_sleep() \ | 138 | # define might_sleep() \ |
| 140 | do { __might_sleep(__FILE__, __LINE__); might_resched(); } while (0) | 139 | do { __might_sleep(__FILE__, __LINE__, 0); might_resched(); } while (0) |
| 141 | #else | 140 | #else |
| 141 | static inline void __might_sleep(char *file, int line, int preempt_offset) { } | ||
| 142 | # define might_sleep() do { might_resched(); } while (0) | 142 | # define might_sleep() do { might_resched(); } while (0) |
| 143 | #endif | 143 | #endif |
| 144 | 144 | ||
| 145 | #define might_sleep_if(cond) do { if (cond) might_sleep(); } while (0) | 145 | #define might_sleep_if(cond) do { if (cond) might_sleep(); } while (0) |
| 146 | 146 | ||
| 147 | #define abs(x) ({ \ | 147 | #define abs(x) ({ \ |
| 148 | int __x = (x); \ | 148 | long __x = (x); \ |
| 149 | (__x < 0) ? -__x : __x; \ | 149 | (__x < 0) ? -__x : __x; \ |
| 150 | }) | 150 | }) |
| 151 | 151 | ||
| @@ -240,19 +240,21 @@ asmlinkage int vprintk(const char *fmt, va_list args) | |||
| 240 | asmlinkage int printk(const char * fmt, ...) | 240 | asmlinkage int printk(const char * fmt, ...) |
| 241 | __attribute__ ((format (printf, 1, 2))) __cold; | 241 | __attribute__ ((format (printf, 1, 2))) __cold; |
| 242 | 242 | ||
| 243 | extern struct ratelimit_state printk_ratelimit_state; | 243 | extern int __printk_ratelimit(const char *func); |
| 244 | extern int printk_ratelimit(void); | 244 | #define printk_ratelimit() __printk_ratelimit(__func__) |
| 245 | extern bool printk_timed_ratelimit(unsigned long *caller_jiffies, | 245 | extern bool printk_timed_ratelimit(unsigned long *caller_jiffies, |
| 246 | unsigned int interval_msec); | 246 | unsigned int interval_msec); |
| 247 | 247 | ||
| 248 | extern int printk_delay_msec; | ||
| 249 | |||
| 248 | /* | 250 | /* |
| 249 | * Print a one-time message (analogous to WARN_ONCE() et al): | 251 | * Print a one-time message (analogous to WARN_ONCE() et al): |
| 250 | */ | 252 | */ |
| 251 | #define printk_once(x...) ({ \ | 253 | #define printk_once(x...) ({ \ |
| 252 | static int __print_once = 1; \ | 254 | static bool __print_once = true; \ |
| 253 | \ | 255 | \ |
| 254 | if (__print_once) { \ | 256 | if (__print_once) { \ |
| 255 | __print_once = 0; \ | 257 | __print_once = false; \ |
| 256 | printk(x); \ | 258 | printk(x); \ |
| 257 | } \ | 259 | } \ |
| 258 | }) | 260 | }) |
| @@ -656,6 +658,12 @@ extern int do_sysinfo(struct sysinfo *info); | |||
| 656 | 658 | ||
| 657 | #endif /* __KERNEL__ */ | 659 | #endif /* __KERNEL__ */ |
| 658 | 660 | ||
| 661 | #ifndef __EXPORTED_HEADERS__ | ||
| 662 | #ifndef __KERNEL__ | ||
| 663 | #warning Attempt to use kernel headers from user space, see http://kernelnewbies.org/KernelHeaders | ||
| 664 | #endif /* __KERNEL__ */ | ||
| 665 | #endif /* __EXPORTED_HEADERS__ */ | ||
| 666 | |||
| 659 | #define SI_LOAD_SHIFT 16 | 667 | #define SI_LOAD_SHIFT 16 |
| 660 | struct sysinfo { | 668 | struct sysinfo { |
| 661 | long uptime; /* Seconds since boot */ | 669 | long uptime; /* Seconds since boot */ |
| @@ -675,13 +683,17 @@ struct sysinfo { | |||
| 675 | }; | 683 | }; |
| 676 | 684 | ||
| 677 | /* Force a compilation error if condition is true */ | 685 | /* Force a compilation error if condition is true */ |
| 678 | #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)])) | 686 | #define BUILD_BUG_ON(condition) ((void)BUILD_BUG_ON_ZERO(condition)) |
| 687 | |||
| 688 | /* Force a compilation error if condition is constant and true */ | ||
| 689 | #define MAYBE_BUILD_BUG_ON(cond) ((void)sizeof(char[1 - 2 * !!(cond)])) | ||
| 679 | 690 | ||
| 680 | /* Force a compilation error if condition is true, but also produce a | 691 | /* Force a compilation error if condition is true, but also produce a |
| 681 | result (of value 0 and type size_t), so the expression can be used | 692 | result (of value 0 and type size_t), so the expression can be used |
| 682 | e.g. in a structure initializer (or where-ever else comma expressions | 693 | e.g. in a structure initializer (or where-ever else comma expressions |
| 683 | aren't permitted). */ | 694 | aren't permitted). */ |
| 684 | #define BUILD_BUG_ON_ZERO(e) (sizeof(char[1 - 2 * !!(e)]) - 1) | 695 | #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); })) |
| 696 | #define BUILD_BUG_ON_NULL(e) ((void *)sizeof(struct { int:-!!(e); })) | ||
| 685 | 697 | ||
| 686 | /* Trap pasters of __FUNCTION__ at compile-time */ | 698 | /* Trap pasters of __FUNCTION__ at compile-time */ |
| 687 | #define __FUNCTION__ (__func__) | 699 | #define __FUNCTION__ (__func__) |
diff --git a/include/linux/kernel_stat.h b/include/linux/kernel_stat.h index 348fa8874b52..c059044bc6dc 100644 --- a/include/linux/kernel_stat.h +++ b/include/linux/kernel_stat.h | |||
| @@ -25,6 +25,7 @@ struct cpu_usage_stat { | |||
| 25 | cputime64_t iowait; | 25 | cputime64_t iowait; |
| 26 | cputime64_t steal; | 26 | cputime64_t steal; |
| 27 | cputime64_t guest; | 27 | cputime64_t guest; |
| 28 | cputime64_t guest_nice; | ||
| 28 | }; | 29 | }; |
| 29 | 30 | ||
| 30 | struct kernel_stat { | 31 | struct kernel_stat { |
diff --git a/include/linux/key.h b/include/linux/key.h index e544f466d69a..cd50dfa1d4c2 100644 --- a/include/linux/key.h +++ b/include/linux/key.h | |||
| @@ -129,7 +129,10 @@ struct key { | |||
| 129 | struct rw_semaphore sem; /* change vs change sem */ | 129 | struct rw_semaphore sem; /* change vs change sem */ |
| 130 | struct key_user *user; /* owner of this key */ | 130 | struct key_user *user; /* owner of this key */ |
| 131 | void *security; /* security data for this key */ | 131 | void *security; /* security data for this key */ |
| 132 | time_t expiry; /* time at which key expires (or 0) */ | 132 | union { |
| 133 | time_t expiry; /* time at which key expires (or 0) */ | ||
| 134 | time_t revoked_at; /* time at which key was revoked */ | ||
| 135 | }; | ||
| 133 | uid_t uid; | 136 | uid_t uid; |
| 134 | gid_t gid; | 137 | gid_t gid; |
| 135 | key_perm_t perm; /* access permissions */ | 138 | key_perm_t perm; /* access permissions */ |
| @@ -275,6 +278,8 @@ static inline key_serial_t key_serial(struct key *key) | |||
| 275 | extern ctl_table key_sysctls[]; | 278 | extern ctl_table key_sysctls[]; |
| 276 | #endif | 279 | #endif |
| 277 | 280 | ||
| 281 | extern void key_replace_session_keyring(void); | ||
| 282 | |||
| 278 | /* | 283 | /* |
| 279 | * the userspace interface | 284 | * the userspace interface |
| 280 | */ | 285 | */ |
| @@ -297,6 +302,7 @@ extern void key_init(void); | |||
| 297 | #define key_fsuid_changed(t) do { } while(0) | 302 | #define key_fsuid_changed(t) do { } while(0) |
| 298 | #define key_fsgid_changed(t) do { } while(0) | 303 | #define key_fsgid_changed(t) do { } while(0) |
| 299 | #define key_init() do { } while(0) | 304 | #define key_init() do { } while(0) |
| 305 | #define key_replace_session_keyring() do { } while(0) | ||
| 300 | 306 | ||
| 301 | #endif /* CONFIG_KEYS */ | 307 | #endif /* CONFIG_KEYS */ |
| 302 | #endif /* __KERNEL__ */ | 308 | #endif /* __KERNEL__ */ |
diff --git a/include/linux/keyctl.h b/include/linux/keyctl.h index c0688eb72093..bd383f1944fb 100644 --- a/include/linux/keyctl.h +++ b/include/linux/keyctl.h | |||
| @@ -52,5 +52,6 @@ | |||
| 52 | #define KEYCTL_SET_TIMEOUT 15 /* set key timeout */ | 52 | #define KEYCTL_SET_TIMEOUT 15 /* set key timeout */ |
| 53 | #define KEYCTL_ASSUME_AUTHORITY 16 /* assume request_key() authorisation */ | 53 | #define KEYCTL_ASSUME_AUTHORITY 16 /* assume request_key() authorisation */ |
| 54 | #define KEYCTL_GET_SECURITY 17 /* get key security label */ | 54 | #define KEYCTL_GET_SECURITY 17 /* get key security label */ |
| 55 | #define KEYCTL_SESSION_TO_PARENT 18 /* apply session keyring to parent process */ | ||
| 55 | 56 | ||
| 56 | #endif /* _LINUX_KEYCTL_H */ | 57 | #endif /* _LINUX_KEYCTL_H */ |
diff --git a/include/linux/kfifo.h b/include/linux/kfifo.h index 29f62e1733ff..ad6bdf5a5970 100644 --- a/include/linux/kfifo.h +++ b/include/linux/kfifo.h | |||
| @@ -38,7 +38,7 @@ extern struct kfifo *kfifo_alloc(unsigned int size, gfp_t gfp_mask, | |||
| 38 | spinlock_t *lock); | 38 | spinlock_t *lock); |
| 39 | extern void kfifo_free(struct kfifo *fifo); | 39 | extern void kfifo_free(struct kfifo *fifo); |
| 40 | extern unsigned int __kfifo_put(struct kfifo *fifo, | 40 | extern unsigned int __kfifo_put(struct kfifo *fifo, |
| 41 | unsigned char *buffer, unsigned int len); | 41 | const unsigned char *buffer, unsigned int len); |
| 42 | extern unsigned int __kfifo_get(struct kfifo *fifo, | 42 | extern unsigned int __kfifo_get(struct kfifo *fifo, |
| 43 | unsigned char *buffer, unsigned int len); | 43 | unsigned char *buffer, unsigned int len); |
| 44 | 44 | ||
| @@ -77,7 +77,7 @@ static inline void kfifo_reset(struct kfifo *fifo) | |||
| 77 | * bytes copied. | 77 | * bytes copied. |
| 78 | */ | 78 | */ |
| 79 | static inline unsigned int kfifo_put(struct kfifo *fifo, | 79 | static inline unsigned int kfifo_put(struct kfifo *fifo, |
| 80 | unsigned char *buffer, unsigned int len) | 80 | const unsigned char *buffer, unsigned int len) |
| 81 | { | 81 | { |
| 82 | unsigned long flags; | 82 | unsigned long flags; |
| 83 | unsigned int ret; | 83 | unsigned int ret; |
diff --git a/include/linux/kmemcheck.h b/include/linux/kmemcheck.h index 47b39b7c7e84..e880d4cf9e22 100644 --- a/include/linux/kmemcheck.h +++ b/include/linux/kmemcheck.h | |||
| @@ -34,6 +34,8 @@ void kmemcheck_mark_initialized_pages(struct page *p, unsigned int n); | |||
| 34 | int kmemcheck_show_addr(unsigned long address); | 34 | int kmemcheck_show_addr(unsigned long address); |
| 35 | int kmemcheck_hide_addr(unsigned long address); | 35 | int kmemcheck_hide_addr(unsigned long address); |
| 36 | 36 | ||
| 37 | bool kmemcheck_is_obj_initialized(unsigned long addr, size_t size); | ||
| 38 | |||
| 37 | #else | 39 | #else |
| 38 | #define kmemcheck_enabled 0 | 40 | #define kmemcheck_enabled 0 |
| 39 | 41 | ||
| @@ -99,6 +101,11 @@ static inline void kmemcheck_mark_initialized_pages(struct page *p, | |||
| 99 | { | 101 | { |
| 100 | } | 102 | } |
| 101 | 103 | ||
| 104 | static inline bool kmemcheck_is_obj_initialized(unsigned long addr, size_t size) | ||
| 105 | { | ||
| 106 | return true; | ||
| 107 | } | ||
| 108 | |||
| 102 | #endif /* CONFIG_KMEMCHECK */ | 109 | #endif /* CONFIG_KMEMCHECK */ |
| 103 | 110 | ||
| 104 | /* | 111 | /* |
| @@ -137,10 +144,15 @@ static inline void kmemcheck_mark_initialized_pages(struct page *p, | |||
| 137 | int name##_end[0]; | 144 | int name##_end[0]; |
| 138 | 145 | ||
| 139 | #define kmemcheck_annotate_bitfield(ptr, name) \ | 146 | #define kmemcheck_annotate_bitfield(ptr, name) \ |
| 140 | do if (ptr) { \ | 147 | do { \ |
| 141 | int _n = (long) &((ptr)->name##_end) \ | 148 | int _n; \ |
| 149 | \ | ||
| 150 | if (!ptr) \ | ||
| 151 | break; \ | ||
| 152 | \ | ||
| 153 | _n = (long) &((ptr)->name##_end) \ | ||
| 142 | - (long) &((ptr)->name##_begin); \ | 154 | - (long) &((ptr)->name##_begin); \ |
| 143 | BUILD_BUG_ON(_n < 0); \ | 155 | MAYBE_BUILD_BUG_ON(_n < 0); \ |
| 144 | \ | 156 | \ |
| 145 | kmemcheck_mark_initialized(&((ptr)->name##_begin), _n); \ | 157 | kmemcheck_mark_initialized(&((ptr)->name##_begin), _n); \ |
| 146 | } while (0) | 158 | } while (0) |
diff --git a/include/linux/kmemleak.h b/include/linux/kmemleak.h index 6a63807f714e..3c7497d46ee9 100644 --- a/include/linux/kmemleak.h +++ b/include/linux/kmemleak.h | |||
| @@ -23,18 +23,18 @@ | |||
| 23 | 23 | ||
| 24 | #ifdef CONFIG_DEBUG_KMEMLEAK | 24 | #ifdef CONFIG_DEBUG_KMEMLEAK |
| 25 | 25 | ||
| 26 | extern void kmemleak_init(void); | 26 | extern void kmemleak_init(void) __ref; |
| 27 | extern void kmemleak_alloc(const void *ptr, size_t size, int min_count, | 27 | extern void kmemleak_alloc(const void *ptr, size_t size, int min_count, |
| 28 | gfp_t gfp); | 28 | gfp_t gfp) __ref; |
| 29 | extern void kmemleak_free(const void *ptr); | 29 | extern void kmemleak_free(const void *ptr) __ref; |
| 30 | extern void kmemleak_free_part(const void *ptr, size_t size); | 30 | extern void kmemleak_free_part(const void *ptr, size_t size) __ref; |
| 31 | extern void kmemleak_padding(const void *ptr, unsigned long offset, | 31 | extern void kmemleak_padding(const void *ptr, unsigned long offset, |
| 32 | size_t size); | 32 | size_t size) __ref; |
| 33 | extern void kmemleak_not_leak(const void *ptr); | 33 | extern void kmemleak_not_leak(const void *ptr) __ref; |
| 34 | extern void kmemleak_ignore(const void *ptr); | 34 | extern void kmemleak_ignore(const void *ptr) __ref; |
| 35 | extern void kmemleak_scan_area(const void *ptr, unsigned long offset, | 35 | extern void kmemleak_scan_area(const void *ptr, unsigned long offset, |
| 36 | size_t length, gfp_t gfp); | 36 | size_t length, gfp_t gfp) __ref; |
| 37 | extern void kmemleak_no_scan(const void *ptr); | 37 | extern void kmemleak_no_scan(const void *ptr) __ref; |
| 38 | 38 | ||
| 39 | static inline void kmemleak_alloc_recursive(const void *ptr, size_t size, | 39 | static inline void kmemleak_alloc_recursive(const void *ptr, size_t size, |
| 40 | int min_count, unsigned long flags, | 40 | int min_count, unsigned long flags, |
diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h index bcd9c07848be..1b672f74a32f 100644 --- a/include/linux/kprobes.h +++ b/include/linux/kprobes.h | |||
| @@ -48,13 +48,13 @@ | |||
| 48 | #define KPROBE_HIT_SSDONE 0x00000008 | 48 | #define KPROBE_HIT_SSDONE 0x00000008 |
| 49 | 49 | ||
| 50 | /* Attach to insert probes on any functions which should be ignored*/ | 50 | /* Attach to insert probes on any functions which should be ignored*/ |
| 51 | #define __kprobes __attribute__((__section__(".kprobes.text"))) notrace | 51 | #define __kprobes __attribute__((__section__(".kprobes.text"))) |
| 52 | #else /* CONFIG_KPROBES */ | 52 | #else /* CONFIG_KPROBES */ |
| 53 | typedef int kprobe_opcode_t; | 53 | typedef int kprobe_opcode_t; |
| 54 | struct arch_specific_insn { | 54 | struct arch_specific_insn { |
| 55 | int dummy; | 55 | int dummy; |
| 56 | }; | 56 | }; |
| 57 | #define __kprobes notrace | 57 | #define __kprobes |
| 58 | #endif /* CONFIG_KPROBES */ | 58 | #endif /* CONFIG_KPROBES */ |
| 59 | 59 | ||
| 60 | struct kprobe; | 60 | struct kprobe; |
| @@ -296,6 +296,8 @@ void recycle_rp_inst(struct kretprobe_instance *ri, struct hlist_head *head); | |||
| 296 | int disable_kprobe(struct kprobe *kp); | 296 | int disable_kprobe(struct kprobe *kp); |
| 297 | int enable_kprobe(struct kprobe *kp); | 297 | int enable_kprobe(struct kprobe *kp); |
| 298 | 298 | ||
| 299 | void dump_kprobe(struct kprobe *kp); | ||
| 300 | |||
| 299 | #else /* !CONFIG_KPROBES: */ | 301 | #else /* !CONFIG_KPROBES: */ |
| 300 | 302 | ||
| 301 | static inline int kprobes_built_in(void) | 303 | static inline int kprobes_built_in(void) |
diff --git a/include/linux/kref.h b/include/linux/kref.h index 0cef6badd6fb..b0cb0ebad9e6 100644 --- a/include/linux/kref.h +++ b/include/linux/kref.h | |||
| @@ -16,7 +16,6 @@ | |||
| 16 | #define _KREF_H_ | 16 | #define _KREF_H_ |
| 17 | 17 | ||
| 18 | #include <linux/types.h> | 18 | #include <linux/types.h> |
| 19 | #include <asm/atomic.h> | ||
| 20 | 19 | ||
| 21 | struct kref { | 20 | struct kref { |
| 22 | atomic_t refcount; | 21 | atomic_t refcount; |
diff --git a/include/linux/ksm.h b/include/linux/ksm.h new file mode 100644 index 000000000000..a485c14ecd5d --- /dev/null +++ b/include/linux/ksm.h | |||
| @@ -0,0 +1,79 @@ | |||
| 1 | #ifndef __LINUX_KSM_H | ||
| 2 | #define __LINUX_KSM_H | ||
| 3 | /* | ||
| 4 | * Memory merging support. | ||
| 5 | * | ||
| 6 | * This code enables dynamic sharing of identical pages found in different | ||
| 7 | * memory areas, even if they are not shared by fork(). | ||
| 8 | */ | ||
| 9 | |||
| 10 | #include <linux/bitops.h> | ||
| 11 | #include <linux/mm.h> | ||
| 12 | #include <linux/sched.h> | ||
| 13 | #include <linux/vmstat.h> | ||
| 14 | |||
| 15 | #ifdef CONFIG_KSM | ||
| 16 | int ksm_madvise(struct vm_area_struct *vma, unsigned long start, | ||
| 17 | unsigned long end, int advice, unsigned long *vm_flags); | ||
| 18 | int __ksm_enter(struct mm_struct *mm); | ||
| 19 | void __ksm_exit(struct mm_struct *mm); | ||
| 20 | |||
| 21 | static inline int ksm_fork(struct mm_struct *mm, struct mm_struct *oldmm) | ||
| 22 | { | ||
| 23 | if (test_bit(MMF_VM_MERGEABLE, &oldmm->flags)) | ||
| 24 | return __ksm_enter(mm); | ||
| 25 | return 0; | ||
| 26 | } | ||
| 27 | |||
| 28 | static inline void ksm_exit(struct mm_struct *mm) | ||
| 29 | { | ||
| 30 | if (test_bit(MMF_VM_MERGEABLE, &mm->flags)) | ||
| 31 | __ksm_exit(mm); | ||
| 32 | } | ||
| 33 | |||
| 34 | /* | ||
| 35 | * A KSM page is one of those write-protected "shared pages" or "merged pages" | ||
| 36 | * which KSM maps into multiple mms, wherever identical anonymous page content | ||
| 37 | * is found in VM_MERGEABLE vmas. It's a PageAnon page, with NULL anon_vma. | ||
| 38 | */ | ||
| 39 | static inline int PageKsm(struct page *page) | ||
| 40 | { | ||
| 41 | return ((unsigned long)page->mapping == PAGE_MAPPING_ANON); | ||
| 42 | } | ||
| 43 | |||
| 44 | /* | ||
| 45 | * But we have to avoid the checking which page_add_anon_rmap() performs. | ||
| 46 | */ | ||
| 47 | static inline void page_add_ksm_rmap(struct page *page) | ||
| 48 | { | ||
| 49 | if (atomic_inc_and_test(&page->_mapcount)) { | ||
| 50 | page->mapping = (void *) PAGE_MAPPING_ANON; | ||
| 51 | __inc_zone_page_state(page, NR_ANON_PAGES); | ||
| 52 | } | ||
| 53 | } | ||
| 54 | #else /* !CONFIG_KSM */ | ||
| 55 | |||
| 56 | static inline int ksm_madvise(struct vm_area_struct *vma, unsigned long start, | ||
| 57 | unsigned long end, int advice, unsigned long *vm_flags) | ||
| 58 | { | ||
| 59 | return 0; | ||
| 60 | } | ||
| 61 | |||
| 62 | static inline int ksm_fork(struct mm_struct *mm, struct mm_struct *oldmm) | ||
| 63 | { | ||
| 64 | return 0; | ||
| 65 | } | ||
| 66 | |||
| 67 | static inline void ksm_exit(struct mm_struct *mm) | ||
| 68 | { | ||
| 69 | } | ||
| 70 | |||
| 71 | static inline int PageKsm(struct page *page) | ||
| 72 | { | ||
| 73 | return 0; | ||
| 74 | } | ||
| 75 | |||
| 76 | /* No stub required for page_add_ksm_rmap(page) */ | ||
| 77 | #endif /* !CONFIG_KSM */ | ||
| 78 | |||
| 79 | #endif | ||
diff --git a/include/linux/kvm.h b/include/linux/kvm.h index 3db5d8d37485..2d241da07236 100644 --- a/include/linux/kvm.h +++ b/include/linux/kvm.h | |||
| @@ -14,12 +14,76 @@ | |||
| 14 | 14 | ||
| 15 | #define KVM_API_VERSION 12 | 15 | #define KVM_API_VERSION 12 |
| 16 | 16 | ||
| 17 | /* for KVM_TRACE_ENABLE */ | 17 | /* *** Deprecated interfaces *** */ |
| 18 | |||
| 19 | #define KVM_TRC_SHIFT 16 | ||
| 20 | |||
| 21 | #define KVM_TRC_ENTRYEXIT (1 << KVM_TRC_SHIFT) | ||
| 22 | #define KVM_TRC_HANDLER (1 << (KVM_TRC_SHIFT + 1)) | ||
| 23 | |||
| 24 | #define KVM_TRC_VMENTRY (KVM_TRC_ENTRYEXIT + 0x01) | ||
| 25 | #define KVM_TRC_VMEXIT (KVM_TRC_ENTRYEXIT + 0x02) | ||
| 26 | #define KVM_TRC_PAGE_FAULT (KVM_TRC_HANDLER + 0x01) | ||
| 27 | |||
| 28 | #define KVM_TRC_HEAD_SIZE 12 | ||
| 29 | #define KVM_TRC_CYCLE_SIZE 8 | ||
| 30 | #define KVM_TRC_EXTRA_MAX 7 | ||
| 31 | |||
| 32 | #define KVM_TRC_INJ_VIRQ (KVM_TRC_HANDLER + 0x02) | ||
| 33 | #define KVM_TRC_REDELIVER_EVT (KVM_TRC_HANDLER + 0x03) | ||
| 34 | #define KVM_TRC_PEND_INTR (KVM_TRC_HANDLER + 0x04) | ||
| 35 | #define KVM_TRC_IO_READ (KVM_TRC_HANDLER + 0x05) | ||
| 36 | #define KVM_TRC_IO_WRITE (KVM_TRC_HANDLER + 0x06) | ||
| 37 | #define KVM_TRC_CR_READ (KVM_TRC_HANDLER + 0x07) | ||
| 38 | #define KVM_TRC_CR_WRITE (KVM_TRC_HANDLER + 0x08) | ||
| 39 | #define KVM_TRC_DR_READ (KVM_TRC_HANDLER + 0x09) | ||
| 40 | #define KVM_TRC_DR_WRITE (KVM_TRC_HANDLER + 0x0A) | ||
| 41 | #define KVM_TRC_MSR_READ (KVM_TRC_HANDLER + 0x0B) | ||
| 42 | #define KVM_TRC_MSR_WRITE (KVM_TRC_HANDLER + 0x0C) | ||
| 43 | #define KVM_TRC_CPUID (KVM_TRC_HANDLER + 0x0D) | ||
| 44 | #define KVM_TRC_INTR (KVM_TRC_HANDLER + 0x0E) | ||
| 45 | #define KVM_TRC_NMI (KVM_TRC_HANDLER + 0x0F) | ||
| 46 | #define KVM_TRC_VMMCALL (KVM_TRC_HANDLER + 0x10) | ||
| 47 | #define KVM_TRC_HLT (KVM_TRC_HANDLER + 0x11) | ||
| 48 | #define KVM_TRC_CLTS (KVM_TRC_HANDLER + 0x12) | ||
| 49 | #define KVM_TRC_LMSW (KVM_TRC_HANDLER + 0x13) | ||
| 50 | #define KVM_TRC_APIC_ACCESS (KVM_TRC_HANDLER + 0x14) | ||
| 51 | #define KVM_TRC_TDP_FAULT (KVM_TRC_HANDLER + 0x15) | ||
| 52 | #define KVM_TRC_GTLB_WRITE (KVM_TRC_HANDLER + 0x16) | ||
| 53 | #define KVM_TRC_STLB_WRITE (KVM_TRC_HANDLER + 0x17) | ||
| 54 | #define KVM_TRC_STLB_INVAL (KVM_TRC_HANDLER + 0x18) | ||
| 55 | #define KVM_TRC_PPC_INSTR (KVM_TRC_HANDLER + 0x19) | ||
| 56 | |||
| 18 | struct kvm_user_trace_setup { | 57 | struct kvm_user_trace_setup { |
| 19 | __u32 buf_size; /* sub_buffer size of each per-cpu */ | 58 | __u32 buf_size; |
| 20 | __u32 buf_nr; /* the number of sub_buffers of each per-cpu */ | 59 | __u32 buf_nr; |
| 21 | }; | 60 | }; |
| 22 | 61 | ||
| 62 | #define __KVM_DEPRECATED_MAIN_W_0x06 \ | ||
| 63 | _IOW(KVMIO, 0x06, struct kvm_user_trace_setup) | ||
| 64 | #define __KVM_DEPRECATED_MAIN_0x07 _IO(KVMIO, 0x07) | ||
| 65 | #define __KVM_DEPRECATED_MAIN_0x08 _IO(KVMIO, 0x08) | ||
| 66 | |||
| 67 | #define __KVM_DEPRECATED_VM_R_0x70 _IOR(KVMIO, 0x70, struct kvm_assigned_irq) | ||
| 68 | |||
| 69 | struct kvm_breakpoint { | ||
| 70 | __u32 enabled; | ||
| 71 | __u32 padding; | ||
| 72 | __u64 address; | ||
| 73 | }; | ||
| 74 | |||
| 75 | struct kvm_debug_guest { | ||
| 76 | __u32 enabled; | ||
| 77 | __u32 pad; | ||
| 78 | struct kvm_breakpoint breakpoints[4]; | ||
| 79 | __u32 singlestep; | ||
| 80 | }; | ||
| 81 | |||
| 82 | #define __KVM_DEPRECATED_VCPU_W_0x87 _IOW(KVMIO, 0x87, struct kvm_debug_guest) | ||
| 83 | |||
| 84 | /* *** End of deprecated interfaces *** */ | ||
| 85 | |||
| 86 | |||
| 23 | /* for KVM_CREATE_MEMORY_REGION */ | 87 | /* for KVM_CREATE_MEMORY_REGION */ |
| 24 | struct kvm_memory_region { | 88 | struct kvm_memory_region { |
| 25 | __u32 slot; | 89 | __u32 slot; |
| @@ -70,6 +134,14 @@ struct kvm_irqchip { | |||
| 70 | } chip; | 134 | } chip; |
| 71 | }; | 135 | }; |
| 72 | 136 | ||
| 137 | /* for KVM_CREATE_PIT2 */ | ||
| 138 | struct kvm_pit_config { | ||
| 139 | __u32 flags; | ||
| 140 | __u32 pad[15]; | ||
| 141 | }; | ||
| 142 | |||
| 143 | #define KVM_PIT_SPEAKER_DUMMY 1 | ||
| 144 | |||
| 73 | #define KVM_EXIT_UNKNOWN 0 | 145 | #define KVM_EXIT_UNKNOWN 0 |
| 74 | #define KVM_EXIT_EXCEPTION 1 | 146 | #define KVM_EXIT_EXCEPTION 1 |
| 75 | #define KVM_EXIT_IO 2 | 147 | #define KVM_EXIT_IO 2 |
| @@ -87,6 +159,11 @@ struct kvm_irqchip { | |||
| 87 | #define KVM_EXIT_S390_RESET 14 | 159 | #define KVM_EXIT_S390_RESET 14 |
| 88 | #define KVM_EXIT_DCR 15 | 160 | #define KVM_EXIT_DCR 15 |
| 89 | #define KVM_EXIT_NMI 16 | 161 | #define KVM_EXIT_NMI 16 |
| 162 | #define KVM_EXIT_INTERNAL_ERROR 17 | ||
| 163 | |||
| 164 | /* For KVM_EXIT_INTERNAL_ERROR */ | ||
| 165 | #define KVM_INTERNAL_ERROR_EMULATION 1 | ||
| 166 | #define KVM_INTERNAL_ERROR_SIMUL_EX 2 | ||
| 90 | 167 | ||
| 91 | /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */ | 168 | /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */ |
| 92 | struct kvm_run { | 169 | struct kvm_run { |
| @@ -104,6 +181,11 @@ struct kvm_run { | |||
| 104 | __u64 cr8; | 181 | __u64 cr8; |
| 105 | __u64 apic_base; | 182 | __u64 apic_base; |
| 106 | 183 | ||
| 184 | #ifdef __KVM_S390 | ||
| 185 | /* the processor status word for s390 */ | ||
| 186 | __u64 psw_mask; /* psw upper half */ | ||
| 187 | __u64 psw_addr; /* psw lower half */ | ||
| 188 | #endif | ||
| 107 | union { | 189 | union { |
| 108 | /* KVM_EXIT_UNKNOWN */ | 190 | /* KVM_EXIT_UNKNOWN */ |
| 109 | struct { | 191 | struct { |
| @@ -155,8 +237,6 @@ struct kvm_run { | |||
| 155 | /* KVM_EXIT_S390_SIEIC */ | 237 | /* KVM_EXIT_S390_SIEIC */ |
| 156 | struct { | 238 | struct { |
| 157 | __u8 icptcode; | 239 | __u8 icptcode; |
| 158 | __u64 mask; /* psw upper half */ | ||
| 159 | __u64 addr; /* psw lower half */ | ||
| 160 | __u16 ipa; | 240 | __u16 ipa; |
| 161 | __u32 ipb; | 241 | __u32 ipb; |
| 162 | } s390_sieic; | 242 | } s390_sieic; |
| @@ -173,6 +253,12 @@ struct kvm_run { | |||
| 173 | __u32 data; | 253 | __u32 data; |
| 174 | __u8 is_write; | 254 | __u8 is_write; |
| 175 | } dcr; | 255 | } dcr; |
| 256 | struct { | ||
| 257 | __u32 suberror; | ||
| 258 | /* Available with KVM_CAP_INTERNAL_ERROR_DATA: */ | ||
| 259 | __u32 ndata; | ||
| 260 | __u64 data[16]; | ||
| 261 | } internal; | ||
| 176 | /* Fix the size of the union. */ | 262 | /* Fix the size of the union. */ |
| 177 | char padding[256]; | 263 | char padding[256]; |
| 178 | }; | 264 | }; |
| @@ -292,53 +378,28 @@ struct kvm_guest_debug { | |||
| 292 | struct kvm_guest_debug_arch arch; | 378 | struct kvm_guest_debug_arch arch; |
| 293 | }; | 379 | }; |
| 294 | 380 | ||
| 295 | #define KVM_TRC_SHIFT 16 | 381 | enum { |
| 296 | /* | 382 | kvm_ioeventfd_flag_nr_datamatch, |
| 297 | * kvm trace categories | 383 | kvm_ioeventfd_flag_nr_pio, |
| 298 | */ | 384 | kvm_ioeventfd_flag_nr_deassign, |
| 299 | #define KVM_TRC_ENTRYEXIT (1 << KVM_TRC_SHIFT) | 385 | kvm_ioeventfd_flag_nr_max, |
| 300 | #define KVM_TRC_HANDLER (1 << (KVM_TRC_SHIFT + 1)) /* only 12 bits */ | 386 | }; |
| 301 | 387 | ||
| 302 | /* | 388 | #define KVM_IOEVENTFD_FLAG_DATAMATCH (1 << kvm_ioeventfd_flag_nr_datamatch) |
| 303 | * kvm trace action | 389 | #define KVM_IOEVENTFD_FLAG_PIO (1 << kvm_ioeventfd_flag_nr_pio) |
| 304 | */ | 390 | #define KVM_IOEVENTFD_FLAG_DEASSIGN (1 << kvm_ioeventfd_flag_nr_deassign) |
| 305 | #define KVM_TRC_VMENTRY (KVM_TRC_ENTRYEXIT + 0x01) | ||
| 306 | #define KVM_TRC_VMEXIT (KVM_TRC_ENTRYEXIT + 0x02) | ||
| 307 | #define KVM_TRC_PAGE_FAULT (KVM_TRC_HANDLER + 0x01) | ||
| 308 | 391 | ||
| 309 | #define KVM_TRC_HEAD_SIZE 12 | 392 | #define KVM_IOEVENTFD_VALID_FLAG_MASK ((1 << kvm_ioeventfd_flag_nr_max) - 1) |
| 310 | #define KVM_TRC_CYCLE_SIZE 8 | ||
| 311 | #define KVM_TRC_EXTRA_MAX 7 | ||
| 312 | 393 | ||
| 313 | /* This structure represents a single trace buffer record. */ | 394 | struct kvm_ioeventfd { |
| 314 | struct kvm_trace_rec { | 395 | __u64 datamatch; |
| 315 | /* variable rec_val | 396 | __u64 addr; /* legal pio/mmio address */ |
| 316 | * is split into: | 397 | __u32 len; /* 1, 2, 4, or 8 bytes */ |
| 317 | * bits 0 - 27 -> event id | 398 | __s32 fd; |
| 318 | * bits 28 -30 -> number of extra data args of size u32 | 399 | __u32 flags; |
| 319 | * bits 31 -> binary indicator for if tsc is in record | 400 | __u8 pad[36]; |
| 320 | */ | ||
| 321 | __u32 rec_val; | ||
| 322 | __u32 pid; | ||
| 323 | __u32 vcpu_id; | ||
| 324 | union { | ||
| 325 | struct { | ||
| 326 | __u64 timestamp; | ||
| 327 | __u32 extra_u32[KVM_TRC_EXTRA_MAX]; | ||
| 328 | } __attribute__((packed)) timestamp; | ||
| 329 | struct { | ||
| 330 | __u32 extra_u32[KVM_TRC_EXTRA_MAX]; | ||
| 331 | } notimestamp; | ||
| 332 | } u; | ||
| 333 | }; | 401 | }; |
| 334 | 402 | ||
| 335 | #define TRACE_REC_EVENT_ID(val) \ | ||
| 336 | (0x0fffffff & (val)) | ||
| 337 | #define TRACE_REC_NUM_DATA_ARGS(val) \ | ||
| 338 | (0x70000000 & ((val) << 28)) | ||
| 339 | #define TRACE_REC_TCS(val) \ | ||
| 340 | (0x80000000 & ((val) << 31)) | ||
| 341 | |||
| 342 | #define KVMIO 0xAE | 403 | #define KVMIO 0xAE |
| 343 | 404 | ||
| 344 | /* | 405 | /* |
| @@ -359,12 +420,10 @@ struct kvm_trace_rec { | |||
| 359 | */ | 420 | */ |
| 360 | #define KVM_GET_VCPU_MMAP_SIZE _IO(KVMIO, 0x04) /* in bytes */ | 421 | #define KVM_GET_VCPU_MMAP_SIZE _IO(KVMIO, 0x04) /* in bytes */ |
| 361 | #define KVM_GET_SUPPORTED_CPUID _IOWR(KVMIO, 0x05, struct kvm_cpuid2) | 422 | #define KVM_GET_SUPPORTED_CPUID _IOWR(KVMIO, 0x05, struct kvm_cpuid2) |
| 362 | /* | 423 | #define KVM_TRACE_ENABLE __KVM_DEPRECATED_MAIN_W_0x06 |
| 363 | * ioctls for kvm trace | 424 | #define KVM_TRACE_PAUSE __KVM_DEPRECATED_MAIN_0x07 |
| 364 | */ | 425 | #define KVM_TRACE_DISABLE __KVM_DEPRECATED_MAIN_0x08 |
| 365 | #define KVM_TRACE_ENABLE _IOW(KVMIO, 0x06, struct kvm_user_trace_setup) | 426 | |
| 366 | #define KVM_TRACE_PAUSE _IO(KVMIO, 0x07) | ||
| 367 | #define KVM_TRACE_DISABLE _IO(KVMIO, 0x08) | ||
| 368 | /* | 427 | /* |
| 369 | * Extension capability list. | 428 | * Extension capability list. |
| 370 | */ | 429 | */ |
| @@ -415,6 +474,28 @@ struct kvm_trace_rec { | |||
| 415 | #define KVM_CAP_ASSIGN_DEV_IRQ 29 | 474 | #define KVM_CAP_ASSIGN_DEV_IRQ 29 |
| 416 | /* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */ | 475 | /* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */ |
| 417 | #define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30 | 476 | #define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30 |
| 477 | #ifdef __KVM_HAVE_MCE | ||
| 478 | #define KVM_CAP_MCE 31 | ||
| 479 | #endif | ||
| 480 | #define KVM_CAP_IRQFD 32 | ||
| 481 | #ifdef __KVM_HAVE_PIT | ||
| 482 | #define KVM_CAP_PIT2 33 | ||
| 483 | #endif | ||
| 484 | #define KVM_CAP_SET_BOOT_CPU_ID 34 | ||
| 485 | #ifdef __KVM_HAVE_PIT_STATE2 | ||
| 486 | #define KVM_CAP_PIT_STATE2 35 | ||
| 487 | #endif | ||
| 488 | #define KVM_CAP_IOEVENTFD 36 | ||
| 489 | #define KVM_CAP_SET_IDENTITY_MAP_ADDR 37 | ||
| 490 | #ifdef __KVM_HAVE_XEN_HVM | ||
| 491 | #define KVM_CAP_XEN_HVM 38 | ||
| 492 | #endif | ||
| 493 | #define KVM_CAP_ADJUST_CLOCK 39 | ||
| 494 | #define KVM_CAP_INTERNAL_ERROR_DATA 40 | ||
| 495 | #ifdef __KVM_HAVE_VCPU_EVENTS | ||
| 496 | #define KVM_CAP_VCPU_EVENTS 41 | ||
| 497 | #endif | ||
| 498 | #define KVM_CAP_S390_PSW 42 | ||
| 418 | 499 | ||
| 419 | #ifdef KVM_CAP_IRQ_ROUTING | 500 | #ifdef KVM_CAP_IRQ_ROUTING |
| 420 | 501 | ||
| @@ -454,50 +535,100 @@ struct kvm_irq_routing { | |||
| 454 | 535 | ||
| 455 | #endif | 536 | #endif |
| 456 | 537 | ||
| 538 | #ifdef KVM_CAP_MCE | ||
| 539 | /* x86 MCE */ | ||
| 540 | struct kvm_x86_mce { | ||
| 541 | __u64 status; | ||
| 542 | __u64 addr; | ||
| 543 | __u64 misc; | ||
| 544 | __u64 mcg_status; | ||
| 545 | __u8 bank; | ||
| 546 | __u8 pad1[7]; | ||
| 547 | __u64 pad2[3]; | ||
| 548 | }; | ||
| 549 | #endif | ||
| 550 | |||
| 551 | #ifdef KVM_CAP_XEN_HVM | ||
| 552 | struct kvm_xen_hvm_config { | ||
| 553 | __u32 flags; | ||
| 554 | __u32 msr; | ||
| 555 | __u64 blob_addr_32; | ||
| 556 | __u64 blob_addr_64; | ||
| 557 | __u8 blob_size_32; | ||
| 558 | __u8 blob_size_64; | ||
| 559 | __u8 pad2[30]; | ||
| 560 | }; | ||
| 561 | #endif | ||
| 562 | |||
| 563 | #define KVM_IRQFD_FLAG_DEASSIGN (1 << 0) | ||
| 564 | |||
| 565 | struct kvm_irqfd { | ||
| 566 | __u32 fd; | ||
| 567 | __u32 gsi; | ||
| 568 | __u32 flags; | ||
| 569 | __u8 pad[20]; | ||
| 570 | }; | ||
| 571 | |||
| 572 | struct kvm_clock_data { | ||
| 573 | __u64 clock; | ||
| 574 | __u32 flags; | ||
| 575 | __u32 pad[9]; | ||
| 576 | }; | ||
| 577 | |||
| 457 | /* | 578 | /* |
| 458 | * ioctls for VM fds | 579 | * ioctls for VM fds |
| 459 | */ | 580 | */ |
| 460 | #define KVM_SET_MEMORY_REGION _IOW(KVMIO, 0x40, struct kvm_memory_region) | 581 | #define KVM_SET_MEMORY_REGION _IOW(KVMIO, 0x40, struct kvm_memory_region) |
| 461 | #define KVM_SET_NR_MMU_PAGES _IO(KVMIO, 0x44) | ||
| 462 | #define KVM_GET_NR_MMU_PAGES _IO(KVMIO, 0x45) | ||
| 463 | #define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46,\ | ||
| 464 | struct kvm_userspace_memory_region) | ||
| 465 | #define KVM_SET_TSS_ADDR _IO(KVMIO, 0x47) | ||
| 466 | /* | 582 | /* |
| 467 | * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns | 583 | * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns |
| 468 | * a vcpu fd. | 584 | * a vcpu fd. |
| 469 | */ | 585 | */ |
| 470 | #define KVM_CREATE_VCPU _IO(KVMIO, 0x41) | 586 | #define KVM_CREATE_VCPU _IO(KVMIO, 0x41) |
| 471 | #define KVM_GET_DIRTY_LOG _IOW(KVMIO, 0x42, struct kvm_dirty_log) | 587 | #define KVM_GET_DIRTY_LOG _IOW(KVMIO, 0x42, struct kvm_dirty_log) |
| 472 | #define KVM_SET_MEMORY_ALIAS _IOW(KVMIO, 0x43, struct kvm_memory_alias) | 588 | #define KVM_SET_MEMORY_ALIAS _IOW(KVMIO, 0x43, struct kvm_memory_alias) |
| 589 | #define KVM_SET_NR_MMU_PAGES _IO(KVMIO, 0x44) | ||
| 590 | #define KVM_GET_NR_MMU_PAGES _IO(KVMIO, 0x45) | ||
| 591 | #define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46, \ | ||
| 592 | struct kvm_userspace_memory_region) | ||
| 593 | #define KVM_SET_TSS_ADDR _IO(KVMIO, 0x47) | ||
| 594 | #define KVM_SET_IDENTITY_MAP_ADDR _IOW(KVMIO, 0x48, __u64) | ||
| 473 | /* Device model IOC */ | 595 | /* Device model IOC */ |
| 474 | #define KVM_CREATE_IRQCHIP _IO(KVMIO, 0x60) | 596 | #define KVM_CREATE_IRQCHIP _IO(KVMIO, 0x60) |
| 475 | #define KVM_IRQ_LINE _IOW(KVMIO, 0x61, struct kvm_irq_level) | 597 | #define KVM_IRQ_LINE _IOW(KVMIO, 0x61, struct kvm_irq_level) |
| 476 | #define KVM_GET_IRQCHIP _IOWR(KVMIO, 0x62, struct kvm_irqchip) | 598 | #define KVM_GET_IRQCHIP _IOWR(KVMIO, 0x62, struct kvm_irqchip) |
| 477 | #define KVM_SET_IRQCHIP _IOR(KVMIO, 0x63, struct kvm_irqchip) | 599 | #define KVM_SET_IRQCHIP _IOR(KVMIO, 0x63, struct kvm_irqchip) |
| 478 | #define KVM_CREATE_PIT _IO(KVMIO, 0x64) | 600 | #define KVM_CREATE_PIT _IO(KVMIO, 0x64) |
| 479 | #define KVM_GET_PIT _IOWR(KVMIO, 0x65, struct kvm_pit_state) | 601 | #define KVM_GET_PIT _IOWR(KVMIO, 0x65, struct kvm_pit_state) |
| 480 | #define KVM_SET_PIT _IOR(KVMIO, 0x66, struct kvm_pit_state) | 602 | #define KVM_SET_PIT _IOR(KVMIO, 0x66, struct kvm_pit_state) |
| 481 | #define KVM_IRQ_LINE_STATUS _IOWR(KVMIO, 0x67, struct kvm_irq_level) | 603 | #define KVM_IRQ_LINE_STATUS _IOWR(KVMIO, 0x67, struct kvm_irq_level) |
| 482 | #define KVM_REGISTER_COALESCED_MMIO \ | 604 | #define KVM_REGISTER_COALESCED_MMIO \ |
| 483 | _IOW(KVMIO, 0x67, struct kvm_coalesced_mmio_zone) | 605 | _IOW(KVMIO, 0x67, struct kvm_coalesced_mmio_zone) |
| 484 | #define KVM_UNREGISTER_COALESCED_MMIO \ | 606 | #define KVM_UNREGISTER_COALESCED_MMIO \ |
| 485 | _IOW(KVMIO, 0x68, struct kvm_coalesced_mmio_zone) | 607 | _IOW(KVMIO, 0x68, struct kvm_coalesced_mmio_zone) |
| 486 | #define KVM_ASSIGN_PCI_DEVICE _IOR(KVMIO, 0x69, \ | 608 | #define KVM_ASSIGN_PCI_DEVICE _IOR(KVMIO, 0x69, \ |
| 487 | struct kvm_assigned_pci_dev) | 609 | struct kvm_assigned_pci_dev) |
| 488 | #define KVM_SET_GSI_ROUTING _IOW(KVMIO, 0x6a, struct kvm_irq_routing) | 610 | #define KVM_SET_GSI_ROUTING _IOW(KVMIO, 0x6a, struct kvm_irq_routing) |
| 489 | /* deprecated, replaced by KVM_ASSIGN_DEV_IRQ */ | 611 | /* deprecated, replaced by KVM_ASSIGN_DEV_IRQ */ |
| 490 | #define KVM_ASSIGN_IRQ _IOR(KVMIO, 0x70, \ | 612 | #define KVM_ASSIGN_IRQ __KVM_DEPRECATED_VM_R_0x70 |
| 491 | struct kvm_assigned_irq) | 613 | #define KVM_ASSIGN_DEV_IRQ _IOW(KVMIO, 0x70, struct kvm_assigned_irq) |
| 492 | #define KVM_ASSIGN_DEV_IRQ _IOW(KVMIO, 0x70, struct kvm_assigned_irq) | 614 | #define KVM_REINJECT_CONTROL _IO(KVMIO, 0x71) |
| 493 | #define KVM_REINJECT_CONTROL _IO(KVMIO, 0x71) | 615 | #define KVM_DEASSIGN_PCI_DEVICE _IOW(KVMIO, 0x72, \ |
| 494 | #define KVM_DEASSIGN_PCI_DEVICE _IOW(KVMIO, 0x72, \ | 616 | struct kvm_assigned_pci_dev) |
| 495 | struct kvm_assigned_pci_dev) | 617 | #define KVM_ASSIGN_SET_MSIX_NR _IOW(KVMIO, 0x73, \ |
| 496 | #define KVM_ASSIGN_SET_MSIX_NR \ | 618 | struct kvm_assigned_msix_nr) |
| 497 | _IOW(KVMIO, 0x73, struct kvm_assigned_msix_nr) | 619 | #define KVM_ASSIGN_SET_MSIX_ENTRY _IOW(KVMIO, 0x74, \ |
| 498 | #define KVM_ASSIGN_SET_MSIX_ENTRY \ | 620 | struct kvm_assigned_msix_entry) |
| 499 | _IOW(KVMIO, 0x74, struct kvm_assigned_msix_entry) | 621 | #define KVM_DEASSIGN_DEV_IRQ _IOW(KVMIO, 0x75, struct kvm_assigned_irq) |
| 500 | #define KVM_DEASSIGN_DEV_IRQ _IOW(KVMIO, 0x75, struct kvm_assigned_irq) | 622 | #define KVM_IRQFD _IOW(KVMIO, 0x76, struct kvm_irqfd) |
| 623 | #define KVM_CREATE_PIT2 _IOW(KVMIO, 0x77, struct kvm_pit_config) | ||
| 624 | #define KVM_SET_BOOT_CPU_ID _IO(KVMIO, 0x78) | ||
| 625 | #define KVM_IOEVENTFD _IOW(KVMIO, 0x79, struct kvm_ioeventfd) | ||
| 626 | #define KVM_XEN_HVM_CONFIG _IOW(KVMIO, 0x7a, struct kvm_xen_hvm_config) | ||
| 627 | #define KVM_SET_CLOCK _IOW(KVMIO, 0x7b, struct kvm_clock_data) | ||
| 628 | #define KVM_GET_CLOCK _IOR(KVMIO, 0x7c, struct kvm_clock_data) | ||
| 629 | /* Available with KVM_CAP_PIT_STATE2 */ | ||
| 630 | #define KVM_GET_PIT2 _IOR(KVMIO, 0x9f, struct kvm_pit_state2) | ||
| 631 | #define KVM_SET_PIT2 _IOW(KVMIO, 0xa0, struct kvm_pit_state2) | ||
| 501 | 632 | ||
| 502 | /* | 633 | /* |
| 503 | * ioctls for vcpu fds | 634 | * ioctls for vcpu fds |
| @@ -510,7 +641,7 @@ struct kvm_irq_routing { | |||
| 510 | #define KVM_TRANSLATE _IOWR(KVMIO, 0x85, struct kvm_translation) | 641 | #define KVM_TRANSLATE _IOWR(KVMIO, 0x85, struct kvm_translation) |
| 511 | #define KVM_INTERRUPT _IOW(KVMIO, 0x86, struct kvm_interrupt) | 642 | #define KVM_INTERRUPT _IOW(KVMIO, 0x86, struct kvm_interrupt) |
| 512 | /* KVM_DEBUG_GUEST is no longer supported, use KVM_SET_GUEST_DEBUG instead */ | 643 | /* KVM_DEBUG_GUEST is no longer supported, use KVM_SET_GUEST_DEBUG instead */ |
| 513 | #define KVM_DEBUG_GUEST __KVM_DEPRECATED_DEBUG_GUEST | 644 | #define KVM_DEBUG_GUEST __KVM_DEPRECATED_VCPU_W_0x87 |
| 514 | #define KVM_GET_MSRS _IOWR(KVMIO, 0x88, struct kvm_msrs) | 645 | #define KVM_GET_MSRS _IOWR(KVMIO, 0x88, struct kvm_msrs) |
| 515 | #define KVM_SET_MSRS _IOW(KVMIO, 0x89, struct kvm_msrs) | 646 | #define KVM_SET_MSRS _IOW(KVMIO, 0x89, struct kvm_msrs) |
| 516 | #define KVM_SET_CPUID _IOW(KVMIO, 0x8a, struct kvm_cpuid) | 647 | #define KVM_SET_CPUID _IOW(KVMIO, 0x8a, struct kvm_cpuid) |
| @@ -522,7 +653,7 @@ struct kvm_irq_routing { | |||
| 522 | #define KVM_SET_CPUID2 _IOW(KVMIO, 0x90, struct kvm_cpuid2) | 653 | #define KVM_SET_CPUID2 _IOW(KVMIO, 0x90, struct kvm_cpuid2) |
| 523 | #define KVM_GET_CPUID2 _IOWR(KVMIO, 0x91, struct kvm_cpuid2) | 654 | #define KVM_GET_CPUID2 _IOWR(KVMIO, 0x91, struct kvm_cpuid2) |
| 524 | /* Available with KVM_CAP_VAPIC */ | 655 | /* Available with KVM_CAP_VAPIC */ |
| 525 | #define KVM_TPR_ACCESS_REPORTING _IOWR(KVMIO, 0x92, struct kvm_tpr_access_ctl) | 656 | #define KVM_TPR_ACCESS_REPORTING _IOWR(KVMIO, 0x92, struct kvm_tpr_access_ctl) |
| 526 | /* Available with KVM_CAP_VAPIC */ | 657 | /* Available with KVM_CAP_VAPIC */ |
| 527 | #define KVM_SET_VAPIC_ADDR _IOW(KVMIO, 0x93, struct kvm_vapic_addr) | 658 | #define KVM_SET_VAPIC_ADDR _IOW(KVMIO, 0x93, struct kvm_vapic_addr) |
| 528 | /* valid for virtual machine (for floating interrupt)_and_ vcpu */ | 659 | /* valid for virtual machine (for floating interrupt)_and_ vcpu */ |
| @@ -534,59 +665,23 @@ struct kvm_irq_routing { | |||
| 534 | /* initial ipl psw for s390 */ | 665 | /* initial ipl psw for s390 */ |
| 535 | #define KVM_S390_SET_INITIAL_PSW _IOW(KVMIO, 0x96, struct kvm_s390_psw) | 666 | #define KVM_S390_SET_INITIAL_PSW _IOW(KVMIO, 0x96, struct kvm_s390_psw) |
| 536 | /* initial reset for s390 */ | 667 | /* initial reset for s390 */ |
| 537 | #define KVM_S390_INITIAL_RESET _IO(KVMIO, 0x97) | 668 | #define KVM_S390_INITIAL_RESET _IO(KVMIO, 0x97) |
| 538 | #define KVM_GET_MP_STATE _IOR(KVMIO, 0x98, struct kvm_mp_state) | 669 | #define KVM_GET_MP_STATE _IOR(KVMIO, 0x98, struct kvm_mp_state) |
| 539 | #define KVM_SET_MP_STATE _IOW(KVMIO, 0x99, struct kvm_mp_state) | 670 | #define KVM_SET_MP_STATE _IOW(KVMIO, 0x99, struct kvm_mp_state) |
| 540 | /* Available with KVM_CAP_NMI */ | 671 | /* Available with KVM_CAP_NMI */ |
| 541 | #define KVM_NMI _IO(KVMIO, 0x9a) | 672 | #define KVM_NMI _IO(KVMIO, 0x9a) |
| 542 | /* Available with KVM_CAP_SET_GUEST_DEBUG */ | 673 | /* Available with KVM_CAP_SET_GUEST_DEBUG */ |
| 543 | #define KVM_SET_GUEST_DEBUG _IOW(KVMIO, 0x9b, struct kvm_guest_debug) | 674 | #define KVM_SET_GUEST_DEBUG _IOW(KVMIO, 0x9b, struct kvm_guest_debug) |
| 544 | 675 | /* MCE for x86 */ | |
| 545 | /* | 676 | #define KVM_X86_SETUP_MCE _IOW(KVMIO, 0x9c, __u64) |
| 546 | * Deprecated interfaces | 677 | #define KVM_X86_GET_MCE_CAP_SUPPORTED _IOR(KVMIO, 0x9d, __u64) |
| 547 | */ | 678 | #define KVM_X86_SET_MCE _IOW(KVMIO, 0x9e, struct kvm_x86_mce) |
| 548 | struct kvm_breakpoint { | 679 | /* IA64 stack access */ |
| 549 | __u32 enabled; | ||
| 550 | __u32 padding; | ||
| 551 | __u64 address; | ||
| 552 | }; | ||
| 553 | |||
| 554 | struct kvm_debug_guest { | ||
| 555 | __u32 enabled; | ||
| 556 | __u32 pad; | ||
| 557 | struct kvm_breakpoint breakpoints[4]; | ||
| 558 | __u32 singlestep; | ||
| 559 | }; | ||
| 560 | |||
| 561 | #define __KVM_DEPRECATED_DEBUG_GUEST _IOW(KVMIO, 0x87, struct kvm_debug_guest) | ||
| 562 | |||
| 563 | #define KVM_IA64_VCPU_GET_STACK _IOR(KVMIO, 0x9a, void *) | 680 | #define KVM_IA64_VCPU_GET_STACK _IOR(KVMIO, 0x9a, void *) |
| 564 | #define KVM_IA64_VCPU_SET_STACK _IOW(KVMIO, 0x9b, void *) | 681 | #define KVM_IA64_VCPU_SET_STACK _IOW(KVMIO, 0x9b, void *) |
| 565 | 682 | /* Available with KVM_CAP_VCPU_EVENTS */ | |
| 566 | #define KVM_TRC_INJ_VIRQ (KVM_TRC_HANDLER + 0x02) | 683 | #define KVM_GET_VCPU_EVENTS _IOR(KVMIO, 0x9f, struct kvm_vcpu_events) |
| 567 | #define KVM_TRC_REDELIVER_EVT (KVM_TRC_HANDLER + 0x03) | 684 | #define KVM_SET_VCPU_EVENTS _IOW(KVMIO, 0xa0, struct kvm_vcpu_events) |
| 568 | #define KVM_TRC_PEND_INTR (KVM_TRC_HANDLER + 0x04) | ||
| 569 | #define KVM_TRC_IO_READ (KVM_TRC_HANDLER + 0x05) | ||
| 570 | #define KVM_TRC_IO_WRITE (KVM_TRC_HANDLER + 0x06) | ||
| 571 | #define KVM_TRC_CR_READ (KVM_TRC_HANDLER + 0x07) | ||
| 572 | #define KVM_TRC_CR_WRITE (KVM_TRC_HANDLER + 0x08) | ||
| 573 | #define KVM_TRC_DR_READ (KVM_TRC_HANDLER + 0x09) | ||
| 574 | #define KVM_TRC_DR_WRITE (KVM_TRC_HANDLER + 0x0A) | ||
| 575 | #define KVM_TRC_MSR_READ (KVM_TRC_HANDLER + 0x0B) | ||
| 576 | #define KVM_TRC_MSR_WRITE (KVM_TRC_HANDLER + 0x0C) | ||
| 577 | #define KVM_TRC_CPUID (KVM_TRC_HANDLER + 0x0D) | ||
| 578 | #define KVM_TRC_INTR (KVM_TRC_HANDLER + 0x0E) | ||
| 579 | #define KVM_TRC_NMI (KVM_TRC_HANDLER + 0x0F) | ||
| 580 | #define KVM_TRC_VMMCALL (KVM_TRC_HANDLER + 0x10) | ||
| 581 | #define KVM_TRC_HLT (KVM_TRC_HANDLER + 0x11) | ||
| 582 | #define KVM_TRC_CLTS (KVM_TRC_HANDLER + 0x12) | ||
| 583 | #define KVM_TRC_LMSW (KVM_TRC_HANDLER + 0x13) | ||
| 584 | #define KVM_TRC_APIC_ACCESS (KVM_TRC_HANDLER + 0x14) | ||
| 585 | #define KVM_TRC_TDP_FAULT (KVM_TRC_HANDLER + 0x15) | ||
| 586 | #define KVM_TRC_GTLB_WRITE (KVM_TRC_HANDLER + 0x16) | ||
| 587 | #define KVM_TRC_STLB_WRITE (KVM_TRC_HANDLER + 0x17) | ||
| 588 | #define KVM_TRC_STLB_INVAL (KVM_TRC_HANDLER + 0x18) | ||
| 589 | #define KVM_TRC_PPC_INSTR (KVM_TRC_HANDLER + 0x19) | ||
| 590 | 685 | ||
| 591 | #define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0) | 686 | #define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0) |
| 592 | 687 | ||
| @@ -633,7 +728,7 @@ struct kvm_assigned_msix_nr { | |||
| 633 | __u16 padding; | 728 | __u16 padding; |
| 634 | }; | 729 | }; |
| 635 | 730 | ||
| 636 | #define KVM_MAX_MSIX_PER_DEV 512 | 731 | #define KVM_MAX_MSIX_PER_DEV 256 |
| 637 | struct kvm_assigned_msix_entry { | 732 | struct kvm_assigned_msix_entry { |
| 638 | __u32 assigned_dev_id; | 733 | __u32 assigned_dev_id; |
| 639 | __u32 gsi; | 734 | __u32 gsi; |
| @@ -641,4 +736,4 @@ struct kvm_assigned_msix_entry { | |||
| 641 | __u16 padding[3]; | 736 | __u16 padding[3]; |
| 642 | }; | 737 | }; |
| 643 | 738 | ||
| 644 | #endif | 739 | #endif /* __LINUX_KVM_H */ |
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 3060bdc35ffe..bd5a616d9373 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h | |||
| @@ -15,7 +15,6 @@ | |||
| 15 | #include <linux/sched.h> | 15 | #include <linux/sched.h> |
| 16 | #include <linux/mm.h> | 16 | #include <linux/mm.h> |
| 17 | #include <linux/preempt.h> | 17 | #include <linux/preempt.h> |
| 18 | #include <linux/marker.h> | ||
| 19 | #include <linux/msi.h> | 18 | #include <linux/msi.h> |
| 20 | #include <asm/signal.h> | 19 | #include <asm/signal.h> |
| 21 | 20 | ||
| @@ -42,6 +41,7 @@ | |||
| 42 | 41 | ||
| 43 | #define KVM_USERSPACE_IRQ_SOURCE_ID 0 | 42 | #define KVM_USERSPACE_IRQ_SOURCE_ID 0 |
| 44 | 43 | ||
| 44 | struct kvm; | ||
| 45 | struct kvm_vcpu; | 45 | struct kvm_vcpu; |
| 46 | extern struct kmem_cache *kvm_vcpu_cache; | 46 | extern struct kmem_cache *kvm_vcpu_cache; |
| 47 | 47 | ||
| @@ -59,10 +59,18 @@ struct kvm_io_bus { | |||
| 59 | 59 | ||
| 60 | void kvm_io_bus_init(struct kvm_io_bus *bus); | 60 | void kvm_io_bus_init(struct kvm_io_bus *bus); |
| 61 | void kvm_io_bus_destroy(struct kvm_io_bus *bus); | 61 | void kvm_io_bus_destroy(struct kvm_io_bus *bus); |
| 62 | struct kvm_io_device *kvm_io_bus_find_dev(struct kvm_io_bus *bus, | 62 | int kvm_io_bus_write(struct kvm_io_bus *bus, gpa_t addr, int len, |
| 63 | gpa_t addr, int len, int is_write); | 63 | const void *val); |
| 64 | void kvm_io_bus_register_dev(struct kvm_io_bus *bus, | 64 | int kvm_io_bus_read(struct kvm_io_bus *bus, gpa_t addr, int len, |
| 65 | struct kvm_io_device *dev); | 65 | void *val); |
| 66 | int __kvm_io_bus_register_dev(struct kvm_io_bus *bus, | ||
| 67 | struct kvm_io_device *dev); | ||
| 68 | int kvm_io_bus_register_dev(struct kvm *kvm, struct kvm_io_bus *bus, | ||
| 69 | struct kvm_io_device *dev); | ||
| 70 | void __kvm_io_bus_unregister_dev(struct kvm_io_bus *bus, | ||
| 71 | struct kvm_io_device *dev); | ||
| 72 | void kvm_io_bus_unregister_dev(struct kvm *kvm, struct kvm_io_bus *bus, | ||
| 73 | struct kvm_io_device *dev); | ||
| 66 | 74 | ||
| 67 | struct kvm_vcpu { | 75 | struct kvm_vcpu { |
| 68 | struct kvm *kvm; | 76 | struct kvm *kvm; |
| @@ -103,7 +111,7 @@ struct kvm_memory_slot { | |||
| 103 | struct { | 111 | struct { |
| 104 | unsigned long rmap_pde; | 112 | unsigned long rmap_pde; |
| 105 | int write_count; | 113 | int write_count; |
| 106 | } *lpage_info; | 114 | } *lpage_info[KVM_NR_PAGE_SIZES - 1]; |
| 107 | unsigned long userspace_addr; | 115 | unsigned long userspace_addr; |
| 108 | int user_alloc; | 116 | int user_alloc; |
| 109 | }; | 117 | }; |
| @@ -112,7 +120,7 @@ struct kvm_kernel_irq_routing_entry { | |||
| 112 | u32 gsi; | 120 | u32 gsi; |
| 113 | u32 type; | 121 | u32 type; |
| 114 | int (*set)(struct kvm_kernel_irq_routing_entry *e, | 122 | int (*set)(struct kvm_kernel_irq_routing_entry *e, |
| 115 | struct kvm *kvm, int level); | 123 | struct kvm *kvm, int irq_source_id, int level); |
| 116 | union { | 124 | union { |
| 117 | struct { | 125 | struct { |
| 118 | unsigned irqchip; | 126 | unsigned irqchip; |
| @@ -120,11 +128,29 @@ struct kvm_kernel_irq_routing_entry { | |||
| 120 | } irqchip; | 128 | } irqchip; |
| 121 | struct msi_msg msi; | 129 | struct msi_msg msi; |
| 122 | }; | 130 | }; |
| 123 | struct list_head link; | 131 | struct hlist_node link; |
| 124 | }; | 132 | }; |
| 125 | 133 | ||
| 134 | #ifdef __KVM_HAVE_IOAPIC | ||
| 135 | |||
| 136 | struct kvm_irq_routing_table { | ||
| 137 | int chip[KVM_NR_IRQCHIPS][KVM_IOAPIC_NUM_PINS]; | ||
| 138 | struct kvm_kernel_irq_routing_entry *rt_entries; | ||
| 139 | u32 nr_rt_entries; | ||
| 140 | /* | ||
| 141 | * Array indexed by gsi. Each entry contains list of irq chips | ||
| 142 | * the gsi is connected to. | ||
| 143 | */ | ||
| 144 | struct hlist_head map[0]; | ||
| 145 | }; | ||
| 146 | |||
| 147 | #else | ||
| 148 | |||
| 149 | struct kvm_irq_routing_table {}; | ||
| 150 | |||
| 151 | #endif | ||
| 152 | |||
| 126 | struct kvm { | 153 | struct kvm { |
| 127 | struct mutex lock; /* protects the vcpus array and APIC accesses */ | ||
| 128 | spinlock_t mmu_lock; | 154 | spinlock_t mmu_lock; |
| 129 | spinlock_t requests_lock; | 155 | spinlock_t requests_lock; |
| 130 | struct rw_semaphore slots_lock; | 156 | struct rw_semaphore slots_lock; |
| @@ -132,10 +158,23 @@ struct kvm { | |||
| 132 | int nmemslots; | 158 | int nmemslots; |
| 133 | struct kvm_memory_slot memslots[KVM_MEMORY_SLOTS + | 159 | struct kvm_memory_slot memslots[KVM_MEMORY_SLOTS + |
| 134 | KVM_PRIVATE_MEM_SLOTS]; | 160 | KVM_PRIVATE_MEM_SLOTS]; |
| 161 | #ifdef CONFIG_KVM_APIC_ARCHITECTURE | ||
| 162 | u32 bsp_vcpu_id; | ||
| 163 | struct kvm_vcpu *bsp_vcpu; | ||
| 164 | #endif | ||
| 135 | struct kvm_vcpu *vcpus[KVM_MAX_VCPUS]; | 165 | struct kvm_vcpu *vcpus[KVM_MAX_VCPUS]; |
| 166 | atomic_t online_vcpus; | ||
| 136 | struct list_head vm_list; | 167 | struct list_head vm_list; |
| 168 | struct mutex lock; | ||
| 137 | struct kvm_io_bus mmio_bus; | 169 | struct kvm_io_bus mmio_bus; |
| 138 | struct kvm_io_bus pio_bus; | 170 | struct kvm_io_bus pio_bus; |
| 171 | #ifdef CONFIG_HAVE_KVM_EVENTFD | ||
| 172 | struct { | ||
| 173 | spinlock_t lock; | ||
| 174 | struct list_head items; | ||
| 175 | } irqfds; | ||
| 176 | struct list_head ioeventfds; | ||
| 177 | #endif | ||
| 139 | struct kvm_vm_stat stat; | 178 | struct kvm_vm_stat stat; |
| 140 | struct kvm_arch arch; | 179 | struct kvm_arch arch; |
| 141 | atomic_t users_count; | 180 | atomic_t users_count; |
| @@ -144,9 +183,11 @@ struct kvm { | |||
| 144 | struct kvm_coalesced_mmio_ring *coalesced_mmio_ring; | 183 | struct kvm_coalesced_mmio_ring *coalesced_mmio_ring; |
| 145 | #endif | 184 | #endif |
| 146 | 185 | ||
| 186 | struct mutex irq_lock; | ||
| 147 | #ifdef CONFIG_HAVE_KVM_IRQCHIP | 187 | #ifdef CONFIG_HAVE_KVM_IRQCHIP |
| 148 | struct list_head irq_routing; /* of kvm_kernel_irq_routing_entry */ | 188 | struct kvm_irq_routing_table *irq_routing; |
| 149 | struct hlist_head mask_notifier_list; | 189 | struct hlist_head mask_notifier_list; |
| 190 | struct hlist_head irq_ack_notifier_list; | ||
| 150 | #endif | 191 | #endif |
| 151 | 192 | ||
| 152 | #ifdef KVM_ARCH_WANT_MMU_NOTIFIER | 193 | #ifdef KVM_ARCH_WANT_MMU_NOTIFIER |
| @@ -167,6 +208,17 @@ struct kvm { | |||
| 167 | #define kvm_printf(kvm, fmt ...) printk(KERN_DEBUG fmt) | 208 | #define kvm_printf(kvm, fmt ...) printk(KERN_DEBUG fmt) |
| 168 | #define vcpu_printf(vcpu, fmt...) kvm_printf(vcpu->kvm, fmt) | 209 | #define vcpu_printf(vcpu, fmt...) kvm_printf(vcpu->kvm, fmt) |
| 169 | 210 | ||
| 211 | static inline struct kvm_vcpu *kvm_get_vcpu(struct kvm *kvm, int i) | ||
| 212 | { | ||
| 213 | smp_rmb(); | ||
| 214 | return kvm->vcpus[i]; | ||
| 215 | } | ||
| 216 | |||
| 217 | #define kvm_for_each_vcpu(idx, vcpup, kvm) \ | ||
| 218 | for (idx = 0, vcpup = kvm_get_vcpu(kvm, idx); \ | ||
| 219 | idx < atomic_read(&kvm->online_vcpus) && vcpup; \ | ||
| 220 | vcpup = kvm_get_vcpu(kvm, ++idx)) | ||
| 221 | |||
| 170 | int kvm_vcpu_init(struct kvm_vcpu *vcpu, struct kvm *kvm, unsigned id); | 222 | int kvm_vcpu_init(struct kvm_vcpu *vcpu, struct kvm *kvm, unsigned id); |
| 171 | void kvm_vcpu_uninit(struct kvm_vcpu *vcpu); | 223 | void kvm_vcpu_uninit(struct kvm_vcpu *vcpu); |
| 172 | 224 | ||
| @@ -201,6 +253,7 @@ int kvm_arch_set_memory_region(struct kvm *kvm, | |||
| 201 | struct kvm_userspace_memory_region *mem, | 253 | struct kvm_userspace_memory_region *mem, |
| 202 | struct kvm_memory_slot old, | 254 | struct kvm_memory_slot old, |
| 203 | int user_alloc); | 255 | int user_alloc); |
| 256 | void kvm_disable_largepages(void); | ||
| 204 | void kvm_arch_flush_shadow(struct kvm *kvm); | 257 | void kvm_arch_flush_shadow(struct kvm *kvm); |
| 205 | gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn); | 258 | gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn); |
| 206 | struct page *gfn_to_page(struct kvm *kvm, gfn_t gfn); | 259 | struct page *gfn_to_page(struct kvm *kvm, gfn_t gfn); |
| @@ -233,6 +286,7 @@ int kvm_is_visible_gfn(struct kvm *kvm, gfn_t gfn); | |||
| 233 | void mark_page_dirty(struct kvm *kvm, gfn_t gfn); | 286 | void mark_page_dirty(struct kvm *kvm, gfn_t gfn); |
| 234 | 287 | ||
| 235 | void kvm_vcpu_block(struct kvm_vcpu *vcpu); | 288 | void kvm_vcpu_block(struct kvm_vcpu *vcpu); |
| 289 | void kvm_vcpu_on_spin(struct kvm_vcpu *vcpu); | ||
| 236 | void kvm_resched(struct kvm_vcpu *vcpu); | 290 | void kvm_resched(struct kvm_vcpu *vcpu); |
| 237 | void kvm_load_guest_fpu(struct kvm_vcpu *vcpu); | 291 | void kvm_load_guest_fpu(struct kvm_vcpu *vcpu); |
| 238 | void kvm_put_guest_fpu(struct kvm_vcpu *vcpu); | 292 | void kvm_put_guest_fpu(struct kvm_vcpu *vcpu); |
| @@ -243,8 +297,6 @@ long kvm_arch_dev_ioctl(struct file *filp, | |||
| 243 | unsigned int ioctl, unsigned long arg); | 297 | unsigned int ioctl, unsigned long arg); |
| 244 | long kvm_arch_vcpu_ioctl(struct file *filp, | 298 | long kvm_arch_vcpu_ioctl(struct file *filp, |
| 245 | unsigned int ioctl, unsigned long arg); | 299 | unsigned int ioctl, unsigned long arg); |
| 246 | void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu); | ||
| 247 | void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu); | ||
| 248 | 300 | ||
| 249 | int kvm_dev_ioctl_check_extension(long ext); | 301 | int kvm_dev_ioctl_check_extension(long ext); |
| 250 | 302 | ||
| @@ -294,13 +346,12 @@ int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu); | |||
| 294 | void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu); | 346 | void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu); |
| 295 | 347 | ||
| 296 | int kvm_arch_vcpu_reset(struct kvm_vcpu *vcpu); | 348 | int kvm_arch_vcpu_reset(struct kvm_vcpu *vcpu); |
| 297 | void kvm_arch_hardware_enable(void *garbage); | 349 | int kvm_arch_hardware_enable(void *garbage); |
| 298 | void kvm_arch_hardware_disable(void *garbage); | 350 | void kvm_arch_hardware_disable(void *garbage); |
| 299 | int kvm_arch_hardware_setup(void); | 351 | int kvm_arch_hardware_setup(void); |
| 300 | void kvm_arch_hardware_unsetup(void); | 352 | void kvm_arch_hardware_unsetup(void); |
| 301 | void kvm_arch_check_processor_compat(void *rtn); | 353 | void kvm_arch_check_processor_compat(void *rtn); |
| 302 | int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu); | 354 | int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu); |
| 303 | int kvm_arch_interrupt_allowed(struct kvm_vcpu *vcpu); | ||
| 304 | 355 | ||
| 305 | void kvm_free_physmem(struct kvm *kvm); | 356 | void kvm_free_physmem(struct kvm *kvm); |
| 306 | 357 | ||
| @@ -309,8 +360,6 @@ void kvm_arch_destroy_vm(struct kvm *kvm); | |||
| 309 | void kvm_free_all_assigned_devices(struct kvm *kvm); | 360 | void kvm_free_all_assigned_devices(struct kvm *kvm); |
| 310 | void kvm_arch_sync_events(struct kvm *kvm); | 361 | void kvm_arch_sync_events(struct kvm *kvm); |
| 311 | 362 | ||
| 312 | int kvm_cpu_get_interrupt(struct kvm_vcpu *v); | ||
| 313 | int kvm_cpu_has_interrupt(struct kvm_vcpu *v); | ||
| 314 | int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu); | 363 | int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu); |
| 315 | void kvm_vcpu_kick(struct kvm_vcpu *vcpu); | 364 | void kvm_vcpu_kick(struct kvm_vcpu *vcpu); |
| 316 | 365 | ||
| @@ -362,11 +411,17 @@ void kvm_unregister_irq_mask_notifier(struct kvm *kvm, int irq, | |||
| 362 | struct kvm_irq_mask_notifier *kimn); | 411 | struct kvm_irq_mask_notifier *kimn); |
| 363 | void kvm_fire_mask_notifiers(struct kvm *kvm, int irq, bool mask); | 412 | void kvm_fire_mask_notifiers(struct kvm *kvm, int irq, bool mask); |
| 364 | 413 | ||
| 365 | int kvm_set_irq(struct kvm *kvm, int irq_source_id, int irq, int level); | 414 | #ifdef __KVM_HAVE_IOAPIC |
| 415 | void kvm_get_intr_delivery_bitmask(struct kvm_ioapic *ioapic, | ||
| 416 | union kvm_ioapic_redirect_entry *entry, | ||
| 417 | unsigned long *deliver_bitmask); | ||
| 418 | #endif | ||
| 419 | int kvm_set_irq(struct kvm *kvm, int irq_source_id, u32 irq, int level); | ||
| 366 | void kvm_notify_acked_irq(struct kvm *kvm, unsigned irqchip, unsigned pin); | 420 | void kvm_notify_acked_irq(struct kvm *kvm, unsigned irqchip, unsigned pin); |
| 367 | void kvm_register_irq_ack_notifier(struct kvm *kvm, | 421 | void kvm_register_irq_ack_notifier(struct kvm *kvm, |
| 368 | struct kvm_irq_ack_notifier *kian); | 422 | struct kvm_irq_ack_notifier *kian); |
| 369 | void kvm_unregister_irq_ack_notifier(struct kvm_irq_ack_notifier *kian); | 423 | void kvm_unregister_irq_ack_notifier(struct kvm *kvm, |
| 424 | struct kvm_irq_ack_notifier *kian); | ||
| 370 | int kvm_request_irq_source_id(struct kvm *kvm); | 425 | int kvm_request_irq_source_id(struct kvm *kvm); |
| 371 | void kvm_free_irq_source_id(struct kvm *kvm, int irq_source_id); | 426 | void kvm_free_irq_source_id(struct kvm *kvm, int irq_source_id); |
| 372 | 427 | ||
| @@ -459,37 +514,6 @@ struct kvm_stats_debugfs_item { | |||
| 459 | extern struct kvm_stats_debugfs_item debugfs_entries[]; | 514 | extern struct kvm_stats_debugfs_item debugfs_entries[]; |
| 460 | extern struct dentry *kvm_debugfs_dir; | 515 | extern struct dentry *kvm_debugfs_dir; |
| 461 | 516 | ||
| 462 | #define KVMTRACE_5D(evt, vcpu, d1, d2, d3, d4, d5, name) \ | ||
| 463 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
| 464 | vcpu, 5, d1, d2, d3, d4, d5) | ||
| 465 | #define KVMTRACE_4D(evt, vcpu, d1, d2, d3, d4, name) \ | ||
| 466 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
| 467 | vcpu, 4, d1, d2, d3, d4, 0) | ||
| 468 | #define KVMTRACE_3D(evt, vcpu, d1, d2, d3, name) \ | ||
| 469 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
| 470 | vcpu, 3, d1, d2, d3, 0, 0) | ||
| 471 | #define KVMTRACE_2D(evt, vcpu, d1, d2, name) \ | ||
| 472 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
| 473 | vcpu, 2, d1, d2, 0, 0, 0) | ||
| 474 | #define KVMTRACE_1D(evt, vcpu, d1, name) \ | ||
| 475 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
| 476 | vcpu, 1, d1, 0, 0, 0, 0) | ||
| 477 | #define KVMTRACE_0D(evt, vcpu, name) \ | ||
| 478 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
| 479 | vcpu, 0, 0, 0, 0, 0, 0) | ||
| 480 | |||
| 481 | #ifdef CONFIG_KVM_TRACE | ||
| 482 | int kvm_trace_ioctl(unsigned int ioctl, unsigned long arg); | ||
| 483 | void kvm_trace_cleanup(void); | ||
| 484 | #else | ||
| 485 | static inline | ||
| 486 | int kvm_trace_ioctl(unsigned int ioctl, unsigned long arg) | ||
| 487 | { | ||
| 488 | return -EINVAL; | ||
| 489 | } | ||
| 490 | #define kvm_trace_cleanup() ((void)0) | ||
| 491 | #endif | ||
| 492 | |||
| 493 | #ifdef KVM_ARCH_WANT_MMU_NOTIFIER | 517 | #ifdef KVM_ARCH_WANT_MMU_NOTIFIER |
| 494 | static inline int mmu_notifier_retry(struct kvm_vcpu *vcpu, unsigned long mmu_seq) | 518 | static inline int mmu_notifier_retry(struct kvm_vcpu *vcpu, unsigned long mmu_seq) |
| 495 | { | 519 | { |
| @@ -525,4 +549,50 @@ static inline void kvm_free_irq_routing(struct kvm *kvm) {} | |||
| 525 | 549 | ||
| 526 | #endif | 550 | #endif |
| 527 | 551 | ||
| 552 | #ifdef CONFIG_HAVE_KVM_EVENTFD | ||
| 553 | |||
| 554 | void kvm_eventfd_init(struct kvm *kvm); | ||
| 555 | int kvm_irqfd(struct kvm *kvm, int fd, int gsi, int flags); | ||
| 556 | void kvm_irqfd_release(struct kvm *kvm); | ||
| 557 | int kvm_ioeventfd(struct kvm *kvm, struct kvm_ioeventfd *args); | ||
| 558 | |||
| 559 | #else | ||
| 560 | |||
| 561 | static inline void kvm_eventfd_init(struct kvm *kvm) {} | ||
| 562 | static inline int kvm_irqfd(struct kvm *kvm, int fd, int gsi, int flags) | ||
| 563 | { | ||
| 564 | return -EINVAL; | ||
| 565 | } | ||
| 566 | |||
| 567 | static inline void kvm_irqfd_release(struct kvm *kvm) {} | ||
| 568 | static inline int kvm_ioeventfd(struct kvm *kvm, struct kvm_ioeventfd *args) | ||
| 569 | { | ||
| 570 | return -ENOSYS; | ||
| 571 | } | ||
| 572 | |||
| 573 | #endif /* CONFIG_HAVE_KVM_EVENTFD */ | ||
| 574 | |||
| 575 | #ifdef CONFIG_KVM_APIC_ARCHITECTURE | ||
| 576 | static inline bool kvm_vcpu_is_bsp(struct kvm_vcpu *vcpu) | ||
| 577 | { | ||
| 578 | return vcpu->kvm->bsp_vcpu_id == vcpu->vcpu_id; | ||
| 579 | } | ||
| 528 | #endif | 580 | #endif |
| 581 | |||
| 582 | #ifdef __KVM_HAVE_DEVICE_ASSIGNMENT | ||
| 583 | |||
| 584 | long kvm_vm_ioctl_assigned_device(struct kvm *kvm, unsigned ioctl, | ||
| 585 | unsigned long arg); | ||
| 586 | |||
| 587 | #else | ||
| 588 | |||
| 589 | static inline long kvm_vm_ioctl_assigned_device(struct kvm *kvm, unsigned ioctl, | ||
| 590 | unsigned long arg) | ||
| 591 | { | ||
| 592 | return -ENOTTY; | ||
| 593 | } | ||
| 594 | |||
| 595 | #endif | ||
| 596 | |||
| 597 | #endif | ||
| 598 | |||
diff --git a/include/linux/kvm_para.h b/include/linux/kvm_para.h index 3ddce03766ca..d73109243fda 100644 --- a/include/linux/kvm_para.h +++ b/include/linux/kvm_para.h | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #define KVM_ENOSYS 1000 | 13 | #define KVM_ENOSYS 1000 |
| 14 | #define KVM_EFAULT EFAULT | 14 | #define KVM_EFAULT EFAULT |
| 15 | #define KVM_E2BIG E2BIG | 15 | #define KVM_E2BIG E2BIG |
| 16 | #define KVM_EPERM EPERM | ||
| 16 | 17 | ||
| 17 | #define KVM_HC_VAPIC_POLL_IRQ 1 | 18 | #define KVM_HC_VAPIC_POLL_IRQ 1 |
| 18 | #define KVM_HC_MMU_OP 2 | 19 | #define KVM_HC_MMU_OP 2 |
diff --git a/include/linux/libata.h b/include/linux/libata.h index e5b6e33c6571..87698640c091 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
| @@ -143,7 +143,6 @@ enum { | |||
| 143 | 143 | ||
| 144 | ATA_DFLAG_PIO = (1 << 12), /* device limited to PIO mode */ | 144 | ATA_DFLAG_PIO = (1 << 12), /* device limited to PIO mode */ |
| 145 | ATA_DFLAG_NCQ_OFF = (1 << 13), /* device limited to non-NCQ mode */ | 145 | ATA_DFLAG_NCQ_OFF = (1 << 13), /* device limited to non-NCQ mode */ |
| 146 | ATA_DFLAG_SPUNDOWN = (1 << 14), /* XXX: for spindown_compat */ | ||
| 147 | ATA_DFLAG_SLEEPING = (1 << 15), /* device is sleeping */ | 146 | ATA_DFLAG_SLEEPING = (1 << 15), /* device is sleeping */ |
| 148 | ATA_DFLAG_DUBIOUS_XFER = (1 << 16), /* data transfer not verified */ | 147 | ATA_DFLAG_DUBIOUS_XFER = (1 << 16), /* data transfer not verified */ |
| 149 | ATA_DFLAG_NO_UNLOAD = (1 << 17), /* device doesn't support unload */ | 148 | ATA_DFLAG_NO_UNLOAD = (1 << 17), /* device doesn't support unload */ |
| @@ -190,6 +189,7 @@ enum { | |||
| 190 | ATA_FLAG_NO_POWEROFF_SPINDOWN = (1 << 11), /* don't spindown before poweroff */ | 189 | ATA_FLAG_NO_POWEROFF_SPINDOWN = (1 << 11), /* don't spindown before poweroff */ |
| 191 | ATA_FLAG_NO_HIBERNATE_SPINDOWN = (1 << 12), /* don't spindown before hibernation */ | 190 | ATA_FLAG_NO_HIBERNATE_SPINDOWN = (1 << 12), /* don't spindown before hibernation */ |
| 192 | ATA_FLAG_DEBUGMSG = (1 << 13), | 191 | ATA_FLAG_DEBUGMSG = (1 << 13), |
| 192 | ATA_FLAG_FPDMA_AA = (1 << 14), /* driver supports Auto-Activate */ | ||
| 193 | ATA_FLAG_IGN_SIMPLEX = (1 << 15), /* ignore SIMPLEX */ | 193 | ATA_FLAG_IGN_SIMPLEX = (1 << 15), /* ignore SIMPLEX */ |
| 194 | ATA_FLAG_NO_IORDY = (1 << 16), /* controller lacks iordy */ | 194 | ATA_FLAG_NO_IORDY = (1 << 16), /* controller lacks iordy */ |
| 195 | ATA_FLAG_ACPI_SATA = (1 << 17), /* need native SATA ACPI layout */ | 195 | ATA_FLAG_ACPI_SATA = (1 << 17), /* need native SATA ACPI layout */ |
| @@ -386,6 +386,7 @@ enum { | |||
| 386 | ATA_HORKAGE_FIRMWARE_WARN = (1 << 12), /* firmware update warning */ | 386 | ATA_HORKAGE_FIRMWARE_WARN = (1 << 12), /* firmware update warning */ |
| 387 | ATA_HORKAGE_1_5_GBPS = (1 << 13), /* force 1.5 Gbps */ | 387 | ATA_HORKAGE_1_5_GBPS = (1 << 13), /* force 1.5 Gbps */ |
| 388 | ATA_HORKAGE_NOSETXFER = (1 << 14), /* skip SETXFER, SATA only */ | 388 | ATA_HORKAGE_NOSETXFER = (1 << 14), /* skip SETXFER, SATA only */ |
| 389 | ATA_HORKAGE_BROKEN_FPDMA_AA = (1 << 15), /* skip AA */ | ||
| 389 | 390 | ||
| 390 | /* DMA mask for user DMA control: User visible values; DO NOT | 391 | /* DMA mask for user DMA control: User visible values; DO NOT |
| 391 | renumber */ | 392 | renumber */ |
| @@ -417,6 +418,17 @@ enum { | |||
| 417 | ATA_TIMING_ACTIVE | ATA_TIMING_RECOVER | | 418 | ATA_TIMING_ACTIVE | ATA_TIMING_RECOVER | |
| 418 | ATA_TIMING_DMACK_HOLD | ATA_TIMING_CYCLE | | 419 | ATA_TIMING_DMACK_HOLD | ATA_TIMING_CYCLE | |
| 419 | ATA_TIMING_UDMA, | 420 | ATA_TIMING_UDMA, |
| 421 | |||
| 422 | /* ACPI constants */ | ||
| 423 | ATA_ACPI_FILTER_SETXFER = 1 << 0, | ||
| 424 | ATA_ACPI_FILTER_LOCK = 1 << 1, | ||
| 425 | ATA_ACPI_FILTER_DIPM = 1 << 2, | ||
| 426 | ATA_ACPI_FILTER_FPDMA_OFFSET = 1 << 3, /* FPDMA non-zero offset */ | ||
| 427 | ATA_ACPI_FILTER_FPDMA_AA = 1 << 4, /* FPDMA auto activate */ | ||
| 428 | |||
| 429 | ATA_ACPI_FILTER_DEFAULT = ATA_ACPI_FILTER_SETXFER | | ||
| 430 | ATA_ACPI_FILTER_LOCK | | ||
| 431 | ATA_ACPI_FILTER_DIPM, | ||
| 420 | }; | 432 | }; |
| 421 | 433 | ||
| 422 | enum ata_xfer_mask { | 434 | enum ata_xfer_mask { |
| @@ -586,6 +598,7 @@ struct ata_device { | |||
| 586 | #ifdef CONFIG_ATA_ACPI | 598 | #ifdef CONFIG_ATA_ACPI |
| 587 | acpi_handle acpi_handle; | 599 | acpi_handle acpi_handle; |
| 588 | union acpi_object *gtf_cache; | 600 | union acpi_object *gtf_cache; |
| 601 | unsigned int gtf_filter; | ||
| 589 | #endif | 602 | #endif |
| 590 | /* n_sector is CLEAR_BEGIN, read comment above CLEAR_BEGIN */ | 603 | /* n_sector is CLEAR_BEGIN, read comment above CLEAR_BEGIN */ |
| 591 | u64 n_sectors; /* size of device, if ATA */ | 604 | u64 n_sectors; /* size of device, if ATA */ |
diff --git a/include/linux/libps2.h b/include/linux/libps2.h index b94534b7e266..79603a6c356f 100644 --- a/include/linux/libps2.h +++ b/include/linux/libps2.h | |||
| @@ -44,6 +44,9 @@ struct ps2dev { | |||
| 44 | void ps2_init(struct ps2dev *ps2dev, struct serio *serio); | 44 | void ps2_init(struct ps2dev *ps2dev, struct serio *serio); |
| 45 | int ps2_sendbyte(struct ps2dev *ps2dev, unsigned char byte, int timeout); | 45 | int ps2_sendbyte(struct ps2dev *ps2dev, unsigned char byte, int timeout); |
| 46 | void ps2_drain(struct ps2dev *ps2dev, int maxbytes, int timeout); | 46 | void ps2_drain(struct ps2dev *ps2dev, int maxbytes, int timeout); |
| 47 | void ps2_begin_command(struct ps2dev *ps2dev); | ||
| 48 | void ps2_end_command(struct ps2dev *ps2dev); | ||
| 49 | int __ps2_command(struct ps2dev *ps2dev, unsigned char *param, int command); | ||
| 47 | int ps2_command(struct ps2dev *ps2dev, unsigned char *param, int command); | 50 | int ps2_command(struct ps2dev *ps2dev, unsigned char *param, int command); |
| 48 | int ps2_handle_ack(struct ps2dev *ps2dev, unsigned char data); | 51 | int ps2_handle_ack(struct ps2dev *ps2dev, unsigned char data); |
| 49 | int ps2_handle_response(struct ps2dev *ps2dev, unsigned char data); | 52 | int ps2_handle_response(struct ps2dev *ps2dev, unsigned char data); |
diff --git a/include/linux/linkage.h b/include/linux/linkage.h index 691f59171c6c..5126cceb6ae9 100644 --- a/include/linux/linkage.h +++ b/include/linux/linkage.h | |||
| @@ -57,6 +57,7 @@ | |||
| 57 | 57 | ||
| 58 | #ifdef __ASSEMBLY__ | 58 | #ifdef __ASSEMBLY__ |
| 59 | 59 | ||
| 60 | #ifndef LINKER_SCRIPT | ||
| 60 | #define ALIGN __ALIGN | 61 | #define ALIGN __ALIGN |
| 61 | #define ALIGN_STR __ALIGN_STR | 62 | #define ALIGN_STR __ALIGN_STR |
| 62 | 63 | ||
| @@ -66,6 +67,7 @@ | |||
| 66 | ALIGN; \ | 67 | ALIGN; \ |
| 67 | name: | 68 | name: |
| 68 | #endif | 69 | #endif |
| 70 | #endif /* LINKER_SCRIPT */ | ||
| 69 | 71 | ||
| 70 | #ifndef WEAK | 72 | #ifndef WEAK |
| 71 | #define WEAK(name) \ | 73 | #define WEAK(name) \ |
diff --git a/include/linux/lis3lv02d.h b/include/linux/lis3lv02d.h index ad651f4e45ac..3cc2f2c53e4c 100644 --- a/include/linux/lis3lv02d.h +++ b/include/linux/lis3lv02d.h | |||
| @@ -32,8 +32,17 @@ struct lis3lv02d_platform_data { | |||
| 32 | #define LIS3_IRQ2_DATA_READY (4 << 3) | 32 | #define LIS3_IRQ2_DATA_READY (4 << 3) |
| 33 | #define LIS3_IRQ2_CLICK (7 << 3) | 33 | #define LIS3_IRQ2_CLICK (7 << 3) |
| 34 | #define LIS3_IRQ_OPEN_DRAIN (1 << 6) | 34 | #define LIS3_IRQ_OPEN_DRAIN (1 << 6) |
| 35 | #define LIS3_IRQ_ACTIVE_HIGH (1 << 7) | 35 | #define LIS3_IRQ_ACTIVE_LOW (1 << 7) |
| 36 | unsigned char irq_cfg; | 36 | unsigned char irq_cfg; |
| 37 | |||
| 38 | #define LIS3_WAKEUP_X_LO (1 << 0) | ||
| 39 | #define LIS3_WAKEUP_X_HI (1 << 1) | ||
| 40 | #define LIS3_WAKEUP_Y_LO (1 << 2) | ||
| 41 | #define LIS3_WAKEUP_Y_HI (1 << 3) | ||
| 42 | #define LIS3_WAKEUP_Z_LO (1 << 4) | ||
| 43 | #define LIS3_WAKEUP_Z_HI (1 << 5) | ||
| 44 | unsigned char wakeup_flags; | ||
| 45 | unsigned char wakeup_thresh; | ||
| 37 | }; | 46 | }; |
| 38 | 47 | ||
| 39 | #endif /* __LIS3LV02D_H_ */ | 48 | #endif /* __LIS3LV02D_H_ */ |
diff --git a/include/linux/lockd/lockd.h b/include/linux/lockd/lockd.h index c325b187966b..a34dea46b629 100644 --- a/include/linux/lockd/lockd.h +++ b/include/linux/lockd/lockd.h | |||
| @@ -338,49 +338,6 @@ static inline int nlm_privileged_requester(const struct svc_rqst *rqstp) | |||
| 338 | } | 338 | } |
| 339 | } | 339 | } |
| 340 | 340 | ||
| 341 | static inline int __nlm_cmp_addr4(const struct sockaddr *sap1, | ||
| 342 | const struct sockaddr *sap2) | ||
| 343 | { | ||
| 344 | const struct sockaddr_in *sin1 = (const struct sockaddr_in *)sap1; | ||
| 345 | const struct sockaddr_in *sin2 = (const struct sockaddr_in *)sap2; | ||
| 346 | return sin1->sin_addr.s_addr == sin2->sin_addr.s_addr; | ||
| 347 | } | ||
| 348 | |||
| 349 | #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) | ||
| 350 | static inline int __nlm_cmp_addr6(const struct sockaddr *sap1, | ||
| 351 | const struct sockaddr *sap2) | ||
| 352 | { | ||
| 353 | const struct sockaddr_in6 *sin1 = (const struct sockaddr_in6 *)sap1; | ||
| 354 | const struct sockaddr_in6 *sin2 = (const struct sockaddr_in6 *)sap2; | ||
| 355 | return ipv6_addr_equal(&sin1->sin6_addr, &sin2->sin6_addr); | ||
| 356 | } | ||
| 357 | #else /* !(CONFIG_IPV6 || CONFIG_IPV6_MODULE) */ | ||
| 358 | static inline int __nlm_cmp_addr6(const struct sockaddr *sap1, | ||
| 359 | const struct sockaddr *sap2) | ||
| 360 | { | ||
| 361 | return 0; | ||
| 362 | } | ||
| 363 | #endif /* !(CONFIG_IPV6 || CONFIG_IPV6_MODULE) */ | ||
| 364 | |||
| 365 | /* | ||
| 366 | * Compare two host addresses | ||
| 367 | * | ||
| 368 | * Return TRUE if the addresses are the same; otherwise FALSE. | ||
| 369 | */ | ||
| 370 | static inline int nlm_cmp_addr(const struct sockaddr *sap1, | ||
| 371 | const struct sockaddr *sap2) | ||
| 372 | { | ||
| 373 | if (sap1->sa_family == sap2->sa_family) { | ||
| 374 | switch (sap1->sa_family) { | ||
| 375 | case AF_INET: | ||
| 376 | return __nlm_cmp_addr4(sap1, sap2); | ||
| 377 | case AF_INET6: | ||
| 378 | return __nlm_cmp_addr6(sap1, sap2); | ||
| 379 | } | ||
| 380 | } | ||
| 381 | return 0; | ||
| 382 | } | ||
| 383 | |||
| 384 | /* | 341 | /* |
| 385 | * Compare two NLM locks. | 342 | * Compare two NLM locks. |
| 386 | * When the second lock is of type F_UNLCK, this acts like a wildcard. | 343 | * When the second lock is of type F_UNLCK, this acts like a wildcard. |
| @@ -395,7 +352,7 @@ static inline int nlm_compare_locks(const struct file_lock *fl1, | |||
| 395 | &&(fl1->fl_type == fl2->fl_type || fl2->fl_type == F_UNLCK); | 352 | &&(fl1->fl_type == fl2->fl_type || fl2->fl_type == F_UNLCK); |
| 396 | } | 353 | } |
| 397 | 354 | ||
| 398 | extern struct lock_manager_operations nlmsvc_lock_operations; | 355 | extern const struct lock_manager_operations nlmsvc_lock_operations; |
| 399 | 356 | ||
| 400 | #endif /* __KERNEL__ */ | 357 | #endif /* __KERNEL__ */ |
| 401 | 358 | ||
diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h index b25d1b53df0d..9ccf0e286b2a 100644 --- a/include/linux/lockdep.h +++ b/include/linux/lockdep.h | |||
| @@ -149,6 +149,12 @@ struct lock_list { | |||
| 149 | struct lock_class *class; | 149 | struct lock_class *class; |
| 150 | struct stack_trace trace; | 150 | struct stack_trace trace; |
| 151 | int distance; | 151 | int distance; |
| 152 | |||
| 153 | /* | ||
| 154 | * The parent field is used to implement breadth-first search, and the | ||
| 155 | * bit 0 is reused to indicate if the lock has been accessed in BFS. | ||
| 156 | */ | ||
| 157 | struct lock_list *parent; | ||
| 152 | }; | 158 | }; |
| 153 | 159 | ||
| 154 | /* | 160 | /* |
| @@ -208,10 +214,12 @@ struct held_lock { | |||
| 208 | * interrupt context: | 214 | * interrupt context: |
| 209 | */ | 215 | */ |
| 210 | unsigned int irq_context:2; /* bit 0 - soft, bit 1 - hard */ | 216 | unsigned int irq_context:2; /* bit 0 - soft, bit 1 - hard */ |
| 211 | unsigned int trylock:1; | 217 | unsigned int trylock:1; /* 16 bits */ |
| 218 | |||
| 212 | unsigned int read:2; /* see lock_acquire() comment */ | 219 | unsigned int read:2; /* see lock_acquire() comment */ |
| 213 | unsigned int check:2; /* see lock_acquire() comment */ | 220 | unsigned int check:2; /* see lock_acquire() comment */ |
| 214 | unsigned int hardirqs_off:1; | 221 | unsigned int hardirqs_off:1; |
| 222 | unsigned int references:11; /* 32 bits */ | ||
| 215 | }; | 223 | }; |
| 216 | 224 | ||
| 217 | /* | 225 | /* |
| @@ -291,6 +299,10 @@ extern void lock_acquire(struct lockdep_map *lock, unsigned int subclass, | |||
| 291 | extern void lock_release(struct lockdep_map *lock, int nested, | 299 | extern void lock_release(struct lockdep_map *lock, int nested, |
| 292 | unsigned long ip); | 300 | unsigned long ip); |
| 293 | 301 | ||
| 302 | #define lockdep_is_held(lock) lock_is_held(&(lock)->dep_map) | ||
| 303 | |||
| 304 | extern int lock_is_held(struct lockdep_map *lock); | ||
| 305 | |||
| 294 | extern void lock_set_class(struct lockdep_map *lock, const char *name, | 306 | extern void lock_set_class(struct lockdep_map *lock, const char *name, |
| 295 | struct lock_class_key *key, unsigned int subclass, | 307 | struct lock_class_key *key, unsigned int subclass, |
| 296 | unsigned long ip); | 308 | unsigned long ip); |
| @@ -309,6 +321,8 @@ extern void lockdep_trace_alloc(gfp_t mask); | |||
| 309 | 321 | ||
| 310 | #define lockdep_depth(tsk) (debug_locks ? (tsk)->lockdep_depth : 0) | 322 | #define lockdep_depth(tsk) (debug_locks ? (tsk)->lockdep_depth : 0) |
| 311 | 323 | ||
| 324 | #define lockdep_assert_held(l) WARN_ON(debug_locks && !lockdep_is_held(l)) | ||
| 325 | |||
| 312 | #else /* !LOCKDEP */ | 326 | #else /* !LOCKDEP */ |
| 313 | 327 | ||
| 314 | static inline void lockdep_off(void) | 328 | static inline void lockdep_off(void) |
| @@ -353,6 +367,8 @@ struct lock_class_key { }; | |||
| 353 | 367 | ||
| 354 | #define lockdep_depth(tsk) (0) | 368 | #define lockdep_depth(tsk) (0) |
| 355 | 369 | ||
| 370 | #define lockdep_assert_held(l) do { } while (0) | ||
| 371 | |||
| 356 | #endif /* !LOCKDEP */ | 372 | #endif /* !LOCKDEP */ |
| 357 | 373 | ||
| 358 | #ifdef CONFIG_LOCK_STAT | 374 | #ifdef CONFIG_LOCK_STAT |
diff --git a/include/linux/lsm_audit.h b/include/linux/lsm_audit.h index e461b2c3d711..f78f83d7663f 100644 --- a/include/linux/lsm_audit.h +++ b/include/linux/lsm_audit.h | |||
| @@ -26,13 +26,15 @@ | |||
| 26 | 26 | ||
| 27 | /* Auxiliary data to use in generating the audit record. */ | 27 | /* Auxiliary data to use in generating the audit record. */ |
| 28 | struct common_audit_data { | 28 | struct common_audit_data { |
| 29 | char type; | 29 | char type; |
| 30 | #define LSM_AUDIT_DATA_FS 1 | 30 | #define LSM_AUDIT_DATA_FS 1 |
| 31 | #define LSM_AUDIT_DATA_NET 2 | 31 | #define LSM_AUDIT_DATA_NET 2 |
| 32 | #define LSM_AUDIT_DATA_CAP 3 | 32 | #define LSM_AUDIT_DATA_CAP 3 |
| 33 | #define LSM_AUDIT_DATA_IPC 4 | 33 | #define LSM_AUDIT_DATA_IPC 4 |
| 34 | #define LSM_AUDIT_DATA_TASK 5 | 34 | #define LSM_AUDIT_DATA_TASK 5 |
| 35 | #define LSM_AUDIT_DATA_KEY 6 | 35 | #define LSM_AUDIT_DATA_KEY 6 |
| 36 | #define LSM_AUDIT_NO_AUDIT 7 | ||
| 37 | #define LSM_AUDIT_DATA_KMOD 8 | ||
| 36 | struct task_struct *tsk; | 38 | struct task_struct *tsk; |
| 37 | union { | 39 | union { |
| 38 | struct { | 40 | struct { |
| @@ -65,17 +67,21 @@ struct common_audit_data { | |||
| 65 | char *key_desc; | 67 | char *key_desc; |
| 66 | } key_struct; | 68 | } key_struct; |
| 67 | #endif | 69 | #endif |
| 70 | char *kmod_name; | ||
| 68 | } u; | 71 | } u; |
| 69 | const char *function; | ||
| 70 | /* this union contains LSM specific data */ | 72 | /* this union contains LSM specific data */ |
| 71 | union { | 73 | union { |
| 74 | #ifdef CONFIG_SECURITY_SMACK | ||
| 72 | /* SMACK data */ | 75 | /* SMACK data */ |
| 73 | struct smack_audit_data { | 76 | struct smack_audit_data { |
| 77 | const char *function; | ||
| 74 | char *subject; | 78 | char *subject; |
| 75 | char *object; | 79 | char *object; |
| 76 | char *request; | 80 | char *request; |
| 77 | int result; | 81 | int result; |
| 78 | } smack_audit_data; | 82 | } smack_audit_data; |
| 83 | #endif | ||
| 84 | #ifdef CONFIG_SECURITY_SELINUX | ||
| 79 | /* SELinux data */ | 85 | /* SELinux data */ |
| 80 | struct { | 86 | struct { |
| 81 | u32 ssid; | 87 | u32 ssid; |
| @@ -83,10 +89,12 @@ struct common_audit_data { | |||
| 83 | u16 tclass; | 89 | u16 tclass; |
| 84 | u32 requested; | 90 | u32 requested; |
| 85 | u32 audited; | 91 | u32 audited; |
| 92 | u32 denied; | ||
| 86 | struct av_decision *avd; | 93 | struct av_decision *avd; |
| 87 | int result; | 94 | int result; |
| 88 | } selinux_audit_data; | 95 | } selinux_audit_data; |
| 89 | } lsm_priv; | 96 | #endif |
| 97 | }; | ||
| 90 | /* these callback will be implemented by a specific LSM */ | 98 | /* these callback will be implemented by a specific LSM */ |
| 91 | void (*lsm_pre_audit)(struct audit_buffer *, void *); | 99 | void (*lsm_pre_audit)(struct audit_buffer *, void *); |
| 92 | void (*lsm_post_audit)(struct audit_buffer *, void *); | 100 | void (*lsm_post_audit)(struct audit_buffer *, void *); |
| @@ -104,7 +112,7 @@ int ipv6_skb_to_auditdata(struct sk_buff *skb, | |||
| 104 | /* Initialize an LSM audit data structure. */ | 112 | /* Initialize an LSM audit data structure. */ |
| 105 | #define COMMON_AUDIT_DATA_INIT(_d, _t) \ | 113 | #define COMMON_AUDIT_DATA_INIT(_d, _t) \ |
| 106 | { memset((_d), 0, sizeof(struct common_audit_data)); \ | 114 | { memset((_d), 0, sizeof(struct common_audit_data)); \ |
| 107 | (_d)->type = LSM_AUDIT_DATA_##_t; (_d)->function = __func__; } | 115 | (_d)->type = LSM_AUDIT_DATA_##_t; } |
| 108 | 116 | ||
| 109 | void common_lsm_audit(struct common_audit_data *a); | 117 | void common_lsm_audit(struct common_audit_data *a); |
| 110 | 118 | ||
diff --git a/include/linux/mISDNhw.h b/include/linux/mISDNhw.h index 7f9831da847f..4af841408fb5 100644 --- a/include/linux/mISDNhw.h +++ b/include/linux/mISDNhw.h | |||
| @@ -168,6 +168,7 @@ struct bchannel { | |||
| 168 | extern int mISDN_initdchannel(struct dchannel *, int, void *); | 168 | extern int mISDN_initdchannel(struct dchannel *, int, void *); |
| 169 | extern int mISDN_initbchannel(struct bchannel *, int); | 169 | extern int mISDN_initbchannel(struct bchannel *, int); |
| 170 | extern int mISDN_freedchannel(struct dchannel *); | 170 | extern int mISDN_freedchannel(struct dchannel *); |
| 171 | extern void mISDN_clear_bchannel(struct bchannel *); | ||
| 171 | extern int mISDN_freebchannel(struct bchannel *); | 172 | extern int mISDN_freebchannel(struct bchannel *); |
| 172 | extern void queue_ch_frame(struct mISDNchannel *, u_int, | 173 | extern void queue_ch_frame(struct mISDNchannel *, u_int, |
| 173 | int, struct sk_buff *); | 174 | int, struct sk_buff *); |
diff --git a/include/linux/mISDNif.h b/include/linux/mISDNif.h index 45100b39a7cf..78c3bed1c3f5 100644 --- a/include/linux/mISDNif.h +++ b/include/linux/mISDNif.h | |||
| @@ -37,7 +37,7 @@ | |||
| 37 | */ | 37 | */ |
| 38 | #define MISDN_MAJOR_VERSION 1 | 38 | #define MISDN_MAJOR_VERSION 1 |
| 39 | #define MISDN_MINOR_VERSION 1 | 39 | #define MISDN_MINOR_VERSION 1 |
| 40 | #define MISDN_RELEASE 20 | 40 | #define MISDN_RELEASE 21 |
| 41 | 41 | ||
| 42 | /* primitives for information exchange | 42 | /* primitives for information exchange |
| 43 | * generell format | 43 | * generell format |
| @@ -104,7 +104,7 @@ | |||
| 104 | #define DL_UNITDATA_IND 0x3108 | 104 | #define DL_UNITDATA_IND 0x3108 |
| 105 | #define DL_INFORMATION_IND 0x0008 | 105 | #define DL_INFORMATION_IND 0x0008 |
| 106 | 106 | ||
| 107 | /* intern layer 2 managment */ | 107 | /* intern layer 2 management */ |
| 108 | #define MDL_ASSIGN_REQ 0x1804 | 108 | #define MDL_ASSIGN_REQ 0x1804 |
| 109 | #define MDL_ASSIGN_IND 0x1904 | 109 | #define MDL_ASSIGN_IND 0x1904 |
| 110 | #define MDL_REMOVE_REQ 0x1A04 | 110 | #define MDL_REMOVE_REQ 0x1A04 |
| @@ -153,6 +153,18 @@ | |||
| 153 | #define HFC_VOL_CHANGE_RX 0x2602 | 153 | #define HFC_VOL_CHANGE_RX 0x2602 |
| 154 | #define HFC_SPL_LOOP_ON 0x2603 | 154 | #define HFC_SPL_LOOP_ON 0x2603 |
| 155 | #define HFC_SPL_LOOP_OFF 0x2604 | 155 | #define HFC_SPL_LOOP_OFF 0x2604 |
| 156 | /* for T30 FAX and analog modem */ | ||
| 157 | #define HW_MOD_FRM 0x4000 | ||
| 158 | #define HW_MOD_FRH 0x4001 | ||
| 159 | #define HW_MOD_FTM 0x4002 | ||
| 160 | #define HW_MOD_FTH 0x4003 | ||
| 161 | #define HW_MOD_FTS 0x4004 | ||
| 162 | #define HW_MOD_CONNECT 0x4010 | ||
| 163 | #define HW_MOD_OK 0x4011 | ||
| 164 | #define HW_MOD_NOCARR 0x4012 | ||
| 165 | #define HW_MOD_FCERROR 0x4013 | ||
| 166 | #define HW_MOD_READY 0x4014 | ||
| 167 | #define HW_MOD_LASTDATA 0x4015 | ||
| 156 | 168 | ||
| 157 | /* DSP_TONE_PATT_ON parameter */ | 169 | /* DSP_TONE_PATT_ON parameter */ |
| 158 | #define TONE_OFF 0x0000 | 170 | #define TONE_OFF 0x0000 |
| @@ -224,6 +236,8 @@ | |||
| 224 | #define ISDN_P_B_L2DTMF 0x24 | 236 | #define ISDN_P_B_L2DTMF 0x24 |
| 225 | #define ISDN_P_B_L2DSP 0x25 | 237 | #define ISDN_P_B_L2DSP 0x25 |
| 226 | #define ISDN_P_B_L2DSPHDLC 0x26 | 238 | #define ISDN_P_B_L2DSPHDLC 0x26 |
| 239 | #define ISDN_P_B_T30_FAX 0x27 | ||
| 240 | #define ISDN_P_B_MODEM_ASYNC 0x28 | ||
| 227 | 241 | ||
| 228 | #define OPTION_L2_PMX 1 | 242 | #define OPTION_L2_PMX 1 |
| 229 | #define OPTION_L2_PTP 2 | 243 | #define OPTION_L2_PTP 2 |
diff --git a/include/linux/magic.h b/include/linux/magic.h index 1923327b9869..76285e01b39e 100644 --- a/include/linux/magic.h +++ b/include/linux/magic.h | |||
| @@ -12,7 +12,9 @@ | |||
| 12 | #define SYSFS_MAGIC 0x62656572 | 12 | #define SYSFS_MAGIC 0x62656572 |
| 13 | #define SECURITYFS_MAGIC 0x73636673 | 13 | #define SECURITYFS_MAGIC 0x73636673 |
| 14 | #define SELINUX_MAGIC 0xf97cff8c | 14 | #define SELINUX_MAGIC 0xf97cff8c |
| 15 | #define RAMFS_MAGIC 0x858458f6 /* some random number */ | ||
| 15 | #define TMPFS_MAGIC 0x01021994 | 16 | #define TMPFS_MAGIC 0x01021994 |
| 17 | #define HUGETLBFS_MAGIC 0x958458f6 /* some random number */ | ||
| 16 | #define SQUASHFS_MAGIC 0x73717368 | 18 | #define SQUASHFS_MAGIC 0x73717368 |
| 17 | #define EFS_SUPER_MAGIC 0x414A53 | 19 | #define EFS_SUPER_MAGIC 0x414A53 |
| 18 | #define EXT2_SUPER_MAGIC 0xEF53 | 20 | #define EXT2_SUPER_MAGIC 0xEF53 |
| @@ -53,4 +55,8 @@ | |||
| 53 | #define INOTIFYFS_SUPER_MAGIC 0x2BAD1DEA | 55 | #define INOTIFYFS_SUPER_MAGIC 0x2BAD1DEA |
| 54 | 56 | ||
| 55 | #define STACK_END_MAGIC 0x57AC6E9D | 57 | #define STACK_END_MAGIC 0x57AC6E9D |
| 58 | |||
| 59 | #define DEVPTS_SUPER_MAGIC 0x1cd1 | ||
| 60 | #define SOCKFS_MAGIC 0x534F434B | ||
| 61 | |||
| 56 | #endif /* __LINUX_MAGIC_H__ */ | 62 | #endif /* __LINUX_MAGIC_H__ */ |
diff --git a/include/linux/marker.h b/include/linux/marker.h deleted file mode 100644 index b85e74ca782f..000000000000 --- a/include/linux/marker.h +++ /dev/null | |||
| @@ -1,221 +0,0 @@ | |||
| 1 | #ifndef _LINUX_MARKER_H | ||
| 2 | #define _LINUX_MARKER_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * Code markup for dynamic and static tracing. | ||
| 6 | * | ||
| 7 | * See Documentation/marker.txt. | ||
| 8 | * | ||
| 9 | * (C) Copyright 2006 Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca> | ||
| 10 | * | ||
| 11 | * This file is released under the GPLv2. | ||
| 12 | * See the file COPYING for more details. | ||
| 13 | */ | ||
| 14 | |||
| 15 | #include <stdarg.h> | ||
| 16 | #include <linux/types.h> | ||
| 17 | |||
| 18 | struct module; | ||
| 19 | struct marker; | ||
| 20 | |||
| 21 | /** | ||
| 22 | * marker_probe_func - Type of a marker probe function | ||
| 23 | * @probe_private: probe private data | ||
| 24 | * @call_private: call site private data | ||
| 25 | * @fmt: format string | ||
| 26 | * @args: variable argument list pointer. Use a pointer to overcome C's | ||
| 27 | * inability to pass this around as a pointer in a portable manner in | ||
| 28 | * the callee otherwise. | ||
| 29 | * | ||
| 30 | * Type of marker probe functions. They receive the mdata and need to parse the | ||
| 31 | * format string to recover the variable argument list. | ||
| 32 | */ | ||
| 33 | typedef void marker_probe_func(void *probe_private, void *call_private, | ||
| 34 | const char *fmt, va_list *args); | ||
| 35 | |||
| 36 | struct marker_probe_closure { | ||
| 37 | marker_probe_func *func; /* Callback */ | ||
| 38 | void *probe_private; /* Private probe data */ | ||
| 39 | }; | ||
| 40 | |||
| 41 | struct marker { | ||
| 42 | const char *name; /* Marker name */ | ||
| 43 | const char *format; /* Marker format string, describing the | ||
| 44 | * variable argument list. | ||
| 45 | */ | ||
| 46 | char state; /* Marker state. */ | ||
| 47 | char ptype; /* probe type : 0 : single, 1 : multi */ | ||
| 48 | /* Probe wrapper */ | ||
| 49 | void (*call)(const struct marker *mdata, void *call_private, ...); | ||
| 50 | struct marker_probe_closure single; | ||
| 51 | struct marker_probe_closure *multi; | ||
| 52 | const char *tp_name; /* Optional tracepoint name */ | ||
| 53 | void *tp_cb; /* Optional tracepoint callback */ | ||
| 54 | } __attribute__((aligned(8))); | ||
| 55 | |||
| 56 | #ifdef CONFIG_MARKERS | ||
| 57 | |||
| 58 | #define _DEFINE_MARKER(name, tp_name_str, tp_cb, format) \ | ||
| 59 | static const char __mstrtab_##name[] \ | ||
| 60 | __attribute__((section("__markers_strings"))) \ | ||
| 61 | = #name "\0" format; \ | ||
| 62 | static struct marker __mark_##name \ | ||
| 63 | __attribute__((section("__markers"), aligned(8))) = \ | ||
| 64 | { __mstrtab_##name, &__mstrtab_##name[sizeof(#name)], \ | ||
| 65 | 0, 0, marker_probe_cb, { __mark_empty_function, NULL},\ | ||
| 66 | NULL, tp_name_str, tp_cb } | ||
| 67 | |||
| 68 | #define DEFINE_MARKER(name, format) \ | ||
| 69 | _DEFINE_MARKER(name, NULL, NULL, format) | ||
| 70 | |||
| 71 | #define DEFINE_MARKER_TP(name, tp_name, tp_cb, format) \ | ||
| 72 | _DEFINE_MARKER(name, #tp_name, tp_cb, format) | ||
| 73 | |||
| 74 | /* | ||
| 75 | * Note : the empty asm volatile with read constraint is used here instead of a | ||
| 76 | * "used" attribute to fix a gcc 4.1.x bug. | ||
| 77 | * Make sure the alignment of the structure in the __markers section will | ||
| 78 | * not add unwanted padding between the beginning of the section and the | ||
| 79 | * structure. Force alignment to the same alignment as the section start. | ||
| 80 | * | ||
| 81 | * The "generic" argument controls which marker enabling mechanism must be used. | ||
| 82 | * If generic is true, a variable read is used. | ||
| 83 | * If generic is false, immediate values are used. | ||
| 84 | */ | ||
| 85 | #define __trace_mark(generic, name, call_private, format, args...) \ | ||
| 86 | do { \ | ||
| 87 | DEFINE_MARKER(name, format); \ | ||
| 88 | __mark_check_format(format, ## args); \ | ||
| 89 | if (unlikely(__mark_##name.state)) { \ | ||
| 90 | (*__mark_##name.call) \ | ||
| 91 | (&__mark_##name, call_private, ## args);\ | ||
| 92 | } \ | ||
| 93 | } while (0) | ||
| 94 | |||
| 95 | #define __trace_mark_tp(name, call_private, tp_name, tp_cb, format, args...) \ | ||
| 96 | do { \ | ||
| 97 | void __check_tp_type(void) \ | ||
| 98 | { \ | ||
| 99 | register_trace_##tp_name(tp_cb); \ | ||
| 100 | } \ | ||
| 101 | DEFINE_MARKER_TP(name, tp_name, tp_cb, format); \ | ||
| 102 | __mark_check_format(format, ## args); \ | ||
| 103 | (*__mark_##name.call)(&__mark_##name, call_private, \ | ||
| 104 | ## args); \ | ||
| 105 | } while (0) | ||
| 106 | |||
| 107 | extern void marker_update_probe_range(struct marker *begin, | ||
| 108 | struct marker *end); | ||
| 109 | |||
| 110 | #define GET_MARKER(name) (__mark_##name) | ||
| 111 | |||
| 112 | #else /* !CONFIG_MARKERS */ | ||
| 113 | #define DEFINE_MARKER(name, tp_name, tp_cb, format) | ||
| 114 | #define __trace_mark(generic, name, call_private, format, args...) \ | ||
| 115 | __mark_check_format(format, ## args) | ||
| 116 | #define __trace_mark_tp(name, call_private, tp_name, tp_cb, format, args...) \ | ||
| 117 | do { \ | ||
| 118 | void __check_tp_type(void) \ | ||
| 119 | { \ | ||
| 120 | register_trace_##tp_name(tp_cb); \ | ||
| 121 | } \ | ||
| 122 | __mark_check_format(format, ## args); \ | ||
| 123 | } while (0) | ||
| 124 | static inline void marker_update_probe_range(struct marker *begin, | ||
| 125 | struct marker *end) | ||
| 126 | { } | ||
| 127 | #define GET_MARKER(name) | ||
| 128 | #endif /* CONFIG_MARKERS */ | ||
| 129 | |||
| 130 | /** | ||
| 131 | * trace_mark - Marker using code patching | ||
| 132 | * @name: marker name, not quoted. | ||
| 133 | * @format: format string | ||
| 134 | * @args...: variable argument list | ||
| 135 | * | ||
| 136 | * Places a marker using optimized code patching technique (imv_read()) | ||
| 137 | * to be enabled when immediate values are present. | ||
| 138 | */ | ||
| 139 | #define trace_mark(name, format, args...) \ | ||
| 140 | __trace_mark(0, name, NULL, format, ## args) | ||
| 141 | |||
| 142 | /** | ||
| 143 | * _trace_mark - Marker using variable read | ||
| 144 | * @name: marker name, not quoted. | ||
| 145 | * @format: format string | ||
| 146 | * @args...: variable argument list | ||
| 147 | * | ||
| 148 | * Places a marker using a standard memory read (_imv_read()) to be | ||
| 149 | * enabled. Should be used for markers in code paths where instruction | ||
| 150 | * modification based enabling is not welcome. (__init and __exit functions, | ||
| 151 | * lockdep, some traps, printk). | ||
| 152 | */ | ||
| 153 | #define _trace_mark(name, format, args...) \ | ||
| 154 | __trace_mark(1, name, NULL, format, ## args) | ||
| 155 | |||
| 156 | /** | ||
| 157 | * trace_mark_tp - Marker in a tracepoint callback | ||
| 158 | * @name: marker name, not quoted. | ||
| 159 | * @tp_name: tracepoint name, not quoted. | ||
| 160 | * @tp_cb: tracepoint callback. Should have an associated global symbol so it | ||
| 161 | * is not optimized away by the compiler (should not be static). | ||
| 162 | * @format: format string | ||
| 163 | * @args...: variable argument list | ||
| 164 | * | ||
| 165 | * Places a marker in a tracepoint callback. | ||
| 166 | */ | ||
| 167 | #define trace_mark_tp(name, tp_name, tp_cb, format, args...) \ | ||
| 168 | __trace_mark_tp(name, NULL, tp_name, tp_cb, format, ## args) | ||
| 169 | |||
| 170 | /** | ||
| 171 | * MARK_NOARGS - Format string for a marker with no argument. | ||
| 172 | */ | ||
| 173 | #define MARK_NOARGS " " | ||
| 174 | |||
| 175 | /* To be used for string format validity checking with gcc */ | ||
| 176 | static inline void __printf(1, 2) ___mark_check_format(const char *fmt, ...) | ||
| 177 | { | ||
| 178 | } | ||
| 179 | |||
| 180 | #define __mark_check_format(format, args...) \ | ||
| 181 | do { \ | ||
| 182 | if (0) \ | ||
| 183 | ___mark_check_format(format, ## args); \ | ||
| 184 | } while (0) | ||
| 185 | |||
| 186 | extern marker_probe_func __mark_empty_function; | ||
| 187 | |||
| 188 | extern void marker_probe_cb(const struct marker *mdata, | ||
| 189 | void *call_private, ...); | ||
| 190 | |||
| 191 | /* | ||
| 192 | * Connect a probe to a marker. | ||
| 193 | * private data pointer must be a valid allocated memory address, or NULL. | ||
| 194 | */ | ||
| 195 | extern int marker_probe_register(const char *name, const char *format, | ||
| 196 | marker_probe_func *probe, void *probe_private); | ||
| 197 | |||
| 198 | /* | ||
| 199 | * Returns the private data given to marker_probe_register. | ||
| 200 | */ | ||
| 201 | extern int marker_probe_unregister(const char *name, | ||
| 202 | marker_probe_func *probe, void *probe_private); | ||
| 203 | /* | ||
| 204 | * Unregister a marker by providing the registered private data. | ||
| 205 | */ | ||
| 206 | extern int marker_probe_unregister_private_data(marker_probe_func *probe, | ||
| 207 | void *probe_private); | ||
| 208 | |||
| 209 | extern void *marker_get_private_data(const char *name, marker_probe_func *probe, | ||
| 210 | int num); | ||
| 211 | |||
| 212 | /* | ||
| 213 | * marker_synchronize_unregister must be called between the last marker probe | ||
| 214 | * unregistration and the first one of | ||
| 215 | * - the end of module exit function | ||
| 216 | * - the free of any resource used by the probes | ||
| 217 | * to ensure the code and data are valid for any possibly running probes. | ||
| 218 | */ | ||
| 219 | #define marker_synchronize_unregister() synchronize_sched() | ||
| 220 | |||
| 221 | #endif | ||
diff --git a/include/linux/mdio.h b/include/linux/mdio.h index cfdf1df2875e..c779b49a1fda 100644 --- a/include/linux/mdio.h +++ b/include/linux/mdio.h | |||
| @@ -304,7 +304,7 @@ static inline __u16 mdio_phy_id_devad(int phy_id) | |||
| 304 | */ | 304 | */ |
| 305 | struct mdio_if_info { | 305 | struct mdio_if_info { |
| 306 | int prtad; | 306 | int prtad; |
| 307 | u32 __bitwise mmds; | 307 | u32 mmds; |
| 308 | unsigned mode_support; | 308 | unsigned mode_support; |
| 309 | 309 | ||
| 310 | struct net_device *dev; | 310 | struct net_device *dev; |
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index e46a0734ab6e..bf9213b2db8f 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h | |||
| @@ -118,6 +118,9 @@ static inline bool mem_cgroup_disabled(void) | |||
| 118 | 118 | ||
| 119 | extern bool mem_cgroup_oom_called(struct task_struct *task); | 119 | extern bool mem_cgroup_oom_called(struct task_struct *task); |
| 120 | void mem_cgroup_update_mapped_file_stat(struct page *page, int val); | 120 | void mem_cgroup_update_mapped_file_stat(struct page *page, int val); |
| 121 | unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order, | ||
| 122 | gfp_t gfp_mask, int nid, | ||
| 123 | int zid); | ||
| 121 | #else /* CONFIG_CGROUP_MEM_RES_CTLR */ | 124 | #else /* CONFIG_CGROUP_MEM_RES_CTLR */ |
| 122 | struct mem_cgroup; | 125 | struct mem_cgroup; |
| 123 | 126 | ||
| @@ -276,6 +279,13 @@ static inline void mem_cgroup_update_mapped_file_stat(struct page *page, | |||
| 276 | { | 279 | { |
| 277 | } | 280 | } |
| 278 | 281 | ||
| 282 | static inline | ||
| 283 | unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order, | ||
| 284 | gfp_t gfp_mask, int nid, int zid) | ||
| 285 | { | ||
| 286 | return 0; | ||
| 287 | } | ||
| 288 | |||
| 279 | #endif /* CONFIG_CGROUP_MEM_CONT */ | 289 | #endif /* CONFIG_CGROUP_MEM_CONT */ |
| 280 | 290 | ||
| 281 | #endif /* _LINUX_MEMCONTROL_H */ | 291 | #endif /* _LINUX_MEMCONTROL_H */ |
diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h index d95f72e79b82..fed969281a41 100644 --- a/include/linux/memory_hotplug.h +++ b/include/linux/memory_hotplug.h | |||
| @@ -191,14 +191,6 @@ static inline void register_page_bootmem_info_node(struct pglist_data *pgdat) | |||
| 191 | 191 | ||
| 192 | #endif /* ! CONFIG_MEMORY_HOTPLUG */ | 192 | #endif /* ! CONFIG_MEMORY_HOTPLUG */ |
| 193 | 193 | ||
| 194 | /* | ||
| 195 | * Walk through all memory which is registered as resource. | ||
| 196 | * arg is (start_pfn, nr_pages, private_arg_pointer) | ||
| 197 | */ | ||
| 198 | extern int walk_memory_resource(unsigned long start_pfn, | ||
| 199 | unsigned long nr_pages, void *arg, | ||
| 200 | int (*func)(unsigned long, unsigned long, void *)); | ||
| 201 | |||
| 202 | #ifdef CONFIG_MEMORY_HOTREMOVE | 194 | #ifdef CONFIG_MEMORY_HOTREMOVE |
| 203 | 195 | ||
| 204 | extern int is_mem_section_removable(unsigned long pfn, unsigned long nr_pages); | 196 | extern int is_mem_section_removable(unsigned long pfn, unsigned long nr_pages); |
diff --git a/include/linux/mempool.h b/include/linux/mempool.h index 9be484d11283..7c08052e3321 100644 --- a/include/linux/mempool.h +++ b/include/linux/mempool.h | |||
| @@ -47,22 +47,16 @@ mempool_create_slab_pool(int min_nr, struct kmem_cache *kc) | |||
| 47 | } | 47 | } |
| 48 | 48 | ||
| 49 | /* | 49 | /* |
| 50 | * 2 mempool_alloc_t's and a mempool_free_t to kmalloc/kzalloc and kfree | 50 | * a mempool_alloc_t and a mempool_free_t to kmalloc and kfree the |
| 51 | * the amount of memory specified by pool_data | 51 | * amount of memory specified by pool_data |
| 52 | */ | 52 | */ |
| 53 | void *mempool_kmalloc(gfp_t gfp_mask, void *pool_data); | 53 | void *mempool_kmalloc(gfp_t gfp_mask, void *pool_data); |
| 54 | void *mempool_kzalloc(gfp_t gfp_mask, void *pool_data); | ||
| 55 | void mempool_kfree(void *element, void *pool_data); | 54 | void mempool_kfree(void *element, void *pool_data); |
| 56 | static inline mempool_t *mempool_create_kmalloc_pool(int min_nr, size_t size) | 55 | static inline mempool_t *mempool_create_kmalloc_pool(int min_nr, size_t size) |
| 57 | { | 56 | { |
| 58 | return mempool_create(min_nr, mempool_kmalloc, mempool_kfree, | 57 | return mempool_create(min_nr, mempool_kmalloc, mempool_kfree, |
| 59 | (void *) size); | 58 | (void *) size); |
| 60 | } | 59 | } |
| 61 | static inline mempool_t *mempool_create_kzalloc_pool(int min_nr, size_t size) | ||
| 62 | { | ||
| 63 | return mempool_create(min_nr, mempool_kzalloc, mempool_kfree, | ||
| 64 | (void *) size); | ||
| 65 | } | ||
| 66 | 60 | ||
| 67 | /* | 61 | /* |
| 68 | * A mempool_alloc_t and mempool_free_t for a simple page allocator that | 62 | * A mempool_alloc_t and mempool_free_t for a simple page allocator that |
diff --git a/include/linux/mfd/ab3100.h b/include/linux/mfd/ab3100.h index 7a3f316e3848..e9aa4c9d749d 100644 --- a/include/linux/mfd/ab3100.h +++ b/include/linux/mfd/ab3100.h | |||
| @@ -6,6 +6,8 @@ | |||
| 6 | */ | 6 | */ |
| 7 | 7 | ||
| 8 | #include <linux/device.h> | 8 | #include <linux/device.h> |
| 9 | #include <linux/workqueue.h> | ||
| 10 | #include <linux/regulator/machine.h> | ||
| 9 | 11 | ||
| 10 | #ifndef MFD_AB3100_H | 12 | #ifndef MFD_AB3100_H |
| 11 | #define MFD_AB3100_H | 13 | #define MFD_AB3100_H |
| @@ -56,6 +58,14 @@ | |||
| 56 | #define AB3100_STR_BATT_REMOVAL (0x40) | 58 | #define AB3100_STR_BATT_REMOVAL (0x40) |
| 57 | #define AB3100_STR_VBUS (0x80) | 59 | #define AB3100_STR_VBUS (0x80) |
| 58 | 60 | ||
| 61 | /* | ||
| 62 | * AB3100 contains 8 regulators, one external regulator controller | ||
| 63 | * and a buck converter, further the LDO E and buck converter can | ||
| 64 | * have separate settings if they are in sleep mode, this is | ||
| 65 | * modeled as a separate regulator. | ||
| 66 | */ | ||
| 67 | #define AB3100_NUM_REGULATORS 10 | ||
| 68 | |||
| 59 | /** | 69 | /** |
| 60 | * struct ab3100 | 70 | * struct ab3100 |
| 61 | * @access_mutex: lock out concurrent accesses to the AB3100 registers | 71 | * @access_mutex: lock out concurrent accesses to the AB3100 registers |
| @@ -86,11 +96,30 @@ struct ab3100 { | |||
| 86 | bool startup_events_read; | 96 | bool startup_events_read; |
| 87 | }; | 97 | }; |
| 88 | 98 | ||
| 89 | int ab3100_set_register(struct ab3100 *ab3100, u8 reg, u8 regval); | 99 | /** |
| 90 | int ab3100_get_register(struct ab3100 *ab3100, u8 reg, u8 *regval); | 100 | * struct ab3100_platform_data |
| 91 | int ab3100_get_register_page(struct ab3100 *ab3100, | 101 | * Data supplied to initialize board connections to the AB3100 |
| 102 | * @reg_constraints: regulator constraints for target board | ||
| 103 | * the order of these constraints are: LDO A, C, D, E, | ||
| 104 | * F, G, H, K, EXT and BUCK. | ||
| 105 | * @reg_initvals: initial values for the regulator registers | ||
| 106 | * plus two sleep settings for LDO E and the BUCK converter. | ||
| 107 | * exactly AB3100_NUM_REGULATORS+2 values must be sent in. | ||
| 108 | * Order: LDO A, C, E, E sleep, F, G, H, K, EXT, BUCK, | ||
| 109 | * BUCK sleep, LDO D. (LDO D need to be initialized last.) | ||
| 110 | * @external_voltage: voltage level of the external regulator. | ||
| 111 | */ | ||
| 112 | struct ab3100_platform_data { | ||
| 113 | struct regulator_init_data reg_constraints[AB3100_NUM_REGULATORS]; | ||
| 114 | u8 reg_initvals[AB3100_NUM_REGULATORS+2]; | ||
| 115 | int external_voltage; | ||
| 116 | }; | ||
| 117 | |||
| 118 | int ab3100_set_register_interruptible(struct ab3100 *ab3100, u8 reg, u8 regval); | ||
| 119 | int ab3100_get_register_interruptible(struct ab3100 *ab3100, u8 reg, u8 *regval); | ||
| 120 | int ab3100_get_register_page_interruptible(struct ab3100 *ab3100, | ||
| 92 | u8 first_reg, u8 *regvals, u8 numregs); | 121 | u8 first_reg, u8 *regvals, u8 numregs); |
| 93 | int ab3100_mask_and_set_register(struct ab3100 *ab3100, | 122 | int ab3100_mask_and_set_register_interruptible(struct ab3100 *ab3100, |
| 94 | u8 reg, u8 andmask, u8 ormask); | 123 | u8 reg, u8 andmask, u8 ormask); |
| 95 | u8 ab3100_get_chip_type(struct ab3100 *ab3100); | 124 | u8 ab3100_get_chip_type(struct ab3100 *ab3100); |
| 96 | int ab3100_event_register(struct ab3100 *ab3100, | 125 | int ab3100_event_register(struct ab3100 *ab3100, |
diff --git a/include/linux/mfd/core.h b/include/linux/mfd/core.h index 49ef857cdb2d..11d740b8831d 100644 --- a/include/linux/mfd/core.h +++ b/include/linux/mfd/core.h | |||
| @@ -23,6 +23,7 @@ | |||
| 23 | */ | 23 | */ |
| 24 | struct mfd_cell { | 24 | struct mfd_cell { |
| 25 | const char *name; | 25 | const char *name; |
| 26 | int id; | ||
| 26 | 27 | ||
| 27 | int (*enable)(struct platform_device *dev); | 28 | int (*enable)(struct platform_device *dev); |
| 28 | int (*disable)(struct platform_device *dev); | 29 | int (*disable)(struct platform_device *dev); |
diff --git a/include/linux/mfd/da903x.h b/include/linux/mfd/da903x.h index 115dbe965082..0aa3a1a49ee3 100644 --- a/include/linux/mfd/da903x.h +++ b/include/linux/mfd/da903x.h | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | #ifndef __LINUX_PMIC_DA903X_H | 1 | #ifndef __LINUX_PMIC_DA903X_H |
| 2 | #define __LINUX_PMIC_DA903X_H | 2 | #define __LINUX_PMIC_DA903X_H |
| 3 | 3 | ||
| 4 | /* Unified sub device IDs for DA9030/DA9034 */ | 4 | /* Unified sub device IDs for DA9030/DA9034/DA9035 */ |
| 5 | enum { | 5 | enum { |
| 6 | DA9030_ID_LED_1, | 6 | DA9030_ID_LED_1, |
| 7 | DA9030_ID_LED_2, | 7 | DA9030_ID_LED_2, |
| @@ -57,6 +57,8 @@ enum { | |||
| 57 | DA9034_ID_LDO13, | 57 | DA9034_ID_LDO13, |
| 58 | DA9034_ID_LDO14, | 58 | DA9034_ID_LDO14, |
| 59 | DA9034_ID_LDO15, | 59 | DA9034_ID_LDO15, |
| 60 | |||
| 61 | DA9035_ID_BUCK3, | ||
| 60 | }; | 62 | }; |
| 61 | 63 | ||
| 62 | /* | 64 | /* |
| @@ -94,6 +96,10 @@ struct da9034_touch_pdata { | |||
| 94 | int y_inverted; | 96 | int y_inverted; |
| 95 | }; | 97 | }; |
| 96 | 98 | ||
| 99 | struct da9034_backlight_pdata { | ||
| 100 | int output_current; /* output current of WLED, from 0-31 (in mA) */ | ||
| 101 | }; | ||
| 102 | |||
| 97 | /* DA9030 battery charger data */ | 103 | /* DA9030 battery charger data */ |
| 98 | struct power_supply_info; | 104 | struct power_supply_info; |
| 99 | 105 | ||
diff --git a/include/linux/mfd/ezx-pcap.h b/include/linux/mfd/ezx-pcap.h index c12c3c0932bf..e5124ceea769 100644 --- a/include/linux/mfd/ezx-pcap.h +++ b/include/linux/mfd/ezx-pcap.h | |||
| @@ -25,9 +25,12 @@ struct pcap_chip; | |||
| 25 | 25 | ||
| 26 | int ezx_pcap_write(struct pcap_chip *, u8, u32); | 26 | int ezx_pcap_write(struct pcap_chip *, u8, u32); |
| 27 | int ezx_pcap_read(struct pcap_chip *, u8, u32 *); | 27 | int ezx_pcap_read(struct pcap_chip *, u8, u32 *); |
| 28 | int ezx_pcap_set_bits(struct pcap_chip *, u8, u32, u32); | ||
| 28 | int pcap_to_irq(struct pcap_chip *, int); | 29 | int pcap_to_irq(struct pcap_chip *, int); |
| 30 | int irq_to_pcap(struct pcap_chip *, int); | ||
| 29 | int pcap_adc_async(struct pcap_chip *, u8, u32, u8[], void *, void *); | 31 | int pcap_adc_async(struct pcap_chip *, u8, u32, u8[], void *, void *); |
| 30 | int pcap_adc_sync(struct pcap_chip *, u8, u32, u8[], u16[]); | 32 | int pcap_adc_sync(struct pcap_chip *, u8, u32, u8[], u16[]); |
| 33 | void pcap_set_ts_bits(struct pcap_chip *, u32); | ||
| 31 | 34 | ||
| 32 | #define PCAP_SECOND_PORT 1 | 35 | #define PCAP_SECOND_PORT 1 |
| 33 | #define PCAP_CS_AH 2 | 36 | #define PCAP_CS_AH 2 |
| @@ -224,7 +227,6 @@ int pcap_adc_sync(struct pcap_chip *, u8, u32, u8[], u16[]); | |||
| 224 | #define PCAP_LED1 1 | 227 | #define PCAP_LED1 1 |
| 225 | #define PCAP_BL0 2 | 228 | #define PCAP_BL0 2 |
| 226 | #define PCAP_BL1 3 | 229 | #define PCAP_BL1 3 |
| 227 | #define PCAP_VIB 4 | ||
| 228 | #define PCAP_LED_3MA 0 | 230 | #define PCAP_LED_3MA 0 |
| 229 | #define PCAP_LED_4MA 1 | 231 | #define PCAP_LED_4MA 1 |
| 230 | #define PCAP_LED_5MA 2 | 232 | #define PCAP_LED_5MA 2 |
| @@ -243,9 +245,6 @@ int pcap_adc_sync(struct pcap_chip *, u8, u32, u8[], u16[]); | |||
| 243 | #define PCAP_LED0_C_SHIFT 15 | 245 | #define PCAP_LED0_C_SHIFT 15 |
| 244 | #define PCAP_LED1_C_SHIFT 17 | 246 | #define PCAP_LED1_C_SHIFT 17 |
| 245 | #define PCAP_BL1_SHIFT 20 | 247 | #define PCAP_BL1_SHIFT 20 |
| 246 | #define PCAP_VIB_MASK 0x3 | ||
| 247 | #define PCAP_VIB_SHIFT 20 | ||
| 248 | #define PCAP_VIB_EN (1 << 19) | ||
| 249 | 248 | ||
| 250 | /* RTC */ | 249 | /* RTC */ |
| 251 | #define PCAP_RTC_DAY_MASK 0x3fff | 250 | #define PCAP_RTC_DAY_MASK 0x3fff |
diff --git a/include/linux/mfd/mc13783-private.h b/include/linux/mfd/mc13783-private.h new file mode 100644 index 000000000000..47e698cb0f16 --- /dev/null +++ b/include/linux/mfd/mc13783-private.h | |||
| @@ -0,0 +1,396 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2009 Pengutronix, Sascha Hauer <s.hauer@pengutronix.de> | ||
| 3 | * | ||
| 4 | * Initial development of this code was funded by | ||
| 5 | * Phytec Messtechnik GmbH, http://www.phytec.de | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify | ||
| 8 | * it under the terms of the GNU General Public License as published by | ||
| 9 | * the Free Software Foundation; either version 2 of the License, or | ||
| 10 | * (at your option) any later version. | ||
| 11 | * | ||
| 12 | * This program is distributed in the hope that it will be useful, | ||
| 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 15 | * GNU General Public License for more details. | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License | ||
| 18 | * along with this program; if not, write to the Free Software | ||
| 19 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef __LINUX_MFD_MC13783_PRIV_H | ||
| 23 | #define __LINUX_MFD_MC13783_PRIV_H | ||
| 24 | |||
| 25 | #include <linux/platform_device.h> | ||
| 26 | #include <linux/mfd/mc13783.h> | ||
| 27 | #include <linux/workqueue.h> | ||
| 28 | #include <linux/mutex.h> | ||
| 29 | |||
| 30 | struct mc13783_irq { | ||
| 31 | void (*handler)(int, void *); | ||
| 32 | void *data; | ||
| 33 | }; | ||
| 34 | |||
| 35 | #define MC13783_NUM_IRQ 2 | ||
| 36 | #define MC13783_IRQ_TS 0 | ||
| 37 | #define MC13783_IRQ_REGULATOR 1 | ||
| 38 | |||
| 39 | #define MC13783_ADC_MODE_TS 1 | ||
| 40 | #define MC13783_ADC_MODE_SINGLE_CHAN 2 | ||
| 41 | #define MC13783_ADC_MODE_MULT_CHAN 3 | ||
| 42 | |||
| 43 | struct mc13783 { | ||
| 44 | int revision; | ||
| 45 | struct device *dev; | ||
| 46 | struct spi_device *spi_device; | ||
| 47 | |||
| 48 | int (*read_dev)(void *data, char reg, int count, u32 *dst); | ||
| 49 | int (*write_dev)(void *data, char reg, int count, const u32 *src); | ||
| 50 | |||
| 51 | struct mutex io_lock; | ||
| 52 | void *io_data; | ||
| 53 | int irq; | ||
| 54 | unsigned int flags; | ||
| 55 | |||
| 56 | struct mc13783_irq irq_handler[MC13783_NUM_IRQ]; | ||
| 57 | struct work_struct work; | ||
| 58 | struct completion adc_done; | ||
| 59 | unsigned int ts_active; | ||
| 60 | struct mutex adc_conv_lock; | ||
| 61 | |||
| 62 | struct mc13783_regulator_init_data *regulators; | ||
| 63 | int num_regulators; | ||
| 64 | }; | ||
| 65 | |||
| 66 | int mc13783_reg_read(struct mc13783 *, int reg_num, u32 *); | ||
| 67 | int mc13783_reg_write(struct mc13783 *, int, u32); | ||
| 68 | int mc13783_set_bits(struct mc13783 *, int, u32, u32); | ||
| 69 | int mc13783_free_irq(struct mc13783 *mc13783, int irq); | ||
| 70 | int mc13783_register_irq(struct mc13783 *mc13783, int irq, | ||
| 71 | void (*handler) (int, void *), void *data); | ||
| 72 | |||
| 73 | #define MC13783_REG_INTERRUPT_STATUS_0 0 | ||
| 74 | #define MC13783_REG_INTERRUPT_MASK_0 1 | ||
| 75 | #define MC13783_REG_INTERRUPT_SENSE_0 2 | ||
| 76 | #define MC13783_REG_INTERRUPT_STATUS_1 3 | ||
| 77 | #define MC13783_REG_INTERRUPT_MASK_1 4 | ||
| 78 | #define MC13783_REG_INTERRUPT_SENSE_1 5 | ||
| 79 | #define MC13783_REG_POWER_UP_MODE_SENSE 6 | ||
| 80 | #define MC13783_REG_REVISION 7 | ||
| 81 | #define MC13783_REG_SEMAPHORE 8 | ||
| 82 | #define MC13783_REG_ARBITRATION_PERIPHERAL_AUDIO 9 | ||
| 83 | #define MC13783_REG_ARBITRATION_SWITCHERS 10 | ||
| 84 | #define MC13783_REG_ARBITRATION_REGULATORS_0 11 | ||
| 85 | #define MC13783_REG_ARBITRATION_REGULATORS_1 12 | ||
| 86 | #define MC13783_REG_POWER_CONTROL_0 13 | ||
| 87 | #define MC13783_REG_POWER_CONTROL_1 14 | ||
| 88 | #define MC13783_REG_POWER_CONTROL_2 15 | ||
| 89 | #define MC13783_REG_REGEN_ASSIGNMENT 16 | ||
| 90 | #define MC13783_REG_CONTROL_SPARE 17 | ||
| 91 | #define MC13783_REG_MEMORY_A 18 | ||
| 92 | #define MC13783_REG_MEMORY_B 19 | ||
| 93 | #define MC13783_REG_RTC_TIME 20 | ||
| 94 | #define MC13783_REG_RTC_ALARM 21 | ||
| 95 | #define MC13783_REG_RTC_DAY 22 | ||
| 96 | #define MC13783_REG_RTC_DAY_ALARM 23 | ||
| 97 | #define MC13783_REG_SWITCHERS_0 24 | ||
| 98 | #define MC13783_REG_SWITCHERS_1 25 | ||
| 99 | #define MC13783_REG_SWITCHERS_2 26 | ||
| 100 | #define MC13783_REG_SWITCHERS_3 27 | ||
| 101 | #define MC13783_REG_SWITCHERS_4 28 | ||
| 102 | #define MC13783_REG_SWITCHERS_5 29 | ||
| 103 | #define MC13783_REG_REGULATOR_SETTING_0 30 | ||
| 104 | #define MC13783_REG_REGULATOR_SETTING_1 31 | ||
| 105 | #define MC13783_REG_REGULATOR_MODE_0 32 | ||
| 106 | #define MC13783_REG_REGULATOR_MODE_1 33 | ||
| 107 | #define MC13783_REG_POWER_MISCELLANEOUS 34 | ||
| 108 | #define MC13783_REG_POWER_SPARE 35 | ||
| 109 | #define MC13783_REG_AUDIO_RX_0 36 | ||
| 110 | #define MC13783_REG_AUDIO_RX_1 37 | ||
| 111 | #define MC13783_REG_AUDIO_TX 38 | ||
| 112 | #define MC13783_REG_AUDIO_SSI_NETWORK 39 | ||
| 113 | #define MC13783_REG_AUDIO_CODEC 40 | ||
| 114 | #define MC13783_REG_AUDIO_STEREO_DAC 41 | ||
| 115 | #define MC13783_REG_AUDIO_SPARE 42 | ||
| 116 | #define MC13783_REG_ADC_0 43 | ||
| 117 | #define MC13783_REG_ADC_1 44 | ||
| 118 | #define MC13783_REG_ADC_2 45 | ||
| 119 | #define MC13783_REG_ADC_3 46 | ||
| 120 | #define MC13783_REG_ADC_4 47 | ||
| 121 | #define MC13783_REG_CHARGER 48 | ||
| 122 | #define MC13783_REG_USB 49 | ||
| 123 | #define MC13783_REG_CHARGE_USB_SPARE 50 | ||
| 124 | #define MC13783_REG_LED_CONTROL_0 51 | ||
| 125 | #define MC13783_REG_LED_CONTROL_1 52 | ||
| 126 | #define MC13783_REG_LED_CONTROL_2 53 | ||
| 127 | #define MC13783_REG_LED_CONTROL_3 54 | ||
| 128 | #define MC13783_REG_LED_CONTROL_4 55 | ||
| 129 | #define MC13783_REG_LED_CONTROL_5 56 | ||
| 130 | #define MC13783_REG_SPARE 57 | ||
| 131 | #define MC13783_REG_TRIM_0 58 | ||
| 132 | #define MC13783_REG_TRIM_1 59 | ||
| 133 | #define MC13783_REG_TEST_0 60 | ||
| 134 | #define MC13783_REG_TEST_1 61 | ||
| 135 | #define MC13783_REG_TEST_2 62 | ||
| 136 | #define MC13783_REG_TEST_3 63 | ||
| 137 | #define MC13783_REG_NB 64 | ||
| 138 | |||
| 139 | |||
| 140 | /* | ||
| 141 | * Interrupt Status | ||
| 142 | */ | ||
| 143 | #define MC13783_INT_STAT_ADCDONEI (1 << 0) | ||
| 144 | #define MC13783_INT_STAT_ADCBISDONEI (1 << 1) | ||
| 145 | #define MC13783_INT_STAT_TSI (1 << 2) | ||
| 146 | #define MC13783_INT_STAT_WHIGHI (1 << 3) | ||
| 147 | #define MC13783_INT_STAT_WLOWI (1 << 4) | ||
| 148 | #define MC13783_INT_STAT_CHGDETI (1 << 6) | ||
| 149 | #define MC13783_INT_STAT_CHGOVI (1 << 7) | ||
| 150 | #define MC13783_INT_STAT_CHGREVI (1 << 8) | ||
| 151 | #define MC13783_INT_STAT_CHGSHORTI (1 << 9) | ||
| 152 | #define MC13783_INT_STAT_CCCVI (1 << 10) | ||
| 153 | #define MC13783_INT_STAT_CHGCURRI (1 << 11) | ||
| 154 | #define MC13783_INT_STAT_BPONI (1 << 12) | ||
| 155 | #define MC13783_INT_STAT_LOBATLI (1 << 13) | ||
| 156 | #define MC13783_INT_STAT_LOBATHI (1 << 14) | ||
| 157 | #define MC13783_INT_STAT_UDPI (1 << 15) | ||
| 158 | #define MC13783_INT_STAT_USBI (1 << 16) | ||
| 159 | #define MC13783_INT_STAT_IDI (1 << 19) | ||
| 160 | #define MC13783_INT_STAT_Unused (1 << 20) | ||
| 161 | #define MC13783_INT_STAT_SE1I (1 << 21) | ||
| 162 | #define MC13783_INT_STAT_CKDETI (1 << 22) | ||
| 163 | #define MC13783_INT_STAT_UDMI (1 << 23) | ||
| 164 | |||
| 165 | /* | ||
| 166 | * Interrupt Mask | ||
| 167 | */ | ||
| 168 | #define MC13783_INT_MASK_ADCDONEM (1 << 0) | ||
| 169 | #define MC13783_INT_MASK_ADCBISDONEM (1 << 1) | ||
| 170 | #define MC13783_INT_MASK_TSM (1 << 2) | ||
| 171 | #define MC13783_INT_MASK_WHIGHM (1 << 3) | ||
| 172 | #define MC13783_INT_MASK_WLOWM (1 << 4) | ||
| 173 | #define MC13783_INT_MASK_CHGDETM (1 << 6) | ||
| 174 | #define MC13783_INT_MASK_CHGOVM (1 << 7) | ||
| 175 | #define MC13783_INT_MASK_CHGREVM (1 << 8) | ||
| 176 | #define MC13783_INT_MASK_CHGSHORTM (1 << 9) | ||
| 177 | #define MC13783_INT_MASK_CCCVM (1 << 10) | ||
| 178 | #define MC13783_INT_MASK_CHGCURRM (1 << 11) | ||
| 179 | #define MC13783_INT_MASK_BPONM (1 << 12) | ||
| 180 | #define MC13783_INT_MASK_LOBATLM (1 << 13) | ||
| 181 | #define MC13783_INT_MASK_LOBATHM (1 << 14) | ||
| 182 | #define MC13783_INT_MASK_UDPM (1 << 15) | ||
| 183 | #define MC13783_INT_MASK_USBM (1 << 16) | ||
| 184 | #define MC13783_INT_MASK_IDM (1 << 19) | ||
| 185 | #define MC13783_INT_MASK_SE1M (1 << 21) | ||
| 186 | #define MC13783_INT_MASK_CKDETM (1 << 22) | ||
| 187 | |||
| 188 | /* | ||
| 189 | * Reg Regulator Mode 0 | ||
| 190 | */ | ||
| 191 | #define MC13783_REGCTRL_VAUDIO_EN (1 << 0) | ||
| 192 | #define MC13783_REGCTRL_VAUDIO_STBY (1 << 1) | ||
| 193 | #define MC13783_REGCTRL_VAUDIO_MODE (1 << 2) | ||
| 194 | #define MC13783_REGCTRL_VIOHI_EN (1 << 3) | ||
| 195 | #define MC13783_REGCTRL_VIOHI_STBY (1 << 4) | ||
| 196 | #define MC13783_REGCTRL_VIOHI_MODE (1 << 5) | ||
| 197 | #define MC13783_REGCTRL_VIOLO_EN (1 << 6) | ||
| 198 | #define MC13783_REGCTRL_VIOLO_STBY (1 << 7) | ||
| 199 | #define MC13783_REGCTRL_VIOLO_MODE (1 << 8) | ||
| 200 | #define MC13783_REGCTRL_VDIG_EN (1 << 9) | ||
| 201 | #define MC13783_REGCTRL_VDIG_STBY (1 << 10) | ||
| 202 | #define MC13783_REGCTRL_VDIG_MODE (1 << 11) | ||
| 203 | #define MC13783_REGCTRL_VGEN_EN (1 << 12) | ||
| 204 | #define MC13783_REGCTRL_VGEN_STBY (1 << 13) | ||
| 205 | #define MC13783_REGCTRL_VGEN_MODE (1 << 14) | ||
| 206 | #define MC13783_REGCTRL_VRFDIG_EN (1 << 15) | ||
| 207 | #define MC13783_REGCTRL_VRFDIG_STBY (1 << 16) | ||
| 208 | #define MC13783_REGCTRL_VRFDIG_MODE (1 << 17) | ||
| 209 | #define MC13783_REGCTRL_VRFREF_EN (1 << 18) | ||
| 210 | #define MC13783_REGCTRL_VRFREF_STBY (1 << 19) | ||
| 211 | #define MC13783_REGCTRL_VRFREF_MODE (1 << 20) | ||
| 212 | #define MC13783_REGCTRL_VRFCP_EN (1 << 21) | ||
| 213 | #define MC13783_REGCTRL_VRFCP_STBY (1 << 22) | ||
| 214 | #define MC13783_REGCTRL_VRFCP_MODE (1 << 23) | ||
| 215 | |||
| 216 | /* | ||
| 217 | * Reg Regulator Mode 1 | ||
| 218 | */ | ||
| 219 | #define MC13783_REGCTRL_VSIM_EN (1 << 0) | ||
| 220 | #define MC13783_REGCTRL_VSIM_STBY (1 << 1) | ||
| 221 | #define MC13783_REGCTRL_VSIM_MODE (1 << 2) | ||
| 222 | #define MC13783_REGCTRL_VESIM_EN (1 << 3) | ||
| 223 | #define MC13783_REGCTRL_VESIM_STBY (1 << 4) | ||
| 224 | #define MC13783_REGCTRL_VESIM_MODE (1 << 5) | ||
| 225 | #define MC13783_REGCTRL_VCAM_EN (1 << 6) | ||
| 226 | #define MC13783_REGCTRL_VCAM_STBY (1 << 7) | ||
| 227 | #define MC13783_REGCTRL_VCAM_MODE (1 << 8) | ||
| 228 | #define MC13783_REGCTRL_VRFBG_EN (1 << 9) | ||
| 229 | #define MC13783_REGCTRL_VRFBG_STBY (1 << 10) | ||
| 230 | #define MC13783_REGCTRL_VVIB_EN (1 << 11) | ||
| 231 | #define MC13783_REGCTRL_VRF1_EN (1 << 12) | ||
| 232 | #define MC13783_REGCTRL_VRF1_STBY (1 << 13) | ||
| 233 | #define MC13783_REGCTRL_VRF1_MODE (1 << 14) | ||
| 234 | #define MC13783_REGCTRL_VRF2_EN (1 << 15) | ||
| 235 | #define MC13783_REGCTRL_VRF2_STBY (1 << 16) | ||
| 236 | #define MC13783_REGCTRL_VRF2_MODE (1 << 17) | ||
| 237 | #define MC13783_REGCTRL_VMMC1_EN (1 << 18) | ||
| 238 | #define MC13783_REGCTRL_VMMC1_STBY (1 << 19) | ||
| 239 | #define MC13783_REGCTRL_VMMC1_MODE (1 << 20) | ||
| 240 | #define MC13783_REGCTRL_VMMC2_EN (1 << 21) | ||
| 241 | #define MC13783_REGCTRL_VMMC2_STBY (1 << 22) | ||
| 242 | #define MC13783_REGCTRL_VMMC2_MODE (1 << 23) | ||
| 243 | |||
| 244 | /* | ||
| 245 | * Reg Regulator Misc. | ||
| 246 | */ | ||
| 247 | #define MC13783_REGCTRL_GPO1_EN (1 << 6) | ||
| 248 | #define MC13783_REGCTRL_GPO2_EN (1 << 8) | ||
| 249 | #define MC13783_REGCTRL_GPO3_EN (1 << 10) | ||
| 250 | #define MC13783_REGCTRL_GPO4_EN (1 << 12) | ||
| 251 | #define MC13783_REGCTRL_VIBPINCTRL (1 << 14) | ||
| 252 | |||
| 253 | /* | ||
| 254 | * Reg Switcher 4 | ||
| 255 | */ | ||
| 256 | #define MC13783_SWCTRL_SW1A_MODE (1 << 0) | ||
| 257 | #define MC13783_SWCTRL_SW1A_STBY_MODE (1 << 2) | ||
| 258 | #define MC13783_SWCTRL_SW1A_DVS_SPEED (1 << 6) | ||
| 259 | #define MC13783_SWCTRL_SW1A_PANIC_MODE (1 << 8) | ||
| 260 | #define MC13783_SWCTRL_SW1A_SOFTSTART (1 << 9) | ||
| 261 | #define MC13783_SWCTRL_SW1B_MODE (1 << 10) | ||
| 262 | #define MC13783_SWCTRL_SW1B_STBY_MODE (1 << 12) | ||
| 263 | #define MC13783_SWCTRL_SW1B_DVS_SPEED (1 << 14) | ||
| 264 | #define MC13783_SWCTRL_SW1B_PANIC_MODE (1 << 16) | ||
| 265 | #define MC13783_SWCTRL_SW1B_SOFTSTART (1 << 17) | ||
| 266 | #define MC13783_SWCTRL_PLL_EN (1 << 18) | ||
| 267 | #define MC13783_SWCTRL_PLL_FACTOR (1 << 19) | ||
| 268 | |||
| 269 | /* | ||
| 270 | * Reg Switcher 5 | ||
| 271 | */ | ||
| 272 | #define MC13783_SWCTRL_SW2A_MODE (1 << 0) | ||
| 273 | #define MC13783_SWCTRL_SW2A_STBY_MODE (1 << 2) | ||
| 274 | #define MC13783_SWCTRL_SW2A_DVS_SPEED (1 << 6) | ||
| 275 | #define MC13783_SWCTRL_SW2A_PANIC_MODE (1 << 8) | ||
| 276 | #define MC13783_SWCTRL_SW2A_SOFTSTART (1 << 9) | ||
| 277 | #define MC13783_SWCTRL_SW2B_MODE (1 << 10) | ||
| 278 | #define MC13783_SWCTRL_SW2B_STBY_MODE (1 << 12) | ||
| 279 | #define MC13783_SWCTRL_SW2B_DVS_SPEED (1 << 14) | ||
| 280 | #define MC13783_SWCTRL_SW2B_PANIC_MODE (1 << 16) | ||
| 281 | #define MC13783_SWCTRL_SW2B_SOFTSTART (1 << 17) | ||
| 282 | #define MC13783_SWSET_SW3 (1 << 18) | ||
| 283 | #define MC13783_SWCTRL_SW3_EN (1 << 20) | ||
| 284 | #define MC13783_SWCTRL_SW3_STBY (1 << 21) | ||
| 285 | #define MC13783_SWCTRL_SW3_MODE (1 << 22) | ||
| 286 | |||
| 287 | /* | ||
| 288 | * ADC/Touch | ||
| 289 | */ | ||
| 290 | #define MC13783_ADC0_LICELLCON (1 << 0) | ||
| 291 | #define MC13783_ADC0_CHRGICON (1 << 1) | ||
| 292 | #define MC13783_ADC0_BATICON (1 << 2) | ||
| 293 | #define MC13783_ADC0_RTHEN (1 << 3) | ||
| 294 | #define MC13783_ADC0_DTHEN (1 << 4) | ||
| 295 | #define MC13783_ADC0_UIDEN (1 << 5) | ||
| 296 | #define MC13783_ADC0_ADOUTEN (1 << 6) | ||
| 297 | #define MC13783_ADC0_ADOUTPER (1 << 7) | ||
| 298 | #define MC13783_ADC0_ADREFEN (1 << 10) | ||
| 299 | #define MC13783_ADC0_ADREFMODE (1 << 11) | ||
| 300 | #define MC13783_ADC0_TSMOD0 (1 << 12) | ||
| 301 | #define MC13783_ADC0_TSMOD1 (1 << 13) | ||
| 302 | #define MC13783_ADC0_TSMOD2 (1 << 14) | ||
| 303 | #define MC13783_ADC0_CHRGRAWDIV (1 << 15) | ||
| 304 | #define MC13783_ADC0_ADINC1 (1 << 16) | ||
| 305 | #define MC13783_ADC0_ADINC2 (1 << 17) | ||
| 306 | #define MC13783_ADC0_WCOMP (1 << 18) | ||
| 307 | #define MC13783_ADC0_ADCBIS0 (1 << 23) | ||
| 308 | |||
| 309 | #define MC13783_ADC1_ADEN (1 << 0) | ||
| 310 | #define MC13783_ADC1_RAND (1 << 1) | ||
| 311 | #define MC13783_ADC1_ADSEL (1 << 3) | ||
| 312 | #define MC13783_ADC1_TRIGMASK (1 << 4) | ||
| 313 | #define MC13783_ADC1_ADA10 (1 << 5) | ||
| 314 | #define MC13783_ADC1_ADA11 (1 << 6) | ||
| 315 | #define MC13783_ADC1_ADA12 (1 << 7) | ||
| 316 | #define MC13783_ADC1_ADA20 (1 << 8) | ||
| 317 | #define MC13783_ADC1_ADA21 (1 << 9) | ||
| 318 | #define MC13783_ADC1_ADA22 (1 << 10) | ||
| 319 | #define MC13783_ADC1_ATO0 (1 << 11) | ||
| 320 | #define MC13783_ADC1_ATO1 (1 << 12) | ||
| 321 | #define MC13783_ADC1_ATO2 (1 << 13) | ||
| 322 | #define MC13783_ADC1_ATO3 (1 << 14) | ||
| 323 | #define MC13783_ADC1_ATO4 (1 << 15) | ||
| 324 | #define MC13783_ADC1_ATO5 (1 << 16) | ||
| 325 | #define MC13783_ADC1_ATO6 (1 << 17) | ||
| 326 | #define MC13783_ADC1_ATO7 (1 << 18) | ||
| 327 | #define MC13783_ADC1_ATOX (1 << 19) | ||
| 328 | #define MC13783_ADC1_ASC (1 << 20) | ||
| 329 | #define MC13783_ADC1_ADTRIGIGN (1 << 21) | ||
| 330 | #define MC13783_ADC1_ADONESHOT (1 << 22) | ||
| 331 | #define MC13783_ADC1_ADCBIS1 (1 << 23) | ||
| 332 | |||
| 333 | #define MC13783_ADC1_CHAN0_SHIFT 5 | ||
| 334 | #define MC13783_ADC1_CHAN1_SHIFT 8 | ||
| 335 | |||
| 336 | #define MC13783_ADC2_ADD10 (1 << 2) | ||
| 337 | #define MC13783_ADC2_ADD11 (1 << 3) | ||
| 338 | #define MC13783_ADC2_ADD12 (1 << 4) | ||
| 339 | #define MC13783_ADC2_ADD13 (1 << 5) | ||
| 340 | #define MC13783_ADC2_ADD14 (1 << 6) | ||
| 341 | #define MC13783_ADC2_ADD15 (1 << 7) | ||
| 342 | #define MC13783_ADC2_ADD16 (1 << 8) | ||
| 343 | #define MC13783_ADC2_ADD17 (1 << 9) | ||
| 344 | #define MC13783_ADC2_ADD18 (1 << 10) | ||
| 345 | #define MC13783_ADC2_ADD19 (1 << 11) | ||
| 346 | #define MC13783_ADC2_ADD20 (1 << 14) | ||
| 347 | #define MC13783_ADC2_ADD21 (1 << 15) | ||
| 348 | #define MC13783_ADC2_ADD22 (1 << 16) | ||
| 349 | #define MC13783_ADC2_ADD23 (1 << 17) | ||
| 350 | #define MC13783_ADC2_ADD24 (1 << 18) | ||
| 351 | #define MC13783_ADC2_ADD25 (1 << 19) | ||
| 352 | #define MC13783_ADC2_ADD26 (1 << 20) | ||
| 353 | #define MC13783_ADC2_ADD27 (1 << 21) | ||
| 354 | #define MC13783_ADC2_ADD28 (1 << 22) | ||
| 355 | #define MC13783_ADC2_ADD29 (1 << 23) | ||
| 356 | |||
| 357 | #define MC13783_ADC3_WHIGH0 (1 << 0) | ||
| 358 | #define MC13783_ADC3_WHIGH1 (1 << 1) | ||
| 359 | #define MC13783_ADC3_WHIGH2 (1 << 2) | ||
| 360 | #define MC13783_ADC3_WHIGH3 (1 << 3) | ||
| 361 | #define MC13783_ADC3_WHIGH4 (1 << 4) | ||
| 362 | #define MC13783_ADC3_WHIGH5 (1 << 5) | ||
| 363 | #define MC13783_ADC3_ICID0 (1 << 6) | ||
| 364 | #define MC13783_ADC3_ICID1 (1 << 7) | ||
| 365 | #define MC13783_ADC3_ICID2 (1 << 8) | ||
| 366 | #define MC13783_ADC3_WLOW0 (1 << 9) | ||
| 367 | #define MC13783_ADC3_WLOW1 (1 << 10) | ||
| 368 | #define MC13783_ADC3_WLOW2 (1 << 11) | ||
| 369 | #define MC13783_ADC3_WLOW3 (1 << 12) | ||
| 370 | #define MC13783_ADC3_WLOW4 (1 << 13) | ||
| 371 | #define MC13783_ADC3_WLOW5 (1 << 14) | ||
| 372 | #define MC13783_ADC3_ADCBIS2 (1 << 23) | ||
| 373 | |||
| 374 | #define MC13783_ADC4_ADDBIS10 (1 << 2) | ||
| 375 | #define MC13783_ADC4_ADDBIS11 (1 << 3) | ||
| 376 | #define MC13783_ADC4_ADDBIS12 (1 << 4) | ||
| 377 | #define MC13783_ADC4_ADDBIS13 (1 << 5) | ||
| 378 | #define MC13783_ADC4_ADDBIS14 (1 << 6) | ||
| 379 | #define MC13783_ADC4_ADDBIS15 (1 << 7) | ||
| 380 | #define MC13783_ADC4_ADDBIS16 (1 << 8) | ||
| 381 | #define MC13783_ADC4_ADDBIS17 (1 << 9) | ||
| 382 | #define MC13783_ADC4_ADDBIS18 (1 << 10) | ||
| 383 | #define MC13783_ADC4_ADDBIS19 (1 << 11) | ||
| 384 | #define MC13783_ADC4_ADDBIS20 (1 << 14) | ||
| 385 | #define MC13783_ADC4_ADDBIS21 (1 << 15) | ||
| 386 | #define MC13783_ADC4_ADDBIS22 (1 << 16) | ||
| 387 | #define MC13783_ADC4_ADDBIS23 (1 << 17) | ||
| 388 | #define MC13783_ADC4_ADDBIS24 (1 << 18) | ||
| 389 | #define MC13783_ADC4_ADDBIS25 (1 << 19) | ||
| 390 | #define MC13783_ADC4_ADDBIS26 (1 << 20) | ||
| 391 | #define MC13783_ADC4_ADDBIS27 (1 << 21) | ||
| 392 | #define MC13783_ADC4_ADDBIS28 (1 << 22) | ||
| 393 | #define MC13783_ADC4_ADDBIS29 (1 << 23) | ||
| 394 | |||
| 395 | #endif /* __LINUX_MFD_MC13783_PRIV_H */ | ||
| 396 | |||
diff --git a/include/linux/mfd/mc13783.h b/include/linux/mfd/mc13783.h new file mode 100644 index 000000000000..b3a2a7243573 --- /dev/null +++ b/include/linux/mfd/mc13783.h | |||
| @@ -0,0 +1,84 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2009 Pengutronix, Sascha Hauer <s.hauer@pengutronix.de> | ||
| 3 | * | ||
| 4 | * Initial development of this code was funded by | ||
| 5 | * Phytec Messtechnik GmbH, http://www.phytec.de | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify | ||
| 8 | * it under the terms of the GNU General Public License as published by | ||
| 9 | * the Free Software Foundation; either version 2 of the License, or | ||
| 10 | * (at your option) any later version. | ||
| 11 | * | ||
| 12 | * This program is distributed in the hope that it will be useful, | ||
| 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 15 | * GNU General Public License for more details. | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License | ||
| 18 | * along with this program; if not, write to the Free Software | ||
| 19 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef __INCLUDE_LINUX_MFD_MC13783_H | ||
| 23 | #define __INCLUDE_LINUX_MFD_MC13783_H | ||
| 24 | |||
| 25 | struct mc13783; | ||
| 26 | struct regulator_init_data; | ||
| 27 | |||
| 28 | struct mc13783_regulator_init_data { | ||
| 29 | int id; | ||
| 30 | struct regulator_init_data *init_data; | ||
| 31 | }; | ||
| 32 | |||
| 33 | struct mc13783_platform_data { | ||
| 34 | struct mc13783_regulator_init_data *regulators; | ||
| 35 | int num_regulators; | ||
| 36 | unsigned int flags; | ||
| 37 | }; | ||
| 38 | |||
| 39 | /* mc13783_platform_data flags */ | ||
| 40 | #define MC13783_USE_TOUCHSCREEN (1 << 0) | ||
| 41 | #define MC13783_USE_CODEC (1 << 1) | ||
| 42 | #define MC13783_USE_ADC (1 << 2) | ||
| 43 | #define MC13783_USE_RTC (1 << 3) | ||
| 44 | #define MC13783_USE_REGULATOR (1 << 4) | ||
| 45 | |||
| 46 | int mc13783_adc_do_conversion(struct mc13783 *mc13783, unsigned int mode, | ||
| 47 | unsigned int channel, unsigned int *sample); | ||
| 48 | |||
| 49 | void mc13783_adc_set_ts_status(struct mc13783 *mc13783, unsigned int status); | ||
| 50 | |||
| 51 | #define MC13783_SW_SW1A 0 | ||
| 52 | #define MC13783_SW_SW1B 1 | ||
| 53 | #define MC13783_SW_SW2A 2 | ||
| 54 | #define MC13783_SW_SW2B 3 | ||
| 55 | #define MC13783_SW_SW3 4 | ||
| 56 | #define MC13783_SW_PLL 5 | ||
| 57 | #define MC13783_REGU_VAUDIO 6 | ||
| 58 | #define MC13783_REGU_VIOHI 7 | ||
| 59 | #define MC13783_REGU_VIOLO 8 | ||
| 60 | #define MC13783_REGU_VDIG 9 | ||
| 61 | #define MC13783_REGU_VGEN 10 | ||
| 62 | #define MC13783_REGU_VRFDIG 11 | ||
| 63 | #define MC13783_REGU_VRFREF 12 | ||
| 64 | #define MC13783_REGU_VRFCP 13 | ||
| 65 | #define MC13783_REGU_VSIM 14 | ||
| 66 | #define MC13783_REGU_VESIM 15 | ||
| 67 | #define MC13783_REGU_VCAM 16 | ||
| 68 | #define MC13783_REGU_VRFBG 17 | ||
| 69 | #define MC13783_REGU_VVIB 18 | ||
| 70 | #define MC13783_REGU_VRF1 19 | ||
| 71 | #define MC13783_REGU_VRF2 20 | ||
| 72 | #define MC13783_REGU_VMMC1 21 | ||
| 73 | #define MC13783_REGU_VMMC2 22 | ||
| 74 | #define MC13783_REGU_GPO1 23 | ||
| 75 | #define MC13783_REGU_GPO2 24 | ||
| 76 | #define MC13783_REGU_GPO3 25 | ||
| 77 | #define MC13783_REGU_GPO4 26 | ||
| 78 | #define MC13783_REGU_V1 27 | ||
| 79 | #define MC13783_REGU_V2 28 | ||
| 80 | #define MC13783_REGU_V3 29 | ||
| 81 | #define MC13783_REGU_V4 30 | ||
| 82 | |||
| 83 | #endif /* __INCLUDE_LINUX_MFD_MC13783_H */ | ||
| 84 | |||
diff --git a/include/linux/mfd/mcp.h b/include/linux/mfd/mcp.h new file mode 100644 index 000000000000..ee496708e38b --- /dev/null +++ b/include/linux/mfd/mcp.h | |||
| @@ -0,0 +1,69 @@ | |||
| 1 | /* | ||
| 2 | * linux/drivers/mfd/mcp.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2001 Russell King, All Rights Reserved. | ||
| 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. | ||
| 9 | */ | ||
| 10 | #ifndef MCP_H | ||
| 11 | #define MCP_H | ||
| 12 | |||
| 13 | #include <mach/dma.h> | ||
| 14 | |||
| 15 | struct mcp_ops; | ||
| 16 | |||
| 17 | struct mcp { | ||
| 18 | struct module *owner; | ||
| 19 | struct mcp_ops *ops; | ||
| 20 | spinlock_t lock; | ||
| 21 | int use_count; | ||
| 22 | unsigned int sclk_rate; | ||
| 23 | unsigned int rw_timeout; | ||
| 24 | dma_device_t dma_audio_rd; | ||
| 25 | dma_device_t dma_audio_wr; | ||
| 26 | dma_device_t dma_telco_rd; | ||
| 27 | dma_device_t dma_telco_wr; | ||
| 28 | struct device attached_device; | ||
| 29 | int gpio_base; | ||
| 30 | }; | ||
| 31 | |||
| 32 | struct mcp_ops { | ||
| 33 | void (*set_telecom_divisor)(struct mcp *, unsigned int); | ||
| 34 | void (*set_audio_divisor)(struct mcp *, unsigned int); | ||
| 35 | void (*reg_write)(struct mcp *, unsigned int, unsigned int); | ||
| 36 | unsigned int (*reg_read)(struct mcp *, unsigned int); | ||
| 37 | void (*enable)(struct mcp *); | ||
| 38 | void (*disable)(struct mcp *); | ||
| 39 | }; | ||
| 40 | |||
| 41 | void mcp_set_telecom_divisor(struct mcp *, unsigned int); | ||
| 42 | void mcp_set_audio_divisor(struct mcp *, unsigned int); | ||
| 43 | void mcp_reg_write(struct mcp *, unsigned int, unsigned int); | ||
| 44 | unsigned int mcp_reg_read(struct mcp *, unsigned int); | ||
| 45 | void mcp_enable(struct mcp *); | ||
| 46 | void mcp_disable(struct mcp *); | ||
| 47 | #define mcp_get_sclk_rate(mcp) ((mcp)->sclk_rate) | ||
| 48 | |||
| 49 | struct mcp *mcp_host_alloc(struct device *, size_t); | ||
| 50 | int mcp_host_register(struct mcp *); | ||
| 51 | void mcp_host_unregister(struct mcp *); | ||
| 52 | |||
| 53 | struct mcp_driver { | ||
| 54 | struct device_driver drv; | ||
| 55 | int (*probe)(struct mcp *); | ||
| 56 | void (*remove)(struct mcp *); | ||
| 57 | int (*suspend)(struct mcp *, pm_message_t); | ||
| 58 | int (*resume)(struct mcp *); | ||
| 59 | }; | ||
| 60 | |||
| 61 | int mcp_driver_register(struct mcp_driver *); | ||
| 62 | void mcp_driver_unregister(struct mcp_driver *); | ||
| 63 | |||
| 64 | #define mcp_get_drvdata(mcp) dev_get_drvdata(&(mcp)->attached_device) | ||
| 65 | #define mcp_set_drvdata(mcp,d) dev_set_drvdata(&(mcp)->attached_device, d) | ||
| 66 | |||
| 67 | #define mcp_priv(mcp) ((void *)((mcp)+1)) | ||
| 68 | |||
| 69 | #endif | ||
diff --git a/include/linux/mfd/pcf50633/adc.h b/include/linux/mfd/pcf50633/adc.h index 56669b4183ad..b35e62801ffa 100644 --- a/include/linux/mfd/pcf50633/adc.h +++ b/include/linux/mfd/pcf50633/adc.h | |||
| @@ -25,7 +25,8 @@ | |||
| 25 | #define PCF50633_REG_ADCS3 0x57 | 25 | #define PCF50633_REG_ADCS3 0x57 |
| 26 | 26 | ||
| 27 | #define PCF50633_ADCC1_ADCSTART 0x01 | 27 | #define PCF50633_ADCC1_ADCSTART 0x01 |
| 28 | #define PCF50633_ADCC1_RES_10BIT 0x02 | 28 | #define PCF50633_ADCC1_RES_8BIT 0x02 |
| 29 | #define PCF50633_ADCC1_RES_10BIT 0x00 | ||
| 29 | #define PCF50633_ADCC1_AVERAGE_NO 0x00 | 30 | #define PCF50633_ADCC1_AVERAGE_NO 0x00 |
| 30 | #define PCF50633_ADCC1_AVERAGE_4 0x04 | 31 | #define PCF50633_ADCC1_AVERAGE_4 0x04 |
| 31 | #define PCF50633_ADCC1_AVERAGE_8 0x08 | 32 | #define PCF50633_ADCC1_AVERAGE_8 0x08 |
diff --git a/include/linux/mfd/pcf50633/core.h b/include/linux/mfd/pcf50633/core.h index c8f51c3c0a72..9aba7b779fbc 100644 --- a/include/linux/mfd/pcf50633/core.h +++ b/include/linux/mfd/pcf50633/core.h | |||
| @@ -136,6 +136,7 @@ struct pcf50633 { | |||
| 136 | int irq; | 136 | int irq; |
| 137 | struct pcf50633_irq irq_handler[PCF50633_NUM_IRQ]; | 137 | struct pcf50633_irq irq_handler[PCF50633_NUM_IRQ]; |
| 138 | struct work_struct irq_work; | 138 | struct work_struct irq_work; |
| 139 | struct workqueue_struct *work_queue; | ||
| 139 | struct mutex lock; | 140 | struct mutex lock; |
| 140 | 141 | ||
| 141 | u8 mask_regs[5]; | 142 | u8 mask_regs[5]; |
diff --git a/include/linux/mfd/twl4030-codec.h b/include/linux/mfd/twl4030-codec.h new file mode 100644 index 000000000000..2ec317c68e59 --- /dev/null +++ b/include/linux/mfd/twl4030-codec.h | |||
| @@ -0,0 +1,272 @@ | |||
| 1 | /* | ||
| 2 | * MFD driver for twl4030 codec submodule | ||
| 3 | * | ||
| 4 | * Author: Peter Ujfalusi <peter.ujfalusi@nokia.com> | ||
| 5 | * | ||
| 6 | * Copyright: (C) 2009 Nokia Corporation | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify | ||
| 9 | * it under the terms of the GNU General Public License version 2 as | ||
| 10 | * published by the Free Software Foundation. | ||
| 11 | * | ||
| 12 | * This program is distributed in the hope that it will be useful, but | ||
| 13 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
| 15 | * General Public License for more details. | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License | ||
| 18 | * along with this program; if not, write to the Free Software | ||
| 19 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA | ||
| 20 | * 02110-1301 USA | ||
| 21 | * | ||
| 22 | */ | ||
| 23 | |||
| 24 | #ifndef __TWL4030_CODEC_H__ | ||
| 25 | #define __TWL4030_CODEC_H__ | ||
| 26 | |||
| 27 | /* Codec registers */ | ||
| 28 | #define TWL4030_REG_CODEC_MODE 0x01 | ||
| 29 | #define TWL4030_REG_OPTION 0x02 | ||
| 30 | #define TWL4030_REG_UNKNOWN 0x03 | ||
| 31 | #define TWL4030_REG_MICBIAS_CTL 0x04 | ||
| 32 | #define TWL4030_REG_ANAMICL 0x05 | ||
| 33 | #define TWL4030_REG_ANAMICR 0x06 | ||
| 34 | #define TWL4030_REG_AVADC_CTL 0x07 | ||
| 35 | #define TWL4030_REG_ADCMICSEL 0x08 | ||
| 36 | #define TWL4030_REG_DIGMIXING 0x09 | ||
| 37 | #define TWL4030_REG_ATXL1PGA 0x0A | ||
| 38 | #define TWL4030_REG_ATXR1PGA 0x0B | ||
| 39 | #define TWL4030_REG_AVTXL2PGA 0x0C | ||
| 40 | #define TWL4030_REG_AVTXR2PGA 0x0D | ||
| 41 | #define TWL4030_REG_AUDIO_IF 0x0E | ||
| 42 | #define TWL4030_REG_VOICE_IF 0x0F | ||
| 43 | #define TWL4030_REG_ARXR1PGA 0x10 | ||
| 44 | #define TWL4030_REG_ARXL1PGA 0x11 | ||
| 45 | #define TWL4030_REG_ARXR2PGA 0x12 | ||
| 46 | #define TWL4030_REG_ARXL2PGA 0x13 | ||
| 47 | #define TWL4030_REG_VRXPGA 0x14 | ||
| 48 | #define TWL4030_REG_VSTPGA 0x15 | ||
| 49 | #define TWL4030_REG_VRX2ARXPGA 0x16 | ||
| 50 | #define TWL4030_REG_AVDAC_CTL 0x17 | ||
| 51 | #define TWL4030_REG_ARX2VTXPGA 0x18 | ||
| 52 | #define TWL4030_REG_ARXL1_APGA_CTL 0x19 | ||
| 53 | #define TWL4030_REG_ARXR1_APGA_CTL 0x1A | ||
| 54 | #define TWL4030_REG_ARXL2_APGA_CTL 0x1B | ||
| 55 | #define TWL4030_REG_ARXR2_APGA_CTL 0x1C | ||
| 56 | #define TWL4030_REG_ATX2ARXPGA 0x1D | ||
| 57 | #define TWL4030_REG_BT_IF 0x1E | ||
| 58 | #define TWL4030_REG_BTPGA 0x1F | ||
| 59 | #define TWL4030_REG_BTSTPGA 0x20 | ||
| 60 | #define TWL4030_REG_EAR_CTL 0x21 | ||
| 61 | #define TWL4030_REG_HS_SEL 0x22 | ||
| 62 | #define TWL4030_REG_HS_GAIN_SET 0x23 | ||
| 63 | #define TWL4030_REG_HS_POPN_SET 0x24 | ||
| 64 | #define TWL4030_REG_PREDL_CTL 0x25 | ||
| 65 | #define TWL4030_REG_PREDR_CTL 0x26 | ||
| 66 | #define TWL4030_REG_PRECKL_CTL 0x27 | ||
| 67 | #define TWL4030_REG_PRECKR_CTL 0x28 | ||
| 68 | #define TWL4030_REG_HFL_CTL 0x29 | ||
| 69 | #define TWL4030_REG_HFR_CTL 0x2A | ||
| 70 | #define TWL4030_REG_ALC_CTL 0x2B | ||
| 71 | #define TWL4030_REG_ALC_SET1 0x2C | ||
| 72 | #define TWL4030_REG_ALC_SET2 0x2D | ||
| 73 | #define TWL4030_REG_BOOST_CTL 0x2E | ||
| 74 | #define TWL4030_REG_SOFTVOL_CTL 0x2F | ||
| 75 | #define TWL4030_REG_DTMF_FREQSEL 0x30 | ||
| 76 | #define TWL4030_REG_DTMF_TONEXT1H 0x31 | ||
| 77 | #define TWL4030_REG_DTMF_TONEXT1L 0x32 | ||
| 78 | #define TWL4030_REG_DTMF_TONEXT2H 0x33 | ||
| 79 | #define TWL4030_REG_DTMF_TONEXT2L 0x34 | ||
| 80 | #define TWL4030_REG_DTMF_TONOFF 0x35 | ||
| 81 | #define TWL4030_REG_DTMF_WANONOFF 0x36 | ||
| 82 | #define TWL4030_REG_I2S_RX_SCRAMBLE_H 0x37 | ||
| 83 | #define TWL4030_REG_I2S_RX_SCRAMBLE_M 0x38 | ||
| 84 | #define TWL4030_REG_I2S_RX_SCRAMBLE_L 0x39 | ||
| 85 | #define TWL4030_REG_APLL_CTL 0x3A | ||
| 86 | #define TWL4030_REG_DTMF_CTL 0x3B | ||
| 87 | #define TWL4030_REG_DTMF_PGA_CTL2 0x3C | ||
| 88 | #define TWL4030_REG_DTMF_PGA_CTL1 0x3D | ||
| 89 | #define TWL4030_REG_MISC_SET_1 0x3E | ||
| 90 | #define TWL4030_REG_PCMBTMUX 0x3F | ||
| 91 | #define TWL4030_REG_RX_PATH_SEL 0x43 | ||
| 92 | #define TWL4030_REG_VDL_APGA_CTL 0x44 | ||
| 93 | #define TWL4030_REG_VIBRA_CTL 0x45 | ||
| 94 | #define TWL4030_REG_VIBRA_SET 0x46 | ||
| 95 | #define TWL4030_REG_VIBRA_PWM_SET 0x47 | ||
| 96 | #define TWL4030_REG_ANAMIC_GAIN 0x48 | ||
| 97 | #define TWL4030_REG_MISC_SET_2 0x49 | ||
| 98 | |||
| 99 | /* Bitfield Definitions */ | ||
| 100 | |||
| 101 | /* TWL4030_CODEC_MODE (0x01) Fields */ | ||
| 102 | #define TWL4030_APLL_RATE 0xF0 | ||
| 103 | #define TWL4030_APLL_RATE_8000 0x00 | ||
| 104 | #define TWL4030_APLL_RATE_11025 0x10 | ||
| 105 | #define TWL4030_APLL_RATE_12000 0x20 | ||
| 106 | #define TWL4030_APLL_RATE_16000 0x40 | ||
| 107 | #define TWL4030_APLL_RATE_22050 0x50 | ||
| 108 | #define TWL4030_APLL_RATE_24000 0x60 | ||
| 109 | #define TWL4030_APLL_RATE_32000 0x80 | ||
| 110 | #define TWL4030_APLL_RATE_44100 0x90 | ||
| 111 | #define TWL4030_APLL_RATE_48000 0xA0 | ||
| 112 | #define TWL4030_APLL_RATE_96000 0xE0 | ||
| 113 | #define TWL4030_SEL_16K 0x08 | ||
| 114 | #define TWL4030_CODECPDZ 0x02 | ||
| 115 | #define TWL4030_OPT_MODE 0x01 | ||
| 116 | #define TWL4030_OPTION_1 (1 << 0) | ||
| 117 | #define TWL4030_OPTION_2 (0 << 0) | ||
| 118 | |||
| 119 | /* TWL4030_OPTION (0x02) Fields */ | ||
| 120 | #define TWL4030_ATXL1_EN (1 << 0) | ||
| 121 | #define TWL4030_ATXR1_EN (1 << 1) | ||
| 122 | #define TWL4030_ATXL2_VTXL_EN (1 << 2) | ||
| 123 | #define TWL4030_ATXR2_VTXR_EN (1 << 3) | ||
| 124 | #define TWL4030_ARXL1_VRX_EN (1 << 4) | ||
| 125 | #define TWL4030_ARXR1_EN (1 << 5) | ||
| 126 | #define TWL4030_ARXL2_EN (1 << 6) | ||
| 127 | #define TWL4030_ARXR2_EN (1 << 7) | ||
| 128 | |||
| 129 | /* TWL4030_REG_MICBIAS_CTL (0x04) Fields */ | ||
| 130 | #define TWL4030_MICBIAS2_CTL 0x40 | ||
| 131 | #define TWL4030_MICBIAS1_CTL 0x20 | ||
| 132 | #define TWL4030_HSMICBIAS_EN 0x04 | ||
| 133 | #define TWL4030_MICBIAS2_EN 0x02 | ||
| 134 | #define TWL4030_MICBIAS1_EN 0x01 | ||
| 135 | |||
| 136 | /* ANAMICL (0x05) Fields */ | ||
| 137 | #define TWL4030_CNCL_OFFSET_START 0x80 | ||
| 138 | #define TWL4030_OFFSET_CNCL_SEL 0x60 | ||
| 139 | #define TWL4030_OFFSET_CNCL_SEL_ARX1 0x00 | ||
| 140 | #define TWL4030_OFFSET_CNCL_SEL_ARX2 0x20 | ||
| 141 | #define TWL4030_OFFSET_CNCL_SEL_VRX 0x40 | ||
| 142 | #define TWL4030_OFFSET_CNCL_SEL_ALL 0x60 | ||
| 143 | #define TWL4030_MICAMPL_EN 0x10 | ||
| 144 | #define TWL4030_CKMIC_EN 0x08 | ||
| 145 | #define TWL4030_AUXL_EN 0x04 | ||
| 146 | #define TWL4030_HSMIC_EN 0x02 | ||
| 147 | #define TWL4030_MAINMIC_EN 0x01 | ||
| 148 | |||
| 149 | /* ANAMICR (0x06) Fields */ | ||
| 150 | #define TWL4030_MICAMPR_EN 0x10 | ||
| 151 | #define TWL4030_AUXR_EN 0x04 | ||
| 152 | #define TWL4030_SUBMIC_EN 0x01 | ||
| 153 | |||
| 154 | /* AVADC_CTL (0x07) Fields */ | ||
| 155 | #define TWL4030_ADCL_EN 0x08 | ||
| 156 | #define TWL4030_AVADC_CLK_PRIORITY 0x04 | ||
| 157 | #define TWL4030_ADCR_EN 0x02 | ||
| 158 | |||
| 159 | /* TWL4030_REG_ADCMICSEL (0x08) Fields */ | ||
| 160 | #define TWL4030_DIGMIC1_EN 0x08 | ||
| 161 | #define TWL4030_TX2IN_SEL 0x04 | ||
| 162 | #define TWL4030_DIGMIC0_EN 0x02 | ||
| 163 | #define TWL4030_TX1IN_SEL 0x01 | ||
| 164 | |||
| 165 | /* AUDIO_IF (0x0E) Fields */ | ||
| 166 | #define TWL4030_AIF_SLAVE_EN 0x80 | ||
| 167 | #define TWL4030_DATA_WIDTH 0x60 | ||
| 168 | #define TWL4030_DATA_WIDTH_16S_16W 0x00 | ||
| 169 | #define TWL4030_DATA_WIDTH_32S_16W 0x40 | ||
| 170 | #define TWL4030_DATA_WIDTH_32S_24W 0x60 | ||
| 171 | #define TWL4030_AIF_FORMAT 0x18 | ||
| 172 | #define TWL4030_AIF_FORMAT_CODEC 0x00 | ||
| 173 | #define TWL4030_AIF_FORMAT_LEFT 0x08 | ||
| 174 | #define TWL4030_AIF_FORMAT_RIGHT 0x10 | ||
| 175 | #define TWL4030_AIF_FORMAT_TDM 0x18 | ||
| 176 | #define TWL4030_AIF_TRI_EN 0x04 | ||
| 177 | #define TWL4030_CLK256FS_EN 0x02 | ||
| 178 | #define TWL4030_AIF_EN 0x01 | ||
| 179 | |||
| 180 | /* VOICE_IF (0x0F) Fields */ | ||
| 181 | #define TWL4030_VIF_SLAVE_EN 0x80 | ||
| 182 | #define TWL4030_VIF_DIN_EN 0x40 | ||
| 183 | #define TWL4030_VIF_DOUT_EN 0x20 | ||
| 184 | #define TWL4030_VIF_SWAP 0x10 | ||
| 185 | #define TWL4030_VIF_FORMAT 0x08 | ||
| 186 | #define TWL4030_VIF_TRI_EN 0x04 | ||
| 187 | #define TWL4030_VIF_SUB_EN 0x02 | ||
| 188 | #define TWL4030_VIF_EN 0x01 | ||
| 189 | |||
| 190 | /* EAR_CTL (0x21) */ | ||
| 191 | #define TWL4030_EAR_GAIN 0x30 | ||
| 192 | |||
| 193 | /* HS_GAIN_SET (0x23) Fields */ | ||
| 194 | #define TWL4030_HSR_GAIN 0x0C | ||
| 195 | #define TWL4030_HSR_GAIN_PWR_DOWN 0x00 | ||
| 196 | #define TWL4030_HSR_GAIN_PLUS_6DB 0x04 | ||
| 197 | #define TWL4030_HSR_GAIN_0DB 0x08 | ||
| 198 | #define TWL4030_HSR_GAIN_MINUS_6DB 0x0C | ||
| 199 | #define TWL4030_HSL_GAIN 0x03 | ||
| 200 | #define TWL4030_HSL_GAIN_PWR_DOWN 0x00 | ||
| 201 | #define TWL4030_HSL_GAIN_PLUS_6DB 0x01 | ||
| 202 | #define TWL4030_HSL_GAIN_0DB 0x02 | ||
| 203 | #define TWL4030_HSL_GAIN_MINUS_6DB 0x03 | ||
| 204 | |||
| 205 | /* HS_POPN_SET (0x24) Fields */ | ||
| 206 | #define TWL4030_VMID_EN 0x40 | ||
| 207 | #define TWL4030_EXTMUTE 0x20 | ||
| 208 | #define TWL4030_RAMP_DELAY 0x1C | ||
| 209 | #define TWL4030_RAMP_DELAY_20MS 0x00 | ||
| 210 | #define TWL4030_RAMP_DELAY_40MS 0x04 | ||
| 211 | #define TWL4030_RAMP_DELAY_81MS 0x08 | ||
| 212 | #define TWL4030_RAMP_DELAY_161MS 0x0C | ||
| 213 | #define TWL4030_RAMP_DELAY_323MS 0x10 | ||
| 214 | #define TWL4030_RAMP_DELAY_645MS 0x14 | ||
| 215 | #define TWL4030_RAMP_DELAY_1291MS 0x18 | ||
| 216 | #define TWL4030_RAMP_DELAY_2581MS 0x1C | ||
| 217 | #define TWL4030_RAMP_EN 0x02 | ||
| 218 | |||
| 219 | /* PREDL_CTL (0x25) */ | ||
| 220 | #define TWL4030_PREDL_GAIN 0x30 | ||
| 221 | |||
| 222 | /* PREDR_CTL (0x26) */ | ||
| 223 | #define TWL4030_PREDR_GAIN 0x30 | ||
| 224 | |||
| 225 | /* PRECKL_CTL (0x27) */ | ||
| 226 | #define TWL4030_PRECKL_GAIN 0x30 | ||
| 227 | |||
| 228 | /* PRECKR_CTL (0x28) */ | ||
| 229 | #define TWL4030_PRECKR_GAIN 0x30 | ||
| 230 | |||
| 231 | /* HFL_CTL (0x29, 0x2A) Fields */ | ||
| 232 | #define TWL4030_HF_CTL_HB_EN 0x04 | ||
| 233 | #define TWL4030_HF_CTL_LOOP_EN 0x08 | ||
| 234 | #define TWL4030_HF_CTL_RAMP_EN 0x10 | ||
| 235 | #define TWL4030_HF_CTL_REF_EN 0x20 | ||
| 236 | |||
| 237 | /* APLL_CTL (0x3A) Fields */ | ||
| 238 | #define TWL4030_APLL_EN 0x10 | ||
| 239 | #define TWL4030_APLL_INFREQ 0x0F | ||
| 240 | #define TWL4030_APLL_INFREQ_19200KHZ 0x05 | ||
| 241 | #define TWL4030_APLL_INFREQ_26000KHZ 0x06 | ||
| 242 | #define TWL4030_APLL_INFREQ_38400KHZ 0x0F | ||
| 243 | |||
| 244 | /* REG_MISC_SET_1 (0x3E) Fields */ | ||
| 245 | #define TWL4030_CLK64_EN 0x80 | ||
| 246 | #define TWL4030_SCRAMBLE_EN 0x40 | ||
| 247 | #define TWL4030_FMLOOP_EN 0x20 | ||
| 248 | #define TWL4030_SMOOTH_ANAVOL_EN 0x02 | ||
| 249 | #define TWL4030_DIGMIC_LR_SWAP_EN 0x01 | ||
| 250 | |||
| 251 | /* VIBRA_CTL (0x45) */ | ||
| 252 | #define TWL4030_VIBRA_EN 0x01 | ||
| 253 | #define TWL4030_VIBRA_DIR 0x02 | ||
| 254 | #define TWL4030_VIBRA_AUDIO_SEL_L1 (0x00 << 2) | ||
| 255 | #define TWL4030_VIBRA_AUDIO_SEL_R1 (0x01 << 2) | ||
| 256 | #define TWL4030_VIBRA_AUDIO_SEL_L2 (0x02 << 2) | ||
| 257 | #define TWL4030_VIBRA_AUDIO_SEL_R2 (0x03 << 2) | ||
| 258 | #define TWL4030_VIBRA_SEL 0x10 | ||
| 259 | #define TWL4030_VIBRA_DIR_SEL 0x20 | ||
| 260 | |||
| 261 | /* TWL4030 codec resource IDs */ | ||
| 262 | enum twl4030_codec_res { | ||
| 263 | TWL4030_CODEC_RES_POWER = 0, | ||
| 264 | TWL4030_CODEC_RES_APLL, | ||
| 265 | TWL4030_CODEC_RES_MAX, | ||
| 266 | }; | ||
| 267 | |||
| 268 | int twl4030_codec_disable_resource(enum twl4030_codec_res id); | ||
| 269 | int twl4030_codec_enable_resource(enum twl4030_codec_res id); | ||
| 270 | unsigned int twl4030_codec_get_mclk(void); | ||
| 271 | |||
| 272 | #endif /* End of __TWL4030_CODEC_H__ */ | ||
diff --git a/include/linux/mfd/ucb1x00.h b/include/linux/mfd/ucb1x00.h new file mode 100644 index 000000000000..aa9c3789bed4 --- /dev/null +++ b/include/linux/mfd/ucb1x00.h | |||
| @@ -0,0 +1,258 @@ | |||
| 1 | /* | ||
| 2 | * linux/include/mfd/ucb1x00.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2001 Russell King, All Rights Reserved. | ||
| 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. | ||
| 9 | */ | ||
| 10 | #ifndef UCB1200_H | ||
| 11 | #define UCB1200_H | ||
| 12 | |||
| 13 | #include <linux/mfd/mcp.h> | ||
| 14 | #include <linux/gpio.h> | ||
| 15 | |||
| 16 | #define UCB_IO_DATA 0x00 | ||
| 17 | #define UCB_IO_DIR 0x01 | ||
| 18 | |||
| 19 | #define UCB_IO_0 (1 << 0) | ||
| 20 | #define UCB_IO_1 (1 << 1) | ||
| 21 | #define UCB_IO_2 (1 << 2) | ||
| 22 | #define UCB_IO_3 (1 << 3) | ||
| 23 | #define UCB_IO_4 (1 << 4) | ||
| 24 | #define UCB_IO_5 (1 << 5) | ||
| 25 | #define UCB_IO_6 (1 << 6) | ||
| 26 | #define UCB_IO_7 (1 << 7) | ||
| 27 | #define UCB_IO_8 (1 << 8) | ||
| 28 | #define UCB_IO_9 (1 << 9) | ||
| 29 | |||
| 30 | #define UCB_IE_RIS 0x02 | ||
| 31 | #define UCB_IE_FAL 0x03 | ||
| 32 | #define UCB_IE_STATUS 0x04 | ||
| 33 | #define UCB_IE_CLEAR 0x04 | ||
| 34 | #define UCB_IE_ADC (1 << 11) | ||
| 35 | #define UCB_IE_TSPX (1 << 12) | ||
| 36 | #define UCB_IE_TSMX (1 << 13) | ||
| 37 | #define UCB_IE_TCLIP (1 << 14) | ||
| 38 | #define UCB_IE_ACLIP (1 << 15) | ||
| 39 | |||
| 40 | #define UCB_IRQ_TSPX 12 | ||
| 41 | |||
| 42 | #define UCB_TC_A 0x05 | ||
| 43 | #define UCB_TC_A_LOOP (1 << 7) /* UCB1200 */ | ||
| 44 | #define UCB_TC_A_AMPL (1 << 7) /* UCB1300 */ | ||
| 45 | |||
| 46 | #define UCB_TC_B 0x06 | ||
| 47 | #define UCB_TC_B_VOICE_ENA (1 << 3) | ||
| 48 | #define UCB_TC_B_CLIP (1 << 4) | ||
| 49 | #define UCB_TC_B_ATT (1 << 6) | ||
| 50 | #define UCB_TC_B_SIDE_ENA (1 << 11) | ||
| 51 | #define UCB_TC_B_MUTE (1 << 13) | ||
| 52 | #define UCB_TC_B_IN_ENA (1 << 14) | ||
| 53 | #define UCB_TC_B_OUT_ENA (1 << 15) | ||
| 54 | |||
| 55 | #define UCB_AC_A 0x07 | ||
| 56 | #define UCB_AC_B 0x08 | ||
| 57 | #define UCB_AC_B_LOOP (1 << 8) | ||
| 58 | #define UCB_AC_B_MUTE (1 << 13) | ||
| 59 | #define UCB_AC_B_IN_ENA (1 << 14) | ||
| 60 | #define UCB_AC_B_OUT_ENA (1 << 15) | ||
| 61 | |||
| 62 | #define UCB_TS_CR 0x09 | ||
| 63 | #define UCB_TS_CR_TSMX_POW (1 << 0) | ||
| 64 | #define UCB_TS_CR_TSPX_POW (1 << 1) | ||
| 65 | #define UCB_TS_CR_TSMY_POW (1 << 2) | ||
| 66 | #define UCB_TS_CR_TSPY_POW (1 << 3) | ||
| 67 | #define UCB_TS_CR_TSMX_GND (1 << 4) | ||
| 68 | #define UCB_TS_CR_TSPX_GND (1 << 5) | ||
| 69 | #define UCB_TS_CR_TSMY_GND (1 << 6) | ||
| 70 | #define UCB_TS_CR_TSPY_GND (1 << 7) | ||
| 71 | #define UCB_TS_CR_MODE_INT (0 << 8) | ||
| 72 | #define UCB_TS_CR_MODE_PRES (1 << 8) | ||
| 73 | #define UCB_TS_CR_MODE_POS (2 << 8) | ||
| 74 | #define UCB_TS_CR_BIAS_ENA (1 << 11) | ||
| 75 | #define UCB_TS_CR_TSPX_LOW (1 << 12) | ||
| 76 | #define UCB_TS_CR_TSMX_LOW (1 << 13) | ||
| 77 | |||
| 78 | #define UCB_ADC_CR 0x0a | ||
| 79 | #define UCB_ADC_SYNC_ENA (1 << 0) | ||
| 80 | #define UCB_ADC_VREFBYP_CON (1 << 1) | ||
| 81 | #define UCB_ADC_INP_TSPX (0 << 2) | ||
| 82 | #define UCB_ADC_INP_TSMX (1 << 2) | ||
| 83 | #define UCB_ADC_INP_TSPY (2 << 2) | ||
| 84 | #define UCB_ADC_INP_TSMY (3 << 2) | ||
| 85 | #define UCB_ADC_INP_AD0 (4 << 2) | ||
| 86 | #define UCB_ADC_INP_AD1 (5 << 2) | ||
| 87 | #define UCB_ADC_INP_AD2 (6 << 2) | ||
| 88 | #define UCB_ADC_INP_AD3 (7 << 2) | ||
| 89 | #define UCB_ADC_EXT_REF (1 << 5) | ||
| 90 | #define UCB_ADC_START (1 << 7) | ||
| 91 | #define UCB_ADC_ENA (1 << 15) | ||
| 92 | |||
| 93 | #define UCB_ADC_DATA 0x0b | ||
| 94 | #define UCB_ADC_DAT_VAL (1 << 15) | ||
| 95 | #define UCB_ADC_DAT(x) (((x) & 0x7fe0) >> 5) | ||
| 96 | |||
| 97 | #define UCB_ID 0x0c | ||
| 98 | #define UCB_ID_1200 0x1004 | ||
| 99 | #define UCB_ID_1300 0x1005 | ||
| 100 | #define UCB_ID_TC35143 0x9712 | ||
| 101 | |||
| 102 | #define UCB_MODE 0x0d | ||
| 103 | #define UCB_MODE_DYN_VFLAG_ENA (1 << 12) | ||
| 104 | #define UCB_MODE_AUD_OFF_CAN (1 << 13) | ||
| 105 | |||
| 106 | |||
| 107 | struct ucb1x00_irq { | ||
| 108 | void *devid; | ||
| 109 | void (*fn)(int, void *); | ||
| 110 | }; | ||
| 111 | |||
| 112 | struct ucb1x00 { | ||
| 113 | spinlock_t lock; | ||
| 114 | struct mcp *mcp; | ||
| 115 | unsigned int irq; | ||
| 116 | struct semaphore adc_sem; | ||
| 117 | spinlock_t io_lock; | ||
| 118 | u16 id; | ||
| 119 | u16 io_dir; | ||
| 120 | u16 io_out; | ||
| 121 | u16 adc_cr; | ||
| 122 | u16 irq_fal_enbl; | ||
| 123 | u16 irq_ris_enbl; | ||
| 124 | struct ucb1x00_irq irq_handler[16]; | ||
| 125 | struct device dev; | ||
| 126 | struct list_head node; | ||
| 127 | struct list_head devs; | ||
| 128 | struct gpio_chip gpio; | ||
| 129 | }; | ||
| 130 | |||
| 131 | struct ucb1x00_driver; | ||
| 132 | |||
| 133 | struct ucb1x00_dev { | ||
| 134 | struct list_head dev_node; | ||
| 135 | struct list_head drv_node; | ||
| 136 | struct ucb1x00 *ucb; | ||
| 137 | struct ucb1x00_driver *drv; | ||
| 138 | void *priv; | ||
| 139 | }; | ||
| 140 | |||
| 141 | struct ucb1x00_driver { | ||
| 142 | struct list_head node; | ||
| 143 | struct list_head devs; | ||
| 144 | int (*add)(struct ucb1x00_dev *dev); | ||
| 145 | void (*remove)(struct ucb1x00_dev *dev); | ||
| 146 | int (*suspend)(struct ucb1x00_dev *dev, pm_message_t state); | ||
| 147 | int (*resume)(struct ucb1x00_dev *dev); | ||
| 148 | }; | ||
| 149 | |||
| 150 | #define classdev_to_ucb1x00(cd) container_of(cd, struct ucb1x00, dev) | ||
| 151 | |||
| 152 | int ucb1x00_register_driver(struct ucb1x00_driver *); | ||
| 153 | void ucb1x00_unregister_driver(struct ucb1x00_driver *); | ||
| 154 | |||
| 155 | /** | ||
| 156 | * ucb1x00_clkrate - return the UCB1x00 SIB clock rate | ||
| 157 | * @ucb: UCB1x00 structure describing chip | ||
| 158 | * | ||
| 159 | * Return the SIB clock rate in Hz. | ||
| 160 | */ | ||
| 161 | static inline unsigned int ucb1x00_clkrate(struct ucb1x00 *ucb) | ||
| 162 | { | ||
| 163 | return mcp_get_sclk_rate(ucb->mcp); | ||
| 164 | } | ||
| 165 | |||
| 166 | /** | ||
| 167 | * ucb1x00_enable - enable the UCB1x00 SIB clock | ||
| 168 | * @ucb: UCB1x00 structure describing chip | ||
| 169 | * | ||
| 170 | * Enable the SIB clock. This can be called multiple times. | ||
| 171 | */ | ||
| 172 | static inline void ucb1x00_enable(struct ucb1x00 *ucb) | ||
| 173 | { | ||
| 174 | mcp_enable(ucb->mcp); | ||
| 175 | } | ||
| 176 | |||
| 177 | /** | ||
| 178 | * ucb1x00_disable - disable the UCB1x00 SIB clock | ||
| 179 | * @ucb: UCB1x00 structure describing chip | ||
| 180 | * | ||
| 181 | * Disable the SIB clock. The SIB clock will only be disabled | ||
| 182 | * when the number of ucb1x00_enable calls match the number of | ||
| 183 | * ucb1x00_disable calls. | ||
| 184 | */ | ||
| 185 | static inline void ucb1x00_disable(struct ucb1x00 *ucb) | ||
| 186 | { | ||
| 187 | mcp_disable(ucb->mcp); | ||
| 188 | } | ||
| 189 | |||
| 190 | /** | ||
| 191 | * ucb1x00_reg_write - write a UCB1x00 register | ||
| 192 | * @ucb: UCB1x00 structure describing chip | ||
| 193 | * @reg: UCB1x00 4-bit register index to write | ||
| 194 | * @val: UCB1x00 16-bit value to write | ||
| 195 | * | ||
| 196 | * Write the UCB1x00 register @reg with value @val. The SIB | ||
| 197 | * clock must be running for this function to return. | ||
| 198 | */ | ||
| 199 | static inline void ucb1x00_reg_write(struct ucb1x00 *ucb, unsigned int reg, unsigned int val) | ||
| 200 | { | ||
| 201 | mcp_reg_write(ucb->mcp, reg, val); | ||
| 202 | } | ||
| 203 | |||
| 204 | /** | ||
| 205 | * ucb1x00_reg_read - read a UCB1x00 register | ||
| 206 | * @ucb: UCB1x00 structure describing chip | ||
| 207 | * @reg: UCB1x00 4-bit register index to write | ||
| 208 | * | ||
| 209 | * Read the UCB1x00 register @reg and return its value. The SIB | ||
| 210 | * clock must be running for this function to return. | ||
| 211 | */ | ||
| 212 | static inline unsigned int ucb1x00_reg_read(struct ucb1x00 *ucb, unsigned int reg) | ||
| 213 | { | ||
| 214 | return mcp_reg_read(ucb->mcp, reg); | ||
| 215 | } | ||
| 216 | /** | ||
| 217 | * ucb1x00_set_audio_divisor - | ||
| 218 | * @ucb: UCB1x00 structure describing chip | ||
| 219 | * @div: SIB clock divisor | ||
| 220 | */ | ||
| 221 | static inline void ucb1x00_set_audio_divisor(struct ucb1x00 *ucb, unsigned int div) | ||
| 222 | { | ||
| 223 | mcp_set_audio_divisor(ucb->mcp, div); | ||
| 224 | } | ||
| 225 | |||
| 226 | /** | ||
| 227 | * ucb1x00_set_telecom_divisor - | ||
| 228 | * @ucb: UCB1x00 structure describing chip | ||
| 229 | * @div: SIB clock divisor | ||
| 230 | */ | ||
| 231 | static inline void ucb1x00_set_telecom_divisor(struct ucb1x00 *ucb, unsigned int div) | ||
| 232 | { | ||
| 233 | mcp_set_telecom_divisor(ucb->mcp, div); | ||
| 234 | } | ||
| 235 | |||
| 236 | void ucb1x00_io_set_dir(struct ucb1x00 *ucb, unsigned int, unsigned int); | ||
| 237 | void ucb1x00_io_write(struct ucb1x00 *ucb, unsigned int, unsigned int); | ||
| 238 | unsigned int ucb1x00_io_read(struct ucb1x00 *ucb); | ||
| 239 | |||
| 240 | #define UCB_NOSYNC (0) | ||
| 241 | #define UCB_SYNC (1) | ||
| 242 | |||
| 243 | unsigned int ucb1x00_adc_read(struct ucb1x00 *ucb, int adc_channel, int sync); | ||
| 244 | void ucb1x00_adc_enable(struct ucb1x00 *ucb); | ||
| 245 | void ucb1x00_adc_disable(struct ucb1x00 *ucb); | ||
| 246 | |||
| 247 | /* | ||
| 248 | * Which edges of the IRQ do you want to control today? | ||
| 249 | */ | ||
| 250 | #define UCB_RISING (1 << 0) | ||
| 251 | #define UCB_FALLING (1 << 1) | ||
| 252 | |||
| 253 | int ucb1x00_hook_irq(struct ucb1x00 *ucb, unsigned int idx, void (*fn)(int, void *), void *devid); | ||
| 254 | void ucb1x00_enable_irq(struct ucb1x00 *ucb, unsigned int idx, int edges); | ||
| 255 | void ucb1x00_disable_irq(struct ucb1x00 *ucb, unsigned int idx, int edges); | ||
| 256 | int ucb1x00_free_irq(struct ucb1x00 *ucb, unsigned int idx, void *devid); | ||
| 257 | |||
| 258 | #endif | ||
diff --git a/include/linux/mfd/wm831x/auxadc.h b/include/linux/mfd/wm831x/auxadc.h new file mode 100644 index 000000000000..b132067e9e99 --- /dev/null +++ b/include/linux/mfd/wm831x/auxadc.h | |||
| @@ -0,0 +1,216 @@ | |||
| 1 | /* | ||
| 2 | * include/linux/mfd/wm831x/auxadc.h -- Auxiliary ADC interface for WM831x | ||
| 3 | * | ||
| 4 | * Copyright 2009 Wolfson Microelectronics PLC. | ||
| 5 | * | ||
| 6 | * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify it | ||
| 9 | * under the terms of the GNU General Public License as published by the | ||
| 10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 11 | * option) any later version. | ||
| 12 | * | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __MFD_WM831X_AUXADC_H__ | ||
| 16 | #define __MFD_WM831X_AUXADC_H__ | ||
| 17 | |||
| 18 | /* | ||
| 19 | * R16429 (0x402D) - AuxADC Data | ||
| 20 | */ | ||
| 21 | #define WM831X_AUX_DATA_SRC_MASK 0xF000 /* AUX_DATA_SRC - [15:12] */ | ||
| 22 | #define WM831X_AUX_DATA_SRC_SHIFT 12 /* AUX_DATA_SRC - [15:12] */ | ||
| 23 | #define WM831X_AUX_DATA_SRC_WIDTH 4 /* AUX_DATA_SRC - [15:12] */ | ||
| 24 | #define WM831X_AUX_DATA_MASK 0x0FFF /* AUX_DATA - [11:0] */ | ||
| 25 | #define WM831X_AUX_DATA_SHIFT 0 /* AUX_DATA - [11:0] */ | ||
| 26 | #define WM831X_AUX_DATA_WIDTH 12 /* AUX_DATA - [11:0] */ | ||
| 27 | |||
| 28 | /* | ||
| 29 | * R16430 (0x402E) - AuxADC Control | ||
| 30 | */ | ||
| 31 | #define WM831X_AUX_ENA 0x8000 /* AUX_ENA */ | ||
| 32 | #define WM831X_AUX_ENA_MASK 0x8000 /* AUX_ENA */ | ||
| 33 | #define WM831X_AUX_ENA_SHIFT 15 /* AUX_ENA */ | ||
| 34 | #define WM831X_AUX_ENA_WIDTH 1 /* AUX_ENA */ | ||
| 35 | #define WM831X_AUX_CVT_ENA 0x4000 /* AUX_CVT_ENA */ | ||
| 36 | #define WM831X_AUX_CVT_ENA_MASK 0x4000 /* AUX_CVT_ENA */ | ||
| 37 | #define WM831X_AUX_CVT_ENA_SHIFT 14 /* AUX_CVT_ENA */ | ||
| 38 | #define WM831X_AUX_CVT_ENA_WIDTH 1 /* AUX_CVT_ENA */ | ||
| 39 | #define WM831X_AUX_SLPENA 0x1000 /* AUX_SLPENA */ | ||
| 40 | #define WM831X_AUX_SLPENA_MASK 0x1000 /* AUX_SLPENA */ | ||
| 41 | #define WM831X_AUX_SLPENA_SHIFT 12 /* AUX_SLPENA */ | ||
| 42 | #define WM831X_AUX_SLPENA_WIDTH 1 /* AUX_SLPENA */ | ||
| 43 | #define WM831X_AUX_FRC_ENA 0x0800 /* AUX_FRC_ENA */ | ||
| 44 | #define WM831X_AUX_FRC_ENA_MASK 0x0800 /* AUX_FRC_ENA */ | ||
| 45 | #define WM831X_AUX_FRC_ENA_SHIFT 11 /* AUX_FRC_ENA */ | ||
| 46 | #define WM831X_AUX_FRC_ENA_WIDTH 1 /* AUX_FRC_ENA */ | ||
| 47 | #define WM831X_AUX_RATE_MASK 0x003F /* AUX_RATE - [5:0] */ | ||
| 48 | #define WM831X_AUX_RATE_SHIFT 0 /* AUX_RATE - [5:0] */ | ||
| 49 | #define WM831X_AUX_RATE_WIDTH 6 /* AUX_RATE - [5:0] */ | ||
| 50 | |||
| 51 | /* | ||
| 52 | * R16431 (0x402F) - AuxADC Source | ||
| 53 | */ | ||
| 54 | #define WM831X_AUX_CAL_SEL 0x8000 /* AUX_CAL_SEL */ | ||
| 55 | #define WM831X_AUX_CAL_SEL_MASK 0x8000 /* AUX_CAL_SEL */ | ||
| 56 | #define WM831X_AUX_CAL_SEL_SHIFT 15 /* AUX_CAL_SEL */ | ||
| 57 | #define WM831X_AUX_CAL_SEL_WIDTH 1 /* AUX_CAL_SEL */ | ||
| 58 | #define WM831X_AUX_BKUP_BATT_SEL 0x0400 /* AUX_BKUP_BATT_SEL */ | ||
| 59 | #define WM831X_AUX_BKUP_BATT_SEL_MASK 0x0400 /* AUX_BKUP_BATT_SEL */ | ||
| 60 | #define WM831X_AUX_BKUP_BATT_SEL_SHIFT 10 /* AUX_BKUP_BATT_SEL */ | ||
| 61 | #define WM831X_AUX_BKUP_BATT_SEL_WIDTH 1 /* AUX_BKUP_BATT_SEL */ | ||
| 62 | #define WM831X_AUX_WALL_SEL 0x0200 /* AUX_WALL_SEL */ | ||
| 63 | #define WM831X_AUX_WALL_SEL_MASK 0x0200 /* AUX_WALL_SEL */ | ||
| 64 | #define WM831X_AUX_WALL_SEL_SHIFT 9 /* AUX_WALL_SEL */ | ||
| 65 | #define WM831X_AUX_WALL_SEL_WIDTH 1 /* AUX_WALL_SEL */ | ||
| 66 | #define WM831X_AUX_BATT_SEL 0x0100 /* AUX_BATT_SEL */ | ||
| 67 | #define WM831X_AUX_BATT_SEL_MASK 0x0100 /* AUX_BATT_SEL */ | ||
| 68 | #define WM831X_AUX_BATT_SEL_SHIFT 8 /* AUX_BATT_SEL */ | ||
| 69 | #define WM831X_AUX_BATT_SEL_WIDTH 1 /* AUX_BATT_SEL */ | ||
| 70 | #define WM831X_AUX_USB_SEL 0x0080 /* AUX_USB_SEL */ | ||
| 71 | #define WM831X_AUX_USB_SEL_MASK 0x0080 /* AUX_USB_SEL */ | ||
| 72 | #define WM831X_AUX_USB_SEL_SHIFT 7 /* AUX_USB_SEL */ | ||
| 73 | #define WM831X_AUX_USB_SEL_WIDTH 1 /* AUX_USB_SEL */ | ||
| 74 | #define WM831X_AUX_SYSVDD_SEL 0x0040 /* AUX_SYSVDD_SEL */ | ||
| 75 | #define WM831X_AUX_SYSVDD_SEL_MASK 0x0040 /* AUX_SYSVDD_SEL */ | ||
| 76 | #define WM831X_AUX_SYSVDD_SEL_SHIFT 6 /* AUX_SYSVDD_SEL */ | ||
| 77 | #define WM831X_AUX_SYSVDD_SEL_WIDTH 1 /* AUX_SYSVDD_SEL */ | ||
| 78 | #define WM831X_AUX_BATT_TEMP_SEL 0x0020 /* AUX_BATT_TEMP_SEL */ | ||
| 79 | #define WM831X_AUX_BATT_TEMP_SEL_MASK 0x0020 /* AUX_BATT_TEMP_SEL */ | ||
| 80 | #define WM831X_AUX_BATT_TEMP_SEL_SHIFT 5 /* AUX_BATT_TEMP_SEL */ | ||
| 81 | #define WM831X_AUX_BATT_TEMP_SEL_WIDTH 1 /* AUX_BATT_TEMP_SEL */ | ||
| 82 | #define WM831X_AUX_CHIP_TEMP_SEL 0x0010 /* AUX_CHIP_TEMP_SEL */ | ||
| 83 | #define WM831X_AUX_CHIP_TEMP_SEL_MASK 0x0010 /* AUX_CHIP_TEMP_SEL */ | ||
| 84 | #define WM831X_AUX_CHIP_TEMP_SEL_SHIFT 4 /* AUX_CHIP_TEMP_SEL */ | ||
| 85 | #define WM831X_AUX_CHIP_TEMP_SEL_WIDTH 1 /* AUX_CHIP_TEMP_SEL */ | ||
| 86 | #define WM831X_AUX_AUX4_SEL 0x0008 /* AUX_AUX4_SEL */ | ||
| 87 | #define WM831X_AUX_AUX4_SEL_MASK 0x0008 /* AUX_AUX4_SEL */ | ||
| 88 | #define WM831X_AUX_AUX4_SEL_SHIFT 3 /* AUX_AUX4_SEL */ | ||
| 89 | #define WM831X_AUX_AUX4_SEL_WIDTH 1 /* AUX_AUX4_SEL */ | ||
| 90 | #define WM831X_AUX_AUX3_SEL 0x0004 /* AUX_AUX3_SEL */ | ||
| 91 | #define WM831X_AUX_AUX3_SEL_MASK 0x0004 /* AUX_AUX3_SEL */ | ||
| 92 | #define WM831X_AUX_AUX3_SEL_SHIFT 2 /* AUX_AUX3_SEL */ | ||
| 93 | #define WM831X_AUX_AUX3_SEL_WIDTH 1 /* AUX_AUX3_SEL */ | ||
| 94 | #define WM831X_AUX_AUX2_SEL 0x0002 /* AUX_AUX2_SEL */ | ||
| 95 | #define WM831X_AUX_AUX2_SEL_MASK 0x0002 /* AUX_AUX2_SEL */ | ||
| 96 | #define WM831X_AUX_AUX2_SEL_SHIFT 1 /* AUX_AUX2_SEL */ | ||
| 97 | #define WM831X_AUX_AUX2_SEL_WIDTH 1 /* AUX_AUX2_SEL */ | ||
| 98 | #define WM831X_AUX_AUX1_SEL 0x0001 /* AUX_AUX1_SEL */ | ||
| 99 | #define WM831X_AUX_AUX1_SEL_MASK 0x0001 /* AUX_AUX1_SEL */ | ||
| 100 | #define WM831X_AUX_AUX1_SEL_SHIFT 0 /* AUX_AUX1_SEL */ | ||
| 101 | #define WM831X_AUX_AUX1_SEL_WIDTH 1 /* AUX_AUX1_SEL */ | ||
| 102 | |||
| 103 | /* | ||
| 104 | * R16432 (0x4030) - Comparator Control | ||
| 105 | */ | ||
| 106 | #define WM831X_DCOMP4_STS 0x0800 /* DCOMP4_STS */ | ||
| 107 | #define WM831X_DCOMP4_STS_MASK 0x0800 /* DCOMP4_STS */ | ||
| 108 | #define WM831X_DCOMP4_STS_SHIFT 11 /* DCOMP4_STS */ | ||
| 109 | #define WM831X_DCOMP4_STS_WIDTH 1 /* DCOMP4_STS */ | ||
| 110 | #define WM831X_DCOMP3_STS 0x0400 /* DCOMP3_STS */ | ||
| 111 | #define WM831X_DCOMP3_STS_MASK 0x0400 /* DCOMP3_STS */ | ||
| 112 | #define WM831X_DCOMP3_STS_SHIFT 10 /* DCOMP3_STS */ | ||
| 113 | #define WM831X_DCOMP3_STS_WIDTH 1 /* DCOMP3_STS */ | ||
| 114 | #define WM831X_DCOMP2_STS 0x0200 /* DCOMP2_STS */ | ||
| 115 | #define WM831X_DCOMP2_STS_MASK 0x0200 /* DCOMP2_STS */ | ||
| 116 | #define WM831X_DCOMP2_STS_SHIFT 9 /* DCOMP2_STS */ | ||
| 117 | #define WM831X_DCOMP2_STS_WIDTH 1 /* DCOMP2_STS */ | ||
| 118 | #define WM831X_DCOMP1_STS 0x0100 /* DCOMP1_STS */ | ||
| 119 | #define WM831X_DCOMP1_STS_MASK 0x0100 /* DCOMP1_STS */ | ||
| 120 | #define WM831X_DCOMP1_STS_SHIFT 8 /* DCOMP1_STS */ | ||
| 121 | #define WM831X_DCOMP1_STS_WIDTH 1 /* DCOMP1_STS */ | ||
| 122 | #define WM831X_DCMP4_ENA 0x0008 /* DCMP4_ENA */ | ||
| 123 | #define WM831X_DCMP4_ENA_MASK 0x0008 /* DCMP4_ENA */ | ||
| 124 | #define WM831X_DCMP4_ENA_SHIFT 3 /* DCMP4_ENA */ | ||
| 125 | #define WM831X_DCMP4_ENA_WIDTH 1 /* DCMP4_ENA */ | ||
| 126 | #define WM831X_DCMP3_ENA 0x0004 /* DCMP3_ENA */ | ||
| 127 | #define WM831X_DCMP3_ENA_MASK 0x0004 /* DCMP3_ENA */ | ||
| 128 | #define WM831X_DCMP3_ENA_SHIFT 2 /* DCMP3_ENA */ | ||
| 129 | #define WM831X_DCMP3_ENA_WIDTH 1 /* DCMP3_ENA */ | ||
| 130 | #define WM831X_DCMP2_ENA 0x0002 /* DCMP2_ENA */ | ||
| 131 | #define WM831X_DCMP2_ENA_MASK 0x0002 /* DCMP2_ENA */ | ||
| 132 | #define WM831X_DCMP2_ENA_SHIFT 1 /* DCMP2_ENA */ | ||
| 133 | #define WM831X_DCMP2_ENA_WIDTH 1 /* DCMP2_ENA */ | ||
| 134 | #define WM831X_DCMP1_ENA 0x0001 /* DCMP1_ENA */ | ||
| 135 | #define WM831X_DCMP1_ENA_MASK 0x0001 /* DCMP1_ENA */ | ||
| 136 | #define WM831X_DCMP1_ENA_SHIFT 0 /* DCMP1_ENA */ | ||
| 137 | #define WM831X_DCMP1_ENA_WIDTH 1 /* DCMP1_ENA */ | ||
| 138 | |||
| 139 | /* | ||
| 140 | * R16433 (0x4031) - Comparator 1 | ||
| 141 | */ | ||
| 142 | #define WM831X_DCMP1_SRC_MASK 0xE000 /* DCMP1_SRC - [15:13] */ | ||
| 143 | #define WM831X_DCMP1_SRC_SHIFT 13 /* DCMP1_SRC - [15:13] */ | ||
| 144 | #define WM831X_DCMP1_SRC_WIDTH 3 /* DCMP1_SRC - [15:13] */ | ||
| 145 | #define WM831X_DCMP1_GT 0x1000 /* DCMP1_GT */ | ||
| 146 | #define WM831X_DCMP1_GT_MASK 0x1000 /* DCMP1_GT */ | ||
| 147 | #define WM831X_DCMP1_GT_SHIFT 12 /* DCMP1_GT */ | ||
| 148 | #define WM831X_DCMP1_GT_WIDTH 1 /* DCMP1_GT */ | ||
| 149 | #define WM831X_DCMP1_THR_MASK 0x0FFF /* DCMP1_THR - [11:0] */ | ||
| 150 | #define WM831X_DCMP1_THR_SHIFT 0 /* DCMP1_THR - [11:0] */ | ||
| 151 | #define WM831X_DCMP1_THR_WIDTH 12 /* DCMP1_THR - [11:0] */ | ||
| 152 | |||
| 153 | /* | ||
| 154 | * R16434 (0x4032) - Comparator 2 | ||
| 155 | */ | ||
| 156 | #define WM831X_DCMP2_SRC_MASK 0xE000 /* DCMP2_SRC - [15:13] */ | ||
| 157 | #define WM831X_DCMP2_SRC_SHIFT 13 /* DCMP2_SRC - [15:13] */ | ||
| 158 | #define WM831X_DCMP2_SRC_WIDTH 3 /* DCMP2_SRC - [15:13] */ | ||
| 159 | #define WM831X_DCMP2_GT 0x1000 /* DCMP2_GT */ | ||
| 160 | #define WM831X_DCMP2_GT_MASK 0x1000 /* DCMP2_GT */ | ||
| 161 | #define WM831X_DCMP2_GT_SHIFT 12 /* DCMP2_GT */ | ||
| 162 | #define WM831X_DCMP2_GT_WIDTH 1 /* DCMP2_GT */ | ||
| 163 | #define WM831X_DCMP2_THR_MASK 0x0FFF /* DCMP2_THR - [11:0] */ | ||
| 164 | #define WM831X_DCMP2_THR_SHIFT 0 /* DCMP2_THR - [11:0] */ | ||
| 165 | #define WM831X_DCMP2_THR_WIDTH 12 /* DCMP2_THR - [11:0] */ | ||
| 166 | |||
| 167 | /* | ||
| 168 | * R16435 (0x4033) - Comparator 3 | ||
| 169 | */ | ||
| 170 | #define WM831X_DCMP3_SRC_MASK 0xE000 /* DCMP3_SRC - [15:13] */ | ||
| 171 | #define WM831X_DCMP3_SRC_SHIFT 13 /* DCMP3_SRC - [15:13] */ | ||
| 172 | #define WM831X_DCMP3_SRC_WIDTH 3 /* DCMP3_SRC - [15:13] */ | ||
| 173 | #define WM831X_DCMP3_GT 0x1000 /* DCMP3_GT */ | ||
| 174 | #define WM831X_DCMP3_GT_MASK 0x1000 /* DCMP3_GT */ | ||
| 175 | #define WM831X_DCMP3_GT_SHIFT 12 /* DCMP3_GT */ | ||
| 176 | #define WM831X_DCMP3_GT_WIDTH 1 /* DCMP3_GT */ | ||
| 177 | #define WM831X_DCMP3_THR_MASK 0x0FFF /* DCMP3_THR - [11:0] */ | ||
| 178 | #define WM831X_DCMP3_THR_SHIFT 0 /* DCMP3_THR - [11:0] */ | ||
| 179 | #define WM831X_DCMP3_THR_WIDTH 12 /* DCMP3_THR - [11:0] */ | ||
| 180 | |||
| 181 | /* | ||
| 182 | * R16436 (0x4034) - Comparator 4 | ||
| 183 | */ | ||
| 184 | #define WM831X_DCMP4_SRC_MASK 0xE000 /* DCMP4_SRC - [15:13] */ | ||
| 185 | #define WM831X_DCMP4_SRC_SHIFT 13 /* DCMP4_SRC - [15:13] */ | ||
| 186 | #define WM831X_DCMP4_SRC_WIDTH 3 /* DCMP4_SRC - [15:13] */ | ||
| 187 | #define WM831X_DCMP4_GT 0x1000 /* DCMP4_GT */ | ||
| 188 | #define WM831X_DCMP4_GT_MASK 0x1000 /* DCMP4_GT */ | ||
| 189 | #define WM831X_DCMP4_GT_SHIFT 12 /* DCMP4_GT */ | ||
| 190 | #define WM831X_DCMP4_GT_WIDTH 1 /* DCMP4_GT */ | ||
| 191 | #define WM831X_DCMP4_THR_MASK 0x0FFF /* DCMP4_THR - [11:0] */ | ||
| 192 | #define WM831X_DCMP4_THR_SHIFT 0 /* DCMP4_THR - [11:0] */ | ||
| 193 | #define WM831X_DCMP4_THR_WIDTH 12 /* DCMP4_THR - [11:0] */ | ||
| 194 | |||
| 195 | #define WM831X_AUX_CAL_FACTOR 0xfff | ||
| 196 | #define WM831X_AUX_CAL_NOMINAL 0x222 | ||
| 197 | |||
| 198 | enum wm831x_auxadc { | ||
| 199 | WM831X_AUX_CAL = 15, | ||
| 200 | WM831X_AUX_BKUP_BATT = 10, | ||
| 201 | WM831X_AUX_WALL = 9, | ||
| 202 | WM831X_AUX_BATT = 8, | ||
| 203 | WM831X_AUX_USB = 7, | ||
| 204 | WM831X_AUX_SYSVDD = 6, | ||
| 205 | WM831X_AUX_BATT_TEMP = 5, | ||
| 206 | WM831X_AUX_CHIP_TEMP = 4, | ||
| 207 | WM831X_AUX_AUX4 = 3, | ||
| 208 | WM831X_AUX_AUX3 = 2, | ||
| 209 | WM831X_AUX_AUX2 = 1, | ||
| 210 | WM831X_AUX_AUX1 = 0, | ||
| 211 | }; | ||
| 212 | |||
| 213 | int wm831x_auxadc_read(struct wm831x *wm831x, enum wm831x_auxadc input); | ||
| 214 | int wm831x_auxadc_read_uv(struct wm831x *wm831x, enum wm831x_auxadc input); | ||
| 215 | |||
| 216 | #endif | ||
diff --git a/include/linux/mfd/wm831x/core.h b/include/linux/mfd/wm831x/core.h new file mode 100644 index 000000000000..91eb493bf14c --- /dev/null +++ b/include/linux/mfd/wm831x/core.h | |||
| @@ -0,0 +1,289 @@ | |||
| 1 | /* | ||
| 2 | * include/linux/mfd/wm831x/core.h -- Core interface for WM831x | ||
| 3 | * | ||
| 4 | * Copyright 2009 Wolfson Microelectronics PLC. | ||
| 5 | * | ||
| 6 | * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify it | ||
| 9 | * under the terms of the GNU General Public License as published by the | ||
| 10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 11 | * option) any later version. | ||
| 12 | * | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __MFD_WM831X_CORE_H__ | ||
| 16 | #define __MFD_WM831X_CORE_H__ | ||
| 17 | |||
| 18 | #include <linux/interrupt.h> | ||
| 19 | #include <linux/workqueue.h> | ||
| 20 | |||
| 21 | /* | ||
| 22 | * Register values. | ||
| 23 | */ | ||
| 24 | #define WM831X_RESET_ID 0x00 | ||
| 25 | #define WM831X_REVISION 0x01 | ||
| 26 | #define WM831X_PARENT_ID 0x4000 | ||
| 27 | #define WM831X_SYSVDD_CONTROL 0x4001 | ||
| 28 | #define WM831X_THERMAL_MONITORING 0x4002 | ||
| 29 | #define WM831X_POWER_STATE 0x4003 | ||
| 30 | #define WM831X_WATCHDOG 0x4004 | ||
| 31 | #define WM831X_ON_PIN_CONTROL 0x4005 | ||
| 32 | #define WM831X_RESET_CONTROL 0x4006 | ||
| 33 | #define WM831X_CONTROL_INTERFACE 0x4007 | ||
| 34 | #define WM831X_SECURITY_KEY 0x4008 | ||
| 35 | #define WM831X_SOFTWARE_SCRATCH 0x4009 | ||
| 36 | #define WM831X_OTP_CONTROL 0x400A | ||
| 37 | #define WM831X_GPIO_LEVEL 0x400C | ||
| 38 | #define WM831X_SYSTEM_STATUS 0x400D | ||
| 39 | #define WM831X_ON_SOURCE 0x400E | ||
| 40 | #define WM831X_OFF_SOURCE 0x400F | ||
| 41 | #define WM831X_SYSTEM_INTERRUPTS 0x4010 | ||
| 42 | #define WM831X_INTERRUPT_STATUS_1 0x4011 | ||
| 43 | #define WM831X_INTERRUPT_STATUS_2 0x4012 | ||
| 44 | #define WM831X_INTERRUPT_STATUS_3 0x4013 | ||
| 45 | #define WM831X_INTERRUPT_STATUS_4 0x4014 | ||
| 46 | #define WM831X_INTERRUPT_STATUS_5 0x4015 | ||
| 47 | #define WM831X_IRQ_CONFIG 0x4017 | ||
| 48 | #define WM831X_SYSTEM_INTERRUPTS_MASK 0x4018 | ||
| 49 | #define WM831X_INTERRUPT_STATUS_1_MASK 0x4019 | ||
| 50 | #define WM831X_INTERRUPT_STATUS_2_MASK 0x401A | ||
| 51 | #define WM831X_INTERRUPT_STATUS_3_MASK 0x401B | ||
| 52 | #define WM831X_INTERRUPT_STATUS_4_MASK 0x401C | ||
| 53 | #define WM831X_INTERRUPT_STATUS_5_MASK 0x401D | ||
| 54 | #define WM831X_RTC_WRITE_COUNTER 0x4020 | ||
| 55 | #define WM831X_RTC_TIME_1 0x4021 | ||
| 56 | #define WM831X_RTC_TIME_2 0x4022 | ||
| 57 | #define WM831X_RTC_ALARM_1 0x4023 | ||
| 58 | #define WM831X_RTC_ALARM_2 0x4024 | ||
| 59 | #define WM831X_RTC_CONTROL 0x4025 | ||
| 60 | #define WM831X_RTC_TRIM 0x4026 | ||
| 61 | #define WM831X_TOUCH_CONTROL_1 0x4028 | ||
| 62 | #define WM831X_TOUCH_CONTROL_2 0x4029 | ||
| 63 | #define WM831X_TOUCH_DATA_X 0x402A | ||
| 64 | #define WM831X_TOUCH_DATA_Y 0x402B | ||
| 65 | #define WM831X_TOUCH_DATA_Z 0x402C | ||
| 66 | #define WM831X_AUXADC_DATA 0x402D | ||
| 67 | #define WM831X_AUXADC_CONTROL 0x402E | ||
| 68 | #define WM831X_AUXADC_SOURCE 0x402F | ||
| 69 | #define WM831X_COMPARATOR_CONTROL 0x4030 | ||
| 70 | #define WM831X_COMPARATOR_1 0x4031 | ||
| 71 | #define WM831X_COMPARATOR_2 0x4032 | ||
| 72 | #define WM831X_COMPARATOR_3 0x4033 | ||
| 73 | #define WM831X_COMPARATOR_4 0x4034 | ||
| 74 | #define WM831X_GPIO1_CONTROL 0x4038 | ||
| 75 | #define WM831X_GPIO2_CONTROL 0x4039 | ||
| 76 | #define WM831X_GPIO3_CONTROL 0x403A | ||
| 77 | #define WM831X_GPIO4_CONTROL 0x403B | ||
| 78 | #define WM831X_GPIO5_CONTROL 0x403C | ||
| 79 | #define WM831X_GPIO6_CONTROL 0x403D | ||
| 80 | #define WM831X_GPIO7_CONTROL 0x403E | ||
| 81 | #define WM831X_GPIO8_CONTROL 0x403F | ||
| 82 | #define WM831X_GPIO9_CONTROL 0x4040 | ||
| 83 | #define WM831X_GPIO10_CONTROL 0x4041 | ||
| 84 | #define WM831X_GPIO11_CONTROL 0x4042 | ||
| 85 | #define WM831X_GPIO12_CONTROL 0x4043 | ||
| 86 | #define WM831X_GPIO13_CONTROL 0x4044 | ||
| 87 | #define WM831X_GPIO14_CONTROL 0x4045 | ||
| 88 | #define WM831X_GPIO15_CONTROL 0x4046 | ||
| 89 | #define WM831X_GPIO16_CONTROL 0x4047 | ||
| 90 | #define WM831X_CHARGER_CONTROL_1 0x4048 | ||
| 91 | #define WM831X_CHARGER_CONTROL_2 0x4049 | ||
| 92 | #define WM831X_CHARGER_STATUS 0x404A | ||
| 93 | #define WM831X_BACKUP_CHARGER_CONTROL 0x404B | ||
| 94 | #define WM831X_STATUS_LED_1 0x404C | ||
| 95 | #define WM831X_STATUS_LED_2 0x404D | ||
| 96 | #define WM831X_CURRENT_SINK_1 0x404E | ||
| 97 | #define WM831X_CURRENT_SINK_2 0x404F | ||
| 98 | #define WM831X_DCDC_ENABLE 0x4050 | ||
| 99 | #define WM831X_LDO_ENABLE 0x4051 | ||
| 100 | #define WM831X_DCDC_STATUS 0x4052 | ||
| 101 | #define WM831X_LDO_STATUS 0x4053 | ||
| 102 | #define WM831X_DCDC_UV_STATUS 0x4054 | ||
| 103 | #define WM831X_LDO_UV_STATUS 0x4055 | ||
| 104 | #define WM831X_DC1_CONTROL_1 0x4056 | ||
| 105 | #define WM831X_DC1_CONTROL_2 0x4057 | ||
| 106 | #define WM831X_DC1_ON_CONFIG 0x4058 | ||
| 107 | #define WM831X_DC1_SLEEP_CONTROL 0x4059 | ||
| 108 | #define WM831X_DC1_DVS_CONTROL 0x405A | ||
| 109 | #define WM831X_DC2_CONTROL_1 0x405B | ||
| 110 | #define WM831X_DC2_CONTROL_2 0x405C | ||
| 111 | #define WM831X_DC2_ON_CONFIG 0x405D | ||
| 112 | #define WM831X_DC2_SLEEP_CONTROL 0x405E | ||
| 113 | #define WM831X_DC2_DVS_CONTROL 0x405F | ||
| 114 | #define WM831X_DC3_CONTROL_1 0x4060 | ||
| 115 | #define WM831X_DC3_CONTROL_2 0x4061 | ||
| 116 | #define WM831X_DC3_ON_CONFIG 0x4062 | ||
| 117 | #define WM831X_DC3_SLEEP_CONTROL 0x4063 | ||
| 118 | #define WM831X_DC4_CONTROL 0x4064 | ||
| 119 | #define WM831X_DC4_SLEEP_CONTROL 0x4065 | ||
| 120 | #define WM831X_EPE1_CONTROL 0x4066 | ||
| 121 | #define WM831X_EPE2_CONTROL 0x4067 | ||
| 122 | #define WM831X_LDO1_CONTROL 0x4068 | ||
| 123 | #define WM831X_LDO1_ON_CONTROL 0x4069 | ||
| 124 | #define WM831X_LDO1_SLEEP_CONTROL 0x406A | ||
| 125 | #define WM831X_LDO2_CONTROL 0x406B | ||
| 126 | #define WM831X_LDO2_ON_CONTROL 0x406C | ||
| 127 | #define WM831X_LDO2_SLEEP_CONTROL 0x406D | ||
| 128 | #define WM831X_LDO3_CONTROL 0x406E | ||
| 129 | #define WM831X_LDO3_ON_CONTROL 0x406F | ||
| 130 | #define WM831X_LDO3_SLEEP_CONTROL 0x4070 | ||
| 131 | #define WM831X_LDO4_CONTROL 0x4071 | ||
| 132 | #define WM831X_LDO4_ON_CONTROL 0x4072 | ||
| 133 | #define WM831X_LDO4_SLEEP_CONTROL 0x4073 | ||
| 134 | #define WM831X_LDO5_CONTROL 0x4074 | ||
| 135 | #define WM831X_LDO5_ON_CONTROL 0x4075 | ||
| 136 | #define WM831X_LDO5_SLEEP_CONTROL 0x4076 | ||
| 137 | #define WM831X_LDO6_CONTROL 0x4077 | ||
| 138 | #define WM831X_LDO6_ON_CONTROL 0x4078 | ||
| 139 | #define WM831X_LDO6_SLEEP_CONTROL 0x4079 | ||
| 140 | #define WM831X_LDO7_CONTROL 0x407A | ||
| 141 | #define WM831X_LDO7_ON_CONTROL 0x407B | ||
| 142 | #define WM831X_LDO7_SLEEP_CONTROL 0x407C | ||
| 143 | #define WM831X_LDO8_CONTROL 0x407D | ||
| 144 | #define WM831X_LDO8_ON_CONTROL 0x407E | ||
| 145 | #define WM831X_LDO8_SLEEP_CONTROL 0x407F | ||
| 146 | #define WM831X_LDO9_CONTROL 0x4080 | ||
| 147 | #define WM831X_LDO9_ON_CONTROL 0x4081 | ||
| 148 | #define WM831X_LDO9_SLEEP_CONTROL 0x4082 | ||
| 149 | #define WM831X_LDO10_CONTROL 0x4083 | ||
| 150 | #define WM831X_LDO10_ON_CONTROL 0x4084 | ||
| 151 | #define WM831X_LDO10_SLEEP_CONTROL 0x4085 | ||
| 152 | #define WM831X_LDO11_ON_CONTROL 0x4087 | ||
| 153 | #define WM831X_LDO11_SLEEP_CONTROL 0x4088 | ||
| 154 | #define WM831X_POWER_GOOD_SOURCE_1 0x408E | ||
| 155 | #define WM831X_POWER_GOOD_SOURCE_2 0x408F | ||
| 156 | #define WM831X_CLOCK_CONTROL_1 0x4090 | ||
| 157 | #define WM831X_CLOCK_CONTROL_2 0x4091 | ||
| 158 | #define WM831X_FLL_CONTROL_1 0x4092 | ||
| 159 | #define WM831X_FLL_CONTROL_2 0x4093 | ||
| 160 | #define WM831X_FLL_CONTROL_3 0x4094 | ||
| 161 | #define WM831X_FLL_CONTROL_4 0x4095 | ||
| 162 | #define WM831X_FLL_CONTROL_5 0x4096 | ||
| 163 | #define WM831X_UNIQUE_ID_1 0x7800 | ||
| 164 | #define WM831X_UNIQUE_ID_2 0x7801 | ||
| 165 | #define WM831X_UNIQUE_ID_3 0x7802 | ||
| 166 | #define WM831X_UNIQUE_ID_4 0x7803 | ||
| 167 | #define WM831X_UNIQUE_ID_5 0x7804 | ||
| 168 | #define WM831X_UNIQUE_ID_6 0x7805 | ||
| 169 | #define WM831X_UNIQUE_ID_7 0x7806 | ||
| 170 | #define WM831X_UNIQUE_ID_8 0x7807 | ||
| 171 | #define WM831X_FACTORY_OTP_ID 0x7808 | ||
| 172 | #define WM831X_FACTORY_OTP_1 0x7809 | ||
| 173 | #define WM831X_FACTORY_OTP_2 0x780A | ||
| 174 | #define WM831X_FACTORY_OTP_3 0x780B | ||
| 175 | #define WM831X_FACTORY_OTP_4 0x780C | ||
| 176 | #define WM831X_FACTORY_OTP_5 0x780D | ||
| 177 | #define WM831X_CUSTOMER_OTP_ID 0x7810 | ||
| 178 | #define WM831X_DC1_OTP_CONTROL 0x7811 | ||
| 179 | #define WM831X_DC2_OTP_CONTROL 0x7812 | ||
| 180 | #define WM831X_DC3_OTP_CONTROL 0x7813 | ||
| 181 | #define WM831X_LDO1_2_OTP_CONTROL 0x7814 | ||
| 182 | #define WM831X_LDO3_4_OTP_CONTROL 0x7815 | ||
| 183 | #define WM831X_LDO5_6_OTP_CONTROL 0x7816 | ||
| 184 | #define WM831X_LDO7_8_OTP_CONTROL 0x7817 | ||
| 185 | #define WM831X_LDO9_10_OTP_CONTROL 0x7818 | ||
| 186 | #define WM831X_LDO11_EPE_CONTROL 0x7819 | ||
| 187 | #define WM831X_GPIO1_OTP_CONTROL 0x781A | ||
| 188 | #define WM831X_GPIO2_OTP_CONTROL 0x781B | ||
| 189 | #define WM831X_GPIO3_OTP_CONTROL 0x781C | ||
| 190 | #define WM831X_GPIO4_OTP_CONTROL 0x781D | ||
| 191 | #define WM831X_GPIO5_OTP_CONTROL 0x781E | ||
| 192 | #define WM831X_GPIO6_OTP_CONTROL 0x781F | ||
| 193 | #define WM831X_DBE_CHECK_DATA 0x7827 | ||
| 194 | |||
| 195 | /* | ||
| 196 | * R0 (0x00) - Reset ID | ||
| 197 | */ | ||
| 198 | #define WM831X_CHIP_ID_MASK 0xFFFF /* CHIP_ID - [15:0] */ | ||
| 199 | #define WM831X_CHIP_ID_SHIFT 0 /* CHIP_ID - [15:0] */ | ||
| 200 | #define WM831X_CHIP_ID_WIDTH 16 /* CHIP_ID - [15:0] */ | ||
| 201 | |||
| 202 | /* | ||
| 203 | * R1 (0x01) - Revision | ||
| 204 | */ | ||
| 205 | #define WM831X_PARENT_REV_MASK 0xFF00 /* PARENT_REV - [15:8] */ | ||
| 206 | #define WM831X_PARENT_REV_SHIFT 8 /* PARENT_REV - [15:8] */ | ||
| 207 | #define WM831X_PARENT_REV_WIDTH 8 /* PARENT_REV - [15:8] */ | ||
| 208 | #define WM831X_CHILD_REV_MASK 0x00FF /* CHILD_REV - [7:0] */ | ||
| 209 | #define WM831X_CHILD_REV_SHIFT 0 /* CHILD_REV - [7:0] */ | ||
| 210 | #define WM831X_CHILD_REV_WIDTH 8 /* CHILD_REV - [7:0] */ | ||
| 211 | |||
| 212 | /* | ||
| 213 | * R16384 (0x4000) - Parent ID | ||
| 214 | */ | ||
| 215 | #define WM831X_PARENT_ID_MASK 0xFFFF /* PARENT_ID - [15:0] */ | ||
| 216 | #define WM831X_PARENT_ID_SHIFT 0 /* PARENT_ID - [15:0] */ | ||
| 217 | #define WM831X_PARENT_ID_WIDTH 16 /* PARENT_ID - [15:0] */ | ||
| 218 | |||
| 219 | /* | ||
| 220 | * R16389 (0x4005) - ON Pin Control | ||
| 221 | */ | ||
| 222 | #define WM831X_ON_PIN_SECACT_MASK 0x0300 /* ON_PIN_SECACT - [9:8] */ | ||
| 223 | #define WM831X_ON_PIN_SECACT_SHIFT 8 /* ON_PIN_SECACT - [9:8] */ | ||
| 224 | #define WM831X_ON_PIN_SECACT_WIDTH 2 /* ON_PIN_SECACT - [9:8] */ | ||
| 225 | #define WM831X_ON_PIN_PRIMACT_MASK 0x0030 /* ON_PIN_PRIMACT - [5:4] */ | ||
| 226 | #define WM831X_ON_PIN_PRIMACT_SHIFT 4 /* ON_PIN_PRIMACT - [5:4] */ | ||
| 227 | #define WM831X_ON_PIN_PRIMACT_WIDTH 2 /* ON_PIN_PRIMACT - [5:4] */ | ||
| 228 | #define WM831X_ON_PIN_STS 0x0008 /* ON_PIN_STS */ | ||
| 229 | #define WM831X_ON_PIN_STS_MASK 0x0008 /* ON_PIN_STS */ | ||
| 230 | #define WM831X_ON_PIN_STS_SHIFT 3 /* ON_PIN_STS */ | ||
| 231 | #define WM831X_ON_PIN_STS_WIDTH 1 /* ON_PIN_STS */ | ||
| 232 | #define WM831X_ON_PIN_TO_MASK 0x0003 /* ON_PIN_TO - [1:0] */ | ||
| 233 | #define WM831X_ON_PIN_TO_SHIFT 0 /* ON_PIN_TO - [1:0] */ | ||
| 234 | #define WM831X_ON_PIN_TO_WIDTH 2 /* ON_PIN_TO - [1:0] */ | ||
| 235 | |||
| 236 | struct regulator_dev; | ||
| 237 | |||
| 238 | struct wm831x { | ||
| 239 | struct mutex io_lock; | ||
| 240 | |||
| 241 | struct device *dev; | ||
| 242 | int (*read_dev)(struct wm831x *wm831x, unsigned short reg, | ||
| 243 | int bytes, void *dest); | ||
| 244 | int (*write_dev)(struct wm831x *wm831x, unsigned short reg, | ||
| 245 | int bytes, void *src); | ||
| 246 | |||
| 247 | void *control_data; | ||
| 248 | |||
| 249 | int irq; /* Our chip IRQ */ | ||
| 250 | struct mutex irq_lock; | ||
| 251 | struct workqueue_struct *irq_wq; | ||
| 252 | struct work_struct irq_work; | ||
| 253 | unsigned int irq_base; | ||
| 254 | int irq_masks[5]; | ||
| 255 | |||
| 256 | struct mutex auxadc_lock; | ||
| 257 | |||
| 258 | /* The WM831x has a security key blocking access to certain | ||
| 259 | * registers. The mutex is taken by the accessors for locking | ||
| 260 | * and unlocking the security key, locked is used to fail | ||
| 261 | * writes if the lock is held. | ||
| 262 | */ | ||
| 263 | struct mutex key_lock; | ||
| 264 | unsigned int locked:1; | ||
| 265 | }; | ||
| 266 | |||
| 267 | /* Device I/O API */ | ||
| 268 | int wm831x_reg_read(struct wm831x *wm831x, unsigned short reg); | ||
| 269 | int wm831x_reg_write(struct wm831x *wm831x, unsigned short reg, | ||
| 270 | unsigned short val); | ||
| 271 | void wm831x_reg_lock(struct wm831x *wm831x); | ||
| 272 | int wm831x_reg_unlock(struct wm831x *wm831x); | ||
| 273 | int wm831x_set_bits(struct wm831x *wm831x, unsigned short reg, | ||
| 274 | unsigned short mask, unsigned short val); | ||
| 275 | int wm831x_bulk_read(struct wm831x *wm831x, unsigned short reg, | ||
| 276 | int count, u16 *buf); | ||
| 277 | |||
| 278 | int wm831x_irq_init(struct wm831x *wm831x, int irq); | ||
| 279 | void wm831x_irq_exit(struct wm831x *wm831x); | ||
| 280 | |||
| 281 | int __must_check wm831x_request_irq(struct wm831x *wm831x, | ||
| 282 | unsigned int irq, irq_handler_t handler, | ||
| 283 | unsigned long flags, const char *name, | ||
| 284 | void *dev); | ||
| 285 | void wm831x_free_irq(struct wm831x *wm831x, unsigned int, void *); | ||
| 286 | void wm831x_disable_irq(struct wm831x *wm831x, int irq); | ||
| 287 | void wm831x_enable_irq(struct wm831x *wm831x, int irq); | ||
| 288 | |||
| 289 | #endif | ||
diff --git a/include/linux/mfd/wm831x/gpio.h b/include/linux/mfd/wm831x/gpio.h new file mode 100644 index 000000000000..2835614af0e3 --- /dev/null +++ b/include/linux/mfd/wm831x/gpio.h | |||
| @@ -0,0 +1,55 @@ | |||
| 1 | /* | ||
| 2 | * include/linux/mfd/wm831x/gpio.h -- GPIO for WM831x | ||
| 3 | * | ||
| 4 | * Copyright 2009 Wolfson Microelectronics PLC. | ||
| 5 | * | ||
| 6 | * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify it | ||
| 9 | * under the terms of the GNU General Public License as published by the | ||
| 10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 11 | * option) any later version. | ||
| 12 | * | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __MFD_WM831X_GPIO_H__ | ||
| 16 | #define __MFD_WM831X_GPIO_H__ | ||
| 17 | |||
| 18 | /* | ||
| 19 | * R16440-16455 (0x4038-0x4047) - GPIOx Control | ||
| 20 | */ | ||
| 21 | #define WM831X_GPN_DIR 0x8000 /* GPN_DIR */ | ||
| 22 | #define WM831X_GPN_DIR_MASK 0x8000 /* GPN_DIR */ | ||
| 23 | #define WM831X_GPN_DIR_SHIFT 15 /* GPN_DIR */ | ||
| 24 | #define WM831X_GPN_DIR_WIDTH 1 /* GPN_DIR */ | ||
| 25 | #define WM831X_GPN_PULL_MASK 0x6000 /* GPN_PULL - [14:13] */ | ||
| 26 | #define WM831X_GPN_PULL_SHIFT 13 /* GPN_PULL - [14:13] */ | ||
| 27 | #define WM831X_GPN_PULL_WIDTH 2 /* GPN_PULL - [14:13] */ | ||
| 28 | #define WM831X_GPN_INT_MODE 0x1000 /* GPN_INT_MODE */ | ||
| 29 | #define WM831X_GPN_INT_MODE_MASK 0x1000 /* GPN_INT_MODE */ | ||
| 30 | #define WM831X_GPN_INT_MODE_SHIFT 12 /* GPN_INT_MODE */ | ||
| 31 | #define WM831X_GPN_INT_MODE_WIDTH 1 /* GPN_INT_MODE */ | ||
| 32 | #define WM831X_GPN_PWR_DOM 0x0800 /* GPN_PWR_DOM */ | ||
| 33 | #define WM831X_GPN_PWR_DOM_MASK 0x0800 /* GPN_PWR_DOM */ | ||
| 34 | #define WM831X_GPN_PWR_DOM_SHIFT 11 /* GPN_PWR_DOM */ | ||
| 35 | #define WM831X_GPN_PWR_DOM_WIDTH 1 /* GPN_PWR_DOM */ | ||
| 36 | #define WM831X_GPN_POL 0x0400 /* GPN_POL */ | ||
| 37 | #define WM831X_GPN_POL_MASK 0x0400 /* GPN_POL */ | ||
| 38 | #define WM831X_GPN_POL_SHIFT 10 /* GPN_POL */ | ||
| 39 | #define WM831X_GPN_POL_WIDTH 1 /* GPN_POL */ | ||
| 40 | #define WM831X_GPN_OD 0x0200 /* GPN_OD */ | ||
| 41 | #define WM831X_GPN_OD_MASK 0x0200 /* GPN_OD */ | ||
| 42 | #define WM831X_GPN_OD_SHIFT 9 /* GPN_OD */ | ||
| 43 | #define WM831X_GPN_OD_WIDTH 1 /* GPN_OD */ | ||
| 44 | #define WM831X_GPN_TRI 0x0080 /* GPN_TRI */ | ||
| 45 | #define WM831X_GPN_TRI_MASK 0x0080 /* GPN_TRI */ | ||
| 46 | #define WM831X_GPN_TRI_SHIFT 7 /* GPN_TRI */ | ||
| 47 | #define WM831X_GPN_TRI_WIDTH 1 /* GPN_TRI */ | ||
| 48 | #define WM831X_GPN_FN_MASK 0x000F /* GPN_FN - [3:0] */ | ||
| 49 | #define WM831X_GPN_FN_SHIFT 0 /* GPN_FN - [3:0] */ | ||
| 50 | #define WM831X_GPN_FN_WIDTH 4 /* GPN_FN - [3:0] */ | ||
| 51 | |||
| 52 | #define WM831X_GPIO_PULL_NONE (0 << WM831X_GPN_PULL_SHIFT) | ||
| 53 | #define WM831X_GPIO_PULL_DOWN (1 << WM831X_GPN_PULL_SHIFT) | ||
| 54 | #define WM831X_GPIO_PULL_UP (2 << WM831X_GPN_PULL_SHIFT) | ||
| 55 | #endif | ||
diff --git a/include/linux/mfd/wm831x/irq.h b/include/linux/mfd/wm831x/irq.h new file mode 100644 index 000000000000..3a8c97656fda --- /dev/null +++ b/include/linux/mfd/wm831x/irq.h | |||
| @@ -0,0 +1,764 @@ | |||
| 1 | /* | ||
| 2 | * include/linux/mfd/wm831x/irq.h -- Interrupt controller for WM831x | ||
| 3 | * | ||
| 4 | * Copyright 2009 Wolfson Microelectronics PLC. | ||
| 5 | * | ||
| 6 | * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify it | ||
| 9 | * under the terms of the GNU General Public License as published by the | ||
| 10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 11 | * option) any later version. | ||
| 12 | * | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __MFD_WM831X_IRQ_H__ | ||
| 16 | #define __MFD_WM831X_IRQ_H__ | ||
| 17 | |||
| 18 | /* Interrupt number assignments within Linux */ | ||
| 19 | #define WM831X_IRQ_TEMP_THW 0 | ||
| 20 | #define WM831X_IRQ_GPIO_1 1 | ||
| 21 | #define WM831X_IRQ_GPIO_2 2 | ||
| 22 | #define WM831X_IRQ_GPIO_3 3 | ||
| 23 | #define WM831X_IRQ_GPIO_4 4 | ||
| 24 | #define WM831X_IRQ_GPIO_5 5 | ||
| 25 | #define WM831X_IRQ_GPIO_6 6 | ||
| 26 | #define WM831X_IRQ_GPIO_7 7 | ||
| 27 | #define WM831X_IRQ_GPIO_8 8 | ||
| 28 | #define WM831X_IRQ_GPIO_9 9 | ||
| 29 | #define WM831X_IRQ_GPIO_10 10 | ||
| 30 | #define WM831X_IRQ_GPIO_11 11 | ||
| 31 | #define WM831X_IRQ_GPIO_12 12 | ||
| 32 | #define WM831X_IRQ_GPIO_13 13 | ||
| 33 | #define WM831X_IRQ_GPIO_14 14 | ||
| 34 | #define WM831X_IRQ_GPIO_15 15 | ||
| 35 | #define WM831X_IRQ_GPIO_16 16 | ||
| 36 | #define WM831X_IRQ_ON 17 | ||
| 37 | #define WM831X_IRQ_PPM_SYSLO 18 | ||
| 38 | #define WM831X_IRQ_PPM_PWR_SRC 19 | ||
| 39 | #define WM831X_IRQ_PPM_USB_CURR 20 | ||
| 40 | #define WM831X_IRQ_WDOG_TO 21 | ||
| 41 | #define WM831X_IRQ_RTC_PER 22 | ||
| 42 | #define WM831X_IRQ_RTC_ALM 23 | ||
| 43 | #define WM831X_IRQ_CHG_BATT_HOT 24 | ||
| 44 | #define WM831X_IRQ_CHG_BATT_COLD 25 | ||
| 45 | #define WM831X_IRQ_CHG_BATT_FAIL 26 | ||
| 46 | #define WM831X_IRQ_CHG_OV 27 | ||
| 47 | #define WM831X_IRQ_CHG_END 29 | ||
| 48 | #define WM831X_IRQ_CHG_TO 30 | ||
| 49 | #define WM831X_IRQ_CHG_MODE 31 | ||
| 50 | #define WM831X_IRQ_CHG_START 32 | ||
| 51 | #define WM831X_IRQ_TCHDATA 33 | ||
| 52 | #define WM831X_IRQ_TCHPD 34 | ||
| 53 | #define WM831X_IRQ_AUXADC_DATA 35 | ||
| 54 | #define WM831X_IRQ_AUXADC_DCOMP1 36 | ||
| 55 | #define WM831X_IRQ_AUXADC_DCOMP2 37 | ||
| 56 | #define WM831X_IRQ_AUXADC_DCOMP3 38 | ||
| 57 | #define WM831X_IRQ_AUXADC_DCOMP4 39 | ||
| 58 | #define WM831X_IRQ_CS1 40 | ||
| 59 | #define WM831X_IRQ_CS2 41 | ||
| 60 | #define WM831X_IRQ_HC_DC1 42 | ||
| 61 | #define WM831X_IRQ_HC_DC2 43 | ||
| 62 | #define WM831X_IRQ_UV_LDO1 44 | ||
| 63 | #define WM831X_IRQ_UV_LDO2 45 | ||
| 64 | #define WM831X_IRQ_UV_LDO3 46 | ||
| 65 | #define WM831X_IRQ_UV_LDO4 47 | ||
| 66 | #define WM831X_IRQ_UV_LDO5 48 | ||
| 67 | #define WM831X_IRQ_UV_LDO6 49 | ||
| 68 | #define WM831X_IRQ_UV_LDO7 50 | ||
| 69 | #define WM831X_IRQ_UV_LDO8 51 | ||
| 70 | #define WM831X_IRQ_UV_LDO9 52 | ||
| 71 | #define WM831X_IRQ_UV_LDO10 53 | ||
| 72 | #define WM831X_IRQ_UV_DC1 54 | ||
| 73 | #define WM831X_IRQ_UV_DC2 55 | ||
| 74 | #define WM831X_IRQ_UV_DC3 56 | ||
| 75 | #define WM831X_IRQ_UV_DC4 57 | ||
| 76 | |||
| 77 | #define WM831X_NUM_IRQS 58 | ||
| 78 | |||
| 79 | /* | ||
| 80 | * R16400 (0x4010) - System Interrupts | ||
| 81 | */ | ||
| 82 | #define WM831X_PS_INT 0x8000 /* PS_INT */ | ||
| 83 | #define WM831X_PS_INT_MASK 0x8000 /* PS_INT */ | ||
| 84 | #define WM831X_PS_INT_SHIFT 15 /* PS_INT */ | ||
| 85 | #define WM831X_PS_INT_WIDTH 1 /* PS_INT */ | ||
| 86 | #define WM831X_TEMP_INT 0x4000 /* TEMP_INT */ | ||
| 87 | #define WM831X_TEMP_INT_MASK 0x4000 /* TEMP_INT */ | ||
| 88 | #define WM831X_TEMP_INT_SHIFT 14 /* TEMP_INT */ | ||
| 89 | #define WM831X_TEMP_INT_WIDTH 1 /* TEMP_INT */ | ||
| 90 | #define WM831X_GP_INT 0x2000 /* GP_INT */ | ||
| 91 | #define WM831X_GP_INT_MASK 0x2000 /* GP_INT */ | ||
| 92 | #define WM831X_GP_INT_SHIFT 13 /* GP_INT */ | ||
| 93 | #define WM831X_GP_INT_WIDTH 1 /* GP_INT */ | ||
| 94 | #define WM831X_ON_PIN_INT 0x1000 /* ON_PIN_INT */ | ||
| 95 | #define WM831X_ON_PIN_INT_MASK 0x1000 /* ON_PIN_INT */ | ||
| 96 | #define WM831X_ON_PIN_INT_SHIFT 12 /* ON_PIN_INT */ | ||
| 97 | #define WM831X_ON_PIN_INT_WIDTH 1 /* ON_PIN_INT */ | ||
| 98 | #define WM831X_WDOG_INT 0x0800 /* WDOG_INT */ | ||
| 99 | #define WM831X_WDOG_INT_MASK 0x0800 /* WDOG_INT */ | ||
| 100 | #define WM831X_WDOG_INT_SHIFT 11 /* WDOG_INT */ | ||
| 101 | #define WM831X_WDOG_INT_WIDTH 1 /* WDOG_INT */ | ||
| 102 | #define WM831X_TCHDATA_INT 0x0400 /* TCHDATA_INT */ | ||
| 103 | #define WM831X_TCHDATA_INT_MASK 0x0400 /* TCHDATA_INT */ | ||
| 104 | #define WM831X_TCHDATA_INT_SHIFT 10 /* TCHDATA_INT */ | ||
| 105 | #define WM831X_TCHDATA_INT_WIDTH 1 /* TCHDATA_INT */ | ||
| 106 | #define WM831X_TCHPD_INT 0x0200 /* TCHPD_INT */ | ||
| 107 | #define WM831X_TCHPD_INT_MASK 0x0200 /* TCHPD_INT */ | ||
| 108 | #define WM831X_TCHPD_INT_SHIFT 9 /* TCHPD_INT */ | ||
| 109 | #define WM831X_TCHPD_INT_WIDTH 1 /* TCHPD_INT */ | ||
| 110 | #define WM831X_AUXADC_INT 0x0100 /* AUXADC_INT */ | ||
| 111 | #define WM831X_AUXADC_INT_MASK 0x0100 /* AUXADC_INT */ | ||
| 112 | #define WM831X_AUXADC_INT_SHIFT 8 /* AUXADC_INT */ | ||
| 113 | #define WM831X_AUXADC_INT_WIDTH 1 /* AUXADC_INT */ | ||
| 114 | #define WM831X_PPM_INT 0x0080 /* PPM_INT */ | ||
| 115 | #define WM831X_PPM_INT_MASK 0x0080 /* PPM_INT */ | ||
| 116 | #define WM831X_PPM_INT_SHIFT 7 /* PPM_INT */ | ||
| 117 | #define WM831X_PPM_INT_WIDTH 1 /* PPM_INT */ | ||
| 118 | #define WM831X_CS_INT 0x0040 /* CS_INT */ | ||
| 119 | #define WM831X_CS_INT_MASK 0x0040 /* CS_INT */ | ||
| 120 | #define WM831X_CS_INT_SHIFT 6 /* CS_INT */ | ||
| 121 | #define WM831X_CS_INT_WIDTH 1 /* CS_INT */ | ||
| 122 | #define WM831X_RTC_INT 0x0020 /* RTC_INT */ | ||
| 123 | #define WM831X_RTC_INT_MASK 0x0020 /* RTC_INT */ | ||
| 124 | #define WM831X_RTC_INT_SHIFT 5 /* RTC_INT */ | ||
| 125 | #define WM831X_RTC_INT_WIDTH 1 /* RTC_INT */ | ||
| 126 | #define WM831X_OTP_INT 0x0010 /* OTP_INT */ | ||
| 127 | #define WM831X_OTP_INT_MASK 0x0010 /* OTP_INT */ | ||
| 128 | #define WM831X_OTP_INT_SHIFT 4 /* OTP_INT */ | ||
| 129 | #define WM831X_OTP_INT_WIDTH 1 /* OTP_INT */ | ||
| 130 | #define WM831X_CHILD_INT 0x0008 /* CHILD_INT */ | ||
| 131 | #define WM831X_CHILD_INT_MASK 0x0008 /* CHILD_INT */ | ||
| 132 | #define WM831X_CHILD_INT_SHIFT 3 /* CHILD_INT */ | ||
| 133 | #define WM831X_CHILD_INT_WIDTH 1 /* CHILD_INT */ | ||
| 134 | #define WM831X_CHG_INT 0x0004 /* CHG_INT */ | ||
| 135 | #define WM831X_CHG_INT_MASK 0x0004 /* CHG_INT */ | ||
| 136 | #define WM831X_CHG_INT_SHIFT 2 /* CHG_INT */ | ||
| 137 | #define WM831X_CHG_INT_WIDTH 1 /* CHG_INT */ | ||
| 138 | #define WM831X_HC_INT 0x0002 /* HC_INT */ | ||
| 139 | #define WM831X_HC_INT_MASK 0x0002 /* HC_INT */ | ||
| 140 | #define WM831X_HC_INT_SHIFT 1 /* HC_INT */ | ||
| 141 | #define WM831X_HC_INT_WIDTH 1 /* HC_INT */ | ||
| 142 | #define WM831X_UV_INT 0x0001 /* UV_INT */ | ||
| 143 | #define WM831X_UV_INT_MASK 0x0001 /* UV_INT */ | ||
| 144 | #define WM831X_UV_INT_SHIFT 0 /* UV_INT */ | ||
| 145 | #define WM831X_UV_INT_WIDTH 1 /* UV_INT */ | ||
| 146 | |||
| 147 | /* | ||
| 148 | * R16401 (0x4011) - Interrupt Status 1 | ||
| 149 | */ | ||
| 150 | #define WM831X_PPM_SYSLO_EINT 0x8000 /* PPM_SYSLO_EINT */ | ||
| 151 | #define WM831X_PPM_SYSLO_EINT_MASK 0x8000 /* PPM_SYSLO_EINT */ | ||
| 152 | #define WM831X_PPM_SYSLO_EINT_SHIFT 15 /* PPM_SYSLO_EINT */ | ||
| 153 | #define WM831X_PPM_SYSLO_EINT_WIDTH 1 /* PPM_SYSLO_EINT */ | ||
| 154 | #define WM831X_PPM_PWR_SRC_EINT 0x4000 /* PPM_PWR_SRC_EINT */ | ||
| 155 | #define WM831X_PPM_PWR_SRC_EINT_MASK 0x4000 /* PPM_PWR_SRC_EINT */ | ||
| 156 | #define WM831X_PPM_PWR_SRC_EINT_SHIFT 14 /* PPM_PWR_SRC_EINT */ | ||
| 157 | #define WM831X_PPM_PWR_SRC_EINT_WIDTH 1 /* PPM_PWR_SRC_EINT */ | ||
| 158 | #define WM831X_PPM_USB_CURR_EINT 0x2000 /* PPM_USB_CURR_EINT */ | ||
| 159 | #define WM831X_PPM_USB_CURR_EINT_MASK 0x2000 /* PPM_USB_CURR_EINT */ | ||
| 160 | #define WM831X_PPM_USB_CURR_EINT_SHIFT 13 /* PPM_USB_CURR_EINT */ | ||
| 161 | #define WM831X_PPM_USB_CURR_EINT_WIDTH 1 /* PPM_USB_CURR_EINT */ | ||
| 162 | #define WM831X_ON_PIN_EINT 0x1000 /* ON_PIN_EINT */ | ||
| 163 | #define WM831X_ON_PIN_EINT_MASK 0x1000 /* ON_PIN_EINT */ | ||
| 164 | #define WM831X_ON_PIN_EINT_SHIFT 12 /* ON_PIN_EINT */ | ||
| 165 | #define WM831X_ON_PIN_EINT_WIDTH 1 /* ON_PIN_EINT */ | ||
| 166 | #define WM831X_WDOG_TO_EINT 0x0800 /* WDOG_TO_EINT */ | ||
| 167 | #define WM831X_WDOG_TO_EINT_MASK 0x0800 /* WDOG_TO_EINT */ | ||
| 168 | #define WM831X_WDOG_TO_EINT_SHIFT 11 /* WDOG_TO_EINT */ | ||
| 169 | #define WM831X_WDOG_TO_EINT_WIDTH 1 /* WDOG_TO_EINT */ | ||
| 170 | #define WM831X_TCHDATA_EINT 0x0400 /* TCHDATA_EINT */ | ||
| 171 | #define WM831X_TCHDATA_EINT_MASK 0x0400 /* TCHDATA_EINT */ | ||
| 172 | #define WM831X_TCHDATA_EINT_SHIFT 10 /* TCHDATA_EINT */ | ||
| 173 | #define WM831X_TCHDATA_EINT_WIDTH 1 /* TCHDATA_EINT */ | ||
| 174 | #define WM831X_TCHPD_EINT 0x0200 /* TCHPD_EINT */ | ||
| 175 | #define WM831X_TCHPD_EINT_MASK 0x0200 /* TCHPD_EINT */ | ||
| 176 | #define WM831X_TCHPD_EINT_SHIFT 9 /* TCHPD_EINT */ | ||
| 177 | #define WM831X_TCHPD_EINT_WIDTH 1 /* TCHPD_EINT */ | ||
| 178 | #define WM831X_AUXADC_DATA_EINT 0x0100 /* AUXADC_DATA_EINT */ | ||
| 179 | #define WM831X_AUXADC_DATA_EINT_MASK 0x0100 /* AUXADC_DATA_EINT */ | ||
| 180 | #define WM831X_AUXADC_DATA_EINT_SHIFT 8 /* AUXADC_DATA_EINT */ | ||
| 181 | #define WM831X_AUXADC_DATA_EINT_WIDTH 1 /* AUXADC_DATA_EINT */ | ||
| 182 | #define WM831X_AUXADC_DCOMP4_EINT 0x0080 /* AUXADC_DCOMP4_EINT */ | ||
| 183 | #define WM831X_AUXADC_DCOMP4_EINT_MASK 0x0080 /* AUXADC_DCOMP4_EINT */ | ||
| 184 | #define WM831X_AUXADC_DCOMP4_EINT_SHIFT 7 /* AUXADC_DCOMP4_EINT */ | ||
| 185 | #define WM831X_AUXADC_DCOMP4_EINT_WIDTH 1 /* AUXADC_DCOMP4_EINT */ | ||
| 186 | #define WM831X_AUXADC_DCOMP3_EINT 0x0040 /* AUXADC_DCOMP3_EINT */ | ||
| 187 | #define WM831X_AUXADC_DCOMP3_EINT_MASK 0x0040 /* AUXADC_DCOMP3_EINT */ | ||
| 188 | #define WM831X_AUXADC_DCOMP3_EINT_SHIFT 6 /* AUXADC_DCOMP3_EINT */ | ||
| 189 | #define WM831X_AUXADC_DCOMP3_EINT_WIDTH 1 /* AUXADC_DCOMP3_EINT */ | ||
| 190 | #define WM831X_AUXADC_DCOMP2_EINT 0x0020 /* AUXADC_DCOMP2_EINT */ | ||
| 191 | #define WM831X_AUXADC_DCOMP2_EINT_MASK 0x0020 /* AUXADC_DCOMP2_EINT */ | ||
| 192 | #define WM831X_AUXADC_DCOMP2_EINT_SHIFT 5 /* AUXADC_DCOMP2_EINT */ | ||
| 193 | #define WM831X_AUXADC_DCOMP2_EINT_WIDTH 1 /* AUXADC_DCOMP2_EINT */ | ||
| 194 | #define WM831X_AUXADC_DCOMP1_EINT 0x0010 /* AUXADC_DCOMP1_EINT */ | ||
| 195 | #define WM831X_AUXADC_DCOMP1_EINT_MASK 0x0010 /* AUXADC_DCOMP1_EINT */ | ||
| 196 | #define WM831X_AUXADC_DCOMP1_EINT_SHIFT 4 /* AUXADC_DCOMP1_EINT */ | ||
| 197 | #define WM831X_AUXADC_DCOMP1_EINT_WIDTH 1 /* AUXADC_DCOMP1_EINT */ | ||
| 198 | #define WM831X_RTC_PER_EINT 0x0008 /* RTC_PER_EINT */ | ||
| 199 | #define WM831X_RTC_PER_EINT_MASK 0x0008 /* RTC_PER_EINT */ | ||
| 200 | #define WM831X_RTC_PER_EINT_SHIFT 3 /* RTC_PER_EINT */ | ||
| 201 | #define WM831X_RTC_PER_EINT_WIDTH 1 /* RTC_PER_EINT */ | ||
| 202 | #define WM831X_RTC_ALM_EINT 0x0004 /* RTC_ALM_EINT */ | ||
| 203 | #define WM831X_RTC_ALM_EINT_MASK 0x0004 /* RTC_ALM_EINT */ | ||
| 204 | #define WM831X_RTC_ALM_EINT_SHIFT 2 /* RTC_ALM_EINT */ | ||
| 205 | #define WM831X_RTC_ALM_EINT_WIDTH 1 /* RTC_ALM_EINT */ | ||
| 206 | #define WM831X_TEMP_THW_EINT 0x0002 /* TEMP_THW_EINT */ | ||
| 207 | #define WM831X_TEMP_THW_EINT_MASK 0x0002 /* TEMP_THW_EINT */ | ||
| 208 | #define WM831X_TEMP_THW_EINT_SHIFT 1 /* TEMP_THW_EINT */ | ||
| 209 | #define WM831X_TEMP_THW_EINT_WIDTH 1 /* TEMP_THW_EINT */ | ||
| 210 | |||
| 211 | /* | ||
| 212 | * R16402 (0x4012) - Interrupt Status 2 | ||
| 213 | */ | ||
| 214 | #define WM831X_CHG_BATT_HOT_EINT 0x8000 /* CHG_BATT_HOT_EINT */ | ||
| 215 | #define WM831X_CHG_BATT_HOT_EINT_MASK 0x8000 /* CHG_BATT_HOT_EINT */ | ||
| 216 | #define WM831X_CHG_BATT_HOT_EINT_SHIFT 15 /* CHG_BATT_HOT_EINT */ | ||
| 217 | #define WM831X_CHG_BATT_HOT_EINT_WIDTH 1 /* CHG_BATT_HOT_EINT */ | ||
| 218 | #define WM831X_CHG_BATT_COLD_EINT 0x4000 /* CHG_BATT_COLD_EINT */ | ||
| 219 | #define WM831X_CHG_BATT_COLD_EINT_MASK 0x4000 /* CHG_BATT_COLD_EINT */ | ||
| 220 | #define WM831X_CHG_BATT_COLD_EINT_SHIFT 14 /* CHG_BATT_COLD_EINT */ | ||
| 221 | #define WM831X_CHG_BATT_COLD_EINT_WIDTH 1 /* CHG_BATT_COLD_EINT */ | ||
| 222 | #define WM831X_CHG_BATT_FAIL_EINT 0x2000 /* CHG_BATT_FAIL_EINT */ | ||
| 223 | #define WM831X_CHG_BATT_FAIL_EINT_MASK 0x2000 /* CHG_BATT_FAIL_EINT */ | ||
| 224 | #define WM831X_CHG_BATT_FAIL_EINT_SHIFT 13 /* CHG_BATT_FAIL_EINT */ | ||
| 225 | #define WM831X_CHG_BATT_FAIL_EINT_WIDTH 1 /* CHG_BATT_FAIL_EINT */ | ||
| 226 | #define WM831X_CHG_OV_EINT 0x1000 /* CHG_OV_EINT */ | ||
| 227 | #define WM831X_CHG_OV_EINT_MASK 0x1000 /* CHG_OV_EINT */ | ||
| 228 | #define WM831X_CHG_OV_EINT_SHIFT 12 /* CHG_OV_EINT */ | ||
| 229 | #define WM831X_CHG_OV_EINT_WIDTH 1 /* CHG_OV_EINT */ | ||
| 230 | #define WM831X_CHG_END_EINT 0x0800 /* CHG_END_EINT */ | ||
| 231 | #define WM831X_CHG_END_EINT_MASK 0x0800 /* CHG_END_EINT */ | ||
| 232 | #define WM831X_CHG_END_EINT_SHIFT 11 /* CHG_END_EINT */ | ||
| 233 | #define WM831X_CHG_END_EINT_WIDTH 1 /* CHG_END_EINT */ | ||
| 234 | #define WM831X_CHG_TO_EINT 0x0400 /* CHG_TO_EINT */ | ||
| 235 | #define WM831X_CHG_TO_EINT_MASK 0x0400 /* CHG_TO_EINT */ | ||
| 236 | #define WM831X_CHG_TO_EINT_SHIFT 10 /* CHG_TO_EINT */ | ||
| 237 | #define WM831X_CHG_TO_EINT_WIDTH 1 /* CHG_TO_EINT */ | ||
| 238 | #define WM831X_CHG_MODE_EINT 0x0200 /* CHG_MODE_EINT */ | ||
| 239 | #define WM831X_CHG_MODE_EINT_MASK 0x0200 /* CHG_MODE_EINT */ | ||
| 240 | #define WM831X_CHG_MODE_EINT_SHIFT 9 /* CHG_MODE_EINT */ | ||
| 241 | #define WM831X_CHG_MODE_EINT_WIDTH 1 /* CHG_MODE_EINT */ | ||
| 242 | #define WM831X_CHG_START_EINT 0x0100 /* CHG_START_EINT */ | ||
| 243 | #define WM831X_CHG_START_EINT_MASK 0x0100 /* CHG_START_EINT */ | ||
| 244 | #define WM831X_CHG_START_EINT_SHIFT 8 /* CHG_START_EINT */ | ||
| 245 | #define WM831X_CHG_START_EINT_WIDTH 1 /* CHG_START_EINT */ | ||
| 246 | #define WM831X_CS2_EINT 0x0080 /* CS2_EINT */ | ||
| 247 | #define WM831X_CS2_EINT_MASK 0x0080 /* CS2_EINT */ | ||
| 248 | #define WM831X_CS2_EINT_SHIFT 7 /* CS2_EINT */ | ||
| 249 | #define WM831X_CS2_EINT_WIDTH 1 /* CS2_EINT */ | ||
| 250 | #define WM831X_CS1_EINT 0x0040 /* CS1_EINT */ | ||
| 251 | #define WM831X_CS1_EINT_MASK 0x0040 /* CS1_EINT */ | ||
| 252 | #define WM831X_CS1_EINT_SHIFT 6 /* CS1_EINT */ | ||
| 253 | #define WM831X_CS1_EINT_WIDTH 1 /* CS1_EINT */ | ||
| 254 | #define WM831X_OTP_CMD_END_EINT 0x0020 /* OTP_CMD_END_EINT */ | ||
| 255 | #define WM831X_OTP_CMD_END_EINT_MASK 0x0020 /* OTP_CMD_END_EINT */ | ||
| 256 | #define WM831X_OTP_CMD_END_EINT_SHIFT 5 /* OTP_CMD_END_EINT */ | ||
| 257 | #define WM831X_OTP_CMD_END_EINT_WIDTH 1 /* OTP_CMD_END_EINT */ | ||
| 258 | #define WM831X_OTP_ERR_EINT 0x0010 /* OTP_ERR_EINT */ | ||
| 259 | #define WM831X_OTP_ERR_EINT_MASK 0x0010 /* OTP_ERR_EINT */ | ||
| 260 | #define WM831X_OTP_ERR_EINT_SHIFT 4 /* OTP_ERR_EINT */ | ||
| 261 | #define WM831X_OTP_ERR_EINT_WIDTH 1 /* OTP_ERR_EINT */ | ||
| 262 | #define WM831X_PS_POR_EINT 0x0004 /* PS_POR_EINT */ | ||
| 263 | #define WM831X_PS_POR_EINT_MASK 0x0004 /* PS_POR_EINT */ | ||
| 264 | #define WM831X_PS_POR_EINT_SHIFT 2 /* PS_POR_EINT */ | ||
| 265 | #define WM831X_PS_POR_EINT_WIDTH 1 /* PS_POR_EINT */ | ||
| 266 | #define WM831X_PS_SLEEP_OFF_EINT 0x0002 /* PS_SLEEP_OFF_EINT */ | ||
| 267 | #define WM831X_PS_SLEEP_OFF_EINT_MASK 0x0002 /* PS_SLEEP_OFF_EINT */ | ||
| 268 | #define WM831X_PS_SLEEP_OFF_EINT_SHIFT 1 /* PS_SLEEP_OFF_EINT */ | ||
| 269 | #define WM831X_PS_SLEEP_OFF_EINT_WIDTH 1 /* PS_SLEEP_OFF_EINT */ | ||
| 270 | #define WM831X_PS_ON_WAKE_EINT 0x0001 /* PS_ON_WAKE_EINT */ | ||
| 271 | #define WM831X_PS_ON_WAKE_EINT_MASK 0x0001 /* PS_ON_WAKE_EINT */ | ||
| 272 | #define WM831X_PS_ON_WAKE_EINT_SHIFT 0 /* PS_ON_WAKE_EINT */ | ||
| 273 | #define WM831X_PS_ON_WAKE_EINT_WIDTH 1 /* PS_ON_WAKE_EINT */ | ||
| 274 | |||
| 275 | /* | ||
| 276 | * R16403 (0x4013) - Interrupt Status 3 | ||
| 277 | */ | ||
| 278 | #define WM831X_UV_LDO10_EINT 0x0200 /* UV_LDO10_EINT */ | ||
| 279 | #define WM831X_UV_LDO10_EINT_MASK 0x0200 /* UV_LDO10_EINT */ | ||
| 280 | #define WM831X_UV_LDO10_EINT_SHIFT 9 /* UV_LDO10_EINT */ | ||
| 281 | #define WM831X_UV_LDO10_EINT_WIDTH 1 /* UV_LDO10_EINT */ | ||
| 282 | #define WM831X_UV_LDO9_EINT 0x0100 /* UV_LDO9_EINT */ | ||
| 283 | #define WM831X_UV_LDO9_EINT_MASK 0x0100 /* UV_LDO9_EINT */ | ||
| 284 | #define WM831X_UV_LDO9_EINT_SHIFT 8 /* UV_LDO9_EINT */ | ||
| 285 | #define WM831X_UV_LDO9_EINT_WIDTH 1 /* UV_LDO9_EINT */ | ||
| 286 | #define WM831X_UV_LDO8_EINT 0x0080 /* UV_LDO8_EINT */ | ||
| 287 | #define WM831X_UV_LDO8_EINT_MASK 0x0080 /* UV_LDO8_EINT */ | ||
| 288 | #define WM831X_UV_LDO8_EINT_SHIFT 7 /* UV_LDO8_EINT */ | ||
| 289 | #define WM831X_UV_LDO8_EINT_WIDTH 1 /* UV_LDO8_EINT */ | ||
| 290 | #define WM831X_UV_LDO7_EINT 0x0040 /* UV_LDO7_EINT */ | ||
| 291 | #define WM831X_UV_LDO7_EINT_MASK 0x0040 /* UV_LDO7_EINT */ | ||
| 292 | #define WM831X_UV_LDO7_EINT_SHIFT 6 /* UV_LDO7_EINT */ | ||
| 293 | #define WM831X_UV_LDO7_EINT_WIDTH 1 /* UV_LDO7_EINT */ | ||
| 294 | #define WM831X_UV_LDO6_EINT 0x0020 /* UV_LDO6_EINT */ | ||
| 295 | #define WM831X_UV_LDO6_EINT_MASK 0x0020 /* UV_LDO6_EINT */ | ||
| 296 | #define WM831X_UV_LDO6_EINT_SHIFT 5 /* UV_LDO6_EINT */ | ||
| 297 | #define WM831X_UV_LDO6_EINT_WIDTH 1 /* UV_LDO6_EINT */ | ||
| 298 | #define WM831X_UV_LDO5_EINT 0x0010 /* UV_LDO5_EINT */ | ||
| 299 | #define WM831X_UV_LDO5_EINT_MASK 0x0010 /* UV_LDO5_EINT */ | ||
| 300 | #define WM831X_UV_LDO5_EINT_SHIFT 4 /* UV_LDO5_EINT */ | ||
| 301 | #define WM831X_UV_LDO5_EINT_WIDTH 1 /* UV_LDO5_EINT */ | ||
| 302 | #define WM831X_UV_LDO4_EINT 0x0008 /* UV_LDO4_EINT */ | ||
| 303 | #define WM831X_UV_LDO4_EINT_MASK 0x0008 /* UV_LDO4_EINT */ | ||
| 304 | #define WM831X_UV_LDO4_EINT_SHIFT 3 /* UV_LDO4_EINT */ | ||
| 305 | #define WM831X_UV_LDO4_EINT_WIDTH 1 /* UV_LDO4_EINT */ | ||
| 306 | #define WM831X_UV_LDO3_EINT 0x0004 /* UV_LDO3_EINT */ | ||
| 307 | #define WM831X_UV_LDO3_EINT_MASK 0x0004 /* UV_LDO3_EINT */ | ||
| 308 | #define WM831X_UV_LDO3_EINT_SHIFT 2 /* UV_LDO3_EINT */ | ||
| 309 | #define WM831X_UV_LDO3_EINT_WIDTH 1 /* UV_LDO3_EINT */ | ||
| 310 | #define WM831X_UV_LDO2_EINT 0x0002 /* UV_LDO2_EINT */ | ||
| 311 | #define WM831X_UV_LDO2_EINT_MASK 0x0002 /* UV_LDO2_EINT */ | ||
| 312 | #define WM831X_UV_LDO2_EINT_SHIFT 1 /* UV_LDO2_EINT */ | ||
| 313 | #define WM831X_UV_LDO2_EINT_WIDTH 1 /* UV_LDO2_EINT */ | ||
| 314 | #define WM831X_UV_LDO1_EINT 0x0001 /* UV_LDO1_EINT */ | ||
| 315 | #define WM831X_UV_LDO1_EINT_MASK 0x0001 /* UV_LDO1_EINT */ | ||
| 316 | #define WM831X_UV_LDO1_EINT_SHIFT 0 /* UV_LDO1_EINT */ | ||
| 317 | #define WM831X_UV_LDO1_EINT_WIDTH 1 /* UV_LDO1_EINT */ | ||
| 318 | |||
| 319 | /* | ||
| 320 | * R16404 (0x4014) - Interrupt Status 4 | ||
| 321 | */ | ||
| 322 | #define WM831X_HC_DC2_EINT 0x0200 /* HC_DC2_EINT */ | ||
| 323 | #define WM831X_HC_DC2_EINT_MASK 0x0200 /* HC_DC2_EINT */ | ||
| 324 | #define WM831X_HC_DC2_EINT_SHIFT 9 /* HC_DC2_EINT */ | ||
| 325 | #define WM831X_HC_DC2_EINT_WIDTH 1 /* HC_DC2_EINT */ | ||
| 326 | #define WM831X_HC_DC1_EINT 0x0100 /* HC_DC1_EINT */ | ||
| 327 | #define WM831X_HC_DC1_EINT_MASK 0x0100 /* HC_DC1_EINT */ | ||
| 328 | #define WM831X_HC_DC1_EINT_SHIFT 8 /* HC_DC1_EINT */ | ||
| 329 | #define WM831X_HC_DC1_EINT_WIDTH 1 /* HC_DC1_EINT */ | ||
| 330 | #define WM831X_UV_DC4_EINT 0x0008 /* UV_DC4_EINT */ | ||
| 331 | #define WM831X_UV_DC4_EINT_MASK 0x0008 /* UV_DC4_EINT */ | ||
| 332 | #define WM831X_UV_DC4_EINT_SHIFT 3 /* UV_DC4_EINT */ | ||
| 333 | #define WM831X_UV_DC4_EINT_WIDTH 1 /* UV_DC4_EINT */ | ||
| 334 | #define WM831X_UV_DC3_EINT 0x0004 /* UV_DC3_EINT */ | ||
| 335 | #define WM831X_UV_DC3_EINT_MASK 0x0004 /* UV_DC3_EINT */ | ||
| 336 | #define WM831X_UV_DC3_EINT_SHIFT 2 /* UV_DC3_EINT */ | ||
| 337 | #define WM831X_UV_DC3_EINT_WIDTH 1 /* UV_DC3_EINT */ | ||
| 338 | #define WM831X_UV_DC2_EINT 0x0002 /* UV_DC2_EINT */ | ||
| 339 | #define WM831X_UV_DC2_EINT_MASK 0x0002 /* UV_DC2_EINT */ | ||
| 340 | #define WM831X_UV_DC2_EINT_SHIFT 1 /* UV_DC2_EINT */ | ||
| 341 | #define WM831X_UV_DC2_EINT_WIDTH 1 /* UV_DC2_EINT */ | ||
| 342 | #define WM831X_UV_DC1_EINT 0x0001 /* UV_DC1_EINT */ | ||
| 343 | #define WM831X_UV_DC1_EINT_MASK 0x0001 /* UV_DC1_EINT */ | ||
| 344 | #define WM831X_UV_DC1_EINT_SHIFT 0 /* UV_DC1_EINT */ | ||
| 345 | #define WM831X_UV_DC1_EINT_WIDTH 1 /* UV_DC1_EINT */ | ||
| 346 | |||
| 347 | /* | ||
| 348 | * R16405 (0x4015) - Interrupt Status 5 | ||
| 349 | */ | ||
| 350 | #define WM831X_GP16_EINT 0x8000 /* GP16_EINT */ | ||
| 351 | #define WM831X_GP16_EINT_MASK 0x8000 /* GP16_EINT */ | ||
| 352 | #define WM831X_GP16_EINT_SHIFT 15 /* GP16_EINT */ | ||
| 353 | #define WM831X_GP16_EINT_WIDTH 1 /* GP16_EINT */ | ||
| 354 | #define WM831X_GP15_EINT 0x4000 /* GP15_EINT */ | ||
| 355 | #define WM831X_GP15_EINT_MASK 0x4000 /* GP15_EINT */ | ||
| 356 | #define WM831X_GP15_EINT_SHIFT 14 /* GP15_EINT */ | ||
| 357 | #define WM831X_GP15_EINT_WIDTH 1 /* GP15_EINT */ | ||
| 358 | #define WM831X_GP14_EINT 0x2000 /* GP14_EINT */ | ||
| 359 | #define WM831X_GP14_EINT_MASK 0x2000 /* GP14_EINT */ | ||
| 360 | #define WM831X_GP14_EINT_SHIFT 13 /* GP14_EINT */ | ||
| 361 | #define WM831X_GP14_EINT_WIDTH 1 /* GP14_EINT */ | ||
| 362 | #define WM831X_GP13_EINT 0x1000 /* GP13_EINT */ | ||
| 363 | #define WM831X_GP13_EINT_MASK 0x1000 /* GP13_EINT */ | ||
| 364 | #define WM831X_GP13_EINT_SHIFT 12 /* GP13_EINT */ | ||
| 365 | #define WM831X_GP13_EINT_WIDTH 1 /* GP13_EINT */ | ||
| 366 | #define WM831X_GP12_EINT 0x0800 /* GP12_EINT */ | ||
| 367 | #define WM831X_GP12_EINT_MASK 0x0800 /* GP12_EINT */ | ||
| 368 | #define WM831X_GP12_EINT_SHIFT 11 /* GP12_EINT */ | ||
| 369 | #define WM831X_GP12_EINT_WIDTH 1 /* GP12_EINT */ | ||
| 370 | #define WM831X_GP11_EINT 0x0400 /* GP11_EINT */ | ||
| 371 | #define WM831X_GP11_EINT_MASK 0x0400 /* GP11_EINT */ | ||
| 372 | #define WM831X_GP11_EINT_SHIFT 10 /* GP11_EINT */ | ||
| 373 | #define WM831X_GP11_EINT_WIDTH 1 /* GP11_EINT */ | ||
| 374 | #define WM831X_GP10_EINT 0x0200 /* GP10_EINT */ | ||
| 375 | #define WM831X_GP10_EINT_MASK 0x0200 /* GP10_EINT */ | ||
| 376 | #define WM831X_GP10_EINT_SHIFT 9 /* GP10_EINT */ | ||
| 377 | #define WM831X_GP10_EINT_WIDTH 1 /* GP10_EINT */ | ||
| 378 | #define WM831X_GP9_EINT 0x0100 /* GP9_EINT */ | ||
| 379 | #define WM831X_GP9_EINT_MASK 0x0100 /* GP9_EINT */ | ||
| 380 | #define WM831X_GP9_EINT_SHIFT 8 /* GP9_EINT */ | ||
| 381 | #define WM831X_GP9_EINT_WIDTH 1 /* GP9_EINT */ | ||
| 382 | #define WM831X_GP8_EINT 0x0080 /* GP8_EINT */ | ||
| 383 | #define WM831X_GP8_EINT_MASK 0x0080 /* GP8_EINT */ | ||
| 384 | #define WM831X_GP8_EINT_SHIFT 7 /* GP8_EINT */ | ||
| 385 | #define WM831X_GP8_EINT_WIDTH 1 /* GP8_EINT */ | ||
| 386 | #define WM831X_GP7_EINT 0x0040 /* GP7_EINT */ | ||
| 387 | #define WM831X_GP7_EINT_MASK 0x0040 /* GP7_EINT */ | ||
| 388 | #define WM831X_GP7_EINT_SHIFT 6 /* GP7_EINT */ | ||
| 389 | #define WM831X_GP7_EINT_WIDTH 1 /* GP7_EINT */ | ||
| 390 | #define WM831X_GP6_EINT 0x0020 /* GP6_EINT */ | ||
| 391 | #define WM831X_GP6_EINT_MASK 0x0020 /* GP6_EINT */ | ||
| 392 | #define WM831X_GP6_EINT_SHIFT 5 /* GP6_EINT */ | ||
| 393 | #define WM831X_GP6_EINT_WIDTH 1 /* GP6_EINT */ | ||
| 394 | #define WM831X_GP5_EINT 0x0010 /* GP5_EINT */ | ||
| 395 | #define WM831X_GP5_EINT_MASK 0x0010 /* GP5_EINT */ | ||
| 396 | #define WM831X_GP5_EINT_SHIFT 4 /* GP5_EINT */ | ||
| 397 | #define WM831X_GP5_EINT_WIDTH 1 /* GP5_EINT */ | ||
| 398 | #define WM831X_GP4_EINT 0x0008 /* GP4_EINT */ | ||
| 399 | #define WM831X_GP4_EINT_MASK 0x0008 /* GP4_EINT */ | ||
| 400 | #define WM831X_GP4_EINT_SHIFT 3 /* GP4_EINT */ | ||
| 401 | #define WM831X_GP4_EINT_WIDTH 1 /* GP4_EINT */ | ||
| 402 | #define WM831X_GP3_EINT 0x0004 /* GP3_EINT */ | ||
| 403 | #define WM831X_GP3_EINT_MASK 0x0004 /* GP3_EINT */ | ||
| 404 | #define WM831X_GP3_EINT_SHIFT 2 /* GP3_EINT */ | ||
| 405 | #define WM831X_GP3_EINT_WIDTH 1 /* GP3_EINT */ | ||
| 406 | #define WM831X_GP2_EINT 0x0002 /* GP2_EINT */ | ||
| 407 | #define WM831X_GP2_EINT_MASK 0x0002 /* GP2_EINT */ | ||
| 408 | #define WM831X_GP2_EINT_SHIFT 1 /* GP2_EINT */ | ||
| 409 | #define WM831X_GP2_EINT_WIDTH 1 /* GP2_EINT */ | ||
| 410 | #define WM831X_GP1_EINT 0x0001 /* GP1_EINT */ | ||
| 411 | #define WM831X_GP1_EINT_MASK 0x0001 /* GP1_EINT */ | ||
| 412 | #define WM831X_GP1_EINT_SHIFT 0 /* GP1_EINT */ | ||
| 413 | #define WM831X_GP1_EINT_WIDTH 1 /* GP1_EINT */ | ||
| 414 | |||
| 415 | /* | ||
| 416 | * R16407 (0x4017) - IRQ Config | ||
| 417 | */ | ||
| 418 | #define WM831X_IRQ_OD 0x0002 /* IRQ_OD */ | ||
| 419 | #define WM831X_IRQ_OD_MASK 0x0002 /* IRQ_OD */ | ||
| 420 | #define WM831X_IRQ_OD_SHIFT 1 /* IRQ_OD */ | ||
| 421 | #define WM831X_IRQ_OD_WIDTH 1 /* IRQ_OD */ | ||
| 422 | #define WM831X_IM_IRQ 0x0001 /* IM_IRQ */ | ||
| 423 | #define WM831X_IM_IRQ_MASK 0x0001 /* IM_IRQ */ | ||
| 424 | #define WM831X_IM_IRQ_SHIFT 0 /* IM_IRQ */ | ||
| 425 | #define WM831X_IM_IRQ_WIDTH 1 /* IM_IRQ */ | ||
| 426 | |||
| 427 | /* | ||
| 428 | * R16408 (0x4018) - System Interrupts Mask | ||
| 429 | */ | ||
| 430 | #define WM831X_IM_PS_INT 0x8000 /* IM_PS_INT */ | ||
| 431 | #define WM831X_IM_PS_INT_MASK 0x8000 /* IM_PS_INT */ | ||
| 432 | #define WM831X_IM_PS_INT_SHIFT 15 /* IM_PS_INT */ | ||
| 433 | #define WM831X_IM_PS_INT_WIDTH 1 /* IM_PS_INT */ | ||
| 434 | #define WM831X_IM_TEMP_INT 0x4000 /* IM_TEMP_INT */ | ||
| 435 | #define WM831X_IM_TEMP_INT_MASK 0x4000 /* IM_TEMP_INT */ | ||
| 436 | #define WM831X_IM_TEMP_INT_SHIFT 14 /* IM_TEMP_INT */ | ||
| 437 | #define WM831X_IM_TEMP_INT_WIDTH 1 /* IM_TEMP_INT */ | ||
| 438 | #define WM831X_IM_GP_INT 0x2000 /* IM_GP_INT */ | ||
| 439 | #define WM831X_IM_GP_INT_MASK 0x2000 /* IM_GP_INT */ | ||
| 440 | #define WM831X_IM_GP_INT_SHIFT 13 /* IM_GP_INT */ | ||
| 441 | #define WM831X_IM_GP_INT_WIDTH 1 /* IM_GP_INT */ | ||
| 442 | #define WM831X_IM_ON_PIN_INT 0x1000 /* IM_ON_PIN_INT */ | ||
| 443 | #define WM831X_IM_ON_PIN_INT_MASK 0x1000 /* IM_ON_PIN_INT */ | ||
| 444 | #define WM831X_IM_ON_PIN_INT_SHIFT 12 /* IM_ON_PIN_INT */ | ||
| 445 | #define WM831X_IM_ON_PIN_INT_WIDTH 1 /* IM_ON_PIN_INT */ | ||
| 446 | #define WM831X_IM_WDOG_INT 0x0800 /* IM_WDOG_INT */ | ||
| 447 | #define WM831X_IM_WDOG_INT_MASK 0x0800 /* IM_WDOG_INT */ | ||
| 448 | #define WM831X_IM_WDOG_INT_SHIFT 11 /* IM_WDOG_INT */ | ||
| 449 | #define WM831X_IM_WDOG_INT_WIDTH 1 /* IM_WDOG_INT */ | ||
| 450 | #define WM831X_IM_TCHDATA_INT 0x0400 /* IM_TCHDATA_INT */ | ||
| 451 | #define WM831X_IM_TCHDATA_INT_MASK 0x0400 /* IM_TCHDATA_INT */ | ||
| 452 | #define WM831X_IM_TCHDATA_INT_SHIFT 10 /* IM_TCHDATA_INT */ | ||
| 453 | #define WM831X_IM_TCHDATA_INT_WIDTH 1 /* IM_TCHDATA_INT */ | ||
| 454 | #define WM831X_IM_TCHPD_INT 0x0200 /* IM_TCHPD_INT */ | ||
| 455 | #define WM831X_IM_TCHPD_INT_MASK 0x0200 /* IM_TCHPD_INT */ | ||
| 456 | #define WM831X_IM_TCHPD_INT_SHIFT 9 /* IM_TCHPD_INT */ | ||
| 457 | #define WM831X_IM_TCHPD_INT_WIDTH 1 /* IM_TCHPD_INT */ | ||
| 458 | #define WM831X_IM_AUXADC_INT 0x0100 /* IM_AUXADC_INT */ | ||
| 459 | #define WM831X_IM_AUXADC_INT_MASK 0x0100 /* IM_AUXADC_INT */ | ||
| 460 | #define WM831X_IM_AUXADC_INT_SHIFT 8 /* IM_AUXADC_INT */ | ||
| 461 | #define WM831X_IM_AUXADC_INT_WIDTH 1 /* IM_AUXADC_INT */ | ||
| 462 | #define WM831X_IM_PPM_INT 0x0080 /* IM_PPM_INT */ | ||
| 463 | #define WM831X_IM_PPM_INT_MASK 0x0080 /* IM_PPM_INT */ | ||
| 464 | #define WM831X_IM_PPM_INT_SHIFT 7 /* IM_PPM_INT */ | ||
| 465 | #define WM831X_IM_PPM_INT_WIDTH 1 /* IM_PPM_INT */ | ||
| 466 | #define WM831X_IM_CS_INT 0x0040 /* IM_CS_INT */ | ||
| 467 | #define WM831X_IM_CS_INT_MASK 0x0040 /* IM_CS_INT */ | ||
| 468 | #define WM831X_IM_CS_INT_SHIFT 6 /* IM_CS_INT */ | ||
| 469 | #define WM831X_IM_CS_INT_WIDTH 1 /* IM_CS_INT */ | ||
| 470 | #define WM831X_IM_RTC_INT 0x0020 /* IM_RTC_INT */ | ||
| 471 | #define WM831X_IM_RTC_INT_MASK 0x0020 /* IM_RTC_INT */ | ||
| 472 | #define WM831X_IM_RTC_INT_SHIFT 5 /* IM_RTC_INT */ | ||
| 473 | #define WM831X_IM_RTC_INT_WIDTH 1 /* IM_RTC_INT */ | ||
| 474 | #define WM831X_IM_OTP_INT 0x0010 /* IM_OTP_INT */ | ||
| 475 | #define WM831X_IM_OTP_INT_MASK 0x0010 /* IM_OTP_INT */ | ||
| 476 | #define WM831X_IM_OTP_INT_SHIFT 4 /* IM_OTP_INT */ | ||
| 477 | #define WM831X_IM_OTP_INT_WIDTH 1 /* IM_OTP_INT */ | ||
| 478 | #define WM831X_IM_CHILD_INT 0x0008 /* IM_CHILD_INT */ | ||
| 479 | #define WM831X_IM_CHILD_INT_MASK 0x0008 /* IM_CHILD_INT */ | ||
| 480 | #define WM831X_IM_CHILD_INT_SHIFT 3 /* IM_CHILD_INT */ | ||
| 481 | #define WM831X_IM_CHILD_INT_WIDTH 1 /* IM_CHILD_INT */ | ||
| 482 | #define WM831X_IM_CHG_INT 0x0004 /* IM_CHG_INT */ | ||
| 483 | #define WM831X_IM_CHG_INT_MASK 0x0004 /* IM_CHG_INT */ | ||
| 484 | #define WM831X_IM_CHG_INT_SHIFT 2 /* IM_CHG_INT */ | ||
| 485 | #define WM831X_IM_CHG_INT_WIDTH 1 /* IM_CHG_INT */ | ||
| 486 | #define WM831X_IM_HC_INT 0x0002 /* IM_HC_INT */ | ||
| 487 | #define WM831X_IM_HC_INT_MASK 0x0002 /* IM_HC_INT */ | ||
| 488 | #define WM831X_IM_HC_INT_SHIFT 1 /* IM_HC_INT */ | ||
| 489 | #define WM831X_IM_HC_INT_WIDTH 1 /* IM_HC_INT */ | ||
| 490 | #define WM831X_IM_UV_INT 0x0001 /* IM_UV_INT */ | ||
| 491 | #define WM831X_IM_UV_INT_MASK 0x0001 /* IM_UV_INT */ | ||
| 492 | #define WM831X_IM_UV_INT_SHIFT 0 /* IM_UV_INT */ | ||
| 493 | #define WM831X_IM_UV_INT_WIDTH 1 /* IM_UV_INT */ | ||
| 494 | |||
| 495 | /* | ||
| 496 | * R16409 (0x4019) - Interrupt Status 1 Mask | ||
| 497 | */ | ||
| 498 | #define WM831X_IM_PPM_SYSLO_EINT 0x8000 /* IM_PPM_SYSLO_EINT */ | ||
| 499 | #define WM831X_IM_PPM_SYSLO_EINT_MASK 0x8000 /* IM_PPM_SYSLO_EINT */ | ||
| 500 | #define WM831X_IM_PPM_SYSLO_EINT_SHIFT 15 /* IM_PPM_SYSLO_EINT */ | ||
| 501 | #define WM831X_IM_PPM_SYSLO_EINT_WIDTH 1 /* IM_PPM_SYSLO_EINT */ | ||
| 502 | #define WM831X_IM_PPM_PWR_SRC_EINT 0x4000 /* IM_PPM_PWR_SRC_EINT */ | ||
| 503 | #define WM831X_IM_PPM_PWR_SRC_EINT_MASK 0x4000 /* IM_PPM_PWR_SRC_EINT */ | ||
| 504 | #define WM831X_IM_PPM_PWR_SRC_EINT_SHIFT 14 /* IM_PPM_PWR_SRC_EINT */ | ||
| 505 | #define WM831X_IM_PPM_PWR_SRC_EINT_WIDTH 1 /* IM_PPM_PWR_SRC_EINT */ | ||
| 506 | #define WM831X_IM_PPM_USB_CURR_EINT 0x2000 /* IM_PPM_USB_CURR_EINT */ | ||
| 507 | #define WM831X_IM_PPM_USB_CURR_EINT_MASK 0x2000 /* IM_PPM_USB_CURR_EINT */ | ||
| 508 | #define WM831X_IM_PPM_USB_CURR_EINT_SHIFT 13 /* IM_PPM_USB_CURR_EINT */ | ||
| 509 | #define WM831X_IM_PPM_USB_CURR_EINT_WIDTH 1 /* IM_PPM_USB_CURR_EINT */ | ||
| 510 | #define WM831X_IM_ON_PIN_EINT 0x1000 /* IM_ON_PIN_EINT */ | ||
| 511 | #define WM831X_IM_ON_PIN_EINT_MASK 0x1000 /* IM_ON_PIN_EINT */ | ||
| 512 | #define WM831X_IM_ON_PIN_EINT_SHIFT 12 /* IM_ON_PIN_EINT */ | ||
| 513 | #define WM831X_IM_ON_PIN_EINT_WIDTH 1 /* IM_ON_PIN_EINT */ | ||
| 514 | #define WM831X_IM_WDOG_TO_EINT 0x0800 /* IM_WDOG_TO_EINT */ | ||
| 515 | #define WM831X_IM_WDOG_TO_EINT_MASK 0x0800 /* IM_WDOG_TO_EINT */ | ||
| 516 | #define WM831X_IM_WDOG_TO_EINT_SHIFT 11 /* IM_WDOG_TO_EINT */ | ||
| 517 | #define WM831X_IM_WDOG_TO_EINT_WIDTH 1 /* IM_WDOG_TO_EINT */ | ||
| 518 | #define WM831X_IM_TCHDATA_EINT 0x0400 /* IM_TCHDATA_EINT */ | ||
| 519 | #define WM831X_IM_TCHDATA_EINT_MASK 0x0400 /* IM_TCHDATA_EINT */ | ||
| 520 | #define WM831X_IM_TCHDATA_EINT_SHIFT 10 /* IM_TCHDATA_EINT */ | ||
| 521 | #define WM831X_IM_TCHDATA_EINT_WIDTH 1 /* IM_TCHDATA_EINT */ | ||
| 522 | #define WM831X_IM_TCHPD_EINT 0x0200 /* IM_TCHPD_EINT */ | ||
| 523 | #define WM831X_IM_TCHPD_EINT_MASK 0x0200 /* IM_TCHPD_EINT */ | ||
| 524 | #define WM831X_IM_TCHPD_EINT_SHIFT 9 /* IM_TCHPD_EINT */ | ||
| 525 | #define WM831X_IM_TCHPD_EINT_WIDTH 1 /* IM_TCHPD_EINT */ | ||
| 526 | #define WM831X_IM_AUXADC_DATA_EINT 0x0100 /* IM_AUXADC_DATA_EINT */ | ||
| 527 | #define WM831X_IM_AUXADC_DATA_EINT_MASK 0x0100 /* IM_AUXADC_DATA_EINT */ | ||
| 528 | #define WM831X_IM_AUXADC_DATA_EINT_SHIFT 8 /* IM_AUXADC_DATA_EINT */ | ||
| 529 | #define WM831X_IM_AUXADC_DATA_EINT_WIDTH 1 /* IM_AUXADC_DATA_EINT */ | ||
| 530 | #define WM831X_IM_AUXADC_DCOMP4_EINT 0x0080 /* IM_AUXADC_DCOMP4_EINT */ | ||
| 531 | #define WM831X_IM_AUXADC_DCOMP4_EINT_MASK 0x0080 /* IM_AUXADC_DCOMP4_EINT */ | ||
| 532 | #define WM831X_IM_AUXADC_DCOMP4_EINT_SHIFT 7 /* IM_AUXADC_DCOMP4_EINT */ | ||
| 533 | #define WM831X_IM_AUXADC_DCOMP4_EINT_WIDTH 1 /* IM_AUXADC_DCOMP4_EINT */ | ||
| 534 | #define WM831X_IM_AUXADC_DCOMP3_EINT 0x0040 /* IM_AUXADC_DCOMP3_EINT */ | ||
| 535 | #define WM831X_IM_AUXADC_DCOMP3_EINT_MASK 0x0040 /* IM_AUXADC_DCOMP3_EINT */ | ||
| 536 | #define WM831X_IM_AUXADC_DCOMP3_EINT_SHIFT 6 /* IM_AUXADC_DCOMP3_EINT */ | ||
| 537 | #define WM831X_IM_AUXADC_DCOMP3_EINT_WIDTH 1 /* IM_AUXADC_DCOMP3_EINT */ | ||
| 538 | #define WM831X_IM_AUXADC_DCOMP2_EINT 0x0020 /* IM_AUXADC_DCOMP2_EINT */ | ||
| 539 | #define WM831X_IM_AUXADC_DCOMP2_EINT_MASK 0x0020 /* IM_AUXADC_DCOMP2_EINT */ | ||
| 540 | #define WM831X_IM_AUXADC_DCOMP2_EINT_SHIFT 5 /* IM_AUXADC_DCOMP2_EINT */ | ||
| 541 | #define WM831X_IM_AUXADC_DCOMP2_EINT_WIDTH 1 /* IM_AUXADC_DCOMP2_EINT */ | ||
| 542 | #define WM831X_IM_AUXADC_DCOMP1_EINT 0x0010 /* IM_AUXADC_DCOMP1_EINT */ | ||
| 543 | #define WM831X_IM_AUXADC_DCOMP1_EINT_MASK 0x0010 /* IM_AUXADC_DCOMP1_EINT */ | ||
| 544 | #define WM831X_IM_AUXADC_DCOMP1_EINT_SHIFT 4 /* IM_AUXADC_DCOMP1_EINT */ | ||
| 545 | #define WM831X_IM_AUXADC_DCOMP1_EINT_WIDTH 1 /* IM_AUXADC_DCOMP1_EINT */ | ||
| 546 | #define WM831X_IM_RTC_PER_EINT 0x0008 /* IM_RTC_PER_EINT */ | ||
| 547 | #define WM831X_IM_RTC_PER_EINT_MASK 0x0008 /* IM_RTC_PER_EINT */ | ||
| 548 | #define WM831X_IM_RTC_PER_EINT_SHIFT 3 /* IM_RTC_PER_EINT */ | ||
| 549 | #define WM831X_IM_RTC_PER_EINT_WIDTH 1 /* IM_RTC_PER_EINT */ | ||
| 550 | #define WM831X_IM_RTC_ALM_EINT 0x0004 /* IM_RTC_ALM_EINT */ | ||
| 551 | #define WM831X_IM_RTC_ALM_EINT_MASK 0x0004 /* IM_RTC_ALM_EINT */ | ||
| 552 | #define WM831X_IM_RTC_ALM_EINT_SHIFT 2 /* IM_RTC_ALM_EINT */ | ||
| 553 | #define WM831X_IM_RTC_ALM_EINT_WIDTH 1 /* IM_RTC_ALM_EINT */ | ||
| 554 | #define WM831X_IM_TEMP_THW_EINT 0x0002 /* IM_TEMP_THW_EINT */ | ||
| 555 | #define WM831X_IM_TEMP_THW_EINT_MASK 0x0002 /* IM_TEMP_THW_EINT */ | ||
| 556 | #define WM831X_IM_TEMP_THW_EINT_SHIFT 1 /* IM_TEMP_THW_EINT */ | ||
| 557 | #define WM831X_IM_TEMP_THW_EINT_WIDTH 1 /* IM_TEMP_THW_EINT */ | ||
| 558 | |||
| 559 | /* | ||
| 560 | * R16410 (0x401A) - Interrupt Status 2 Mask | ||
| 561 | */ | ||
| 562 | #define WM831X_IM_CHG_BATT_HOT_EINT 0x8000 /* IM_CHG_BATT_HOT_EINT */ | ||
| 563 | #define WM831X_IM_CHG_BATT_HOT_EINT_MASK 0x8000 /* IM_CHG_BATT_HOT_EINT */ | ||
| 564 | #define WM831X_IM_CHG_BATT_HOT_EINT_SHIFT 15 /* IM_CHG_BATT_HOT_EINT */ | ||
| 565 | #define WM831X_IM_CHG_BATT_HOT_EINT_WIDTH 1 /* IM_CHG_BATT_HOT_EINT */ | ||
| 566 | #define WM831X_IM_CHG_BATT_COLD_EINT 0x4000 /* IM_CHG_BATT_COLD_EINT */ | ||
| 567 | #define WM831X_IM_CHG_BATT_COLD_EINT_MASK 0x4000 /* IM_CHG_BATT_COLD_EINT */ | ||
| 568 | #define WM831X_IM_CHG_BATT_COLD_EINT_SHIFT 14 /* IM_CHG_BATT_COLD_EINT */ | ||
| 569 | #define WM831X_IM_CHG_BATT_COLD_EINT_WIDTH 1 /* IM_CHG_BATT_COLD_EINT */ | ||
| 570 | #define WM831X_IM_CHG_BATT_FAIL_EINT 0x2000 /* IM_CHG_BATT_FAIL_EINT */ | ||
| 571 | #define WM831X_IM_CHG_BATT_FAIL_EINT_MASK 0x2000 /* IM_CHG_BATT_FAIL_EINT */ | ||
| 572 | #define WM831X_IM_CHG_BATT_FAIL_EINT_SHIFT 13 /* IM_CHG_BATT_FAIL_EINT */ | ||
| 573 | #define WM831X_IM_CHG_BATT_FAIL_EINT_WIDTH 1 /* IM_CHG_BATT_FAIL_EINT */ | ||
| 574 | #define WM831X_IM_CHG_OV_EINT 0x1000 /* IM_CHG_OV_EINT */ | ||
| 575 | #define WM831X_IM_CHG_OV_EINT_MASK 0x1000 /* IM_CHG_OV_EINT */ | ||
| 576 | #define WM831X_IM_CHG_OV_EINT_SHIFT 12 /* IM_CHG_OV_EINT */ | ||
| 577 | #define WM831X_IM_CHG_OV_EINT_WIDTH 1 /* IM_CHG_OV_EINT */ | ||
| 578 | #define WM831X_IM_CHG_END_EINT 0x0800 /* IM_CHG_END_EINT */ | ||
| 579 | #define WM831X_IM_CHG_END_EINT_MASK 0x0800 /* IM_CHG_END_EINT */ | ||
| 580 | #define WM831X_IM_CHG_END_EINT_SHIFT 11 /* IM_CHG_END_EINT */ | ||
| 581 | #define WM831X_IM_CHG_END_EINT_WIDTH 1 /* IM_CHG_END_EINT */ | ||
| 582 | #define WM831X_IM_CHG_TO_EINT 0x0400 /* IM_CHG_TO_EINT */ | ||
| 583 | #define WM831X_IM_CHG_TO_EINT_MASK 0x0400 /* IM_CHG_TO_EINT */ | ||
| 584 | #define WM831X_IM_CHG_TO_EINT_SHIFT 10 /* IM_CHG_TO_EINT */ | ||
| 585 | #define WM831X_IM_CHG_TO_EINT_WIDTH 1 /* IM_CHG_TO_EINT */ | ||
| 586 | #define WM831X_IM_CHG_MODE_EINT 0x0200 /* IM_CHG_MODE_EINT */ | ||
| 587 | #define WM831X_IM_CHG_MODE_EINT_MASK 0x0200 /* IM_CHG_MODE_EINT */ | ||
| 588 | #define WM831X_IM_CHG_MODE_EINT_SHIFT 9 /* IM_CHG_MODE_EINT */ | ||
| 589 | #define WM831X_IM_CHG_MODE_EINT_WIDTH 1 /* IM_CHG_MODE_EINT */ | ||
| 590 | #define WM831X_IM_CHG_START_EINT 0x0100 /* IM_CHG_START_EINT */ | ||
| 591 | #define WM831X_IM_CHG_START_EINT_MASK 0x0100 /* IM_CHG_START_EINT */ | ||
| 592 | #define WM831X_IM_CHG_START_EINT_SHIFT 8 /* IM_CHG_START_EINT */ | ||
| 593 | #define WM831X_IM_CHG_START_EINT_WIDTH 1 /* IM_CHG_START_EINT */ | ||
| 594 | #define WM831X_IM_CS2_EINT 0x0080 /* IM_CS2_EINT */ | ||
| 595 | #define WM831X_IM_CS2_EINT_MASK 0x0080 /* IM_CS2_EINT */ | ||
| 596 | #define WM831X_IM_CS2_EINT_SHIFT 7 /* IM_CS2_EINT */ | ||
| 597 | #define WM831X_IM_CS2_EINT_WIDTH 1 /* IM_CS2_EINT */ | ||
| 598 | #define WM831X_IM_CS1_EINT 0x0040 /* IM_CS1_EINT */ | ||
| 599 | #define WM831X_IM_CS1_EINT_MASK 0x0040 /* IM_CS1_EINT */ | ||
| 600 | #define WM831X_IM_CS1_EINT_SHIFT 6 /* IM_CS1_EINT */ | ||
| 601 | #define WM831X_IM_CS1_EINT_WIDTH 1 /* IM_CS1_EINT */ | ||
| 602 | #define WM831X_IM_OTP_CMD_END_EINT 0x0020 /* IM_OTP_CMD_END_EINT */ | ||
| 603 | #define WM831X_IM_OTP_CMD_END_EINT_MASK 0x0020 /* IM_OTP_CMD_END_EINT */ | ||
| 604 | #define WM831X_IM_OTP_CMD_END_EINT_SHIFT 5 /* IM_OTP_CMD_END_EINT */ | ||
| 605 | #define WM831X_IM_OTP_CMD_END_EINT_WIDTH 1 /* IM_OTP_CMD_END_EINT */ | ||
| 606 | #define WM831X_IM_OTP_ERR_EINT 0x0010 /* IM_OTP_ERR_EINT */ | ||
| 607 | #define WM831X_IM_OTP_ERR_EINT_MASK 0x0010 /* IM_OTP_ERR_EINT */ | ||
| 608 | #define WM831X_IM_OTP_ERR_EINT_SHIFT 4 /* IM_OTP_ERR_EINT */ | ||
| 609 | #define WM831X_IM_OTP_ERR_EINT_WIDTH 1 /* IM_OTP_ERR_EINT */ | ||
| 610 | #define WM831X_IM_PS_POR_EINT 0x0004 /* IM_PS_POR_EINT */ | ||
| 611 | #define WM831X_IM_PS_POR_EINT_MASK 0x0004 /* IM_PS_POR_EINT */ | ||
| 612 | #define WM831X_IM_PS_POR_EINT_SHIFT 2 /* IM_PS_POR_EINT */ | ||
| 613 | #define WM831X_IM_PS_POR_EINT_WIDTH 1 /* IM_PS_POR_EINT */ | ||
| 614 | #define WM831X_IM_PS_SLEEP_OFF_EINT 0x0002 /* IM_PS_SLEEP_OFF_EINT */ | ||
| 615 | #define WM831X_IM_PS_SLEEP_OFF_EINT_MASK 0x0002 /* IM_PS_SLEEP_OFF_EINT */ | ||
| 616 | #define WM831X_IM_PS_SLEEP_OFF_EINT_SHIFT 1 /* IM_PS_SLEEP_OFF_EINT */ | ||
| 617 | #define WM831X_IM_PS_SLEEP_OFF_EINT_WIDTH 1 /* IM_PS_SLEEP_OFF_EINT */ | ||
| 618 | #define WM831X_IM_PS_ON_WAKE_EINT 0x0001 /* IM_PS_ON_WAKE_EINT */ | ||
| 619 | #define WM831X_IM_PS_ON_WAKE_EINT_MASK 0x0001 /* IM_PS_ON_WAKE_EINT */ | ||
| 620 | #define WM831X_IM_PS_ON_WAKE_EINT_SHIFT 0 /* IM_PS_ON_WAKE_EINT */ | ||
| 621 | #define WM831X_IM_PS_ON_WAKE_EINT_WIDTH 1 /* IM_PS_ON_WAKE_EINT */ | ||
| 622 | |||
| 623 | /* | ||
| 624 | * R16411 (0x401B) - Interrupt Status 3 Mask | ||
| 625 | */ | ||
| 626 | #define WM831X_IM_UV_LDO10_EINT 0x0200 /* IM_UV_LDO10_EINT */ | ||
| 627 | #define WM831X_IM_UV_LDO10_EINT_MASK 0x0200 /* IM_UV_LDO10_EINT */ | ||
| 628 | #define WM831X_IM_UV_LDO10_EINT_SHIFT 9 /* IM_UV_LDO10_EINT */ | ||
| 629 | #define WM831X_IM_UV_LDO10_EINT_WIDTH 1 /* IM_UV_LDO10_EINT */ | ||
| 630 | #define WM831X_IM_UV_LDO9_EINT 0x0100 /* IM_UV_LDO9_EINT */ | ||
| 631 | #define WM831X_IM_UV_LDO9_EINT_MASK 0x0100 /* IM_UV_LDO9_EINT */ | ||
| 632 | #define WM831X_IM_UV_LDO9_EINT_SHIFT 8 /* IM_UV_LDO9_EINT */ | ||
| 633 | #define WM831X_IM_UV_LDO9_EINT_WIDTH 1 /* IM_UV_LDO9_EINT */ | ||
| 634 | #define WM831X_IM_UV_LDO8_EINT 0x0080 /* IM_UV_LDO8_EINT */ | ||
| 635 | #define WM831X_IM_UV_LDO8_EINT_MASK 0x0080 /* IM_UV_LDO8_EINT */ | ||
| 636 | #define WM831X_IM_UV_LDO8_EINT_SHIFT 7 /* IM_UV_LDO8_EINT */ | ||
| 637 | #define WM831X_IM_UV_LDO8_EINT_WIDTH 1 /* IM_UV_LDO8_EINT */ | ||
| 638 | #define WM831X_IM_UV_LDO7_EINT 0x0040 /* IM_UV_LDO7_EINT */ | ||
| 639 | #define WM831X_IM_UV_LDO7_EINT_MASK 0x0040 /* IM_UV_LDO7_EINT */ | ||
| 640 | #define WM831X_IM_UV_LDO7_EINT_SHIFT 6 /* IM_UV_LDO7_EINT */ | ||
| 641 | #define WM831X_IM_UV_LDO7_EINT_WIDTH 1 /* IM_UV_LDO7_EINT */ | ||
| 642 | #define WM831X_IM_UV_LDO6_EINT 0x0020 /* IM_UV_LDO6_EINT */ | ||
| 643 | #define WM831X_IM_UV_LDO6_EINT_MASK 0x0020 /* IM_UV_LDO6_EINT */ | ||
| 644 | #define WM831X_IM_UV_LDO6_EINT_SHIFT 5 /* IM_UV_LDO6_EINT */ | ||
| 645 | #define WM831X_IM_UV_LDO6_EINT_WIDTH 1 /* IM_UV_LDO6_EINT */ | ||
| 646 | #define WM831X_IM_UV_LDO5_EINT 0x0010 /* IM_UV_LDO5_EINT */ | ||
| 647 | #define WM831X_IM_UV_LDO5_EINT_MASK 0x0010 /* IM_UV_LDO5_EINT */ | ||
| 648 | #define WM831X_IM_UV_LDO5_EINT_SHIFT 4 /* IM_UV_LDO5_EINT */ | ||
| 649 | #define WM831X_IM_UV_LDO5_EINT_WIDTH 1 /* IM_UV_LDO5_EINT */ | ||
| 650 | #define WM831X_IM_UV_LDO4_EINT 0x0008 /* IM_UV_LDO4_EINT */ | ||
| 651 | #define WM831X_IM_UV_LDO4_EINT_MASK 0x0008 /* IM_UV_LDO4_EINT */ | ||
| 652 | #define WM831X_IM_UV_LDO4_EINT_SHIFT 3 /* IM_UV_LDO4_EINT */ | ||
| 653 | #define WM831X_IM_UV_LDO4_EINT_WIDTH 1 /* IM_UV_LDO4_EINT */ | ||
| 654 | #define WM831X_IM_UV_LDO3_EINT 0x0004 /* IM_UV_LDO3_EINT */ | ||
| 655 | #define WM831X_IM_UV_LDO3_EINT_MASK 0x0004 /* IM_UV_LDO3_EINT */ | ||
| 656 | #define WM831X_IM_UV_LDO3_EINT_SHIFT 2 /* IM_UV_LDO3_EINT */ | ||
| 657 | #define WM831X_IM_UV_LDO3_EINT_WIDTH 1 /* IM_UV_LDO3_EINT */ | ||
| 658 | #define WM831X_IM_UV_LDO2_EINT 0x0002 /* IM_UV_LDO2_EINT */ | ||
| 659 | #define WM831X_IM_UV_LDO2_EINT_MASK 0x0002 /* IM_UV_LDO2_EINT */ | ||
| 660 | #define WM831X_IM_UV_LDO2_EINT_SHIFT 1 /* IM_UV_LDO2_EINT */ | ||
| 661 | #define WM831X_IM_UV_LDO2_EINT_WIDTH 1 /* IM_UV_LDO2_EINT */ | ||
| 662 | #define WM831X_IM_UV_LDO1_EINT 0x0001 /* IM_UV_LDO1_EINT */ | ||
| 663 | #define WM831X_IM_UV_LDO1_EINT_MASK 0x0001 /* IM_UV_LDO1_EINT */ | ||
| 664 | #define WM831X_IM_UV_LDO1_EINT_SHIFT 0 /* IM_UV_LDO1_EINT */ | ||
| 665 | #define WM831X_IM_UV_LDO1_EINT_WIDTH 1 /* IM_UV_LDO1_EINT */ | ||
| 666 | |||
| 667 | /* | ||
| 668 | * R16412 (0x401C) - Interrupt Status 4 Mask | ||
| 669 | */ | ||
| 670 | #define WM831X_IM_HC_DC2_EINT 0x0200 /* IM_HC_DC2_EINT */ | ||
| 671 | #define WM831X_IM_HC_DC2_EINT_MASK 0x0200 /* IM_HC_DC2_EINT */ | ||
| 672 | #define WM831X_IM_HC_DC2_EINT_SHIFT 9 /* IM_HC_DC2_EINT */ | ||
| 673 | #define WM831X_IM_HC_DC2_EINT_WIDTH 1 /* IM_HC_DC2_EINT */ | ||
| 674 | #define WM831X_IM_HC_DC1_EINT 0x0100 /* IM_HC_DC1_EINT */ | ||
| 675 | #define WM831X_IM_HC_DC1_EINT_MASK 0x0100 /* IM_HC_DC1_EINT */ | ||
| 676 | #define WM831X_IM_HC_DC1_EINT_SHIFT 8 /* IM_HC_DC1_EINT */ | ||
| 677 | #define WM831X_IM_HC_DC1_EINT_WIDTH 1 /* IM_HC_DC1_EINT */ | ||
| 678 | #define WM831X_IM_UV_DC4_EINT 0x0008 /* IM_UV_DC4_EINT */ | ||
| 679 | #define WM831X_IM_UV_DC4_EINT_MASK 0x0008 /* IM_UV_DC4_EINT */ | ||
| 680 | #define WM831X_IM_UV_DC4_EINT_SHIFT 3 /* IM_UV_DC4_EINT */ | ||
| 681 | #define WM831X_IM_UV_DC4_EINT_WIDTH 1 /* IM_UV_DC4_EINT */ | ||
| 682 | #define WM831X_IM_UV_DC3_EINT 0x0004 /* IM_UV_DC3_EINT */ | ||
| 683 | #define WM831X_IM_UV_DC3_EINT_MASK 0x0004 /* IM_UV_DC3_EINT */ | ||
| 684 | #define WM831X_IM_UV_DC3_EINT_SHIFT 2 /* IM_UV_DC3_EINT */ | ||
| 685 | #define WM831X_IM_UV_DC3_EINT_WIDTH 1 /* IM_UV_DC3_EINT */ | ||
| 686 | #define WM831X_IM_UV_DC2_EINT 0x0002 /* IM_UV_DC2_EINT */ | ||
| 687 | #define WM831X_IM_UV_DC2_EINT_MASK 0x0002 /* IM_UV_DC2_EINT */ | ||
| 688 | #define WM831X_IM_UV_DC2_EINT_SHIFT 1 /* IM_UV_DC2_EINT */ | ||
| 689 | #define WM831X_IM_UV_DC2_EINT_WIDTH 1 /* IM_UV_DC2_EINT */ | ||
| 690 | #define WM831X_IM_UV_DC1_EINT 0x0001 /* IM_UV_DC1_EINT */ | ||
| 691 | #define WM831X_IM_UV_DC1_EINT_MASK 0x0001 /* IM_UV_DC1_EINT */ | ||
| 692 | #define WM831X_IM_UV_DC1_EINT_SHIFT 0 /* IM_UV_DC1_EINT */ | ||
| 693 | #define WM831X_IM_UV_DC1_EINT_WIDTH 1 /* IM_UV_DC1_EINT */ | ||
| 694 | |||
| 695 | /* | ||
| 696 | * R16413 (0x401D) - Interrupt Status 5 Mask | ||
| 697 | */ | ||
| 698 | #define WM831X_IM_GP16_EINT 0x8000 /* IM_GP16_EINT */ | ||
| 699 | #define WM831X_IM_GP16_EINT_MASK 0x8000 /* IM_GP16_EINT */ | ||
| 700 | #define WM831X_IM_GP16_EINT_SHIFT 15 /* IM_GP16_EINT */ | ||
| 701 | #define WM831X_IM_GP16_EINT_WIDTH 1 /* IM_GP16_EINT */ | ||
| 702 | #define WM831X_IM_GP15_EINT 0x4000 /* IM_GP15_EINT */ | ||
| 703 | #define WM831X_IM_GP15_EINT_MASK 0x4000 /* IM_GP15_EINT */ | ||
| 704 | #define WM831X_IM_GP15_EINT_SHIFT 14 /* IM_GP15_EINT */ | ||
| 705 | #define WM831X_IM_GP15_EINT_WIDTH 1 /* IM_GP15_EINT */ | ||
| 706 | #define WM831X_IM_GP14_EINT 0x2000 /* IM_GP14_EINT */ | ||
| 707 | #define WM831X_IM_GP14_EINT_MASK 0x2000 /* IM_GP14_EINT */ | ||
| 708 | #define WM831X_IM_GP14_EINT_SHIFT 13 /* IM_GP14_EINT */ | ||
| 709 | #define WM831X_IM_GP14_EINT_WIDTH 1 /* IM_GP14_EINT */ | ||
| 710 | #define WM831X_IM_GP13_EINT 0x1000 /* IM_GP13_EINT */ | ||
| 711 | #define WM831X_IM_GP13_EINT_MASK 0x1000 /* IM_GP13_EINT */ | ||
| 712 | #define WM831X_IM_GP13_EINT_SHIFT 12 /* IM_GP13_EINT */ | ||
| 713 | #define WM831X_IM_GP13_EINT_WIDTH 1 /* IM_GP13_EINT */ | ||
| 714 | #define WM831X_IM_GP12_EINT 0x0800 /* IM_GP12_EINT */ | ||
| 715 | #define WM831X_IM_GP12_EINT_MASK 0x0800 /* IM_GP12_EINT */ | ||
| 716 | #define WM831X_IM_GP12_EINT_SHIFT 11 /* IM_GP12_EINT */ | ||
| 717 | #define WM831X_IM_GP12_EINT_WIDTH 1 /* IM_GP12_EINT */ | ||
| 718 | #define WM831X_IM_GP11_EINT 0x0400 /* IM_GP11_EINT */ | ||
| 719 | #define WM831X_IM_GP11_EINT_MASK 0x0400 /* IM_GP11_EINT */ | ||
| 720 | #define WM831X_IM_GP11_EINT_SHIFT 10 /* IM_GP11_EINT */ | ||
| 721 | #define WM831X_IM_GP11_EINT_WIDTH 1 /* IM_GP11_EINT */ | ||
| 722 | #define WM831X_IM_GP10_EINT 0x0200 /* IM_GP10_EINT */ | ||
| 723 | #define WM831X_IM_GP10_EINT_MASK 0x0200 /* IM_GP10_EINT */ | ||
| 724 | #define WM831X_IM_GP10_EINT_SHIFT 9 /* IM_GP10_EINT */ | ||
| 725 | #define WM831X_IM_GP10_EINT_WIDTH 1 /* IM_GP10_EINT */ | ||
| 726 | #define WM831X_IM_GP9_EINT 0x0100 /* IM_GP9_EINT */ | ||
| 727 | #define WM831X_IM_GP9_EINT_MASK 0x0100 /* IM_GP9_EINT */ | ||
| 728 | #define WM831X_IM_GP9_EINT_SHIFT 8 /* IM_GP9_EINT */ | ||
| 729 | #define WM831X_IM_GP9_EINT_WIDTH 1 /* IM_GP9_EINT */ | ||
| 730 | #define WM831X_IM_GP8_EINT 0x0080 /* IM_GP8_EINT */ | ||
| 731 | #define WM831X_IM_GP8_EINT_MASK 0x0080 /* IM_GP8_EINT */ | ||
| 732 | #define WM831X_IM_GP8_EINT_SHIFT 7 /* IM_GP8_EINT */ | ||
| 733 | #define WM831X_IM_GP8_EINT_WIDTH 1 /* IM_GP8_EINT */ | ||
| 734 | #define WM831X_IM_GP7_EINT 0x0040 /* IM_GP7_EINT */ | ||
| 735 | #define WM831X_IM_GP7_EINT_MASK 0x0040 /* IM_GP7_EINT */ | ||
| 736 | #define WM831X_IM_GP7_EINT_SHIFT 6 /* IM_GP7_EINT */ | ||
| 737 | #define WM831X_IM_GP7_EINT_WIDTH 1 /* IM_GP7_EINT */ | ||
| 738 | #define WM831X_IM_GP6_EINT 0x0020 /* IM_GP6_EINT */ | ||
| 739 | #define WM831X_IM_GP6_EINT_MASK 0x0020 /* IM_GP6_EINT */ | ||
| 740 | #define WM831X_IM_GP6_EINT_SHIFT 5 /* IM_GP6_EINT */ | ||
| 741 | #define WM831X_IM_GP6_EINT_WIDTH 1 /* IM_GP6_EINT */ | ||
| 742 | #define WM831X_IM_GP5_EINT 0x0010 /* IM_GP5_EINT */ | ||
| 743 | #define WM831X_IM_GP5_EINT_MASK 0x0010 /* IM_GP5_EINT */ | ||
| 744 | #define WM831X_IM_GP5_EINT_SHIFT 4 /* IM_GP5_EINT */ | ||
| 745 | #define WM831X_IM_GP5_EINT_WIDTH 1 /* IM_GP5_EINT */ | ||
| 746 | #define WM831X_IM_GP4_EINT 0x0008 /* IM_GP4_EINT */ | ||
| 747 | #define WM831X_IM_GP4_EINT_MASK 0x0008 /* IM_GP4_EINT */ | ||
| 748 | #define WM831X_IM_GP4_EINT_SHIFT 3 /* IM_GP4_EINT */ | ||
| 749 | #define WM831X_IM_GP4_EINT_WIDTH 1 /* IM_GP4_EINT */ | ||
| 750 | #define WM831X_IM_GP3_EINT 0x0004 /* IM_GP3_EINT */ | ||
| 751 | #define WM831X_IM_GP3_EINT_MASK 0x0004 /* IM_GP3_EINT */ | ||
| 752 | #define WM831X_IM_GP3_EINT_SHIFT 2 /* IM_GP3_EINT */ | ||
| 753 | #define WM831X_IM_GP3_EINT_WIDTH 1 /* IM_GP3_EINT */ | ||
| 754 | #define WM831X_IM_GP2_EINT 0x0002 /* IM_GP2_EINT */ | ||
| 755 | #define WM831X_IM_GP2_EINT_MASK 0x0002 /* IM_GP2_EINT */ | ||
| 756 | #define WM831X_IM_GP2_EINT_SHIFT 1 /* IM_GP2_EINT */ | ||
| 757 | #define WM831X_IM_GP2_EINT_WIDTH 1 /* IM_GP2_EINT */ | ||
| 758 | #define WM831X_IM_GP1_EINT 0x0001 /* IM_GP1_EINT */ | ||
| 759 | #define WM831X_IM_GP1_EINT_MASK 0x0001 /* IM_GP1_EINT */ | ||
| 760 | #define WM831X_IM_GP1_EINT_SHIFT 0 /* IM_GP1_EINT */ | ||
| 761 | #define WM831X_IM_GP1_EINT_WIDTH 1 /* IM_GP1_EINT */ | ||
| 762 | |||
| 763 | |||
| 764 | #endif | ||
diff --git a/include/linux/mfd/wm831x/otp.h b/include/linux/mfd/wm831x/otp.h new file mode 100644 index 000000000000..ce1f81a39bfc --- /dev/null +++ b/include/linux/mfd/wm831x/otp.h | |||
| @@ -0,0 +1,162 @@ | |||
| 1 | /* | ||
| 2 | * include/linux/mfd/wm831x/otp.h -- OTP interface for WM831x | ||
| 3 | * | ||
| 4 | * Copyright 2009 Wolfson Microelectronics PLC. | ||
| 5 | * | ||
| 6 | * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify it | ||
| 9 | * under the terms of the GNU General Public License as published by the | ||
| 10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 11 | * option) any later version. | ||
| 12 | * | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __MFD_WM831X_OTP_H__ | ||
| 16 | #define __MFD_WM831X_OTP_H__ | ||
| 17 | |||
| 18 | int wm831x_otp_init(struct wm831x *wm831x); | ||
| 19 | void wm831x_otp_exit(struct wm831x *wm831x); | ||
| 20 | |||
| 21 | /* | ||
| 22 | * R30720 (0x7800) - Unique ID 1 | ||
| 23 | */ | ||
| 24 | #define WM831X_UNIQUE_ID_MASK 0xFFFF /* UNIQUE_ID - [15:0] */ | ||
| 25 | #define WM831X_UNIQUE_ID_SHIFT 0 /* UNIQUE_ID - [15:0] */ | ||
| 26 | #define WM831X_UNIQUE_ID_WIDTH 16 /* UNIQUE_ID - [15:0] */ | ||
| 27 | |||
| 28 | /* | ||
| 29 | * R30721 (0x7801) - Unique ID 2 | ||
| 30 | */ | ||
| 31 | #define WM831X_UNIQUE_ID_MASK 0xFFFF /* UNIQUE_ID - [15:0] */ | ||
| 32 | #define WM831X_UNIQUE_ID_SHIFT 0 /* UNIQUE_ID - [15:0] */ | ||
| 33 | #define WM831X_UNIQUE_ID_WIDTH 16 /* UNIQUE_ID - [15:0] */ | ||
| 34 | |||
| 35 | /* | ||
| 36 | * R30722 (0x7802) - Unique ID 3 | ||
| 37 | */ | ||
| 38 | #define WM831X_UNIQUE_ID_MASK 0xFFFF /* UNIQUE_ID - [15:0] */ | ||
| 39 | #define WM831X_UNIQUE_ID_SHIFT 0 /* UNIQUE_ID - [15:0] */ | ||
| 40 | #define WM831X_UNIQUE_ID_WIDTH 16 /* UNIQUE_ID - [15:0] */ | ||
| 41 | |||
| 42 | /* | ||
| 43 | * R30723 (0x7803) - Unique ID 4 | ||
| 44 | */ | ||
| 45 | #define WM831X_UNIQUE_ID_MASK 0xFFFF /* UNIQUE_ID - [15:0] */ | ||
| 46 | #define WM831X_UNIQUE_ID_SHIFT 0 /* UNIQUE_ID - [15:0] */ | ||
| 47 | #define WM831X_UNIQUE_ID_WIDTH 16 /* UNIQUE_ID - [15:0] */ | ||
| 48 | |||
| 49 | /* | ||
| 50 | * R30724 (0x7804) - Unique ID 5 | ||
| 51 | */ | ||
| 52 | #define WM831X_UNIQUE_ID_MASK 0xFFFF /* UNIQUE_ID - [15:0] */ | ||
| 53 | #define WM831X_UNIQUE_ID_SHIFT 0 /* UNIQUE_ID - [15:0] */ | ||
| 54 | #define WM831X_UNIQUE_ID_WIDTH 16 /* UNIQUE_ID - [15:0] */ | ||
| 55 | |||
| 56 | /* | ||
| 57 | * R30725 (0x7805) - Unique ID 6 | ||
| 58 | */ | ||
| 59 | #define WM831X_UNIQUE_ID_MASK 0xFFFF /* UNIQUE_ID - [15:0] */ | ||
| 60 | #define WM831X_UNIQUE_ID_SHIFT 0 /* UNIQUE_ID - [15:0] */ | ||
| 61 | #define WM831X_UNIQUE_ID_WIDTH 16 /* UNIQUE_ID - [15:0] */ | ||
| 62 | |||
| 63 | /* | ||
| 64 | * R30726 (0x7806) - Unique ID 7 | ||
| 65 | */ | ||
| 66 | #define WM831X_UNIQUE_ID_MASK 0xFFFF /* UNIQUE_ID - [15:0] */ | ||
| 67 | #define WM831X_UNIQUE_ID_SHIFT 0 /* UNIQUE_ID - [15:0] */ | ||
| 68 | #define WM831X_UNIQUE_ID_WIDTH 16 /* UNIQUE_ID - [15:0] */ | ||
| 69 | |||
| 70 | /* | ||
| 71 | * R30727 (0x7807) - Unique ID 8 | ||
| 72 | */ | ||
| 73 | #define WM831X_UNIQUE_ID_MASK 0xFFFF /* UNIQUE_ID - [15:0] */ | ||
| 74 | #define WM831X_UNIQUE_ID_SHIFT 0 /* UNIQUE_ID - [15:0] */ | ||
| 75 | #define WM831X_UNIQUE_ID_WIDTH 16 /* UNIQUE_ID - [15:0] */ | ||
| 76 | |||
| 77 | /* | ||
| 78 | * R30728 (0x7808) - Factory OTP ID | ||
| 79 | */ | ||
| 80 | #define WM831X_OTP_FACT_ID_MASK 0xFFFE /* OTP_FACT_ID - [15:1] */ | ||
| 81 | #define WM831X_OTP_FACT_ID_SHIFT 1 /* OTP_FACT_ID - [15:1] */ | ||
| 82 | #define WM831X_OTP_FACT_ID_WIDTH 15 /* OTP_FACT_ID - [15:1] */ | ||
| 83 | #define WM831X_OTP_FACT_FINAL 0x0001 /* OTP_FACT_FINAL */ | ||
| 84 | #define WM831X_OTP_FACT_FINAL_MASK 0x0001 /* OTP_FACT_FINAL */ | ||
| 85 | #define WM831X_OTP_FACT_FINAL_SHIFT 0 /* OTP_FACT_FINAL */ | ||
| 86 | #define WM831X_OTP_FACT_FINAL_WIDTH 1 /* OTP_FACT_FINAL */ | ||
| 87 | |||
| 88 | /* | ||
| 89 | * R30729 (0x7809) - Factory OTP 1 | ||
| 90 | */ | ||
| 91 | #define WM831X_DC3_TRIM_MASK 0xF000 /* DC3_TRIM - [15:12] */ | ||
| 92 | #define WM831X_DC3_TRIM_SHIFT 12 /* DC3_TRIM - [15:12] */ | ||
| 93 | #define WM831X_DC3_TRIM_WIDTH 4 /* DC3_TRIM - [15:12] */ | ||
| 94 | #define WM831X_DC2_TRIM_MASK 0x0FC0 /* DC2_TRIM - [11:6] */ | ||
| 95 | #define WM831X_DC2_TRIM_SHIFT 6 /* DC2_TRIM - [11:6] */ | ||
| 96 | #define WM831X_DC2_TRIM_WIDTH 6 /* DC2_TRIM - [11:6] */ | ||
| 97 | #define WM831X_DC1_TRIM_MASK 0x003F /* DC1_TRIM - [5:0] */ | ||
| 98 | #define WM831X_DC1_TRIM_SHIFT 0 /* DC1_TRIM - [5:0] */ | ||
| 99 | #define WM831X_DC1_TRIM_WIDTH 6 /* DC1_TRIM - [5:0] */ | ||
| 100 | |||
| 101 | /* | ||
| 102 | * R30730 (0x780A) - Factory OTP 2 | ||
| 103 | */ | ||
| 104 | #define WM831X_CHIP_ID_MASK 0xFFFF /* CHIP_ID - [15:0] */ | ||
| 105 | #define WM831X_CHIP_ID_SHIFT 0 /* CHIP_ID - [15:0] */ | ||
| 106 | #define WM831X_CHIP_ID_WIDTH 16 /* CHIP_ID - [15:0] */ | ||
| 107 | |||
| 108 | /* | ||
| 109 | * R30731 (0x780B) - Factory OTP 3 | ||
| 110 | */ | ||
| 111 | #define WM831X_OSC_TRIM_MASK 0x0780 /* OSC_TRIM - [10:7] */ | ||
| 112 | #define WM831X_OSC_TRIM_SHIFT 7 /* OSC_TRIM - [10:7] */ | ||
| 113 | #define WM831X_OSC_TRIM_WIDTH 4 /* OSC_TRIM - [10:7] */ | ||
| 114 | #define WM831X_BG_TRIM_MASK 0x0078 /* BG_TRIM - [6:3] */ | ||
| 115 | #define WM831X_BG_TRIM_SHIFT 3 /* BG_TRIM - [6:3] */ | ||
| 116 | #define WM831X_BG_TRIM_WIDTH 4 /* BG_TRIM - [6:3] */ | ||
| 117 | #define WM831X_LPBG_TRIM_MASK 0x0007 /* LPBG_TRIM - [2:0] */ | ||
| 118 | #define WM831X_LPBG_TRIM_SHIFT 0 /* LPBG_TRIM - [2:0] */ | ||
| 119 | #define WM831X_LPBG_TRIM_WIDTH 3 /* LPBG_TRIM - [2:0] */ | ||
| 120 | |||
| 121 | /* | ||
| 122 | * R30732 (0x780C) - Factory OTP 4 | ||
| 123 | */ | ||
| 124 | #define WM831X_CHILD_I2C_ADDR_MASK 0x00FE /* CHILD_I2C_ADDR - [7:1] */ | ||
| 125 | #define WM831X_CHILD_I2C_ADDR_SHIFT 1 /* CHILD_I2C_ADDR - [7:1] */ | ||
| 126 | #define WM831X_CHILD_I2C_ADDR_WIDTH 7 /* CHILD_I2C_ADDR - [7:1] */ | ||
| 127 | #define WM831X_CH_AW 0x0001 /* CH_AW */ | ||
| 128 | #define WM831X_CH_AW_MASK 0x0001 /* CH_AW */ | ||
| 129 | #define WM831X_CH_AW_SHIFT 0 /* CH_AW */ | ||
| 130 | #define WM831X_CH_AW_WIDTH 1 /* CH_AW */ | ||
| 131 | |||
| 132 | /* | ||
| 133 | * R30733 (0x780D) - Factory OTP 5 | ||
| 134 | */ | ||
| 135 | #define WM831X_CHARGE_TRIM_MASK 0x003F /* CHARGE_TRIM - [5:0] */ | ||
| 136 | #define WM831X_CHARGE_TRIM_SHIFT 0 /* CHARGE_TRIM - [5:0] */ | ||
| 137 | #define WM831X_CHARGE_TRIM_WIDTH 6 /* CHARGE_TRIM - [5:0] */ | ||
| 138 | |||
| 139 | /* | ||
| 140 | * R30736 (0x7810) - Customer OTP ID | ||
| 141 | */ | ||
| 142 | #define WM831X_OTP_AUTO_PROG 0x8000 /* OTP_AUTO_PROG */ | ||
| 143 | #define WM831X_OTP_AUTO_PROG_MASK 0x8000 /* OTP_AUTO_PROG */ | ||
| 144 | #define WM831X_OTP_AUTO_PROG_SHIFT 15 /* OTP_AUTO_PROG */ | ||
| 145 | #define WM831X_OTP_AUTO_PROG_WIDTH 1 /* OTP_AUTO_PROG */ | ||
| 146 | #define WM831X_OTP_CUST_ID_MASK 0x7FFE /* OTP_CUST_ID - [14:1] */ | ||
| 147 | #define WM831X_OTP_CUST_ID_SHIFT 1 /* OTP_CUST_ID - [14:1] */ | ||
| 148 | #define WM831X_OTP_CUST_ID_WIDTH 14 /* OTP_CUST_ID - [14:1] */ | ||
| 149 | #define WM831X_OTP_CUST_FINAL 0x0001 /* OTP_CUST_FINAL */ | ||
| 150 | #define WM831X_OTP_CUST_FINAL_MASK 0x0001 /* OTP_CUST_FINAL */ | ||
| 151 | #define WM831X_OTP_CUST_FINAL_SHIFT 0 /* OTP_CUST_FINAL */ | ||
| 152 | #define WM831X_OTP_CUST_FINAL_WIDTH 1 /* OTP_CUST_FINAL */ | ||
| 153 | |||
| 154 | /* | ||
| 155 | * R30759 (0x7827) - DBE CHECK DATA | ||
| 156 | */ | ||
| 157 | #define WM831X_DBE_VALID_DATA_MASK 0xFFFF /* DBE_VALID_DATA - [15:0] */ | ||
| 158 | #define WM831X_DBE_VALID_DATA_SHIFT 0 /* DBE_VALID_DATA - [15:0] */ | ||
| 159 | #define WM831X_DBE_VALID_DATA_WIDTH 16 /* DBE_VALID_DATA - [15:0] */ | ||
| 160 | |||
| 161 | |||
| 162 | #endif | ||
diff --git a/include/linux/mfd/wm831x/pdata.h b/include/linux/mfd/wm831x/pdata.h new file mode 100644 index 000000000000..90d820260aad --- /dev/null +++ b/include/linux/mfd/wm831x/pdata.h | |||
| @@ -0,0 +1,113 @@ | |||
| 1 | /* | ||
| 2 | * include/linux/mfd/wm831x/pdata.h -- Platform data for WM831x | ||
| 3 | * | ||
| 4 | * Copyright 2009 Wolfson Microelectronics PLC. | ||
| 5 | * | ||
| 6 | * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify it | ||
| 9 | * under the terms of the GNU General Public License as published by the | ||
| 10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 11 | * option) any later version. | ||
| 12 | * | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __MFD_WM831X_PDATA_H__ | ||
| 16 | #define __MFD_WM831X_PDATA_H__ | ||
| 17 | |||
| 18 | struct wm831x; | ||
| 19 | struct regulator_init_data; | ||
| 20 | |||
| 21 | struct wm831x_backlight_pdata { | ||
| 22 | int isink; /** ISINK to use, 1 or 2 */ | ||
| 23 | int max_uA; /** Maximum current to allow */ | ||
| 24 | }; | ||
| 25 | |||
| 26 | struct wm831x_backup_pdata { | ||
| 27 | int charger_enable; | ||
| 28 | int no_constant_voltage; /** Disable constant voltage charging */ | ||
| 29 | int vlim; /** Voltage limit in milivolts */ | ||
| 30 | int ilim; /** Current limit in microamps */ | ||
| 31 | }; | ||
| 32 | |||
| 33 | struct wm831x_battery_pdata { | ||
| 34 | int enable; /** Enable charging */ | ||
| 35 | int fast_enable; /** Enable fast charging */ | ||
| 36 | int off_mask; /** Mask OFF while charging */ | ||
| 37 | int trickle_ilim; /** Trickle charge current limit, in mA */ | ||
| 38 | int vsel; /** Target voltage, in mV */ | ||
| 39 | int eoc_iterm; /** End of trickle charge current, in mA */ | ||
| 40 | int fast_ilim; /** Fast charge current limit, in mA */ | ||
| 41 | int timeout; /** Charge cycle timeout, in minutes */ | ||
| 42 | }; | ||
| 43 | |||
| 44 | /* Sources for status LED configuration. Values are register values | ||
| 45 | * plus 1 to allow for a zero default for preserve. | ||
| 46 | */ | ||
| 47 | enum wm831x_status_src { | ||
| 48 | WM831X_STATUS_PRESERVE = 0, /* Keep the current hardware setting */ | ||
| 49 | WM831X_STATUS_OTP = 1, | ||
| 50 | WM831X_STATUS_POWER = 2, | ||
| 51 | WM831X_STATUS_CHARGER = 3, | ||
| 52 | WM831X_STATUS_MANUAL = 4, | ||
| 53 | }; | ||
| 54 | |||
| 55 | struct wm831x_status_pdata { | ||
| 56 | enum wm831x_status_src default_src; | ||
| 57 | const char *name; | ||
| 58 | const char *default_trigger; | ||
| 59 | }; | ||
| 60 | |||
| 61 | struct wm831x_touch_pdata { | ||
| 62 | int fivewire; /** 1 for five wire mode, 0 for 4 wire */ | ||
| 63 | int isel; /** Current for pen down (uA) */ | ||
| 64 | int rpu; /** Pen down sensitivity resistor divider */ | ||
| 65 | int pressure; /** Report pressure (boolean) */ | ||
| 66 | int data_irq; /** Touch data ready IRQ */ | ||
| 67 | }; | ||
| 68 | |||
| 69 | enum wm831x_watchdog_action { | ||
| 70 | WM831X_WDOG_NONE = 0, | ||
| 71 | WM831X_WDOG_INTERRUPT = 1, | ||
| 72 | WM831X_WDOG_RESET = 2, | ||
| 73 | WM831X_WDOG_WAKE = 3, | ||
| 74 | }; | ||
| 75 | |||
| 76 | struct wm831x_watchdog_pdata { | ||
| 77 | enum wm831x_watchdog_action primary, secondary; | ||
| 78 | int update_gpio; | ||
| 79 | unsigned int software:1; | ||
| 80 | }; | ||
| 81 | |||
| 82 | #define WM831X_MAX_STATUS 2 | ||
| 83 | #define WM831X_MAX_DCDC 4 | ||
| 84 | #define WM831X_MAX_EPE 2 | ||
| 85 | #define WM831X_MAX_LDO 11 | ||
| 86 | #define WM831X_MAX_ISINK 2 | ||
| 87 | |||
| 88 | struct wm831x_pdata { | ||
| 89 | /** Called before subdevices are set up */ | ||
| 90 | int (*pre_init)(struct wm831x *wm831x); | ||
| 91 | /** Called after subdevices are set up */ | ||
| 92 | int (*post_init)(struct wm831x *wm831x); | ||
| 93 | |||
| 94 | int gpio_base; | ||
| 95 | struct wm831x_backlight_pdata *backlight; | ||
| 96 | struct wm831x_backup_pdata *backup; | ||
| 97 | struct wm831x_battery_pdata *battery; | ||
| 98 | struct wm831x_touch_pdata *touch; | ||
| 99 | struct wm831x_watchdog_pdata *watchdog; | ||
| 100 | |||
| 101 | /** LED1 = 0 and so on */ | ||
| 102 | struct wm831x_status_pdata *status[WM831X_MAX_STATUS]; | ||
| 103 | /** DCDC1 = 0 and so on */ | ||
| 104 | struct regulator_init_data *dcdc[WM831X_MAX_DCDC]; | ||
| 105 | /** EPE1 = 0 and so on */ | ||
| 106 | struct regulator_init_data *epe[WM831X_MAX_EPE]; | ||
| 107 | /** LDO1 = 0 and so on */ | ||
| 108 | struct regulator_init_data *ldo[WM831X_MAX_LDO]; | ||
| 109 | /** ISINK1 = 0 and so on*/ | ||
| 110 | struct regulator_init_data *isink[WM831X_MAX_ISINK]; | ||
| 111 | }; | ||
| 112 | |||
| 113 | #endif | ||
diff --git a/include/linux/mfd/wm831x/pmu.h b/include/linux/mfd/wm831x/pmu.h new file mode 100644 index 000000000000..b18cbb027bc3 --- /dev/null +++ b/include/linux/mfd/wm831x/pmu.h | |||
| @@ -0,0 +1,189 @@ | |||
| 1 | /* | ||
| 2 | * include/linux/mfd/wm831x/pmu.h -- PMU for WM831x | ||
| 3 | * | ||
| 4 | * Copyright 2009 Wolfson Microelectronics PLC. | ||
| 5 | * | ||
| 6 | * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify it | ||
| 9 | * under the terms of the GNU General Public License as published by the | ||
| 10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 11 | * option) any later version. | ||
| 12 | * | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __MFD_WM831X_PMU_H__ | ||
| 16 | #define __MFD_WM831X_PMU_H__ | ||
| 17 | |||
| 18 | /* | ||
| 19 | * R16387 (0x4003) - Power State | ||
| 20 | */ | ||
| 21 | #define WM831X_CHIP_ON 0x8000 /* CHIP_ON */ | ||
| 22 | #define WM831X_CHIP_ON_MASK 0x8000 /* CHIP_ON */ | ||
| 23 | #define WM831X_CHIP_ON_SHIFT 15 /* CHIP_ON */ | ||
| 24 | #define WM831X_CHIP_ON_WIDTH 1 /* CHIP_ON */ | ||
| 25 | #define WM831X_CHIP_SLP 0x4000 /* CHIP_SLP */ | ||
| 26 | #define WM831X_CHIP_SLP_MASK 0x4000 /* CHIP_SLP */ | ||
| 27 | #define WM831X_CHIP_SLP_SHIFT 14 /* CHIP_SLP */ | ||
| 28 | #define WM831X_CHIP_SLP_WIDTH 1 /* CHIP_SLP */ | ||
| 29 | #define WM831X_REF_LP 0x1000 /* REF_LP */ | ||
| 30 | #define WM831X_REF_LP_MASK 0x1000 /* REF_LP */ | ||
| 31 | #define WM831X_REF_LP_SHIFT 12 /* REF_LP */ | ||
| 32 | #define WM831X_REF_LP_WIDTH 1 /* REF_LP */ | ||
| 33 | #define WM831X_PWRSTATE_DLY_MASK 0x0C00 /* PWRSTATE_DLY - [11:10] */ | ||
| 34 | #define WM831X_PWRSTATE_DLY_SHIFT 10 /* PWRSTATE_DLY - [11:10] */ | ||
| 35 | #define WM831X_PWRSTATE_DLY_WIDTH 2 /* PWRSTATE_DLY - [11:10] */ | ||
| 36 | #define WM831X_SWRST_DLY 0x0200 /* SWRST_DLY */ | ||
| 37 | #define WM831X_SWRST_DLY_MASK 0x0200 /* SWRST_DLY */ | ||
| 38 | #define WM831X_SWRST_DLY_SHIFT 9 /* SWRST_DLY */ | ||
| 39 | #define WM831X_SWRST_DLY_WIDTH 1 /* SWRST_DLY */ | ||
| 40 | #define WM831X_USB100MA_STARTUP_MASK 0x0030 /* USB100MA_STARTUP - [5:4] */ | ||
| 41 | #define WM831X_USB100MA_STARTUP_SHIFT 4 /* USB100MA_STARTUP - [5:4] */ | ||
| 42 | #define WM831X_USB100MA_STARTUP_WIDTH 2 /* USB100MA_STARTUP - [5:4] */ | ||
| 43 | #define WM831X_USB_CURR_STS 0x0008 /* USB_CURR_STS */ | ||
| 44 | #define WM831X_USB_CURR_STS_MASK 0x0008 /* USB_CURR_STS */ | ||
| 45 | #define WM831X_USB_CURR_STS_SHIFT 3 /* USB_CURR_STS */ | ||
| 46 | #define WM831X_USB_CURR_STS_WIDTH 1 /* USB_CURR_STS */ | ||
| 47 | #define WM831X_USB_ILIM_MASK 0x0007 /* USB_ILIM - [2:0] */ | ||
| 48 | #define WM831X_USB_ILIM_SHIFT 0 /* USB_ILIM - [2:0] */ | ||
| 49 | #define WM831X_USB_ILIM_WIDTH 3 /* USB_ILIM - [2:0] */ | ||
| 50 | |||
| 51 | /* | ||
| 52 | * R16397 (0x400D) - System Status | ||
| 53 | */ | ||
| 54 | #define WM831X_THW_STS 0x8000 /* THW_STS */ | ||
| 55 | #define WM831X_THW_STS_MASK 0x8000 /* THW_STS */ | ||
| 56 | #define WM831X_THW_STS_SHIFT 15 /* THW_STS */ | ||
| 57 | #define WM831X_THW_STS_WIDTH 1 /* THW_STS */ | ||
| 58 | #define WM831X_PWR_SRC_BATT 0x0400 /* PWR_SRC_BATT */ | ||
| 59 | #define WM831X_PWR_SRC_BATT_MASK 0x0400 /* PWR_SRC_BATT */ | ||
| 60 | #define WM831X_PWR_SRC_BATT_SHIFT 10 /* PWR_SRC_BATT */ | ||
| 61 | #define WM831X_PWR_SRC_BATT_WIDTH 1 /* PWR_SRC_BATT */ | ||
| 62 | #define WM831X_PWR_WALL 0x0200 /* PWR_WALL */ | ||
| 63 | #define WM831X_PWR_WALL_MASK 0x0200 /* PWR_WALL */ | ||
| 64 | #define WM831X_PWR_WALL_SHIFT 9 /* PWR_WALL */ | ||
| 65 | #define WM831X_PWR_WALL_WIDTH 1 /* PWR_WALL */ | ||
| 66 | #define WM831X_PWR_USB 0x0100 /* PWR_USB */ | ||
| 67 | #define WM831X_PWR_USB_MASK 0x0100 /* PWR_USB */ | ||
| 68 | #define WM831X_PWR_USB_SHIFT 8 /* PWR_USB */ | ||
| 69 | #define WM831X_PWR_USB_WIDTH 1 /* PWR_USB */ | ||
| 70 | #define WM831X_MAIN_STATE_MASK 0x001F /* MAIN_STATE - [4:0] */ | ||
| 71 | #define WM831X_MAIN_STATE_SHIFT 0 /* MAIN_STATE - [4:0] */ | ||
| 72 | #define WM831X_MAIN_STATE_WIDTH 5 /* MAIN_STATE - [4:0] */ | ||
| 73 | |||
| 74 | /* | ||
| 75 | * R16456 (0x4048) - Charger Control 1 | ||
| 76 | */ | ||
| 77 | #define WM831X_CHG_ENA 0x8000 /* CHG_ENA */ | ||
| 78 | #define WM831X_CHG_ENA_MASK 0x8000 /* CHG_ENA */ | ||
| 79 | #define WM831X_CHG_ENA_SHIFT 15 /* CHG_ENA */ | ||
| 80 | #define WM831X_CHG_ENA_WIDTH 1 /* CHG_ENA */ | ||
| 81 | #define WM831X_CHG_FRC 0x4000 /* CHG_FRC */ | ||
| 82 | #define WM831X_CHG_FRC_MASK 0x4000 /* CHG_FRC */ | ||
| 83 | #define WM831X_CHG_FRC_SHIFT 14 /* CHG_FRC */ | ||
| 84 | #define WM831X_CHG_FRC_WIDTH 1 /* CHG_FRC */ | ||
| 85 | #define WM831X_CHG_ITERM_MASK 0x1C00 /* CHG_ITERM - [12:10] */ | ||
| 86 | #define WM831X_CHG_ITERM_SHIFT 10 /* CHG_ITERM - [12:10] */ | ||
| 87 | #define WM831X_CHG_ITERM_WIDTH 3 /* CHG_ITERM - [12:10] */ | ||
| 88 | #define WM831X_CHG_FAST 0x0020 /* CHG_FAST */ | ||
| 89 | #define WM831X_CHG_FAST_MASK 0x0020 /* CHG_FAST */ | ||
| 90 | #define WM831X_CHG_FAST_SHIFT 5 /* CHG_FAST */ | ||
| 91 | #define WM831X_CHG_FAST_WIDTH 1 /* CHG_FAST */ | ||
| 92 | #define WM831X_CHG_IMON_ENA 0x0002 /* CHG_IMON_ENA */ | ||
| 93 | #define WM831X_CHG_IMON_ENA_MASK 0x0002 /* CHG_IMON_ENA */ | ||
| 94 | #define WM831X_CHG_IMON_ENA_SHIFT 1 /* CHG_IMON_ENA */ | ||
| 95 | #define WM831X_CHG_IMON_ENA_WIDTH 1 /* CHG_IMON_ENA */ | ||
| 96 | #define WM831X_CHG_CHIP_TEMP_MON 0x0001 /* CHG_CHIP_TEMP_MON */ | ||
| 97 | #define WM831X_CHG_CHIP_TEMP_MON_MASK 0x0001 /* CHG_CHIP_TEMP_MON */ | ||
| 98 | #define WM831X_CHG_CHIP_TEMP_MON_SHIFT 0 /* CHG_CHIP_TEMP_MON */ | ||
| 99 | #define WM831X_CHG_CHIP_TEMP_MON_WIDTH 1 /* CHG_CHIP_TEMP_MON */ | ||
| 100 | |||
| 101 | /* | ||
| 102 | * R16457 (0x4049) - Charger Control 2 | ||
| 103 | */ | ||
| 104 | #define WM831X_CHG_OFF_MSK 0x4000 /* CHG_OFF_MSK */ | ||
| 105 | #define WM831X_CHG_OFF_MSK_MASK 0x4000 /* CHG_OFF_MSK */ | ||
| 106 | #define WM831X_CHG_OFF_MSK_SHIFT 14 /* CHG_OFF_MSK */ | ||
| 107 | #define WM831X_CHG_OFF_MSK_WIDTH 1 /* CHG_OFF_MSK */ | ||
| 108 | #define WM831X_CHG_TIME_MASK 0x0F00 /* CHG_TIME - [11:8] */ | ||
| 109 | #define WM831X_CHG_TIME_SHIFT 8 /* CHG_TIME - [11:8] */ | ||
| 110 | #define WM831X_CHG_TIME_WIDTH 4 /* CHG_TIME - [11:8] */ | ||
| 111 | #define WM831X_CHG_TRKL_ILIM_MASK 0x00C0 /* CHG_TRKL_ILIM - [7:6] */ | ||
| 112 | #define WM831X_CHG_TRKL_ILIM_SHIFT 6 /* CHG_TRKL_ILIM - [7:6] */ | ||
| 113 | #define WM831X_CHG_TRKL_ILIM_WIDTH 2 /* CHG_TRKL_ILIM - [7:6] */ | ||
| 114 | #define WM831X_CHG_VSEL_MASK 0x0030 /* CHG_VSEL - [5:4] */ | ||
| 115 | #define WM831X_CHG_VSEL_SHIFT 4 /* CHG_VSEL - [5:4] */ | ||
| 116 | #define WM831X_CHG_VSEL_WIDTH 2 /* CHG_VSEL - [5:4] */ | ||
| 117 | #define WM831X_CHG_FAST_ILIM_MASK 0x000F /* CHG_FAST_ILIM - [3:0] */ | ||
| 118 | #define WM831X_CHG_FAST_ILIM_SHIFT 0 /* CHG_FAST_ILIM - [3:0] */ | ||
| 119 | #define WM831X_CHG_FAST_ILIM_WIDTH 4 /* CHG_FAST_ILIM - [3:0] */ | ||
| 120 | |||
| 121 | /* | ||
| 122 | * R16458 (0x404A) - Charger Status | ||
| 123 | */ | ||
| 124 | #define WM831X_BATT_OV_STS 0x8000 /* BATT_OV_STS */ | ||
| 125 | #define WM831X_BATT_OV_STS_MASK 0x8000 /* BATT_OV_STS */ | ||
| 126 | #define WM831X_BATT_OV_STS_SHIFT 15 /* BATT_OV_STS */ | ||
| 127 | #define WM831X_BATT_OV_STS_WIDTH 1 /* BATT_OV_STS */ | ||
| 128 | #define WM831X_CHG_STATE_MASK 0x7000 /* CHG_STATE - [14:12] */ | ||
| 129 | #define WM831X_CHG_STATE_SHIFT 12 /* CHG_STATE - [14:12] */ | ||
| 130 | #define WM831X_CHG_STATE_WIDTH 3 /* CHG_STATE - [14:12] */ | ||
| 131 | #define WM831X_BATT_HOT_STS 0x0800 /* BATT_HOT_STS */ | ||
| 132 | #define WM831X_BATT_HOT_STS_MASK 0x0800 /* BATT_HOT_STS */ | ||
| 133 | #define WM831X_BATT_HOT_STS_SHIFT 11 /* BATT_HOT_STS */ | ||
| 134 | #define WM831X_BATT_HOT_STS_WIDTH 1 /* BATT_HOT_STS */ | ||
| 135 | #define WM831X_BATT_COLD_STS 0x0400 /* BATT_COLD_STS */ | ||
| 136 | #define WM831X_BATT_COLD_STS_MASK 0x0400 /* BATT_COLD_STS */ | ||
| 137 | #define WM831X_BATT_COLD_STS_SHIFT 10 /* BATT_COLD_STS */ | ||
| 138 | #define WM831X_BATT_COLD_STS_WIDTH 1 /* BATT_COLD_STS */ | ||
| 139 | #define WM831X_CHG_TOPOFF 0x0200 /* CHG_TOPOFF */ | ||
| 140 | #define WM831X_CHG_TOPOFF_MASK 0x0200 /* CHG_TOPOFF */ | ||
| 141 | #define WM831X_CHG_TOPOFF_SHIFT 9 /* CHG_TOPOFF */ | ||
| 142 | #define WM831X_CHG_TOPOFF_WIDTH 1 /* CHG_TOPOFF */ | ||
| 143 | #define WM831X_CHG_ACTIVE 0x0100 /* CHG_ACTIVE */ | ||
| 144 | #define WM831X_CHG_ACTIVE_MASK 0x0100 /* CHG_ACTIVE */ | ||
| 145 | #define WM831X_CHG_ACTIVE_SHIFT 8 /* CHG_ACTIVE */ | ||
| 146 | #define WM831X_CHG_ACTIVE_WIDTH 1 /* CHG_ACTIVE */ | ||
| 147 | #define WM831X_CHG_TIME_ELAPSED_MASK 0x00FF /* CHG_TIME_ELAPSED - [7:0] */ | ||
| 148 | #define WM831X_CHG_TIME_ELAPSED_SHIFT 0 /* CHG_TIME_ELAPSED - [7:0] */ | ||
| 149 | #define WM831X_CHG_TIME_ELAPSED_WIDTH 8 /* CHG_TIME_ELAPSED - [7:0] */ | ||
| 150 | |||
| 151 | #define WM831X_CHG_STATE_OFF (0 << WM831X_CHG_STATE_SHIFT) | ||
| 152 | #define WM831X_CHG_STATE_TRICKLE (1 << WM831X_CHG_STATE_SHIFT) | ||
| 153 | #define WM831X_CHG_STATE_FAST (2 << WM831X_CHG_STATE_SHIFT) | ||
| 154 | #define WM831X_CHG_STATE_TRICKLE_OT (3 << WM831X_CHG_STATE_SHIFT) | ||
| 155 | #define WM831X_CHG_STATE_FAST_OT (4 << WM831X_CHG_STATE_SHIFT) | ||
| 156 | #define WM831X_CHG_STATE_DEFECTIVE (5 << WM831X_CHG_STATE_SHIFT) | ||
| 157 | |||
| 158 | /* | ||
| 159 | * R16459 (0x404B) - Backup Charger Control | ||
| 160 | */ | ||
| 161 | #define WM831X_BKUP_CHG_ENA 0x8000 /* BKUP_CHG_ENA */ | ||
| 162 | #define WM831X_BKUP_CHG_ENA_MASK 0x8000 /* BKUP_CHG_ENA */ | ||
| 163 | #define WM831X_BKUP_CHG_ENA_SHIFT 15 /* BKUP_CHG_ENA */ | ||
| 164 | #define WM831X_BKUP_CHG_ENA_WIDTH 1 /* BKUP_CHG_ENA */ | ||
| 165 | #define WM831X_BKUP_CHG_STS 0x4000 /* BKUP_CHG_STS */ | ||
| 166 | #define WM831X_BKUP_CHG_STS_MASK 0x4000 /* BKUP_CHG_STS */ | ||
| 167 | #define WM831X_BKUP_CHG_STS_SHIFT 14 /* BKUP_CHG_STS */ | ||
| 168 | #define WM831X_BKUP_CHG_STS_WIDTH 1 /* BKUP_CHG_STS */ | ||
| 169 | #define WM831X_BKUP_CHG_MODE 0x1000 /* BKUP_CHG_MODE */ | ||
| 170 | #define WM831X_BKUP_CHG_MODE_MASK 0x1000 /* BKUP_CHG_MODE */ | ||
| 171 | #define WM831X_BKUP_CHG_MODE_SHIFT 12 /* BKUP_CHG_MODE */ | ||
| 172 | #define WM831X_BKUP_CHG_MODE_WIDTH 1 /* BKUP_CHG_MODE */ | ||
| 173 | #define WM831X_BKUP_BATT_DET_ENA 0x0800 /* BKUP_BATT_DET_ENA */ | ||
| 174 | #define WM831X_BKUP_BATT_DET_ENA_MASK 0x0800 /* BKUP_BATT_DET_ENA */ | ||
| 175 | #define WM831X_BKUP_BATT_DET_ENA_SHIFT 11 /* BKUP_BATT_DET_ENA */ | ||
| 176 | #define WM831X_BKUP_BATT_DET_ENA_WIDTH 1 /* BKUP_BATT_DET_ENA */ | ||
| 177 | #define WM831X_BKUP_BATT_STS 0x0400 /* BKUP_BATT_STS */ | ||
| 178 | #define WM831X_BKUP_BATT_STS_MASK 0x0400 /* BKUP_BATT_STS */ | ||
| 179 | #define WM831X_BKUP_BATT_STS_SHIFT 10 /* BKUP_BATT_STS */ | ||
| 180 | #define WM831X_BKUP_BATT_STS_WIDTH 1 /* BKUP_BATT_STS */ | ||
| 181 | #define WM831X_BKUP_CHG_VLIM 0x0010 /* BKUP_CHG_VLIM */ | ||
| 182 | #define WM831X_BKUP_CHG_VLIM_MASK 0x0010 /* BKUP_CHG_VLIM */ | ||
| 183 | #define WM831X_BKUP_CHG_VLIM_SHIFT 4 /* BKUP_CHG_VLIM */ | ||
| 184 | #define WM831X_BKUP_CHG_VLIM_WIDTH 1 /* BKUP_CHG_VLIM */ | ||
| 185 | #define WM831X_BKUP_CHG_ILIM_MASK 0x0003 /* BKUP_CHG_ILIM - [1:0] */ | ||
| 186 | #define WM831X_BKUP_CHG_ILIM_SHIFT 0 /* BKUP_CHG_ILIM - [1:0] */ | ||
| 187 | #define WM831X_BKUP_CHG_ILIM_WIDTH 2 /* BKUP_CHG_ILIM - [1:0] */ | ||
| 188 | |||
| 189 | #endif | ||
diff --git a/include/linux/mfd/wm831x/regulator.h b/include/linux/mfd/wm831x/regulator.h new file mode 100644 index 000000000000..955d30fc6a27 --- /dev/null +++ b/include/linux/mfd/wm831x/regulator.h | |||
| @@ -0,0 +1,1218 @@ | |||
| 1 | /* | ||
| 2 | * linux/mfd/wm831x/regulator.h -- Regulator definitons for wm831x | ||
| 3 | * | ||
| 4 | * Copyright 2009 Wolfson Microelectronics PLC. | ||
| 5 | * | ||
| 6 | * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify it | ||
| 9 | * under the terms of the GNU General Public License as published by the | ||
| 10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 11 | * option) any later version. | ||
| 12 | * | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __MFD_WM831X_REGULATOR_H__ | ||
| 16 | #define __MFD_WM831X_REGULATOR_H__ | ||
| 17 | |||
| 18 | /* | ||
| 19 | * R16462 (0x404E) - Current Sink 1 | ||
| 20 | */ | ||
| 21 | #define WM831X_CS1_ENA 0x8000 /* CS1_ENA */ | ||
| 22 | #define WM831X_CS1_ENA_MASK 0x8000 /* CS1_ENA */ | ||
| 23 | #define WM831X_CS1_ENA_SHIFT 15 /* CS1_ENA */ | ||
| 24 | #define WM831X_CS1_ENA_WIDTH 1 /* CS1_ENA */ | ||
| 25 | #define WM831X_CS1_DRIVE 0x4000 /* CS1_DRIVE */ | ||
| 26 | #define WM831X_CS1_DRIVE_MASK 0x4000 /* CS1_DRIVE */ | ||
| 27 | #define WM831X_CS1_DRIVE_SHIFT 14 /* CS1_DRIVE */ | ||
| 28 | #define WM831X_CS1_DRIVE_WIDTH 1 /* CS1_DRIVE */ | ||
| 29 | #define WM831X_CS1_SLPENA 0x1000 /* CS1_SLPENA */ | ||
| 30 | #define WM831X_CS1_SLPENA_MASK 0x1000 /* CS1_SLPENA */ | ||
| 31 | #define WM831X_CS1_SLPENA_SHIFT 12 /* CS1_SLPENA */ | ||
| 32 | #define WM831X_CS1_SLPENA_WIDTH 1 /* CS1_SLPENA */ | ||
| 33 | #define WM831X_CS1_OFF_RAMP_MASK 0x0C00 /* CS1_OFF_RAMP - [11:10] */ | ||
| 34 | #define WM831X_CS1_OFF_RAMP_SHIFT 10 /* CS1_OFF_RAMP - [11:10] */ | ||
| 35 | #define WM831X_CS1_OFF_RAMP_WIDTH 2 /* CS1_OFF_RAMP - [11:10] */ | ||
| 36 | #define WM831X_CS1_ON_RAMP_MASK 0x0300 /* CS1_ON_RAMP - [9:8] */ | ||
| 37 | #define WM831X_CS1_ON_RAMP_SHIFT 8 /* CS1_ON_RAMP - [9:8] */ | ||
| 38 | #define WM831X_CS1_ON_RAMP_WIDTH 2 /* CS1_ON_RAMP - [9:8] */ | ||
| 39 | #define WM831X_CS1_ISEL_MASK 0x003F /* CS1_ISEL - [5:0] */ | ||
| 40 | #define WM831X_CS1_ISEL_SHIFT 0 /* CS1_ISEL - [5:0] */ | ||
| 41 | #define WM831X_CS1_ISEL_WIDTH 6 /* CS1_ISEL - [5:0] */ | ||
| 42 | |||
| 43 | /* | ||
| 44 | * R16463 (0x404F) - Current Sink 2 | ||
| 45 | */ | ||
| 46 | #define WM831X_CS2_ENA 0x8000 /* CS2_ENA */ | ||
| 47 | #define WM831X_CS2_ENA_MASK 0x8000 /* CS2_ENA */ | ||
| 48 | #define WM831X_CS2_ENA_SHIFT 15 /* CS2_ENA */ | ||
| 49 | #define WM831X_CS2_ENA_WIDTH 1 /* CS2_ENA */ | ||
| 50 | #define WM831X_CS2_DRIVE 0x4000 /* CS2_DRIVE */ | ||
| 51 | #define WM831X_CS2_DRIVE_MASK 0x4000 /* CS2_DRIVE */ | ||
| 52 | #define WM831X_CS2_DRIVE_SHIFT 14 /* CS2_DRIVE */ | ||
| 53 | #define WM831X_CS2_DRIVE_WIDTH 1 /* CS2_DRIVE */ | ||
| 54 | #define WM831X_CS2_SLPENA 0x1000 /* CS2_SLPENA */ | ||
| 55 | #define WM831X_CS2_SLPENA_MASK 0x1000 /* CS2_SLPENA */ | ||
| 56 | #define WM831X_CS2_SLPENA_SHIFT 12 /* CS2_SLPENA */ | ||
| 57 | #define WM831X_CS2_SLPENA_WIDTH 1 /* CS2_SLPENA */ | ||
| 58 | #define WM831X_CS2_OFF_RAMP_MASK 0x0C00 /* CS2_OFF_RAMP - [11:10] */ | ||
| 59 | #define WM831X_CS2_OFF_RAMP_SHIFT 10 /* CS2_OFF_RAMP - [11:10] */ | ||
| 60 | #define WM831X_CS2_OFF_RAMP_WIDTH 2 /* CS2_OFF_RAMP - [11:10] */ | ||
| 61 | #define WM831X_CS2_ON_RAMP_MASK 0x0300 /* CS2_ON_RAMP - [9:8] */ | ||
| 62 | #define WM831X_CS2_ON_RAMP_SHIFT 8 /* CS2_ON_RAMP - [9:8] */ | ||
| 63 | #define WM831X_CS2_ON_RAMP_WIDTH 2 /* CS2_ON_RAMP - [9:8] */ | ||
| 64 | #define WM831X_CS2_ISEL_MASK 0x003F /* CS2_ISEL - [5:0] */ | ||
| 65 | #define WM831X_CS2_ISEL_SHIFT 0 /* CS2_ISEL - [5:0] */ | ||
| 66 | #define WM831X_CS2_ISEL_WIDTH 6 /* CS2_ISEL - [5:0] */ | ||
| 67 | |||
| 68 | /* | ||
| 69 | * R16464 (0x4050) - DCDC Enable | ||
| 70 | */ | ||
| 71 | #define WM831X_EPE2_ENA 0x0080 /* EPE2_ENA */ | ||
| 72 | #define WM831X_EPE2_ENA_MASK 0x0080 /* EPE2_ENA */ | ||
| 73 | #define WM831X_EPE2_ENA_SHIFT 7 /* EPE2_ENA */ | ||
| 74 | #define WM831X_EPE2_ENA_WIDTH 1 /* EPE2_ENA */ | ||
| 75 | #define WM831X_EPE1_ENA 0x0040 /* EPE1_ENA */ | ||
| 76 | #define WM831X_EPE1_ENA_MASK 0x0040 /* EPE1_ENA */ | ||
| 77 | #define WM831X_EPE1_ENA_SHIFT 6 /* EPE1_ENA */ | ||
| 78 | #define WM831X_EPE1_ENA_WIDTH 1 /* EPE1_ENA */ | ||
| 79 | #define WM831X_DC4_ENA 0x0008 /* DC4_ENA */ | ||
| 80 | #define WM831X_DC4_ENA_MASK 0x0008 /* DC4_ENA */ | ||
| 81 | #define WM831X_DC4_ENA_SHIFT 3 /* DC4_ENA */ | ||
| 82 | #define WM831X_DC4_ENA_WIDTH 1 /* DC4_ENA */ | ||
| 83 | #define WM831X_DC3_ENA 0x0004 /* DC3_ENA */ | ||
| 84 | #define WM831X_DC3_ENA_MASK 0x0004 /* DC3_ENA */ | ||
| 85 | #define WM831X_DC3_ENA_SHIFT 2 /* DC3_ENA */ | ||
| 86 | #define WM831X_DC3_ENA_WIDTH 1 /* DC3_ENA */ | ||
| 87 | #define WM831X_DC2_ENA 0x0002 /* DC2_ENA */ | ||
| 88 | #define WM831X_DC2_ENA_MASK 0x0002 /* DC2_ENA */ | ||
| 89 | #define WM831X_DC2_ENA_SHIFT 1 /* DC2_ENA */ | ||
| 90 | #define WM831X_DC2_ENA_WIDTH 1 /* DC2_ENA */ | ||
| 91 | #define WM831X_DC1_ENA 0x0001 /* DC1_ENA */ | ||
| 92 | #define WM831X_DC1_ENA_MASK 0x0001 /* DC1_ENA */ | ||
| 93 | #define WM831X_DC1_ENA_SHIFT 0 /* DC1_ENA */ | ||
| 94 | #define WM831X_DC1_ENA_WIDTH 1 /* DC1_ENA */ | ||
| 95 | |||
| 96 | /* | ||
| 97 | * R16465 (0x4051) - LDO Enable | ||
| 98 | */ | ||
| 99 | #define WM831X_LDO11_ENA 0x0400 /* LDO11_ENA */ | ||
| 100 | #define WM831X_LDO11_ENA_MASK 0x0400 /* LDO11_ENA */ | ||
| 101 | #define WM831X_LDO11_ENA_SHIFT 10 /* LDO11_ENA */ | ||
| 102 | #define WM831X_LDO11_ENA_WIDTH 1 /* LDO11_ENA */ | ||
| 103 | #define WM831X_LDO10_ENA 0x0200 /* LDO10_ENA */ | ||
| 104 | #define WM831X_LDO10_ENA_MASK 0x0200 /* LDO10_ENA */ | ||
| 105 | #define WM831X_LDO10_ENA_SHIFT 9 /* LDO10_ENA */ | ||
| 106 | #define WM831X_LDO10_ENA_WIDTH 1 /* LDO10_ENA */ | ||
| 107 | #define WM831X_LDO9_ENA 0x0100 /* LDO9_ENA */ | ||
| 108 | #define WM831X_LDO9_ENA_MASK 0x0100 /* LDO9_ENA */ | ||
| 109 | #define WM831X_LDO9_ENA_SHIFT 8 /* LDO9_ENA */ | ||
| 110 | #define WM831X_LDO9_ENA_WIDTH 1 /* LDO9_ENA */ | ||
| 111 | #define WM831X_LDO8_ENA 0x0080 /* LDO8_ENA */ | ||
| 112 | #define WM831X_LDO8_ENA_MASK 0x0080 /* LDO8_ENA */ | ||
| 113 | #define WM831X_LDO8_ENA_SHIFT 7 /* LDO8_ENA */ | ||
| 114 | #define WM831X_LDO8_ENA_WIDTH 1 /* LDO8_ENA */ | ||
| 115 | #define WM831X_LDO7_ENA 0x0040 /* LDO7_ENA */ | ||
| 116 | #define WM831X_LDO7_ENA_MASK 0x0040 /* LDO7_ENA */ | ||
| 117 | #define WM831X_LDO7_ENA_SHIFT 6 /* LDO7_ENA */ | ||
| 118 | #define WM831X_LDO7_ENA_WIDTH 1 /* LDO7_ENA */ | ||
| 119 | #define WM831X_LDO6_ENA 0x0020 /* LDO6_ENA */ | ||
| 120 | #define WM831X_LDO6_ENA_MASK 0x0020 /* LDO6_ENA */ | ||
| 121 | #define WM831X_LDO6_ENA_SHIFT 5 /* LDO6_ENA */ | ||
| 122 | #define WM831X_LDO6_ENA_WIDTH 1 /* LDO6_ENA */ | ||
| 123 | #define WM831X_LDO5_ENA 0x0010 /* LDO5_ENA */ | ||
| 124 | #define WM831X_LDO5_ENA_MASK 0x0010 /* LDO5_ENA */ | ||
| 125 | #define WM831X_LDO5_ENA_SHIFT 4 /* LDO5_ENA */ | ||
| 126 | #define WM831X_LDO5_ENA_WIDTH 1 /* LDO5_ENA */ | ||
| 127 | #define WM831X_LDO4_ENA 0x0008 /* LDO4_ENA */ | ||
| 128 | #define WM831X_LDO4_ENA_MASK 0x0008 /* LDO4_ENA */ | ||
| 129 | #define WM831X_LDO4_ENA_SHIFT 3 /* LDO4_ENA */ | ||
| 130 | #define WM831X_LDO4_ENA_WIDTH 1 /* LDO4_ENA */ | ||
| 131 | #define WM831X_LDO3_ENA 0x0004 /* LDO3_ENA */ | ||
| 132 | #define WM831X_LDO3_ENA_MASK 0x0004 /* LDO3_ENA */ | ||
| 133 | #define WM831X_LDO3_ENA_SHIFT 2 /* LDO3_ENA */ | ||
| 134 | #define WM831X_LDO3_ENA_WIDTH 1 /* LDO3_ENA */ | ||
| 135 | #define WM831X_LDO2_ENA 0x0002 /* LDO2_ENA */ | ||
| 136 | #define WM831X_LDO2_ENA_MASK 0x0002 /* LDO2_ENA */ | ||
| 137 | #define WM831X_LDO2_ENA_SHIFT 1 /* LDO2_ENA */ | ||
| 138 | #define WM831X_LDO2_ENA_WIDTH 1 /* LDO2_ENA */ | ||
| 139 | #define WM831X_LDO1_ENA 0x0001 /* LDO1_ENA */ | ||
| 140 | #define WM831X_LDO1_ENA_MASK 0x0001 /* LDO1_ENA */ | ||
| 141 | #define WM831X_LDO1_ENA_SHIFT 0 /* LDO1_ENA */ | ||
| 142 | #define WM831X_LDO1_ENA_WIDTH 1 /* LDO1_ENA */ | ||
| 143 | |||
| 144 | /* | ||
| 145 | * R16466 (0x4052) - DCDC Status | ||
| 146 | */ | ||
| 147 | #define WM831X_EPE2_STS 0x0080 /* EPE2_STS */ | ||
| 148 | #define WM831X_EPE2_STS_MASK 0x0080 /* EPE2_STS */ | ||
| 149 | #define WM831X_EPE2_STS_SHIFT 7 /* EPE2_STS */ | ||
| 150 | #define WM831X_EPE2_STS_WIDTH 1 /* EPE2_STS */ | ||
| 151 | #define WM831X_EPE1_STS 0x0040 /* EPE1_STS */ | ||
| 152 | #define WM831X_EPE1_STS_MASK 0x0040 /* EPE1_STS */ | ||
| 153 | #define WM831X_EPE1_STS_SHIFT 6 /* EPE1_STS */ | ||
| 154 | #define WM831X_EPE1_STS_WIDTH 1 /* EPE1_STS */ | ||
| 155 | #define WM831X_DC4_STS 0x0008 /* DC4_STS */ | ||
| 156 | #define WM831X_DC4_STS_MASK 0x0008 /* DC4_STS */ | ||
| 157 | #define WM831X_DC4_STS_SHIFT 3 /* DC4_STS */ | ||
| 158 | #define WM831X_DC4_STS_WIDTH 1 /* DC4_STS */ | ||
| 159 | #define WM831X_DC3_STS 0x0004 /* DC3_STS */ | ||
| 160 | #define WM831X_DC3_STS_MASK 0x0004 /* DC3_STS */ | ||
| 161 | #define WM831X_DC3_STS_SHIFT 2 /* DC3_STS */ | ||
| 162 | #define WM831X_DC3_STS_WIDTH 1 /* DC3_STS */ | ||
| 163 | #define WM831X_DC2_STS 0x0002 /* DC2_STS */ | ||
| 164 | #define WM831X_DC2_STS_MASK 0x0002 /* DC2_STS */ | ||
| 165 | #define WM831X_DC2_STS_SHIFT 1 /* DC2_STS */ | ||
| 166 | #define WM831X_DC2_STS_WIDTH 1 /* DC2_STS */ | ||
| 167 | #define WM831X_DC1_STS 0x0001 /* DC1_STS */ | ||
| 168 | #define WM831X_DC1_STS_MASK 0x0001 /* DC1_STS */ | ||
| 169 | #define WM831X_DC1_STS_SHIFT 0 /* DC1_STS */ | ||
| 170 | #define WM831X_DC1_STS_WIDTH 1 /* DC1_STS */ | ||
| 171 | |||
| 172 | /* | ||
| 173 | * R16467 (0x4053) - LDO Status | ||
| 174 | */ | ||
| 175 | #define WM831X_LDO11_STS 0x0400 /* LDO11_STS */ | ||
| 176 | #define WM831X_LDO11_STS_MASK 0x0400 /* LDO11_STS */ | ||
| 177 | #define WM831X_LDO11_STS_SHIFT 10 /* LDO11_STS */ | ||
| 178 | #define WM831X_LDO11_STS_WIDTH 1 /* LDO11_STS */ | ||
| 179 | #define WM831X_LDO10_STS 0x0200 /* LDO10_STS */ | ||
| 180 | #define WM831X_LDO10_STS_MASK 0x0200 /* LDO10_STS */ | ||
| 181 | #define WM831X_LDO10_STS_SHIFT 9 /* LDO10_STS */ | ||
| 182 | #define WM831X_LDO10_STS_WIDTH 1 /* LDO10_STS */ | ||
| 183 | #define WM831X_LDO9_STS 0x0100 /* LDO9_STS */ | ||
| 184 | #define WM831X_LDO9_STS_MASK 0x0100 /* LDO9_STS */ | ||
| 185 | #define WM831X_LDO9_STS_SHIFT 8 /* LDO9_STS */ | ||
| 186 | #define WM831X_LDO9_STS_WIDTH 1 /* LDO9_STS */ | ||
| 187 | #define WM831X_LDO8_STS 0x0080 /* LDO8_STS */ | ||
| 188 | #define WM831X_LDO8_STS_MASK 0x0080 /* LDO8_STS */ | ||
| 189 | #define WM831X_LDO8_STS_SHIFT 7 /* LDO8_STS */ | ||
| 190 | #define WM831X_LDO8_STS_WIDTH 1 /* LDO8_STS */ | ||
| 191 | #define WM831X_LDO7_STS 0x0040 /* LDO7_STS */ | ||
| 192 | #define WM831X_LDO7_STS_MASK 0x0040 /* LDO7_STS */ | ||
| 193 | #define WM831X_LDO7_STS_SHIFT 6 /* LDO7_STS */ | ||
| 194 | #define WM831X_LDO7_STS_WIDTH 1 /* LDO7_STS */ | ||
| 195 | #define WM831X_LDO6_STS 0x0020 /* LDO6_STS */ | ||
| 196 | #define WM831X_LDO6_STS_MASK 0x0020 /* LDO6_STS */ | ||
| 197 | #define WM831X_LDO6_STS_SHIFT 5 /* LDO6_STS */ | ||
| 198 | #define WM831X_LDO6_STS_WIDTH 1 /* LDO6_STS */ | ||
| 199 | #define WM831X_LDO5_STS 0x0010 /* LDO5_STS */ | ||
| 200 | #define WM831X_LDO5_STS_MASK 0x0010 /* LDO5_STS */ | ||
| 201 | #define WM831X_LDO5_STS_SHIFT 4 /* LDO5_STS */ | ||
| 202 | #define WM831X_LDO5_STS_WIDTH 1 /* LDO5_STS */ | ||
| 203 | #define WM831X_LDO4_STS 0x0008 /* LDO4_STS */ | ||
| 204 | #define WM831X_LDO4_STS_MASK 0x0008 /* LDO4_STS */ | ||
| 205 | #define WM831X_LDO4_STS_SHIFT 3 /* LDO4_STS */ | ||
| 206 | #define WM831X_LDO4_STS_WIDTH 1 /* LDO4_STS */ | ||
| 207 | #define WM831X_LDO3_STS 0x0004 /* LDO3_STS */ | ||
| 208 | #define WM831X_LDO3_STS_MASK 0x0004 /* LDO3_STS */ | ||
| 209 | #define WM831X_LDO3_STS_SHIFT 2 /* LDO3_STS */ | ||
| 210 | #define WM831X_LDO3_STS_WIDTH 1 /* LDO3_STS */ | ||
| 211 | #define WM831X_LDO2_STS 0x0002 /* LDO2_STS */ | ||
| 212 | #define WM831X_LDO2_STS_MASK 0x0002 /* LDO2_STS */ | ||
| 213 | #define WM831X_LDO2_STS_SHIFT 1 /* LDO2_STS */ | ||
| 214 | #define WM831X_LDO2_STS_WIDTH 1 /* LDO2_STS */ | ||
| 215 | #define WM831X_LDO1_STS 0x0001 /* LDO1_STS */ | ||
| 216 | #define WM831X_LDO1_STS_MASK 0x0001 /* LDO1_STS */ | ||
| 217 | #define WM831X_LDO1_STS_SHIFT 0 /* LDO1_STS */ | ||
| 218 | #define WM831X_LDO1_STS_WIDTH 1 /* LDO1_STS */ | ||
| 219 | |||
| 220 | /* | ||
| 221 | * R16468 (0x4054) - DCDC UV Status | ||
| 222 | */ | ||
| 223 | #define WM831X_DC2_OV_STS 0x2000 /* DC2_OV_STS */ | ||
| 224 | #define WM831X_DC2_OV_STS_MASK 0x2000 /* DC2_OV_STS */ | ||
| 225 | #define WM831X_DC2_OV_STS_SHIFT 13 /* DC2_OV_STS */ | ||
| 226 | #define WM831X_DC2_OV_STS_WIDTH 1 /* DC2_OV_STS */ | ||
| 227 | #define WM831X_DC1_OV_STS 0x1000 /* DC1_OV_STS */ | ||
| 228 | #define WM831X_DC1_OV_STS_MASK 0x1000 /* DC1_OV_STS */ | ||
| 229 | #define WM831X_DC1_OV_STS_SHIFT 12 /* DC1_OV_STS */ | ||
| 230 | #define WM831X_DC1_OV_STS_WIDTH 1 /* DC1_OV_STS */ | ||
| 231 | #define WM831X_DC2_HC_STS 0x0200 /* DC2_HC_STS */ | ||
| 232 | #define WM831X_DC2_HC_STS_MASK 0x0200 /* DC2_HC_STS */ | ||
| 233 | #define WM831X_DC2_HC_STS_SHIFT 9 /* DC2_HC_STS */ | ||
| 234 | #define WM831X_DC2_HC_STS_WIDTH 1 /* DC2_HC_STS */ | ||
| 235 | #define WM831X_DC1_HC_STS 0x0100 /* DC1_HC_STS */ | ||
| 236 | #define WM831X_DC1_HC_STS_MASK 0x0100 /* DC1_HC_STS */ | ||
| 237 | #define WM831X_DC1_HC_STS_SHIFT 8 /* DC1_HC_STS */ | ||
| 238 | #define WM831X_DC1_HC_STS_WIDTH 1 /* DC1_HC_STS */ | ||
| 239 | #define WM831X_DC4_UV_STS 0x0008 /* DC4_UV_STS */ | ||
| 240 | #define WM831X_DC4_UV_STS_MASK 0x0008 /* DC4_UV_STS */ | ||
| 241 | #define WM831X_DC4_UV_STS_SHIFT 3 /* DC4_UV_STS */ | ||
| 242 | #define WM831X_DC4_UV_STS_WIDTH 1 /* DC4_UV_STS */ | ||
| 243 | #define WM831X_DC3_UV_STS 0x0004 /* DC3_UV_STS */ | ||
| 244 | #define WM831X_DC3_UV_STS_MASK 0x0004 /* DC3_UV_STS */ | ||
| 245 | #define WM831X_DC3_UV_STS_SHIFT 2 /* DC3_UV_STS */ | ||
| 246 | #define WM831X_DC3_UV_STS_WIDTH 1 /* DC3_UV_STS */ | ||
| 247 | #define WM831X_DC2_UV_STS 0x0002 /* DC2_UV_STS */ | ||
| 248 | #define WM831X_DC2_UV_STS_MASK 0x0002 /* DC2_UV_STS */ | ||
| 249 | #define WM831X_DC2_UV_STS_SHIFT 1 /* DC2_UV_STS */ | ||
| 250 | #define WM831X_DC2_UV_STS_WIDTH 1 /* DC2_UV_STS */ | ||
| 251 | #define WM831X_DC1_UV_STS 0x0001 /* DC1_UV_STS */ | ||
| 252 | #define WM831X_DC1_UV_STS_MASK 0x0001 /* DC1_UV_STS */ | ||
| 253 | #define WM831X_DC1_UV_STS_SHIFT 0 /* DC1_UV_STS */ | ||
| 254 | #define WM831X_DC1_UV_STS_WIDTH 1 /* DC1_UV_STS */ | ||
| 255 | |||
| 256 | /* | ||
| 257 | * R16469 (0x4055) - LDO UV Status | ||
| 258 | */ | ||
| 259 | #define WM831X_INTLDO_UV_STS 0x8000 /* INTLDO_UV_STS */ | ||
| 260 | #define WM831X_INTLDO_UV_STS_MASK 0x8000 /* INTLDO_UV_STS */ | ||
| 261 | #define WM831X_INTLDO_UV_STS_SHIFT 15 /* INTLDO_UV_STS */ | ||
| 262 | #define WM831X_INTLDO_UV_STS_WIDTH 1 /* INTLDO_UV_STS */ | ||
| 263 | #define WM831X_LDO10_UV_STS 0x0200 /* LDO10_UV_STS */ | ||
| 264 | #define WM831X_LDO10_UV_STS_MASK 0x0200 /* LDO10_UV_STS */ | ||
| 265 | #define WM831X_LDO10_UV_STS_SHIFT 9 /* LDO10_UV_STS */ | ||
| 266 | #define WM831X_LDO10_UV_STS_WIDTH 1 /* LDO10_UV_STS */ | ||
| 267 | #define WM831X_LDO9_UV_STS 0x0100 /* LDO9_UV_STS */ | ||
| 268 | #define WM831X_LDO9_UV_STS_MASK 0x0100 /* LDO9_UV_STS */ | ||
| 269 | #define WM831X_LDO9_UV_STS_SHIFT 8 /* LDO9_UV_STS */ | ||
| 270 | #define WM831X_LDO9_UV_STS_WIDTH 1 /* LDO9_UV_STS */ | ||
| 271 | #define WM831X_LDO8_UV_STS 0x0080 /* LDO8_UV_STS */ | ||
| 272 | #define WM831X_LDO8_UV_STS_MASK 0x0080 /* LDO8_UV_STS */ | ||
| 273 | #define WM831X_LDO8_UV_STS_SHIFT 7 /* LDO8_UV_STS */ | ||
| 274 | #define WM831X_LDO8_UV_STS_WIDTH 1 /* LDO8_UV_STS */ | ||
| 275 | #define WM831X_LDO7_UV_STS 0x0040 /* LDO7_UV_STS */ | ||
| 276 | #define WM831X_LDO7_UV_STS_MASK 0x0040 /* LDO7_UV_STS */ | ||
| 277 | #define WM831X_LDO7_UV_STS_SHIFT 6 /* LDO7_UV_STS */ | ||
| 278 | #define WM831X_LDO7_UV_STS_WIDTH 1 /* LDO7_UV_STS */ | ||
| 279 | #define WM831X_LDO6_UV_STS 0x0020 /* LDO6_UV_STS */ | ||
| 280 | #define WM831X_LDO6_UV_STS_MASK 0x0020 /* LDO6_UV_STS */ | ||
| 281 | #define WM831X_LDO6_UV_STS_SHIFT 5 /* LDO6_UV_STS */ | ||
| 282 | #define WM831X_LDO6_UV_STS_WIDTH 1 /* LDO6_UV_STS */ | ||
| 283 | #define WM831X_LDO5_UV_STS 0x0010 /* LDO5_UV_STS */ | ||
| 284 | #define WM831X_LDO5_UV_STS_MASK 0x0010 /* LDO5_UV_STS */ | ||
| 285 | #define WM831X_LDO5_UV_STS_SHIFT 4 /* LDO5_UV_STS */ | ||
| 286 | #define WM831X_LDO5_UV_STS_WIDTH 1 /* LDO5_UV_STS */ | ||
| 287 | #define WM831X_LDO4_UV_STS 0x0008 /* LDO4_UV_STS */ | ||
| 288 | #define WM831X_LDO4_UV_STS_MASK 0x0008 /* LDO4_UV_STS */ | ||
| 289 | #define WM831X_LDO4_UV_STS_SHIFT 3 /* LDO4_UV_STS */ | ||
| 290 | #define WM831X_LDO4_UV_STS_WIDTH 1 /* LDO4_UV_STS */ | ||
| 291 | #define WM831X_LDO3_UV_STS 0x0004 /* LDO3_UV_STS */ | ||
| 292 | #define WM831X_LDO3_UV_STS_MASK 0x0004 /* LDO3_UV_STS */ | ||
| 293 | #define WM831X_LDO3_UV_STS_SHIFT 2 /* LDO3_UV_STS */ | ||
| 294 | #define WM831X_LDO3_UV_STS_WIDTH 1 /* LDO3_UV_STS */ | ||
| 295 | #define WM831X_LDO2_UV_STS 0x0002 /* LDO2_UV_STS */ | ||
| 296 | #define WM831X_LDO2_UV_STS_MASK 0x0002 /* LDO2_UV_STS */ | ||
| 297 | #define WM831X_LDO2_UV_STS_SHIFT 1 /* LDO2_UV_STS */ | ||
| 298 | #define WM831X_LDO2_UV_STS_WIDTH 1 /* LDO2_UV_STS */ | ||
| 299 | #define WM831X_LDO1_UV_STS 0x0001 /* LDO1_UV_STS */ | ||
| 300 | #define WM831X_LDO1_UV_STS_MASK 0x0001 /* LDO1_UV_STS */ | ||
| 301 | #define WM831X_LDO1_UV_STS_SHIFT 0 /* LDO1_UV_STS */ | ||
| 302 | #define WM831X_LDO1_UV_STS_WIDTH 1 /* LDO1_UV_STS */ | ||
| 303 | |||
| 304 | /* | ||
| 305 | * R16470 (0x4056) - DC1 Control 1 | ||
| 306 | */ | ||
| 307 | #define WM831X_DC1_RATE_MASK 0xC000 /* DC1_RATE - [15:14] */ | ||
| 308 | #define WM831X_DC1_RATE_SHIFT 14 /* DC1_RATE - [15:14] */ | ||
| 309 | #define WM831X_DC1_RATE_WIDTH 2 /* DC1_RATE - [15:14] */ | ||
| 310 | #define WM831X_DC1_PHASE 0x1000 /* DC1_PHASE */ | ||
| 311 | #define WM831X_DC1_PHASE_MASK 0x1000 /* DC1_PHASE */ | ||
| 312 | #define WM831X_DC1_PHASE_SHIFT 12 /* DC1_PHASE */ | ||
| 313 | #define WM831X_DC1_PHASE_WIDTH 1 /* DC1_PHASE */ | ||
| 314 | #define WM831X_DC1_FREQ_MASK 0x0300 /* DC1_FREQ - [9:8] */ | ||
| 315 | #define WM831X_DC1_FREQ_SHIFT 8 /* DC1_FREQ - [9:8] */ | ||
| 316 | #define WM831X_DC1_FREQ_WIDTH 2 /* DC1_FREQ - [9:8] */ | ||
| 317 | #define WM831X_DC1_FLT 0x0080 /* DC1_FLT */ | ||
| 318 | #define WM831X_DC1_FLT_MASK 0x0080 /* DC1_FLT */ | ||
| 319 | #define WM831X_DC1_FLT_SHIFT 7 /* DC1_FLT */ | ||
| 320 | #define WM831X_DC1_FLT_WIDTH 1 /* DC1_FLT */ | ||
| 321 | #define WM831X_DC1_SOFT_START_MASK 0x0030 /* DC1_SOFT_START - [5:4] */ | ||
| 322 | #define WM831X_DC1_SOFT_START_SHIFT 4 /* DC1_SOFT_START - [5:4] */ | ||
| 323 | #define WM831X_DC1_SOFT_START_WIDTH 2 /* DC1_SOFT_START - [5:4] */ | ||
| 324 | #define WM831X_DC1_CAP_MASK 0x0003 /* DC1_CAP - [1:0] */ | ||
| 325 | #define WM831X_DC1_CAP_SHIFT 0 /* DC1_CAP - [1:0] */ | ||
| 326 | #define WM831X_DC1_CAP_WIDTH 2 /* DC1_CAP - [1:0] */ | ||
| 327 | |||
| 328 | /* | ||
| 329 | * R16471 (0x4057) - DC1 Control 2 | ||
| 330 | */ | ||
| 331 | #define WM831X_DC1_ERR_ACT_MASK 0xC000 /* DC1_ERR_ACT - [15:14] */ | ||
| 332 | #define WM831X_DC1_ERR_ACT_SHIFT 14 /* DC1_ERR_ACT - [15:14] */ | ||
| 333 | #define WM831X_DC1_ERR_ACT_WIDTH 2 /* DC1_ERR_ACT - [15:14] */ | ||
| 334 | #define WM831X_DC1_HWC_SRC_MASK 0x1800 /* DC1_HWC_SRC - [12:11] */ | ||
| 335 | #define WM831X_DC1_HWC_SRC_SHIFT 11 /* DC1_HWC_SRC - [12:11] */ | ||
| 336 | #define WM831X_DC1_HWC_SRC_WIDTH 2 /* DC1_HWC_SRC - [12:11] */ | ||
| 337 | #define WM831X_DC1_HWC_VSEL 0x0400 /* DC1_HWC_VSEL */ | ||
| 338 | #define WM831X_DC1_HWC_VSEL_MASK 0x0400 /* DC1_HWC_VSEL */ | ||
| 339 | #define WM831X_DC1_HWC_VSEL_SHIFT 10 /* DC1_HWC_VSEL */ | ||
| 340 | #define WM831X_DC1_HWC_VSEL_WIDTH 1 /* DC1_HWC_VSEL */ | ||
| 341 | #define WM831X_DC1_HWC_MODE_MASK 0x0300 /* DC1_HWC_MODE - [9:8] */ | ||
| 342 | #define WM831X_DC1_HWC_MODE_SHIFT 8 /* DC1_HWC_MODE - [9:8] */ | ||
| 343 | #define WM831X_DC1_HWC_MODE_WIDTH 2 /* DC1_HWC_MODE - [9:8] */ | ||
| 344 | #define WM831X_DC1_HC_THR_MASK 0x0070 /* DC1_HC_THR - [6:4] */ | ||
| 345 | #define WM831X_DC1_HC_THR_SHIFT 4 /* DC1_HC_THR - [6:4] */ | ||
| 346 | #define WM831X_DC1_HC_THR_WIDTH 3 /* DC1_HC_THR - [6:4] */ | ||
| 347 | #define WM831X_DC1_HC_IND_ENA 0x0001 /* DC1_HC_IND_ENA */ | ||
| 348 | #define WM831X_DC1_HC_IND_ENA_MASK 0x0001 /* DC1_HC_IND_ENA */ | ||
| 349 | #define WM831X_DC1_HC_IND_ENA_SHIFT 0 /* DC1_HC_IND_ENA */ | ||
| 350 | #define WM831X_DC1_HC_IND_ENA_WIDTH 1 /* DC1_HC_IND_ENA */ | ||
| 351 | |||
| 352 | /* | ||
| 353 | * R16472 (0x4058) - DC1 ON Config | ||
| 354 | */ | ||
| 355 | #define WM831X_DC1_ON_SLOT_MASK 0xE000 /* DC1_ON_SLOT - [15:13] */ | ||
| 356 | #define WM831X_DC1_ON_SLOT_SHIFT 13 /* DC1_ON_SLOT - [15:13] */ | ||
| 357 | #define WM831X_DC1_ON_SLOT_WIDTH 3 /* DC1_ON_SLOT - [15:13] */ | ||
| 358 | #define WM831X_DC1_ON_MODE_MASK 0x0300 /* DC1_ON_MODE - [9:8] */ | ||
| 359 | #define WM831X_DC1_ON_MODE_SHIFT 8 /* DC1_ON_MODE - [9:8] */ | ||
| 360 | #define WM831X_DC1_ON_MODE_WIDTH 2 /* DC1_ON_MODE - [9:8] */ | ||
| 361 | #define WM831X_DC1_ON_VSEL_MASK 0x007F /* DC1_ON_VSEL - [6:0] */ | ||
| 362 | #define WM831X_DC1_ON_VSEL_SHIFT 0 /* DC1_ON_VSEL - [6:0] */ | ||
| 363 | #define WM831X_DC1_ON_VSEL_WIDTH 7 /* DC1_ON_VSEL - [6:0] */ | ||
| 364 | |||
| 365 | /* | ||
| 366 | * R16473 (0x4059) - DC1 SLEEP Control | ||
| 367 | */ | ||
| 368 | #define WM831X_DC1_SLP_SLOT_MASK 0xE000 /* DC1_SLP_SLOT - [15:13] */ | ||
| 369 | #define WM831X_DC1_SLP_SLOT_SHIFT 13 /* DC1_SLP_SLOT - [15:13] */ | ||
| 370 | #define WM831X_DC1_SLP_SLOT_WIDTH 3 /* DC1_SLP_SLOT - [15:13] */ | ||
| 371 | #define WM831X_DC1_SLP_MODE_MASK 0x0300 /* DC1_SLP_MODE - [9:8] */ | ||
| 372 | #define WM831X_DC1_SLP_MODE_SHIFT 8 /* DC1_SLP_MODE - [9:8] */ | ||
| 373 | #define WM831X_DC1_SLP_MODE_WIDTH 2 /* DC1_SLP_MODE - [9:8] */ | ||
| 374 | #define WM831X_DC1_SLP_VSEL_MASK 0x007F /* DC1_SLP_VSEL - [6:0] */ | ||
| 375 | #define WM831X_DC1_SLP_VSEL_SHIFT 0 /* DC1_SLP_VSEL - [6:0] */ | ||
| 376 | #define WM831X_DC1_SLP_VSEL_WIDTH 7 /* DC1_SLP_VSEL - [6:0] */ | ||
| 377 | |||
| 378 | /* | ||
| 379 | * R16474 (0x405A) - DC1 DVS Control | ||
| 380 | */ | ||
| 381 | #define WM831X_DC1_DVS_SRC_MASK 0x1800 /* DC1_DVS_SRC - [12:11] */ | ||
| 382 | #define WM831X_DC1_DVS_SRC_SHIFT 11 /* DC1_DVS_SRC - [12:11] */ | ||
| 383 | #define WM831X_DC1_DVS_SRC_WIDTH 2 /* DC1_DVS_SRC - [12:11] */ | ||
| 384 | #define WM831X_DC1_DVS_VSEL_MASK 0x007F /* DC1_DVS_VSEL - [6:0] */ | ||
| 385 | #define WM831X_DC1_DVS_VSEL_SHIFT 0 /* DC1_DVS_VSEL - [6:0] */ | ||
| 386 | #define WM831X_DC1_DVS_VSEL_WIDTH 7 /* DC1_DVS_VSEL - [6:0] */ | ||
| 387 | |||
| 388 | /* | ||
| 389 | * R16475 (0x405B) - DC2 Control 1 | ||
| 390 | */ | ||
| 391 | #define WM831X_DC2_RATE_MASK 0xC000 /* DC2_RATE - [15:14] */ | ||
| 392 | #define WM831X_DC2_RATE_SHIFT 14 /* DC2_RATE - [15:14] */ | ||
| 393 | #define WM831X_DC2_RATE_WIDTH 2 /* DC2_RATE - [15:14] */ | ||
| 394 | #define WM831X_DC2_PHASE 0x1000 /* DC2_PHASE */ | ||
| 395 | #define WM831X_DC2_PHASE_MASK 0x1000 /* DC2_PHASE */ | ||
| 396 | #define WM831X_DC2_PHASE_SHIFT 12 /* DC2_PHASE */ | ||
| 397 | #define WM831X_DC2_PHASE_WIDTH 1 /* DC2_PHASE */ | ||
| 398 | #define WM831X_DC2_FREQ_MASK 0x0300 /* DC2_FREQ - [9:8] */ | ||
| 399 | #define WM831X_DC2_FREQ_SHIFT 8 /* DC2_FREQ - [9:8] */ | ||
| 400 | #define WM831X_DC2_FREQ_WIDTH 2 /* DC2_FREQ - [9:8] */ | ||
| 401 | #define WM831X_DC2_FLT 0x0080 /* DC2_FLT */ | ||
| 402 | #define WM831X_DC2_FLT_MASK 0x0080 /* DC2_FLT */ | ||
| 403 | #define WM831X_DC2_FLT_SHIFT 7 /* DC2_FLT */ | ||
| 404 | #define WM831X_DC2_FLT_WIDTH 1 /* DC2_FLT */ | ||
| 405 | #define WM831X_DC2_SOFT_START_MASK 0x0030 /* DC2_SOFT_START - [5:4] */ | ||
| 406 | #define WM831X_DC2_SOFT_START_SHIFT 4 /* DC2_SOFT_START - [5:4] */ | ||
| 407 | #define WM831X_DC2_SOFT_START_WIDTH 2 /* DC2_SOFT_START - [5:4] */ | ||
| 408 | #define WM831X_DC2_CAP_MASK 0x0003 /* DC2_CAP - [1:0] */ | ||
| 409 | #define WM831X_DC2_CAP_SHIFT 0 /* DC2_CAP - [1:0] */ | ||
| 410 | #define WM831X_DC2_CAP_WIDTH 2 /* DC2_CAP - [1:0] */ | ||
| 411 | |||
| 412 | /* | ||
| 413 | * R16476 (0x405C) - DC2 Control 2 | ||
| 414 | */ | ||
| 415 | #define WM831X_DC2_ERR_ACT_MASK 0xC000 /* DC2_ERR_ACT - [15:14] */ | ||
| 416 | #define WM831X_DC2_ERR_ACT_SHIFT 14 /* DC2_ERR_ACT - [15:14] */ | ||
| 417 | #define WM831X_DC2_ERR_ACT_WIDTH 2 /* DC2_ERR_ACT - [15:14] */ | ||
| 418 | #define WM831X_DC2_HWC_SRC_MASK 0x1800 /* DC2_HWC_SRC - [12:11] */ | ||
| 419 | #define WM831X_DC2_HWC_SRC_SHIFT 11 /* DC2_HWC_SRC - [12:11] */ | ||
| 420 | #define WM831X_DC2_HWC_SRC_WIDTH 2 /* DC2_HWC_SRC - [12:11] */ | ||
| 421 | #define WM831X_DC2_HWC_VSEL 0x0400 /* DC2_HWC_VSEL */ | ||
| 422 | #define WM831X_DC2_HWC_VSEL_MASK 0x0400 /* DC2_HWC_VSEL */ | ||
| 423 | #define WM831X_DC2_HWC_VSEL_SHIFT 10 /* DC2_HWC_VSEL */ | ||
| 424 | #define WM831X_DC2_HWC_VSEL_WIDTH 1 /* DC2_HWC_VSEL */ | ||
| 425 | #define WM831X_DC2_HWC_MODE_MASK 0x0300 /* DC2_HWC_MODE - [9:8] */ | ||
| 426 | #define WM831X_DC2_HWC_MODE_SHIFT 8 /* DC2_HWC_MODE - [9:8] */ | ||
| 427 | #define WM831X_DC2_HWC_MODE_WIDTH 2 /* DC2_HWC_MODE - [9:8] */ | ||
| 428 | #define WM831X_DC2_HC_THR_MASK 0x0070 /* DC2_HC_THR - [6:4] */ | ||
| 429 | #define WM831X_DC2_HC_THR_SHIFT 4 /* DC2_HC_THR - [6:4] */ | ||
| 430 | #define WM831X_DC2_HC_THR_WIDTH 3 /* DC2_HC_THR - [6:4] */ | ||
| 431 | #define WM831X_DC2_HC_IND_ENA 0x0001 /* DC2_HC_IND_ENA */ | ||
| 432 | #define WM831X_DC2_HC_IND_ENA_MASK 0x0001 /* DC2_HC_IND_ENA */ | ||
| 433 | #define WM831X_DC2_HC_IND_ENA_SHIFT 0 /* DC2_HC_IND_ENA */ | ||
| 434 | #define WM831X_DC2_HC_IND_ENA_WIDTH 1 /* DC2_HC_IND_ENA */ | ||
| 435 | |||
| 436 | /* | ||
| 437 | * R16477 (0x405D) - DC2 ON Config | ||
| 438 | */ | ||
| 439 | #define WM831X_DC2_ON_SLOT_MASK 0xE000 /* DC2_ON_SLOT - [15:13] */ | ||
| 440 | #define WM831X_DC2_ON_SLOT_SHIFT 13 /* DC2_ON_SLOT - [15:13] */ | ||
| 441 | #define WM831X_DC2_ON_SLOT_WIDTH 3 /* DC2_ON_SLOT - [15:13] */ | ||
| 442 | #define WM831X_DC2_ON_MODE_MASK 0x0300 /* DC2_ON_MODE - [9:8] */ | ||
| 443 | #define WM831X_DC2_ON_MODE_SHIFT 8 /* DC2_ON_MODE - [9:8] */ | ||
| 444 | #define WM831X_DC2_ON_MODE_WIDTH 2 /* DC2_ON_MODE - [9:8] */ | ||
| 445 | #define WM831X_DC2_ON_VSEL_MASK 0x007F /* DC2_ON_VSEL - [6:0] */ | ||
| 446 | #define WM831X_DC2_ON_VSEL_SHIFT 0 /* DC2_ON_VSEL - [6:0] */ | ||
| 447 | #define WM831X_DC2_ON_VSEL_WIDTH 7 /* DC2_ON_VSEL - [6:0] */ | ||
| 448 | |||
| 449 | /* | ||
| 450 | * R16478 (0x405E) - DC2 SLEEP Control | ||
| 451 | */ | ||
| 452 | #define WM831X_DC2_SLP_SLOT_MASK 0xE000 /* DC2_SLP_SLOT - [15:13] */ | ||
| 453 | #define WM831X_DC2_SLP_SLOT_SHIFT 13 /* DC2_SLP_SLOT - [15:13] */ | ||
| 454 | #define WM831X_DC2_SLP_SLOT_WIDTH 3 /* DC2_SLP_SLOT - [15:13] */ | ||
| 455 | #define WM831X_DC2_SLP_MODE_MASK 0x0300 /* DC2_SLP_MODE - [9:8] */ | ||
| 456 | #define WM831X_DC2_SLP_MODE_SHIFT 8 /* DC2_SLP_MODE - [9:8] */ | ||
| 457 | #define WM831X_DC2_SLP_MODE_WIDTH 2 /* DC2_SLP_MODE - [9:8] */ | ||
| 458 | #define WM831X_DC2_SLP_VSEL_MASK 0x007F /* DC2_SLP_VSEL - [6:0] */ | ||
| 459 | #define WM831X_DC2_SLP_VSEL_SHIFT 0 /* DC2_SLP_VSEL - [6:0] */ | ||
| 460 | #define WM831X_DC2_SLP_VSEL_WIDTH 7 /* DC2_SLP_VSEL - [6:0] */ | ||
| 461 | |||
| 462 | /* | ||
| 463 | * R16479 (0x405F) - DC2 DVS Control | ||
| 464 | */ | ||
| 465 | #define WM831X_DC2_DVS_SRC_MASK 0x1800 /* DC2_DVS_SRC - [12:11] */ | ||
| 466 | #define WM831X_DC2_DVS_SRC_SHIFT 11 /* DC2_DVS_SRC - [12:11] */ | ||
| 467 | #define WM831X_DC2_DVS_SRC_WIDTH 2 /* DC2_DVS_SRC - [12:11] */ | ||
| 468 | #define WM831X_DC2_DVS_VSEL_MASK 0x007F /* DC2_DVS_VSEL - [6:0] */ | ||
| 469 | #define WM831X_DC2_DVS_VSEL_SHIFT 0 /* DC2_DVS_VSEL - [6:0] */ | ||
| 470 | #define WM831X_DC2_DVS_VSEL_WIDTH 7 /* DC2_DVS_VSEL - [6:0] */ | ||
| 471 | |||
| 472 | /* | ||
| 473 | * R16480 (0x4060) - DC3 Control 1 | ||
| 474 | */ | ||
| 475 | #define WM831X_DC3_PHASE 0x1000 /* DC3_PHASE */ | ||
| 476 | #define WM831X_DC3_PHASE_MASK 0x1000 /* DC3_PHASE */ | ||
| 477 | #define WM831X_DC3_PHASE_SHIFT 12 /* DC3_PHASE */ | ||
| 478 | #define WM831X_DC3_PHASE_WIDTH 1 /* DC3_PHASE */ | ||
| 479 | #define WM831X_DC3_FLT 0x0080 /* DC3_FLT */ | ||
| 480 | #define WM831X_DC3_FLT_MASK 0x0080 /* DC3_FLT */ | ||
| 481 | #define WM831X_DC3_FLT_SHIFT 7 /* DC3_FLT */ | ||
| 482 | #define WM831X_DC3_FLT_WIDTH 1 /* DC3_FLT */ | ||
| 483 | #define WM831X_DC3_SOFT_START_MASK 0x0030 /* DC3_SOFT_START - [5:4] */ | ||
| 484 | #define WM831X_DC3_SOFT_START_SHIFT 4 /* DC3_SOFT_START - [5:4] */ | ||
| 485 | #define WM831X_DC3_SOFT_START_WIDTH 2 /* DC3_SOFT_START - [5:4] */ | ||
| 486 | #define WM831X_DC3_STNBY_LIM_MASK 0x000C /* DC3_STNBY_LIM - [3:2] */ | ||
| 487 | #define WM831X_DC3_STNBY_LIM_SHIFT 2 /* DC3_STNBY_LIM - [3:2] */ | ||
| 488 | #define WM831X_DC3_STNBY_LIM_WIDTH 2 /* DC3_STNBY_LIM - [3:2] */ | ||
| 489 | #define WM831X_DC3_CAP_MASK 0x0003 /* DC3_CAP - [1:0] */ | ||
| 490 | #define WM831X_DC3_CAP_SHIFT 0 /* DC3_CAP - [1:0] */ | ||
| 491 | #define WM831X_DC3_CAP_WIDTH 2 /* DC3_CAP - [1:0] */ | ||
| 492 | |||
| 493 | /* | ||
| 494 | * R16481 (0x4061) - DC3 Control 2 | ||
| 495 | */ | ||
| 496 | #define WM831X_DC3_ERR_ACT_MASK 0xC000 /* DC3_ERR_ACT - [15:14] */ | ||
| 497 | #define WM831X_DC3_ERR_ACT_SHIFT 14 /* DC3_ERR_ACT - [15:14] */ | ||
| 498 | #define WM831X_DC3_ERR_ACT_WIDTH 2 /* DC3_ERR_ACT - [15:14] */ | ||
| 499 | #define WM831X_DC3_HWC_SRC_MASK 0x1800 /* DC3_HWC_SRC - [12:11] */ | ||
| 500 | #define WM831X_DC3_HWC_SRC_SHIFT 11 /* DC3_HWC_SRC - [12:11] */ | ||
| 501 | #define WM831X_DC3_HWC_SRC_WIDTH 2 /* DC3_HWC_SRC - [12:11] */ | ||
| 502 | #define WM831X_DC3_HWC_VSEL 0x0400 /* DC3_HWC_VSEL */ | ||
| 503 | #define WM831X_DC3_HWC_VSEL_MASK 0x0400 /* DC3_HWC_VSEL */ | ||
| 504 | #define WM831X_DC3_HWC_VSEL_SHIFT 10 /* DC3_HWC_VSEL */ | ||
| 505 | #define WM831X_DC3_HWC_VSEL_WIDTH 1 /* DC3_HWC_VSEL */ | ||
| 506 | #define WM831X_DC3_HWC_MODE_MASK 0x0300 /* DC3_HWC_MODE - [9:8] */ | ||
| 507 | #define WM831X_DC3_HWC_MODE_SHIFT 8 /* DC3_HWC_MODE - [9:8] */ | ||
| 508 | #define WM831X_DC3_HWC_MODE_WIDTH 2 /* DC3_HWC_MODE - [9:8] */ | ||
| 509 | #define WM831X_DC3_OVP 0x0080 /* DC3_OVP */ | ||
| 510 | #define WM831X_DC3_OVP_MASK 0x0080 /* DC3_OVP */ | ||
| 511 | #define WM831X_DC3_OVP_SHIFT 7 /* DC3_OVP */ | ||
| 512 | #define WM831X_DC3_OVP_WIDTH 1 /* DC3_OVP */ | ||
| 513 | |||
| 514 | /* | ||
| 515 | * R16482 (0x4062) - DC3 ON Config | ||
| 516 | */ | ||
| 517 | #define WM831X_DC3_ON_SLOT_MASK 0xE000 /* DC3_ON_SLOT - [15:13] */ | ||
| 518 | #define WM831X_DC3_ON_SLOT_SHIFT 13 /* DC3_ON_SLOT - [15:13] */ | ||
| 519 | #define WM831X_DC3_ON_SLOT_WIDTH 3 /* DC3_ON_SLOT - [15:13] */ | ||
| 520 | #define WM831X_DC3_ON_MODE_MASK 0x0300 /* DC3_ON_MODE - [9:8] */ | ||
| 521 | #define WM831X_DC3_ON_MODE_SHIFT 8 /* DC3_ON_MODE - [9:8] */ | ||
| 522 | #define WM831X_DC3_ON_MODE_WIDTH 2 /* DC3_ON_MODE - [9:8] */ | ||
| 523 | #define WM831X_DC3_ON_VSEL_MASK 0x007F /* DC3_ON_VSEL - [6:0] */ | ||
| 524 | #define WM831X_DC3_ON_VSEL_SHIFT 0 /* DC3_ON_VSEL - [6:0] */ | ||
| 525 | #define WM831X_DC3_ON_VSEL_WIDTH 7 /* DC3_ON_VSEL - [6:0] */ | ||
| 526 | |||
| 527 | /* | ||
| 528 | * R16483 (0x4063) - DC3 SLEEP Control | ||
| 529 | */ | ||
| 530 | #define WM831X_DC3_SLP_SLOT_MASK 0xE000 /* DC3_SLP_SLOT - [15:13] */ | ||
| 531 | #define WM831X_DC3_SLP_SLOT_SHIFT 13 /* DC3_SLP_SLOT - [15:13] */ | ||
| 532 | #define WM831X_DC3_SLP_SLOT_WIDTH 3 /* DC3_SLP_SLOT - [15:13] */ | ||
| 533 | #define WM831X_DC3_SLP_MODE_MASK 0x0300 /* DC3_SLP_MODE - [9:8] */ | ||
| 534 | #define WM831X_DC3_SLP_MODE_SHIFT 8 /* DC3_SLP_MODE - [9:8] */ | ||
| 535 | #define WM831X_DC3_SLP_MODE_WIDTH 2 /* DC3_SLP_MODE - [9:8] */ | ||
| 536 | #define WM831X_DC3_SLP_VSEL_MASK 0x007F /* DC3_SLP_VSEL - [6:0] */ | ||
| 537 | #define WM831X_DC3_SLP_VSEL_SHIFT 0 /* DC3_SLP_VSEL - [6:0] */ | ||
| 538 | #define WM831X_DC3_SLP_VSEL_WIDTH 7 /* DC3_SLP_VSEL - [6:0] */ | ||
| 539 | |||
| 540 | /* | ||
| 541 | * R16484 (0x4064) - DC4 Control | ||
| 542 | */ | ||
| 543 | #define WM831X_DC4_ERR_ACT_MASK 0xC000 /* DC4_ERR_ACT - [15:14] */ | ||
| 544 | #define WM831X_DC4_ERR_ACT_SHIFT 14 /* DC4_ERR_ACT - [15:14] */ | ||
| 545 | #define WM831X_DC4_ERR_ACT_WIDTH 2 /* DC4_ERR_ACT - [15:14] */ | ||
| 546 | #define WM831X_DC4_HWC_SRC_MASK 0x1800 /* DC4_HWC_SRC - [12:11] */ | ||
| 547 | #define WM831X_DC4_HWC_SRC_SHIFT 11 /* DC4_HWC_SRC - [12:11] */ | ||
| 548 | #define WM831X_DC4_HWC_SRC_WIDTH 2 /* DC4_HWC_SRC - [12:11] */ | ||
| 549 | #define WM831X_DC4_HWC_MODE 0x0100 /* DC4_HWC_MODE */ | ||
| 550 | #define WM831X_DC4_HWC_MODE_MASK 0x0100 /* DC4_HWC_MODE */ | ||
| 551 | #define WM831X_DC4_HWC_MODE_SHIFT 8 /* DC4_HWC_MODE */ | ||
| 552 | #define WM831X_DC4_HWC_MODE_WIDTH 1 /* DC4_HWC_MODE */ | ||
| 553 | #define WM831X_DC4_RANGE_MASK 0x000C /* DC4_RANGE - [3:2] */ | ||
| 554 | #define WM831X_DC4_RANGE_SHIFT 2 /* DC4_RANGE - [3:2] */ | ||
| 555 | #define WM831X_DC4_RANGE_WIDTH 2 /* DC4_RANGE - [3:2] */ | ||
| 556 | #define WM831X_DC4_FBSRC 0x0001 /* DC4_FBSRC */ | ||
| 557 | #define WM831X_DC4_FBSRC_MASK 0x0001 /* DC4_FBSRC */ | ||
| 558 | #define WM831X_DC4_FBSRC_SHIFT 0 /* DC4_FBSRC */ | ||
| 559 | #define WM831X_DC4_FBSRC_WIDTH 1 /* DC4_FBSRC */ | ||
| 560 | |||
| 561 | /* | ||
| 562 | * R16485 (0x4065) - DC4 SLEEP Control | ||
| 563 | */ | ||
| 564 | #define WM831X_DC4_SLPENA 0x0100 /* DC4_SLPENA */ | ||
| 565 | #define WM831X_DC4_SLPENA_MASK 0x0100 /* DC4_SLPENA */ | ||
| 566 | #define WM831X_DC4_SLPENA_SHIFT 8 /* DC4_SLPENA */ | ||
| 567 | #define WM831X_DC4_SLPENA_WIDTH 1 /* DC4_SLPENA */ | ||
| 568 | |||
| 569 | /* | ||
| 570 | * R16488 (0x4068) - LDO1 Control | ||
| 571 | */ | ||
| 572 | #define WM831X_LDO1_ERR_ACT_MASK 0xC000 /* LDO1_ERR_ACT - [15:14] */ | ||
| 573 | #define WM831X_LDO1_ERR_ACT_SHIFT 14 /* LDO1_ERR_ACT - [15:14] */ | ||
| 574 | #define WM831X_LDO1_ERR_ACT_WIDTH 2 /* LDO1_ERR_ACT - [15:14] */ | ||
| 575 | #define WM831X_LDO1_HWC_SRC_MASK 0x1800 /* LDO1_HWC_SRC - [12:11] */ | ||
| 576 | #define WM831X_LDO1_HWC_SRC_SHIFT 11 /* LDO1_HWC_SRC - [12:11] */ | ||
| 577 | #define WM831X_LDO1_HWC_SRC_WIDTH 2 /* LDO1_HWC_SRC - [12:11] */ | ||
| 578 | #define WM831X_LDO1_HWC_VSEL 0x0400 /* LDO1_HWC_VSEL */ | ||
| 579 | #define WM831X_LDO1_HWC_VSEL_MASK 0x0400 /* LDO1_HWC_VSEL */ | ||
| 580 | #define WM831X_LDO1_HWC_VSEL_SHIFT 10 /* LDO1_HWC_VSEL */ | ||
| 581 | #define WM831X_LDO1_HWC_VSEL_WIDTH 1 /* LDO1_HWC_VSEL */ | ||
| 582 | #define WM831X_LDO1_HWC_MODE_MASK 0x0300 /* LDO1_HWC_MODE - [9:8] */ | ||
| 583 | #define WM831X_LDO1_HWC_MODE_SHIFT 8 /* LDO1_HWC_MODE - [9:8] */ | ||
| 584 | #define WM831X_LDO1_HWC_MODE_WIDTH 2 /* LDO1_HWC_MODE - [9:8] */ | ||
| 585 | #define WM831X_LDO1_FLT 0x0080 /* LDO1_FLT */ | ||
| 586 | #define WM831X_LDO1_FLT_MASK 0x0080 /* LDO1_FLT */ | ||
| 587 | #define WM831X_LDO1_FLT_SHIFT 7 /* LDO1_FLT */ | ||
| 588 | #define WM831X_LDO1_FLT_WIDTH 1 /* LDO1_FLT */ | ||
| 589 | #define WM831X_LDO1_SWI 0x0040 /* LDO1_SWI */ | ||
| 590 | #define WM831X_LDO1_SWI_MASK 0x0040 /* LDO1_SWI */ | ||
| 591 | #define WM831X_LDO1_SWI_SHIFT 6 /* LDO1_SWI */ | ||
| 592 | #define WM831X_LDO1_SWI_WIDTH 1 /* LDO1_SWI */ | ||
| 593 | #define WM831X_LDO1_LP_MODE 0x0001 /* LDO1_LP_MODE */ | ||
| 594 | #define WM831X_LDO1_LP_MODE_MASK 0x0001 /* LDO1_LP_MODE */ | ||
| 595 | #define WM831X_LDO1_LP_MODE_SHIFT 0 /* LDO1_LP_MODE */ | ||
| 596 | #define WM831X_LDO1_LP_MODE_WIDTH 1 /* LDO1_LP_MODE */ | ||
| 597 | |||
| 598 | /* | ||
| 599 | * R16489 (0x4069) - LDO1 ON Control | ||
| 600 | */ | ||
| 601 | #define WM831X_LDO1_ON_SLOT_MASK 0xE000 /* LDO1_ON_SLOT - [15:13] */ | ||
| 602 | #define WM831X_LDO1_ON_SLOT_SHIFT 13 /* LDO1_ON_SLOT - [15:13] */ | ||
| 603 | #define WM831X_LDO1_ON_SLOT_WIDTH 3 /* LDO1_ON_SLOT - [15:13] */ | ||
| 604 | #define WM831X_LDO1_ON_MODE 0x0100 /* LDO1_ON_MODE */ | ||
| 605 | #define WM831X_LDO1_ON_MODE_MASK 0x0100 /* LDO1_ON_MODE */ | ||
| 606 | #define WM831X_LDO1_ON_MODE_SHIFT 8 /* LDO1_ON_MODE */ | ||
| 607 | #define WM831X_LDO1_ON_MODE_WIDTH 1 /* LDO1_ON_MODE */ | ||
| 608 | #define WM831X_LDO1_ON_VSEL_MASK 0x001F /* LDO1_ON_VSEL - [4:0] */ | ||
| 609 | #define WM831X_LDO1_ON_VSEL_SHIFT 0 /* LDO1_ON_VSEL - [4:0] */ | ||
| 610 | #define WM831X_LDO1_ON_VSEL_WIDTH 5 /* LDO1_ON_VSEL - [4:0] */ | ||
| 611 | |||
| 612 | /* | ||
| 613 | * R16490 (0x406A) - LDO1 SLEEP Control | ||
| 614 | */ | ||
| 615 | #define WM831X_LDO1_SLP_SLOT_MASK 0xE000 /* LDO1_SLP_SLOT - [15:13] */ | ||
| 616 | #define WM831X_LDO1_SLP_SLOT_SHIFT 13 /* LDO1_SLP_SLOT - [15:13] */ | ||
| 617 | #define WM831X_LDO1_SLP_SLOT_WIDTH 3 /* LDO1_SLP_SLOT - [15:13] */ | ||
| 618 | #define WM831X_LDO1_SLP_MODE 0x0100 /* LDO1_SLP_MODE */ | ||
| 619 | #define WM831X_LDO1_SLP_MODE_MASK 0x0100 /* LDO1_SLP_MODE */ | ||
| 620 | #define WM831X_LDO1_SLP_MODE_SHIFT 8 /* LDO1_SLP_MODE */ | ||
| 621 | #define WM831X_LDO1_SLP_MODE_WIDTH 1 /* LDO1_SLP_MODE */ | ||
| 622 | #define WM831X_LDO1_SLP_VSEL_MASK 0x001F /* LDO1_SLP_VSEL - [4:0] */ | ||
| 623 | #define WM831X_LDO1_SLP_VSEL_SHIFT 0 /* LDO1_SLP_VSEL - [4:0] */ | ||
| 624 | #define WM831X_LDO1_SLP_VSEL_WIDTH 5 /* LDO1_SLP_VSEL - [4:0] */ | ||
| 625 | |||
| 626 | /* | ||
| 627 | * R16491 (0x406B) - LDO2 Control | ||
| 628 | */ | ||
| 629 | #define WM831X_LDO2_ERR_ACT_MASK 0xC000 /* LDO2_ERR_ACT - [15:14] */ | ||
| 630 | #define WM831X_LDO2_ERR_ACT_SHIFT 14 /* LDO2_ERR_ACT - [15:14] */ | ||
| 631 | #define WM831X_LDO2_ERR_ACT_WIDTH 2 /* LDO2_ERR_ACT - [15:14] */ | ||
| 632 | #define WM831X_LDO2_HWC_SRC_MASK 0x1800 /* LDO2_HWC_SRC - [12:11] */ | ||
| 633 | #define WM831X_LDO2_HWC_SRC_SHIFT 11 /* LDO2_HWC_SRC - [12:11] */ | ||
| 634 | #define WM831X_LDO2_HWC_SRC_WIDTH 2 /* LDO2_HWC_SRC - [12:11] */ | ||
| 635 | #define WM831X_LDO2_HWC_VSEL 0x0400 /* LDO2_HWC_VSEL */ | ||
| 636 | #define WM831X_LDO2_HWC_VSEL_MASK 0x0400 /* LDO2_HWC_VSEL */ | ||
| 637 | #define WM831X_LDO2_HWC_VSEL_SHIFT 10 /* LDO2_HWC_VSEL */ | ||
| 638 | #define WM831X_LDO2_HWC_VSEL_WIDTH 1 /* LDO2_HWC_VSEL */ | ||
| 639 | #define WM831X_LDO2_HWC_MODE_MASK 0x0300 /* LDO2_HWC_MODE - [9:8] */ | ||
| 640 | #define WM831X_LDO2_HWC_MODE_SHIFT 8 /* LDO2_HWC_MODE - [9:8] */ | ||
| 641 | #define WM831X_LDO2_HWC_MODE_WIDTH 2 /* LDO2_HWC_MODE - [9:8] */ | ||
| 642 | #define WM831X_LDO2_FLT 0x0080 /* LDO2_FLT */ | ||
| 643 | #define WM831X_LDO2_FLT_MASK 0x0080 /* LDO2_FLT */ | ||
| 644 | #define WM831X_LDO2_FLT_SHIFT 7 /* LDO2_FLT */ | ||
| 645 | #define WM831X_LDO2_FLT_WIDTH 1 /* LDO2_FLT */ | ||
| 646 | #define WM831X_LDO2_SWI 0x0040 /* LDO2_SWI */ | ||
| 647 | #define WM831X_LDO2_SWI_MASK 0x0040 /* LDO2_SWI */ | ||
| 648 | #define WM831X_LDO2_SWI_SHIFT 6 /* LDO2_SWI */ | ||
| 649 | #define WM831X_LDO2_SWI_WIDTH 1 /* LDO2_SWI */ | ||
| 650 | #define WM831X_LDO2_LP_MODE 0x0001 /* LDO2_LP_MODE */ | ||
| 651 | #define WM831X_LDO2_LP_MODE_MASK 0x0001 /* LDO2_LP_MODE */ | ||
| 652 | #define WM831X_LDO2_LP_MODE_SHIFT 0 /* LDO2_LP_MODE */ | ||
| 653 | #define WM831X_LDO2_LP_MODE_WIDTH 1 /* LDO2_LP_MODE */ | ||
| 654 | |||
| 655 | /* | ||
| 656 | * R16492 (0x406C) - LDO2 ON Control | ||
| 657 | */ | ||
| 658 | #define WM831X_LDO2_ON_SLOT_MASK 0xE000 /* LDO2_ON_SLOT - [15:13] */ | ||
| 659 | #define WM831X_LDO2_ON_SLOT_SHIFT 13 /* LDO2_ON_SLOT - [15:13] */ | ||
| 660 | #define WM831X_LDO2_ON_SLOT_WIDTH 3 /* LDO2_ON_SLOT - [15:13] */ | ||
| 661 | #define WM831X_LDO2_ON_MODE 0x0100 /* LDO2_ON_MODE */ | ||
| 662 | #define WM831X_LDO2_ON_MODE_MASK 0x0100 /* LDO2_ON_MODE */ | ||
| 663 | #define WM831X_LDO2_ON_MODE_SHIFT 8 /* LDO2_ON_MODE */ | ||
| 664 | #define WM831X_LDO2_ON_MODE_WIDTH 1 /* LDO2_ON_MODE */ | ||
| 665 | #define WM831X_LDO2_ON_VSEL_MASK 0x001F /* LDO2_ON_VSEL - [4:0] */ | ||
| 666 | #define WM831X_LDO2_ON_VSEL_SHIFT 0 /* LDO2_ON_VSEL - [4:0] */ | ||
| 667 | #define WM831X_LDO2_ON_VSEL_WIDTH 5 /* LDO2_ON_VSEL - [4:0] */ | ||
| 668 | |||
| 669 | /* | ||
| 670 | * R16493 (0x406D) - LDO2 SLEEP Control | ||
| 671 | */ | ||
| 672 | #define WM831X_LDO2_SLP_SLOT_MASK 0xE000 /* LDO2_SLP_SLOT - [15:13] */ | ||
| 673 | #define WM831X_LDO2_SLP_SLOT_SHIFT 13 /* LDO2_SLP_SLOT - [15:13] */ | ||
| 674 | #define WM831X_LDO2_SLP_SLOT_WIDTH 3 /* LDO2_SLP_SLOT - [15:13] */ | ||
| 675 | #define WM831X_LDO2_SLP_MODE 0x0100 /* LDO2_SLP_MODE */ | ||
| 676 | #define WM831X_LDO2_SLP_MODE_MASK 0x0100 /* LDO2_SLP_MODE */ | ||
| 677 | #define WM831X_LDO2_SLP_MODE_SHIFT 8 /* LDO2_SLP_MODE */ | ||
| 678 | #define WM831X_LDO2_SLP_MODE_WIDTH 1 /* LDO2_SLP_MODE */ | ||
| 679 | #define WM831X_LDO2_SLP_VSEL_MASK 0x001F /* LDO2_SLP_VSEL - [4:0] */ | ||
| 680 | #define WM831X_LDO2_SLP_VSEL_SHIFT 0 /* LDO2_SLP_VSEL - [4:0] */ | ||
| 681 | #define WM831X_LDO2_SLP_VSEL_WIDTH 5 /* LDO2_SLP_VSEL - [4:0] */ | ||
| 682 | |||
| 683 | /* | ||
| 684 | * R16494 (0x406E) - LDO3 Control | ||
| 685 | */ | ||
| 686 | #define WM831X_LDO3_ERR_ACT_MASK 0xC000 /* LDO3_ERR_ACT - [15:14] */ | ||
| 687 | #define WM831X_LDO3_ERR_ACT_SHIFT 14 /* LDO3_ERR_ACT - [15:14] */ | ||
| 688 | #define WM831X_LDO3_ERR_ACT_WIDTH 2 /* LDO3_ERR_ACT - [15:14] */ | ||
| 689 | #define WM831X_LDO3_HWC_SRC_MASK 0x1800 /* LDO3_HWC_SRC - [12:11] */ | ||
| 690 | #define WM831X_LDO3_HWC_SRC_SHIFT 11 /* LDO3_HWC_SRC - [12:11] */ | ||
| 691 | #define WM831X_LDO3_HWC_SRC_WIDTH 2 /* LDO3_HWC_SRC - [12:11] */ | ||
| 692 | #define WM831X_LDO3_HWC_VSEL 0x0400 /* LDO3_HWC_VSEL */ | ||
| 693 | #define WM831X_LDO3_HWC_VSEL_MASK 0x0400 /* LDO3_HWC_VSEL */ | ||
| 694 | #define WM831X_LDO3_HWC_VSEL_SHIFT 10 /* LDO3_HWC_VSEL */ | ||
| 695 | #define WM831X_LDO3_HWC_VSEL_WIDTH 1 /* LDO3_HWC_VSEL */ | ||
| 696 | #define WM831X_LDO3_HWC_MODE_MASK 0x0300 /* LDO3_HWC_MODE - [9:8] */ | ||
| 697 | #define WM831X_LDO3_HWC_MODE_SHIFT 8 /* LDO3_HWC_MODE - [9:8] */ | ||
| 698 | #define WM831X_LDO3_HWC_MODE_WIDTH 2 /* LDO3_HWC_MODE - [9:8] */ | ||
| 699 | #define WM831X_LDO3_FLT 0x0080 /* LDO3_FLT */ | ||
| 700 | #define WM831X_LDO3_FLT_MASK 0x0080 /* LDO3_FLT */ | ||
| 701 | #define WM831X_LDO3_FLT_SHIFT 7 /* LDO3_FLT */ | ||
| 702 | #define WM831X_LDO3_FLT_WIDTH 1 /* LDO3_FLT */ | ||
| 703 | #define WM831X_LDO3_SWI 0x0040 /* LDO3_SWI */ | ||
| 704 | #define WM831X_LDO3_SWI_MASK 0x0040 /* LDO3_SWI */ | ||
| 705 | #define WM831X_LDO3_SWI_SHIFT 6 /* LDO3_SWI */ | ||
| 706 | #define WM831X_LDO3_SWI_WIDTH 1 /* LDO3_SWI */ | ||
| 707 | #define WM831X_LDO3_LP_MODE 0x0001 /* LDO3_LP_MODE */ | ||
| 708 | #define WM831X_LDO3_LP_MODE_MASK 0x0001 /* LDO3_LP_MODE */ | ||
| 709 | #define WM831X_LDO3_LP_MODE_SHIFT 0 /* LDO3_LP_MODE */ | ||
| 710 | #define WM831X_LDO3_LP_MODE_WIDTH 1 /* LDO3_LP_MODE */ | ||
| 711 | |||
| 712 | /* | ||
| 713 | * R16495 (0x406F) - LDO3 ON Control | ||
| 714 | */ | ||
| 715 | #define WM831X_LDO3_ON_SLOT_MASK 0xE000 /* LDO3_ON_SLOT - [15:13] */ | ||
| 716 | #define WM831X_LDO3_ON_SLOT_SHIFT 13 /* LDO3_ON_SLOT - [15:13] */ | ||
| 717 | #define WM831X_LDO3_ON_SLOT_WIDTH 3 /* LDO3_ON_SLOT - [15:13] */ | ||
| 718 | #define WM831X_LDO3_ON_MODE 0x0100 /* LDO3_ON_MODE */ | ||
| 719 | #define WM831X_LDO3_ON_MODE_MASK 0x0100 /* LDO3_ON_MODE */ | ||
| 720 | #define WM831X_LDO3_ON_MODE_SHIFT 8 /* LDO3_ON_MODE */ | ||
| 721 | #define WM831X_LDO3_ON_MODE_WIDTH 1 /* LDO3_ON_MODE */ | ||
| 722 | #define WM831X_LDO3_ON_VSEL_MASK 0x001F /* LDO3_ON_VSEL - [4:0] */ | ||
| 723 | #define WM831X_LDO3_ON_VSEL_SHIFT 0 /* LDO3_ON_VSEL - [4:0] */ | ||
| 724 | #define WM831X_LDO3_ON_VSEL_WIDTH 5 /* LDO3_ON_VSEL - [4:0] */ | ||
| 725 | |||
| 726 | /* | ||
| 727 | * R16496 (0x4070) - LDO3 SLEEP Control | ||
| 728 | */ | ||
| 729 | #define WM831X_LDO3_SLP_SLOT_MASK 0xE000 /* LDO3_SLP_SLOT - [15:13] */ | ||
| 730 | #define WM831X_LDO3_SLP_SLOT_SHIFT 13 /* LDO3_SLP_SLOT - [15:13] */ | ||
| 731 | #define WM831X_LDO3_SLP_SLOT_WIDTH 3 /* LDO3_SLP_SLOT - [15:13] */ | ||
| 732 | #define WM831X_LDO3_SLP_MODE 0x0100 /* LDO3_SLP_MODE */ | ||
| 733 | #define WM831X_LDO3_SLP_MODE_MASK 0x0100 /* LDO3_SLP_MODE */ | ||
| 734 | #define WM831X_LDO3_SLP_MODE_SHIFT 8 /* LDO3_SLP_MODE */ | ||
| 735 | #define WM831X_LDO3_SLP_MODE_WIDTH 1 /* LDO3_SLP_MODE */ | ||
| 736 | #define WM831X_LDO3_SLP_VSEL_MASK 0x001F /* LDO3_SLP_VSEL - [4:0] */ | ||
| 737 | #define WM831X_LDO3_SLP_VSEL_SHIFT 0 /* LDO3_SLP_VSEL - [4:0] */ | ||
| 738 | #define WM831X_LDO3_SLP_VSEL_WIDTH 5 /* LDO3_SLP_VSEL - [4:0] */ | ||
| 739 | |||
| 740 | /* | ||
| 741 | * R16497 (0x4071) - LDO4 Control | ||
| 742 | */ | ||
| 743 | #define WM831X_LDO4_ERR_ACT_MASK 0xC000 /* LDO4_ERR_ACT - [15:14] */ | ||
| 744 | #define WM831X_LDO4_ERR_ACT_SHIFT 14 /* LDO4_ERR_ACT - [15:14] */ | ||
| 745 | #define WM831X_LDO4_ERR_ACT_WIDTH 2 /* LDO4_ERR_ACT - [15:14] */ | ||
| 746 | #define WM831X_LDO4_HWC_SRC_MASK 0x1800 /* LDO4_HWC_SRC - [12:11] */ | ||
| 747 | #define WM831X_LDO4_HWC_SRC_SHIFT 11 /* LDO4_HWC_SRC - [12:11] */ | ||
| 748 | #define WM831X_LDO4_HWC_SRC_WIDTH 2 /* LDO4_HWC_SRC - [12:11] */ | ||
| 749 | #define WM831X_LDO4_HWC_VSEL 0x0400 /* LDO4_HWC_VSEL */ | ||
| 750 | #define WM831X_LDO4_HWC_VSEL_MASK 0x0400 /* LDO4_HWC_VSEL */ | ||
| 751 | #define WM831X_LDO4_HWC_VSEL_SHIFT 10 /* LDO4_HWC_VSEL */ | ||
| 752 | #define WM831X_LDO4_HWC_VSEL_WIDTH 1 /* LDO4_HWC_VSEL */ | ||
| 753 | #define WM831X_LDO4_HWC_MODE_MASK 0x0300 /* LDO4_HWC_MODE - [9:8] */ | ||
| 754 | #define WM831X_LDO4_HWC_MODE_SHIFT 8 /* LDO4_HWC_MODE - [9:8] */ | ||
| 755 | #define WM831X_LDO4_HWC_MODE_WIDTH 2 /* LDO4_HWC_MODE - [9:8] */ | ||
| 756 | #define WM831X_LDO4_FLT 0x0080 /* LDO4_FLT */ | ||
| 757 | #define WM831X_LDO4_FLT_MASK 0x0080 /* LDO4_FLT */ | ||
| 758 | #define WM831X_LDO4_FLT_SHIFT 7 /* LDO4_FLT */ | ||
| 759 | #define WM831X_LDO4_FLT_WIDTH 1 /* LDO4_FLT */ | ||
| 760 | #define WM831X_LDO4_SWI 0x0040 /* LDO4_SWI */ | ||
| 761 | #define WM831X_LDO4_SWI_MASK 0x0040 /* LDO4_SWI */ | ||
| 762 | #define WM831X_LDO4_SWI_SHIFT 6 /* LDO4_SWI */ | ||
| 763 | #define WM831X_LDO4_SWI_WIDTH 1 /* LDO4_SWI */ | ||
| 764 | #define WM831X_LDO4_LP_MODE 0x0001 /* LDO4_LP_MODE */ | ||
| 765 | #define WM831X_LDO4_LP_MODE_MASK 0x0001 /* LDO4_LP_MODE */ | ||
| 766 | #define WM831X_LDO4_LP_MODE_SHIFT 0 /* LDO4_LP_MODE */ | ||
| 767 | #define WM831X_LDO4_LP_MODE_WIDTH 1 /* LDO4_LP_MODE */ | ||
| 768 | |||
| 769 | /* | ||
| 770 | * R16498 (0x4072) - LDO4 ON Control | ||
| 771 | */ | ||
| 772 | #define WM831X_LDO4_ON_SLOT_MASK 0xE000 /* LDO4_ON_SLOT - [15:13] */ | ||
| 773 | #define WM831X_LDO4_ON_SLOT_SHIFT 13 /* LDO4_ON_SLOT - [15:13] */ | ||
| 774 | #define WM831X_LDO4_ON_SLOT_WIDTH 3 /* LDO4_ON_SLOT - [15:13] */ | ||
| 775 | #define WM831X_LDO4_ON_MODE 0x0100 /* LDO4_ON_MODE */ | ||
| 776 | #define WM831X_LDO4_ON_MODE_MASK 0x0100 /* LDO4_ON_MODE */ | ||
| 777 | #define WM831X_LDO4_ON_MODE_SHIFT 8 /* LDO4_ON_MODE */ | ||
| 778 | #define WM831X_LDO4_ON_MODE_WIDTH 1 /* LDO4_ON_MODE */ | ||
| 779 | #define WM831X_LDO4_ON_VSEL_MASK 0x001F /* LDO4_ON_VSEL - [4:0] */ | ||
| 780 | #define WM831X_LDO4_ON_VSEL_SHIFT 0 /* LDO4_ON_VSEL - [4:0] */ | ||
| 781 | #define WM831X_LDO4_ON_VSEL_WIDTH 5 /* LDO4_ON_VSEL - [4:0] */ | ||
| 782 | |||
| 783 | /* | ||
| 784 | * R16499 (0x4073) - LDO4 SLEEP Control | ||
| 785 | */ | ||
| 786 | #define WM831X_LDO4_SLP_SLOT_MASK 0xE000 /* LDO4_SLP_SLOT - [15:13] */ | ||
| 787 | #define WM831X_LDO4_SLP_SLOT_SHIFT 13 /* LDO4_SLP_SLOT - [15:13] */ | ||
| 788 | #define WM831X_LDO4_SLP_SLOT_WIDTH 3 /* LDO4_SLP_SLOT - [15:13] */ | ||
| 789 | #define WM831X_LDO4_SLP_MODE 0x0100 /* LDO4_SLP_MODE */ | ||
| 790 | #define WM831X_LDO4_SLP_MODE_MASK 0x0100 /* LDO4_SLP_MODE */ | ||
| 791 | #define WM831X_LDO4_SLP_MODE_SHIFT 8 /* LDO4_SLP_MODE */ | ||
| 792 | #define WM831X_LDO4_SLP_MODE_WIDTH 1 /* LDO4_SLP_MODE */ | ||
| 793 | #define WM831X_LDO4_SLP_VSEL_MASK 0x001F /* LDO4_SLP_VSEL - [4:0] */ | ||
| 794 | #define WM831X_LDO4_SLP_VSEL_SHIFT 0 /* LDO4_SLP_VSEL - [4:0] */ | ||
| 795 | #define WM831X_LDO4_SLP_VSEL_WIDTH 5 /* LDO4_SLP_VSEL - [4:0] */ | ||
| 796 | |||
| 797 | /* | ||
| 798 | * R16500 (0x4074) - LDO5 Control | ||
| 799 | */ | ||
| 800 | #define WM831X_LDO5_ERR_ACT_MASK 0xC000 /* LDO5_ERR_ACT - [15:14] */ | ||
| 801 | #define WM831X_LDO5_ERR_ACT_SHIFT 14 /* LDO5_ERR_ACT - [15:14] */ | ||
| 802 | #define WM831X_LDO5_ERR_ACT_WIDTH 2 /* LDO5_ERR_ACT - [15:14] */ | ||
| 803 | #define WM831X_LDO5_HWC_SRC_MASK 0x1800 /* LDO5_HWC_SRC - [12:11] */ | ||
| 804 | #define WM831X_LDO5_HWC_SRC_SHIFT 11 /* LDO5_HWC_SRC - [12:11] */ | ||
| 805 | #define WM831X_LDO5_HWC_SRC_WIDTH 2 /* LDO5_HWC_SRC - [12:11] */ | ||
| 806 | #define WM831X_LDO5_HWC_VSEL 0x0400 /* LDO5_HWC_VSEL */ | ||
| 807 | #define WM831X_LDO5_HWC_VSEL_MASK 0x0400 /* LDO5_HWC_VSEL */ | ||
| 808 | #define WM831X_LDO5_HWC_VSEL_SHIFT 10 /* LDO5_HWC_VSEL */ | ||
| 809 | #define WM831X_LDO5_HWC_VSEL_WIDTH 1 /* LDO5_HWC_VSEL */ | ||
| 810 | #define WM831X_LDO5_HWC_MODE_MASK 0x0300 /* LDO5_HWC_MODE - [9:8] */ | ||
| 811 | #define WM831X_LDO5_HWC_MODE_SHIFT 8 /* LDO5_HWC_MODE - [9:8] */ | ||
| 812 | #define WM831X_LDO5_HWC_MODE_WIDTH 2 /* LDO5_HWC_MODE - [9:8] */ | ||
| 813 | #define WM831X_LDO5_FLT 0x0080 /* LDO5_FLT */ | ||
| 814 | #define WM831X_LDO5_FLT_MASK 0x0080 /* LDO5_FLT */ | ||
| 815 | #define WM831X_LDO5_FLT_SHIFT 7 /* LDO5_FLT */ | ||
| 816 | #define WM831X_LDO5_FLT_WIDTH 1 /* LDO5_FLT */ | ||
| 817 | #define WM831X_LDO5_SWI 0x0040 /* LDO5_SWI */ | ||
| 818 | #define WM831X_LDO5_SWI_MASK 0x0040 /* LDO5_SWI */ | ||
| 819 | #define WM831X_LDO5_SWI_SHIFT 6 /* LDO5_SWI */ | ||
| 820 | #define WM831X_LDO5_SWI_WIDTH 1 /* LDO5_SWI */ | ||
| 821 | #define WM831X_LDO5_LP_MODE 0x0001 /* LDO5_LP_MODE */ | ||
| 822 | #define WM831X_LDO5_LP_MODE_MASK 0x0001 /* LDO5_LP_MODE */ | ||
| 823 | #define WM831X_LDO5_LP_MODE_SHIFT 0 /* LDO5_LP_MODE */ | ||
| 824 | #define WM831X_LDO5_LP_MODE_WIDTH 1 /* LDO5_LP_MODE */ | ||
| 825 | |||
| 826 | /* | ||
| 827 | * R16501 (0x4075) - LDO5 ON Control | ||
| 828 | */ | ||
| 829 | #define WM831X_LDO5_ON_SLOT_MASK 0xE000 /* LDO5_ON_SLOT - [15:13] */ | ||
| 830 | #define WM831X_LDO5_ON_SLOT_SHIFT 13 /* LDO5_ON_SLOT - [15:13] */ | ||
| 831 | #define WM831X_LDO5_ON_SLOT_WIDTH 3 /* LDO5_ON_SLOT - [15:13] */ | ||
| 832 | #define WM831X_LDO5_ON_MODE 0x0100 /* LDO5_ON_MODE */ | ||
| 833 | #define WM831X_LDO5_ON_MODE_MASK 0x0100 /* LDO5_ON_MODE */ | ||
| 834 | #define WM831X_LDO5_ON_MODE_SHIFT 8 /* LDO5_ON_MODE */ | ||
| 835 | #define WM831X_LDO5_ON_MODE_WIDTH 1 /* LDO5_ON_MODE */ | ||
| 836 | #define WM831X_LDO5_ON_VSEL_MASK 0x001F /* LDO5_ON_VSEL - [4:0] */ | ||
| 837 | #define WM831X_LDO5_ON_VSEL_SHIFT 0 /* LDO5_ON_VSEL - [4:0] */ | ||
| 838 | #define WM831X_LDO5_ON_VSEL_WIDTH 5 /* LDO5_ON_VSEL - [4:0] */ | ||
| 839 | |||
| 840 | /* | ||
| 841 | * R16502 (0x4076) - LDO5 SLEEP Control | ||
| 842 | */ | ||
| 843 | #define WM831X_LDO5_SLP_SLOT_MASK 0xE000 /* LDO5_SLP_SLOT - [15:13] */ | ||
| 844 | #define WM831X_LDO5_SLP_SLOT_SHIFT 13 /* LDO5_SLP_SLOT - [15:13] */ | ||
| 845 | #define WM831X_LDO5_SLP_SLOT_WIDTH 3 /* LDO5_SLP_SLOT - [15:13] */ | ||
| 846 | #define WM831X_LDO5_SLP_MODE 0x0100 /* LDO5_SLP_MODE */ | ||
| 847 | #define WM831X_LDO5_SLP_MODE_MASK 0x0100 /* LDO5_SLP_MODE */ | ||
| 848 | #define WM831X_LDO5_SLP_MODE_SHIFT 8 /* LDO5_SLP_MODE */ | ||
| 849 | #define WM831X_LDO5_SLP_MODE_WIDTH 1 /* LDO5_SLP_MODE */ | ||
| 850 | #define WM831X_LDO5_SLP_VSEL_MASK 0x001F /* LDO5_SLP_VSEL - [4:0] */ | ||
| 851 | #define WM831X_LDO5_SLP_VSEL_SHIFT 0 /* LDO5_SLP_VSEL - [4:0] */ | ||
| 852 | #define WM831X_LDO5_SLP_VSEL_WIDTH 5 /* LDO5_SLP_VSEL - [4:0] */ | ||
| 853 | |||
| 854 | /* | ||
| 855 | * R16503 (0x4077) - LDO6 Control | ||
| 856 | */ | ||
| 857 | #define WM831X_LDO6_ERR_ACT_MASK 0xC000 /* LDO6_ERR_ACT - [15:14] */ | ||
| 858 | #define WM831X_LDO6_ERR_ACT_SHIFT 14 /* LDO6_ERR_ACT - [15:14] */ | ||
| 859 | #define WM831X_LDO6_ERR_ACT_WIDTH 2 /* LDO6_ERR_ACT - [15:14] */ | ||
| 860 | #define WM831X_LDO6_HWC_SRC_MASK 0x1800 /* LDO6_HWC_SRC - [12:11] */ | ||
| 861 | #define WM831X_LDO6_HWC_SRC_SHIFT 11 /* LDO6_HWC_SRC - [12:11] */ | ||
| 862 | #define WM831X_LDO6_HWC_SRC_WIDTH 2 /* LDO6_HWC_SRC - [12:11] */ | ||
| 863 | #define WM831X_LDO6_HWC_VSEL 0x0400 /* LDO6_HWC_VSEL */ | ||
| 864 | #define WM831X_LDO6_HWC_VSEL_MASK 0x0400 /* LDO6_HWC_VSEL */ | ||
| 865 | #define WM831X_LDO6_HWC_VSEL_SHIFT 10 /* LDO6_HWC_VSEL */ | ||
| 866 | #define WM831X_LDO6_HWC_VSEL_WIDTH 1 /* LDO6_HWC_VSEL */ | ||
| 867 | #define WM831X_LDO6_HWC_MODE_MASK 0x0300 /* LDO6_HWC_MODE - [9:8] */ | ||
| 868 | #define WM831X_LDO6_HWC_MODE_SHIFT 8 /* LDO6_HWC_MODE - [9:8] */ | ||
| 869 | #define WM831X_LDO6_HWC_MODE_WIDTH 2 /* LDO6_HWC_MODE - [9:8] */ | ||
| 870 | #define WM831X_LDO6_FLT 0x0080 /* LDO6_FLT */ | ||
| 871 | #define WM831X_LDO6_FLT_MASK 0x0080 /* LDO6_FLT */ | ||
| 872 | #define WM831X_LDO6_FLT_SHIFT 7 /* LDO6_FLT */ | ||
| 873 | #define WM831X_LDO6_FLT_WIDTH 1 /* LDO6_FLT */ | ||
| 874 | #define WM831X_LDO6_SWI 0x0040 /* LDO6_SWI */ | ||
| 875 | #define WM831X_LDO6_SWI_MASK 0x0040 /* LDO6_SWI */ | ||
| 876 | #define WM831X_LDO6_SWI_SHIFT 6 /* LDO6_SWI */ | ||
| 877 | #define WM831X_LDO6_SWI_WIDTH 1 /* LDO6_SWI */ | ||
| 878 | #define WM831X_LDO6_LP_MODE 0x0001 /* LDO6_LP_MODE */ | ||
| 879 | #define WM831X_LDO6_LP_MODE_MASK 0x0001 /* LDO6_LP_MODE */ | ||
| 880 | #define WM831X_LDO6_LP_MODE_SHIFT 0 /* LDO6_LP_MODE */ | ||
| 881 | #define WM831X_LDO6_LP_MODE_WIDTH 1 /* LDO6_LP_MODE */ | ||
| 882 | |||
| 883 | /* | ||
| 884 | * R16504 (0x4078) - LDO6 ON Control | ||
| 885 | */ | ||
| 886 | #define WM831X_LDO6_ON_SLOT_MASK 0xE000 /* LDO6_ON_SLOT - [15:13] */ | ||
| 887 | #define WM831X_LDO6_ON_SLOT_SHIFT 13 /* LDO6_ON_SLOT - [15:13] */ | ||
| 888 | #define WM831X_LDO6_ON_SLOT_WIDTH 3 /* LDO6_ON_SLOT - [15:13] */ | ||
| 889 | #define WM831X_LDO6_ON_MODE 0x0100 /* LDO6_ON_MODE */ | ||
| 890 | #define WM831X_LDO6_ON_MODE_MASK 0x0100 /* LDO6_ON_MODE */ | ||
| 891 | #define WM831X_LDO6_ON_MODE_SHIFT 8 /* LDO6_ON_MODE */ | ||
| 892 | #define WM831X_LDO6_ON_MODE_WIDTH 1 /* LDO6_ON_MODE */ | ||
| 893 | #define WM831X_LDO6_ON_VSEL_MASK 0x001F /* LDO6_ON_VSEL - [4:0] */ | ||
| 894 | #define WM831X_LDO6_ON_VSEL_SHIFT 0 /* LDO6_ON_VSEL - [4:0] */ | ||
| 895 | #define WM831X_LDO6_ON_VSEL_WIDTH 5 /* LDO6_ON_VSEL - [4:0] */ | ||
| 896 | |||
| 897 | /* | ||
| 898 | * R16505 (0x4079) - LDO6 SLEEP Control | ||
| 899 | */ | ||
| 900 | #define WM831X_LDO6_SLP_SLOT_MASK 0xE000 /* LDO6_SLP_SLOT - [15:13] */ | ||
| 901 | #define WM831X_LDO6_SLP_SLOT_SHIFT 13 /* LDO6_SLP_SLOT - [15:13] */ | ||
| 902 | #define WM831X_LDO6_SLP_SLOT_WIDTH 3 /* LDO6_SLP_SLOT - [15:13] */ | ||
| 903 | #define WM831X_LDO6_SLP_MODE 0x0100 /* LDO6_SLP_MODE */ | ||
| 904 | #define WM831X_LDO6_SLP_MODE_MASK 0x0100 /* LDO6_SLP_MODE */ | ||
| 905 | #define WM831X_LDO6_SLP_MODE_SHIFT 8 /* LDO6_SLP_MODE */ | ||
| 906 | #define WM831X_LDO6_SLP_MODE_WIDTH 1 /* LDO6_SLP_MODE */ | ||
| 907 | #define WM831X_LDO6_SLP_VSEL_MASK 0x001F /* LDO6_SLP_VSEL - [4:0] */ | ||
| 908 | #define WM831X_LDO6_SLP_VSEL_SHIFT 0 /* LDO6_SLP_VSEL - [4:0] */ | ||
| 909 | #define WM831X_LDO6_SLP_VSEL_WIDTH 5 /* LDO6_SLP_VSEL - [4:0] */ | ||
| 910 | |||
| 911 | /* | ||
| 912 | * R16506 (0x407A) - LDO7 Control | ||
| 913 | */ | ||
| 914 | #define WM831X_LDO7_ERR_ACT_MASK 0xC000 /* LDO7_ERR_ACT - [15:14] */ | ||
| 915 | #define WM831X_LDO7_ERR_ACT_SHIFT 14 /* LDO7_ERR_ACT - [15:14] */ | ||
| 916 | #define WM831X_LDO7_ERR_ACT_WIDTH 2 /* LDO7_ERR_ACT - [15:14] */ | ||
| 917 | #define WM831X_LDO7_HWC_SRC_MASK 0x1800 /* LDO7_HWC_SRC - [12:11] */ | ||
| 918 | #define WM831X_LDO7_HWC_SRC_SHIFT 11 /* LDO7_HWC_SRC - [12:11] */ | ||
| 919 | #define WM831X_LDO7_HWC_SRC_WIDTH 2 /* LDO7_HWC_SRC - [12:11] */ | ||
| 920 | #define WM831X_LDO7_HWC_VSEL 0x0400 /* LDO7_HWC_VSEL */ | ||
| 921 | #define WM831X_LDO7_HWC_VSEL_MASK 0x0400 /* LDO7_HWC_VSEL */ | ||
| 922 | #define WM831X_LDO7_HWC_VSEL_SHIFT 10 /* LDO7_HWC_VSEL */ | ||
| 923 | #define WM831X_LDO7_HWC_VSEL_WIDTH 1 /* LDO7_HWC_VSEL */ | ||
| 924 | #define WM831X_LDO7_HWC_MODE_MASK 0x0300 /* LDO7_HWC_MODE - [9:8] */ | ||
| 925 | #define WM831X_LDO7_HWC_MODE_SHIFT 8 /* LDO7_HWC_MODE - [9:8] */ | ||
| 926 | #define WM831X_LDO7_HWC_MODE_WIDTH 2 /* LDO7_HWC_MODE - [9:8] */ | ||
| 927 | #define WM831X_LDO7_FLT 0x0080 /* LDO7_FLT */ | ||
| 928 | #define WM831X_LDO7_FLT_MASK 0x0080 /* LDO7_FLT */ | ||
| 929 | #define WM831X_LDO7_FLT_SHIFT 7 /* LDO7_FLT */ | ||
| 930 | #define WM831X_LDO7_FLT_WIDTH 1 /* LDO7_FLT */ | ||
| 931 | #define WM831X_LDO7_SWI 0x0040 /* LDO7_SWI */ | ||
| 932 | #define WM831X_LDO7_SWI_MASK 0x0040 /* LDO7_SWI */ | ||
| 933 | #define WM831X_LDO7_SWI_SHIFT 6 /* LDO7_SWI */ | ||
| 934 | #define WM831X_LDO7_SWI_WIDTH 1 /* LDO7_SWI */ | ||
| 935 | |||
| 936 | /* | ||
| 937 | * R16507 (0x407B) - LDO7 ON Control | ||
| 938 | */ | ||
| 939 | #define WM831X_LDO7_ON_SLOT_MASK 0xE000 /* LDO7_ON_SLOT - [15:13] */ | ||
| 940 | #define WM831X_LDO7_ON_SLOT_SHIFT 13 /* LDO7_ON_SLOT - [15:13] */ | ||
| 941 | #define WM831X_LDO7_ON_SLOT_WIDTH 3 /* LDO7_ON_SLOT - [15:13] */ | ||
| 942 | #define WM831X_LDO7_ON_MODE 0x0100 /* LDO7_ON_MODE */ | ||
| 943 | #define WM831X_LDO7_ON_MODE_MASK 0x0100 /* LDO7_ON_MODE */ | ||
| 944 | #define WM831X_LDO7_ON_MODE_SHIFT 8 /* LDO7_ON_MODE */ | ||
| 945 | #define WM831X_LDO7_ON_MODE_WIDTH 1 /* LDO7_ON_MODE */ | ||
| 946 | #define WM831X_LDO7_ON_VSEL_MASK 0x001F /* LDO7_ON_VSEL - [4:0] */ | ||
| 947 | #define WM831X_LDO7_ON_VSEL_SHIFT 0 /* LDO7_ON_VSEL - [4:0] */ | ||
| 948 | #define WM831X_LDO7_ON_VSEL_WIDTH 5 /* LDO7_ON_VSEL - [4:0] */ | ||
| 949 | |||
| 950 | /* | ||
| 951 | * R16508 (0x407C) - LDO7 SLEEP Control | ||
| 952 | */ | ||
| 953 | #define WM831X_LDO7_SLP_SLOT_MASK 0xE000 /* LDO7_SLP_SLOT - [15:13] */ | ||
| 954 | #define WM831X_LDO7_SLP_SLOT_SHIFT 13 /* LDO7_SLP_SLOT - [15:13] */ | ||
| 955 | #define WM831X_LDO7_SLP_SLOT_WIDTH 3 /* LDO7_SLP_SLOT - [15:13] */ | ||
| 956 | #define WM831X_LDO7_SLP_MODE 0x0100 /* LDO7_SLP_MODE */ | ||
| 957 | #define WM831X_LDO7_SLP_MODE_MASK 0x0100 /* LDO7_SLP_MODE */ | ||
| 958 | #define WM831X_LDO7_SLP_MODE_SHIFT 8 /* LDO7_SLP_MODE */ | ||
| 959 | #define WM831X_LDO7_SLP_MODE_WIDTH 1 /* LDO7_SLP_MODE */ | ||
| 960 | #define WM831X_LDO7_SLP_VSEL_MASK 0x001F /* LDO7_SLP_VSEL - [4:0] */ | ||
| 961 | #define WM831X_LDO7_SLP_VSEL_SHIFT 0 /* LDO7_SLP_VSEL - [4:0] */ | ||
| 962 | #define WM831X_LDO7_SLP_VSEL_WIDTH 5 /* LDO7_SLP_VSEL - [4:0] */ | ||
| 963 | |||
| 964 | /* | ||
| 965 | * R16509 (0x407D) - LDO8 Control | ||
| 966 | */ | ||
| 967 | #define WM831X_LDO8_ERR_ACT_MASK 0xC000 /* LDO8_ERR_ACT - [15:14] */ | ||
| 968 | #define WM831X_LDO8_ERR_ACT_SHIFT 14 /* LDO8_ERR_ACT - [15:14] */ | ||
| 969 | #define WM831X_LDO8_ERR_ACT_WIDTH 2 /* LDO8_ERR_ACT - [15:14] */ | ||
| 970 | #define WM831X_LDO8_HWC_SRC_MASK 0x1800 /* LDO8_HWC_SRC - [12:11] */ | ||
| 971 | #define WM831X_LDO8_HWC_SRC_SHIFT 11 /* LDO8_HWC_SRC - [12:11] */ | ||
| 972 | #define WM831X_LDO8_HWC_SRC_WIDTH 2 /* LDO8_HWC_SRC - [12:11] */ | ||
| 973 | #define WM831X_LDO8_HWC_VSEL 0x0400 /* LDO8_HWC_VSEL */ | ||
| 974 | #define WM831X_LDO8_HWC_VSEL_MASK 0x0400 /* LDO8_HWC_VSEL */ | ||
| 975 | #define WM831X_LDO8_HWC_VSEL_SHIFT 10 /* LDO8_HWC_VSEL */ | ||
| 976 | #define WM831X_LDO8_HWC_VSEL_WIDTH 1 /* LDO8_HWC_VSEL */ | ||
| 977 | #define WM831X_LDO8_HWC_MODE_MASK 0x0300 /* LDO8_HWC_MODE - [9:8] */ | ||
| 978 | #define WM831X_LDO8_HWC_MODE_SHIFT 8 /* LDO8_HWC_MODE - [9:8] */ | ||
| 979 | #define WM831X_LDO8_HWC_MODE_WIDTH 2 /* LDO8_HWC_MODE - [9:8] */ | ||
| 980 | #define WM831X_LDO8_FLT 0x0080 /* LDO8_FLT */ | ||
| 981 | #define WM831X_LDO8_FLT_MASK 0x0080 /* LDO8_FLT */ | ||
| 982 | #define WM831X_LDO8_FLT_SHIFT 7 /* LDO8_FLT */ | ||
| 983 | #define WM831X_LDO8_FLT_WIDTH 1 /* LDO8_FLT */ | ||
| 984 | #define WM831X_LDO8_SWI 0x0040 /* LDO8_SWI */ | ||
| 985 | #define WM831X_LDO8_SWI_MASK 0x0040 /* LDO8_SWI */ | ||
| 986 | #define WM831X_LDO8_SWI_SHIFT 6 /* LDO8_SWI */ | ||
| 987 | #define WM831X_LDO8_SWI_WIDTH 1 /* LDO8_SWI */ | ||
| 988 | |||
| 989 | /* | ||
| 990 | * R16510 (0x407E) - LDO8 ON Control | ||
| 991 | */ | ||
| 992 | #define WM831X_LDO8_ON_SLOT_MASK 0xE000 /* LDO8_ON_SLOT - [15:13] */ | ||
| 993 | #define WM831X_LDO8_ON_SLOT_SHIFT 13 /* LDO8_ON_SLOT - [15:13] */ | ||
| 994 | #define WM831X_LDO8_ON_SLOT_WIDTH 3 /* LDO8_ON_SLOT - [15:13] */ | ||
| 995 | #define WM831X_LDO8_ON_MODE 0x0100 /* LDO8_ON_MODE */ | ||
| 996 | #define WM831X_LDO8_ON_MODE_MASK 0x0100 /* LDO8_ON_MODE */ | ||
| 997 | #define WM831X_LDO8_ON_MODE_SHIFT 8 /* LDO8_ON_MODE */ | ||
| 998 | #define WM831X_LDO8_ON_MODE_WIDTH 1 /* LDO8_ON_MODE */ | ||
| 999 | #define WM831X_LDO8_ON_VSEL_MASK 0x001F /* LDO8_ON_VSEL - [4:0] */ | ||
| 1000 | #define WM831X_LDO8_ON_VSEL_SHIFT 0 /* LDO8_ON_VSEL - [4:0] */ | ||
| 1001 | #define WM831X_LDO8_ON_VSEL_WIDTH 5 /* LDO8_ON_VSEL - [4:0] */ | ||
| 1002 | |||
| 1003 | /* | ||
| 1004 | * R16511 (0x407F) - LDO8 SLEEP Control | ||
| 1005 | */ | ||
| 1006 | #define WM831X_LDO8_SLP_SLOT_MASK 0xE000 /* LDO8_SLP_SLOT - [15:13] */ | ||
| 1007 | #define WM831X_LDO8_SLP_SLOT_SHIFT 13 /* LDO8_SLP_SLOT - [15:13] */ | ||
| 1008 | #define WM831X_LDO8_SLP_SLOT_WIDTH 3 /* LDO8_SLP_SLOT - [15:13] */ | ||
| 1009 | #define WM831X_LDO8_SLP_MODE 0x0100 /* LDO8_SLP_MODE */ | ||
| 1010 | #define WM831X_LDO8_SLP_MODE_MASK 0x0100 /* LDO8_SLP_MODE */ | ||
| 1011 | #define WM831X_LDO8_SLP_MODE_SHIFT 8 /* LDO8_SLP_MODE */ | ||
| 1012 | #define WM831X_LDO8_SLP_MODE_WIDTH 1 /* LDO8_SLP_MODE */ | ||
| 1013 | #define WM831X_LDO8_SLP_VSEL_MASK 0x001F /* LDO8_SLP_VSEL - [4:0] */ | ||
| 1014 | #define WM831X_LDO8_SLP_VSEL_SHIFT 0 /* LDO8_SLP_VSEL - [4:0] */ | ||
| 1015 | #define WM831X_LDO8_SLP_VSEL_WIDTH 5 /* LDO8_SLP_VSEL - [4:0] */ | ||
| 1016 | |||
| 1017 | /* | ||
| 1018 | * R16512 (0x4080) - LDO9 Control | ||
| 1019 | */ | ||
| 1020 | #define WM831X_LDO9_ERR_ACT_MASK 0xC000 /* LDO9_ERR_ACT - [15:14] */ | ||
| 1021 | #define WM831X_LDO9_ERR_ACT_SHIFT 14 /* LDO9_ERR_ACT - [15:14] */ | ||
| 1022 | #define WM831X_LDO9_ERR_ACT_WIDTH 2 /* LDO9_ERR_ACT - [15:14] */ | ||
| 1023 | #define WM831X_LDO9_HWC_SRC_MASK 0x1800 /* LDO9_HWC_SRC - [12:11] */ | ||
| 1024 | #define WM831X_LDO9_HWC_SRC_SHIFT 11 /* LDO9_HWC_SRC - [12:11] */ | ||
| 1025 | #define WM831X_LDO9_HWC_SRC_WIDTH 2 /* LDO9_HWC_SRC - [12:11] */ | ||
| 1026 | #define WM831X_LDO9_HWC_VSEL 0x0400 /* LDO9_HWC_VSEL */ | ||
| 1027 | #define WM831X_LDO9_HWC_VSEL_MASK 0x0400 /* LDO9_HWC_VSEL */ | ||
| 1028 | #define WM831X_LDO9_HWC_VSEL_SHIFT 10 /* LDO9_HWC_VSEL */ | ||
| 1029 | #define WM831X_LDO9_HWC_VSEL_WIDTH 1 /* LDO9_HWC_VSEL */ | ||
| 1030 | #define WM831X_LDO9_HWC_MODE_MASK 0x0300 /* LDO9_HWC_MODE - [9:8] */ | ||
| 1031 | #define WM831X_LDO9_HWC_MODE_SHIFT 8 /* LDO9_HWC_MODE - [9:8] */ | ||
| 1032 | #define WM831X_LDO9_HWC_MODE_WIDTH 2 /* LDO9_HWC_MODE - [9:8] */ | ||
| 1033 | #define WM831X_LDO9_FLT 0x0080 /* LDO9_FLT */ | ||
| 1034 | #define WM831X_LDO9_FLT_MASK 0x0080 /* LDO9_FLT */ | ||
| 1035 | #define WM831X_LDO9_FLT_SHIFT 7 /* LDO9_FLT */ | ||
| 1036 | #define WM831X_LDO9_FLT_WIDTH 1 /* LDO9_FLT */ | ||
| 1037 | #define WM831X_LDO9_SWI 0x0040 /* LDO9_SWI */ | ||
| 1038 | #define WM831X_LDO9_SWI_MASK 0x0040 /* LDO9_SWI */ | ||
| 1039 | #define WM831X_LDO9_SWI_SHIFT 6 /* LDO9_SWI */ | ||
| 1040 | #define WM831X_LDO9_SWI_WIDTH 1 /* LDO9_SWI */ | ||
| 1041 | |||
| 1042 | /* | ||
| 1043 | * R16513 (0x4081) - LDO9 ON Control | ||
| 1044 | */ | ||
| 1045 | #define WM831X_LDO9_ON_SLOT_MASK 0xE000 /* LDO9_ON_SLOT - [15:13] */ | ||
| 1046 | #define WM831X_LDO9_ON_SLOT_SHIFT 13 /* LDO9_ON_SLOT - [15:13] */ | ||
| 1047 | #define WM831X_LDO9_ON_SLOT_WIDTH 3 /* LDO9_ON_SLOT - [15:13] */ | ||
| 1048 | #define WM831X_LDO9_ON_MODE 0x0100 /* LDO9_ON_MODE */ | ||
| 1049 | #define WM831X_LDO9_ON_MODE_MASK 0x0100 /* LDO9_ON_MODE */ | ||
| 1050 | #define WM831X_LDO9_ON_MODE_SHIFT 8 /* LDO9_ON_MODE */ | ||
| 1051 | #define WM831X_LDO9_ON_MODE_WIDTH 1 /* LDO9_ON_MODE */ | ||
| 1052 | #define WM831X_LDO9_ON_VSEL_MASK 0x001F /* LDO9_ON_VSEL - [4:0] */ | ||
| 1053 | #define WM831X_LDO9_ON_VSEL_SHIFT 0 /* LDO9_ON_VSEL - [4:0] */ | ||
| 1054 | #define WM831X_LDO9_ON_VSEL_WIDTH 5 /* LDO9_ON_VSEL - [4:0] */ | ||
| 1055 | |||
| 1056 | /* | ||
| 1057 | * R16514 (0x4082) - LDO9 SLEEP Control | ||
| 1058 | */ | ||
| 1059 | #define WM831X_LDO9_SLP_SLOT_MASK 0xE000 /* LDO9_SLP_SLOT - [15:13] */ | ||
| 1060 | #define WM831X_LDO9_SLP_SLOT_SHIFT 13 /* LDO9_SLP_SLOT - [15:13] */ | ||
| 1061 | #define WM831X_LDO9_SLP_SLOT_WIDTH 3 /* LDO9_SLP_SLOT - [15:13] */ | ||
| 1062 | #define WM831X_LDO9_SLP_MODE 0x0100 /* LDO9_SLP_MODE */ | ||
| 1063 | #define WM831X_LDO9_SLP_MODE_MASK 0x0100 /* LDO9_SLP_MODE */ | ||
| 1064 | #define WM831X_LDO9_SLP_MODE_SHIFT 8 /* LDO9_SLP_MODE */ | ||
| 1065 | #define WM831X_LDO9_SLP_MODE_WIDTH 1 /* LDO9_SLP_MODE */ | ||
| 1066 | #define WM831X_LDO9_SLP_VSEL_MASK 0x001F /* LDO9_SLP_VSEL - [4:0] */ | ||
| 1067 | #define WM831X_LDO9_SLP_VSEL_SHIFT 0 /* LDO9_SLP_VSEL - [4:0] */ | ||
| 1068 | #define WM831X_LDO9_SLP_VSEL_WIDTH 5 /* LDO9_SLP_VSEL - [4:0] */ | ||
| 1069 | |||
| 1070 | /* | ||
| 1071 | * R16515 (0x4083) - LDO10 Control | ||
| 1072 | */ | ||
| 1073 | #define WM831X_LDO10_ERR_ACT_MASK 0xC000 /* LDO10_ERR_ACT - [15:14] */ | ||
| 1074 | #define WM831X_LDO10_ERR_ACT_SHIFT 14 /* LDO10_ERR_ACT - [15:14] */ | ||
| 1075 | #define WM831X_LDO10_ERR_ACT_WIDTH 2 /* LDO10_ERR_ACT - [15:14] */ | ||
| 1076 | #define WM831X_LDO10_HWC_SRC_MASK 0x1800 /* LDO10_HWC_SRC - [12:11] */ | ||
| 1077 | #define WM831X_LDO10_HWC_SRC_SHIFT 11 /* LDO10_HWC_SRC - [12:11] */ | ||
| 1078 | #define WM831X_LDO10_HWC_SRC_WIDTH 2 /* LDO10_HWC_SRC - [12:11] */ | ||
| 1079 | #define WM831X_LDO10_HWC_VSEL 0x0400 /* LDO10_HWC_VSEL */ | ||
| 1080 | #define WM831X_LDO10_HWC_VSEL_MASK 0x0400 /* LDO10_HWC_VSEL */ | ||
| 1081 | #define WM831X_LDO10_HWC_VSEL_SHIFT 10 /* LDO10_HWC_VSEL */ | ||
| 1082 | #define WM831X_LDO10_HWC_VSEL_WIDTH 1 /* LDO10_HWC_VSEL */ | ||
| 1083 | #define WM831X_LDO10_HWC_MODE_MASK 0x0300 /* LDO10_HWC_MODE - [9:8] */ | ||
| 1084 | #define WM831X_LDO10_HWC_MODE_SHIFT 8 /* LDO10_HWC_MODE - [9:8] */ | ||
| 1085 | #define WM831X_LDO10_HWC_MODE_WIDTH 2 /* LDO10_HWC_MODE - [9:8] */ | ||
| 1086 | #define WM831X_LDO10_FLT 0x0080 /* LDO10_FLT */ | ||
| 1087 | #define WM831X_LDO10_FLT_MASK 0x0080 /* LDO10_FLT */ | ||
| 1088 | #define WM831X_LDO10_FLT_SHIFT 7 /* LDO10_FLT */ | ||
| 1089 | #define WM831X_LDO10_FLT_WIDTH 1 /* LDO10_FLT */ | ||
| 1090 | #define WM831X_LDO10_SWI 0x0040 /* LDO10_SWI */ | ||
| 1091 | #define WM831X_LDO10_SWI_MASK 0x0040 /* LDO10_SWI */ | ||
| 1092 | #define WM831X_LDO10_SWI_SHIFT 6 /* LDO10_SWI */ | ||
| 1093 | #define WM831X_LDO10_SWI_WIDTH 1 /* LDO10_SWI */ | ||
| 1094 | |||
| 1095 | /* | ||
| 1096 | * R16516 (0x4084) - LDO10 ON Control | ||
| 1097 | */ | ||
| 1098 | #define WM831X_LDO10_ON_SLOT_MASK 0xE000 /* LDO10_ON_SLOT - [15:13] */ | ||
| 1099 | #define WM831X_LDO10_ON_SLOT_SHIFT 13 /* LDO10_ON_SLOT - [15:13] */ | ||
| 1100 | #define WM831X_LDO10_ON_SLOT_WIDTH 3 /* LDO10_ON_SLOT - [15:13] */ | ||
| 1101 | #define WM831X_LDO10_ON_MODE 0x0100 /* LDO10_ON_MODE */ | ||
| 1102 | #define WM831X_LDO10_ON_MODE_MASK 0x0100 /* LDO10_ON_MODE */ | ||
| 1103 | #define WM831X_LDO10_ON_MODE_SHIFT 8 /* LDO10_ON_MODE */ | ||
| 1104 | #define WM831X_LDO10_ON_MODE_WIDTH 1 /* LDO10_ON_MODE */ | ||
| 1105 | #define WM831X_LDO10_ON_VSEL_MASK 0x001F /* LDO10_ON_VSEL - [4:0] */ | ||
| 1106 | #define WM831X_LDO10_ON_VSEL_SHIFT 0 /* LDO10_ON_VSEL - [4:0] */ | ||
| 1107 | #define WM831X_LDO10_ON_VSEL_WIDTH 5 /* LDO10_ON_VSEL - [4:0] */ | ||
| 1108 | |||
| 1109 | /* | ||
| 1110 | * R16517 (0x4085) - LDO10 SLEEP Control | ||
| 1111 | */ | ||
| 1112 | #define WM831X_LDO10_SLP_SLOT_MASK 0xE000 /* LDO10_SLP_SLOT - [15:13] */ | ||
| 1113 | #define WM831X_LDO10_SLP_SLOT_SHIFT 13 /* LDO10_SLP_SLOT - [15:13] */ | ||
| 1114 | #define WM831X_LDO10_SLP_SLOT_WIDTH 3 /* LDO10_SLP_SLOT - [15:13] */ | ||
| 1115 | #define WM831X_LDO10_SLP_MODE 0x0100 /* LDO10_SLP_MODE */ | ||
| 1116 | #define WM831X_LDO10_SLP_MODE_MASK 0x0100 /* LDO10_SLP_MODE */ | ||
| 1117 | #define WM831X_LDO10_SLP_MODE_SHIFT 8 /* LDO10_SLP_MODE */ | ||
| 1118 | #define WM831X_LDO10_SLP_MODE_WIDTH 1 /* LDO10_SLP_MODE */ | ||
| 1119 | #define WM831X_LDO10_SLP_VSEL_MASK 0x001F /* LDO10_SLP_VSEL - [4:0] */ | ||
| 1120 | #define WM831X_LDO10_SLP_VSEL_SHIFT 0 /* LDO10_SLP_VSEL - [4:0] */ | ||
| 1121 | #define WM831X_LDO10_SLP_VSEL_WIDTH 5 /* LDO10_SLP_VSEL - [4:0] */ | ||
| 1122 | |||
| 1123 | /* | ||
| 1124 | * R16519 (0x4087) - LDO11 ON Control | ||
| 1125 | */ | ||
| 1126 | #define WM831X_LDO11_ON_SLOT_MASK 0xE000 /* LDO11_ON_SLOT - [15:13] */ | ||
| 1127 | #define WM831X_LDO11_ON_SLOT_SHIFT 13 /* LDO11_ON_SLOT - [15:13] */ | ||
| 1128 | #define WM831X_LDO11_ON_SLOT_WIDTH 3 /* LDO11_ON_SLOT - [15:13] */ | ||
| 1129 | #define WM831X_LDO11_OFFENA 0x1000 /* LDO11_OFFENA */ | ||
| 1130 | #define WM831X_LDO11_OFFENA_MASK 0x1000 /* LDO11_OFFENA */ | ||
| 1131 | #define WM831X_LDO11_OFFENA_SHIFT 12 /* LDO11_OFFENA */ | ||
| 1132 | #define WM831X_LDO11_OFFENA_WIDTH 1 /* LDO11_OFFENA */ | ||
| 1133 | #define WM831X_LDO11_VSEL_SRC 0x0080 /* LDO11_VSEL_SRC */ | ||
| 1134 | #define WM831X_LDO11_VSEL_SRC_MASK 0x0080 /* LDO11_VSEL_SRC */ | ||
| 1135 | #define WM831X_LDO11_VSEL_SRC_SHIFT 7 /* LDO11_VSEL_SRC */ | ||
| 1136 | #define WM831X_LDO11_VSEL_SRC_WIDTH 1 /* LDO11_VSEL_SRC */ | ||
| 1137 | #define WM831X_LDO11_ON_VSEL_MASK 0x000F /* LDO11_ON_VSEL - [3:0] */ | ||
| 1138 | #define WM831X_LDO11_ON_VSEL_SHIFT 0 /* LDO11_ON_VSEL - [3:0] */ | ||
| 1139 | #define WM831X_LDO11_ON_VSEL_WIDTH 4 /* LDO11_ON_VSEL - [3:0] */ | ||
| 1140 | |||
| 1141 | /* | ||
| 1142 | * R16520 (0x4088) - LDO11 SLEEP Control | ||
| 1143 | */ | ||
| 1144 | #define WM831X_LDO11_SLP_SLOT_MASK 0xE000 /* LDO11_SLP_SLOT - [15:13] */ | ||
| 1145 | #define WM831X_LDO11_SLP_SLOT_SHIFT 13 /* LDO11_SLP_SLOT - [15:13] */ | ||
| 1146 | #define WM831X_LDO11_SLP_SLOT_WIDTH 3 /* LDO11_SLP_SLOT - [15:13] */ | ||
| 1147 | #define WM831X_LDO11_SLP_VSEL_MASK 0x000F /* LDO11_SLP_VSEL - [3:0] */ | ||
| 1148 | #define WM831X_LDO11_SLP_VSEL_SHIFT 0 /* LDO11_SLP_VSEL - [3:0] */ | ||
| 1149 | #define WM831X_LDO11_SLP_VSEL_WIDTH 4 /* LDO11_SLP_VSEL - [3:0] */ | ||
| 1150 | |||
| 1151 | /* | ||
| 1152 | * R16526 (0x408E) - Power Good Source 1 | ||
| 1153 | */ | ||
| 1154 | #define WM831X_DC4_OK 0x0008 /* DC4_OK */ | ||
| 1155 | #define WM831X_DC4_OK_MASK 0x0008 /* DC4_OK */ | ||
| 1156 | #define WM831X_DC4_OK_SHIFT 3 /* DC4_OK */ | ||
| 1157 | #define WM831X_DC4_OK_WIDTH 1 /* DC4_OK */ | ||
| 1158 | #define WM831X_DC3_OK 0x0004 /* DC3_OK */ | ||
| 1159 | #define WM831X_DC3_OK_MASK 0x0004 /* DC3_OK */ | ||
| 1160 | #define WM831X_DC3_OK_SHIFT 2 /* DC3_OK */ | ||
| 1161 | #define WM831X_DC3_OK_WIDTH 1 /* DC3_OK */ | ||
| 1162 | #define WM831X_DC2_OK 0x0002 /* DC2_OK */ | ||
| 1163 | #define WM831X_DC2_OK_MASK 0x0002 /* DC2_OK */ | ||
| 1164 | #define WM831X_DC2_OK_SHIFT 1 /* DC2_OK */ | ||
| 1165 | #define WM831X_DC2_OK_WIDTH 1 /* DC2_OK */ | ||
| 1166 | #define WM831X_DC1_OK 0x0001 /* DC1_OK */ | ||
| 1167 | #define WM831X_DC1_OK_MASK 0x0001 /* DC1_OK */ | ||
| 1168 | #define WM831X_DC1_OK_SHIFT 0 /* DC1_OK */ | ||
| 1169 | #define WM831X_DC1_OK_WIDTH 1 /* DC1_OK */ | ||
| 1170 | |||
| 1171 | /* | ||
| 1172 | * R16527 (0x408F) - Power Good Source 2 | ||
| 1173 | */ | ||
| 1174 | #define WM831X_LDO10_OK 0x0200 /* LDO10_OK */ | ||
| 1175 | #define WM831X_LDO10_OK_MASK 0x0200 /* LDO10_OK */ | ||
| 1176 | #define WM831X_LDO10_OK_SHIFT 9 /* LDO10_OK */ | ||
| 1177 | #define WM831X_LDO10_OK_WIDTH 1 /* LDO10_OK */ | ||
| 1178 | #define WM831X_LDO9_OK 0x0100 /* LDO9_OK */ | ||
| 1179 | #define WM831X_LDO9_OK_MASK 0x0100 /* LDO9_OK */ | ||
| 1180 | #define WM831X_LDO9_OK_SHIFT 8 /* LDO9_OK */ | ||
| 1181 | #define WM831X_LDO9_OK_WIDTH 1 /* LDO9_OK */ | ||
| 1182 | #define WM831X_LDO8_OK 0x0080 /* LDO8_OK */ | ||
| 1183 | #define WM831X_LDO8_OK_MASK 0x0080 /* LDO8_OK */ | ||
| 1184 | #define WM831X_LDO8_OK_SHIFT 7 /* LDO8_OK */ | ||
| 1185 | #define WM831X_LDO8_OK_WIDTH 1 /* LDO8_OK */ | ||
| 1186 | #define WM831X_LDO7_OK 0x0040 /* LDO7_OK */ | ||
| 1187 | #define WM831X_LDO7_OK_MASK 0x0040 /* LDO7_OK */ | ||
| 1188 | #define WM831X_LDO7_OK_SHIFT 6 /* LDO7_OK */ | ||
| 1189 | #define WM831X_LDO7_OK_WIDTH 1 /* LDO7_OK */ | ||
| 1190 | #define WM831X_LDO6_OK 0x0020 /* LDO6_OK */ | ||
| 1191 | #define WM831X_LDO6_OK_MASK 0x0020 /* LDO6_OK */ | ||
| 1192 | #define WM831X_LDO6_OK_SHIFT 5 /* LDO6_OK */ | ||
| 1193 | #define WM831X_LDO6_OK_WIDTH 1 /* LDO6_OK */ | ||
| 1194 | #define WM831X_LDO5_OK 0x0010 /* LDO5_OK */ | ||
| 1195 | #define WM831X_LDO5_OK_MASK 0x0010 /* LDO5_OK */ | ||
| 1196 | #define WM831X_LDO5_OK_SHIFT 4 /* LDO5_OK */ | ||
| 1197 | #define WM831X_LDO5_OK_WIDTH 1 /* LDO5_OK */ | ||
| 1198 | #define WM831X_LDO4_OK 0x0008 /* LDO4_OK */ | ||
| 1199 | #define WM831X_LDO4_OK_MASK 0x0008 /* LDO4_OK */ | ||
| 1200 | #define WM831X_LDO4_OK_SHIFT 3 /* LDO4_OK */ | ||
| 1201 | #define WM831X_LDO4_OK_WIDTH 1 /* LDO4_OK */ | ||
| 1202 | #define WM831X_LDO3_OK 0x0004 /* LDO3_OK */ | ||
| 1203 | #define WM831X_LDO3_OK_MASK 0x0004 /* LDO3_OK */ | ||
| 1204 | #define WM831X_LDO3_OK_SHIFT 2 /* LDO3_OK */ | ||
| 1205 | #define WM831X_LDO3_OK_WIDTH 1 /* LDO3_OK */ | ||
| 1206 | #define WM831X_LDO2_OK 0x0002 /* LDO2_OK */ | ||
| 1207 | #define WM831X_LDO2_OK_MASK 0x0002 /* LDO2_OK */ | ||
| 1208 | #define WM831X_LDO2_OK_SHIFT 1 /* LDO2_OK */ | ||
| 1209 | #define WM831X_LDO2_OK_WIDTH 1 /* LDO2_OK */ | ||
| 1210 | #define WM831X_LDO1_OK 0x0001 /* LDO1_OK */ | ||
| 1211 | #define WM831X_LDO1_OK_MASK 0x0001 /* LDO1_OK */ | ||
| 1212 | #define WM831X_LDO1_OK_SHIFT 0 /* LDO1_OK */ | ||
| 1213 | #define WM831X_LDO1_OK_WIDTH 1 /* LDO1_OK */ | ||
| 1214 | |||
| 1215 | #define WM831X_ISINK_MAX_ISEL 55 | ||
| 1216 | extern int wm831x_isinkv_values[WM831X_ISINK_MAX_ISEL + 1]; | ||
| 1217 | |||
| 1218 | #endif | ||
diff --git a/include/linux/mfd/wm831x/status.h b/include/linux/mfd/wm831x/status.h new file mode 100644 index 000000000000..6bc090d0e3ac --- /dev/null +++ b/include/linux/mfd/wm831x/status.h | |||
| @@ -0,0 +1,34 @@ | |||
| 1 | /* | ||
| 2 | * include/linux/mfd/wm831x/status.h -- Status LEDs for WM831x | ||
| 3 | * | ||
| 4 | * Copyright 2009 Wolfson Microelectronics PLC. | ||
| 5 | * | ||
| 6 | * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify it | ||
| 9 | * under the terms of the GNU General Public License as published by the | ||
| 10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 11 | * option) any later version. | ||
| 12 | * | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __MFD_WM831X_STATUS_H__ | ||
| 16 | #define __MFD_WM831X_STATUS_H__ | ||
| 17 | |||
| 18 | #define WM831X_LED_SRC_MASK 0xC000 /* LED_SRC - [15:14] */ | ||
| 19 | #define WM831X_LED_SRC_SHIFT 14 /* LED_SRC - [15:14] */ | ||
| 20 | #define WM831X_LED_SRC_WIDTH 2 /* LED_SRC - [15:14] */ | ||
| 21 | #define WM831X_LED_MODE_MASK 0x0300 /* LED_MODE - [9:8] */ | ||
| 22 | #define WM831X_LED_MODE_SHIFT 8 /* LED_MODE - [9:8] */ | ||
| 23 | #define WM831X_LED_MODE_WIDTH 2 /* LED_MODE - [9:8] */ | ||
| 24 | #define WM831X_LED_SEQ_LEN_MASK 0x0030 /* LED_SEQ_LEN - [5:4] */ | ||
| 25 | #define WM831X_LED_SEQ_LEN_SHIFT 4 /* LED_SEQ_LEN - [5:4] */ | ||
| 26 | #define WM831X_LED_SEQ_LEN_WIDTH 2 /* LED_SEQ_LEN - [5:4] */ | ||
| 27 | #define WM831X_LED_DUR_MASK 0x000C /* LED_DUR - [3:2] */ | ||
| 28 | #define WM831X_LED_DUR_SHIFT 2 /* LED_DUR - [3:2] */ | ||
| 29 | #define WM831X_LED_DUR_WIDTH 2 /* LED_DUR - [3:2] */ | ||
| 30 | #define WM831X_LED_DUTY_CYC_MASK 0x0003 /* LED_DUTY_CYC - [1:0] */ | ||
| 31 | #define WM831X_LED_DUTY_CYC_SHIFT 0 /* LED_DUTY_CYC - [1:0] */ | ||
| 32 | #define WM831X_LED_DUTY_CYC_WIDTH 2 /* LED_DUTY_CYC - [1:0] */ | ||
| 33 | |||
| 34 | #endif | ||
diff --git a/include/linux/mfd/wm831x/watchdog.h b/include/linux/mfd/wm831x/watchdog.h new file mode 100644 index 000000000000..97a99b52956f --- /dev/null +++ b/include/linux/mfd/wm831x/watchdog.h | |||
| @@ -0,0 +1,52 @@ | |||
| 1 | /* | ||
| 2 | * include/linux/mfd/wm831x/watchdog.h -- Watchdog for WM831x | ||
| 3 | * | ||
| 4 | * Copyright 2009 Wolfson Microelectronics PLC. | ||
| 5 | * | ||
| 6 | * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify it | ||
| 9 | * under the terms of the GNU General Public License as published by the | ||
| 10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
| 11 | * option) any later version. | ||
| 12 | * | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __MFD_WM831X_WATCHDOG_H__ | ||
| 16 | #define __MFD_WM831X_WATCHDOG_H__ | ||
| 17 | |||
| 18 | |||
| 19 | /* | ||
| 20 | * R16388 (0x4004) - Watchdog | ||
| 21 | */ | ||
| 22 | #define WM831X_WDOG_ENA 0x8000 /* WDOG_ENA */ | ||
| 23 | #define WM831X_WDOG_ENA_MASK 0x8000 /* WDOG_ENA */ | ||
| 24 | #define WM831X_WDOG_ENA_SHIFT 15 /* WDOG_ENA */ | ||
| 25 | #define WM831X_WDOG_ENA_WIDTH 1 /* WDOG_ENA */ | ||
| 26 | #define WM831X_WDOG_DEBUG 0x4000 /* WDOG_DEBUG */ | ||
| 27 | #define WM831X_WDOG_DEBUG_MASK 0x4000 /* WDOG_DEBUG */ | ||
| 28 | #define WM831X_WDOG_DEBUG_SHIFT 14 /* WDOG_DEBUG */ | ||
| 29 | #define WM831X_WDOG_DEBUG_WIDTH 1 /* WDOG_DEBUG */ | ||
| 30 | #define WM831X_WDOG_RST_SRC 0x2000 /* WDOG_RST_SRC */ | ||
| 31 | #define WM831X_WDOG_RST_SRC_MASK 0x2000 /* WDOG_RST_SRC */ | ||
| 32 | #define WM831X_WDOG_RST_SRC_SHIFT 13 /* WDOG_RST_SRC */ | ||
| 33 | #define WM831X_WDOG_RST_SRC_WIDTH 1 /* WDOG_RST_SRC */ | ||
| 34 | #define WM831X_WDOG_SLPENA 0x1000 /* WDOG_SLPENA */ | ||
| 35 | #define WM831X_WDOG_SLPENA_MASK 0x1000 /* WDOG_SLPENA */ | ||
| 36 | #define WM831X_WDOG_SLPENA_SHIFT 12 /* WDOG_SLPENA */ | ||
| 37 | #define WM831X_WDOG_SLPENA_WIDTH 1 /* WDOG_SLPENA */ | ||
| 38 | #define WM831X_WDOG_RESET 0x0800 /* WDOG_RESET */ | ||
| 39 | #define WM831X_WDOG_RESET_MASK 0x0800 /* WDOG_RESET */ | ||
| 40 | #define WM831X_WDOG_RESET_SHIFT 11 /* WDOG_RESET */ | ||
| 41 | #define WM831X_WDOG_RESET_WIDTH 1 /* WDOG_RESET */ | ||
| 42 | #define WM831X_WDOG_SECACT_MASK 0x0300 /* WDOG_SECACT - [9:8] */ | ||
| 43 | #define WM831X_WDOG_SECACT_SHIFT 8 /* WDOG_SECACT - [9:8] */ | ||
| 44 | #define WM831X_WDOG_SECACT_WIDTH 2 /* WDOG_SECACT - [9:8] */ | ||
| 45 | #define WM831X_WDOG_PRIMACT_MASK 0x0030 /* WDOG_PRIMACT - [5:4] */ | ||
| 46 | #define WM831X_WDOG_PRIMACT_SHIFT 4 /* WDOG_PRIMACT - [5:4] */ | ||
| 47 | #define WM831X_WDOG_PRIMACT_WIDTH 2 /* WDOG_PRIMACT - [5:4] */ | ||
| 48 | #define WM831X_WDOG_TO_MASK 0x0007 /* WDOG_TO - [2:0] */ | ||
| 49 | #define WM831X_WDOG_TO_SHIFT 0 /* WDOG_TO - [2:0] */ | ||
| 50 | #define WM831X_WDOG_TO_WIDTH 3 /* WDOG_TO - [2:0] */ | ||
| 51 | |||
| 52 | #endif | ||
diff --git a/include/linux/mfd/wm8350/core.h b/include/linux/mfd/wm8350/core.h index 42cca672f340..1d595de6a055 100644 --- a/include/linux/mfd/wm8350/core.h +++ b/include/linux/mfd/wm8350/core.h | |||
| @@ -605,6 +605,11 @@ struct wm8350_irq { | |||
| 605 | void *data; | 605 | void *data; |
| 606 | }; | 606 | }; |
| 607 | 607 | ||
| 608 | struct wm8350_hwmon { | ||
| 609 | struct platform_device *pdev; | ||
| 610 | struct device *classdev; | ||
| 611 | }; | ||
| 612 | |||
| 608 | struct wm8350 { | 613 | struct wm8350 { |
| 609 | struct device *dev; | 614 | struct device *dev; |
| 610 | 615 | ||
| @@ -621,7 +626,6 @@ struct wm8350 { | |||
| 621 | struct mutex auxadc_mutex; | 626 | struct mutex auxadc_mutex; |
| 622 | 627 | ||
| 623 | /* Interrupt handling */ | 628 | /* Interrupt handling */ |
| 624 | struct work_struct irq_work; | ||
| 625 | struct mutex irq_mutex; /* IRQ table mutex */ | 629 | struct mutex irq_mutex; /* IRQ table mutex */ |
| 626 | struct wm8350_irq irq[WM8350_NUM_IRQ]; | 630 | struct wm8350_irq irq[WM8350_NUM_IRQ]; |
| 627 | int chip_irq; | 631 | int chip_irq; |
| @@ -629,6 +633,7 @@ struct wm8350 { | |||
| 629 | /* Client devices */ | 633 | /* Client devices */ |
| 630 | struct wm8350_codec codec; | 634 | struct wm8350_codec codec; |
| 631 | struct wm8350_gpio gpio; | 635 | struct wm8350_gpio gpio; |
| 636 | struct wm8350_hwmon hwmon; | ||
| 632 | struct wm8350_pmic pmic; | 637 | struct wm8350_pmic pmic; |
| 633 | struct wm8350_power power; | 638 | struct wm8350_power power; |
| 634 | struct wm8350_rtc rtc; | 639 | struct wm8350_rtc rtc; |
diff --git a/include/linux/miscdevice.h b/include/linux/miscdevice.h index 052117744629..adaf3c15e449 100644 --- a/include/linux/miscdevice.h +++ b/include/linux/miscdevice.h | |||
| @@ -41,7 +41,8 @@ struct miscdevice { | |||
| 41 | struct list_head list; | 41 | struct list_head list; |
| 42 | struct device *parent; | 42 | struct device *parent; |
| 43 | struct device *this_device; | 43 | struct device *this_device; |
| 44 | const char *devnode; | 44 | const char *nodename; |
| 45 | mode_t mode; | ||
| 45 | }; | 46 | }; |
| 46 | 47 | ||
| 47 | extern int misc_register(struct miscdevice * misc); | 48 | extern int misc_register(struct miscdevice * misc); |
diff --git a/include/linux/mm.h b/include/linux/mm.h index 9a72cc78e6b8..24c395694f4d 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
| @@ -25,6 +25,7 @@ extern unsigned long max_mapnr; | |||
| 25 | #endif | 25 | #endif |
| 26 | 26 | ||
| 27 | extern unsigned long num_physpages; | 27 | extern unsigned long num_physpages; |
| 28 | extern unsigned long totalram_pages; | ||
| 28 | extern void * high_memory; | 29 | extern void * high_memory; |
| 29 | extern int page_cluster; | 30 | extern int page_cluster; |
| 30 | 31 | ||
| @@ -103,6 +104,7 @@ extern unsigned int kobjsize(const void *objp); | |||
| 103 | #define VM_MIXEDMAP 0x10000000 /* Can contain "struct page" and pure PFN pages */ | 104 | #define VM_MIXEDMAP 0x10000000 /* Can contain "struct page" and pure PFN pages */ |
| 104 | #define VM_SAO 0x20000000 /* Strong Access Ordering (powerpc) */ | 105 | #define VM_SAO 0x20000000 /* Strong Access Ordering (powerpc) */ |
| 105 | #define VM_PFN_AT_MMAP 0x40000000 /* PFNMAP vma that is fully mapped at mmap time */ | 106 | #define VM_PFN_AT_MMAP 0x40000000 /* PFNMAP vma that is fully mapped at mmap time */ |
| 107 | #define VM_MERGEABLE 0x80000000 /* KSM may merge identical pages */ | ||
| 106 | 108 | ||
| 107 | #ifndef VM_STACK_DEFAULT_FLAGS /* arch can override this */ | 109 | #ifndef VM_STACK_DEFAULT_FLAGS /* arch can override this */ |
| 108 | #define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS | 110 | #define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS |
| @@ -283,6 +285,14 @@ static inline int is_vmalloc_addr(const void *x) | |||
| 283 | return 0; | 285 | return 0; |
| 284 | #endif | 286 | #endif |
| 285 | } | 287 | } |
| 288 | #ifdef CONFIG_MMU | ||
| 289 | extern int is_vmalloc_or_module_addr(const void *x); | ||
| 290 | #else | ||
| 291 | static inline int is_vmalloc_or_module_addr(const void *x) | ||
| 292 | { | ||
| 293 | return 0; | ||
| 294 | } | ||
| 295 | #endif | ||
| 286 | 296 | ||
| 287 | static inline struct page *compound_head(struct page *page) | 297 | static inline struct page *compound_head(struct page *page) |
| 288 | { | 298 | { |
| @@ -685,11 +695,12 @@ static inline int page_mapped(struct page *page) | |||
| 685 | #define VM_FAULT_SIGBUS 0x0002 | 695 | #define VM_FAULT_SIGBUS 0x0002 |
| 686 | #define VM_FAULT_MAJOR 0x0004 | 696 | #define VM_FAULT_MAJOR 0x0004 |
| 687 | #define VM_FAULT_WRITE 0x0008 /* Special case for get_user_pages */ | 697 | #define VM_FAULT_WRITE 0x0008 /* Special case for get_user_pages */ |
| 698 | #define VM_FAULT_HWPOISON 0x0010 /* Hit poisoned page */ | ||
| 688 | 699 | ||
| 689 | #define VM_FAULT_NOPAGE 0x0100 /* ->fault installed the pte, not return page */ | 700 | #define VM_FAULT_NOPAGE 0x0100 /* ->fault installed the pte, not return page */ |
| 690 | #define VM_FAULT_LOCKED 0x0200 /* ->fault locked the returned page */ | 701 | #define VM_FAULT_LOCKED 0x0200 /* ->fault locked the returned page */ |
| 691 | 702 | ||
| 692 | #define VM_FAULT_ERROR (VM_FAULT_OOM | VM_FAULT_SIGBUS) | 703 | #define VM_FAULT_ERROR (VM_FAULT_OOM | VM_FAULT_SIGBUS | VM_FAULT_HWPOISON) |
| 693 | 704 | ||
| 694 | /* | 705 | /* |
| 695 | * Can be called by the pagefault handler when it gets a VM_FAULT_OOM. | 706 | * Can be called by the pagefault handler when it gets a VM_FAULT_OOM. |
| @@ -700,17 +711,8 @@ extern void pagefault_out_of_memory(void); | |||
| 700 | 711 | ||
| 701 | extern void show_free_areas(void); | 712 | extern void show_free_areas(void); |
| 702 | 713 | ||
| 703 | #ifdef CONFIG_SHMEM | 714 | int shmem_lock(struct file *file, int lock, struct user_struct *user); |
| 704 | extern int shmem_lock(struct file *file, int lock, struct user_struct *user); | ||
| 705 | #else | ||
| 706 | static inline int shmem_lock(struct file *file, int lock, | ||
| 707 | struct user_struct *user) | ||
| 708 | { | ||
| 709 | return 0; | ||
| 710 | } | ||
| 711 | #endif | ||
| 712 | struct file *shmem_file_setup(const char *name, loff_t size, unsigned long flags); | 715 | struct file *shmem_file_setup(const char *name, loff_t size, unsigned long flags); |
| 713 | |||
| 714 | int shmem_zero_setup(struct vm_area_struct *); | 716 | int shmem_zero_setup(struct vm_area_struct *); |
| 715 | 717 | ||
| 716 | #ifndef CONFIG_MMU | 718 | #ifndef CONFIG_MMU |
| @@ -790,8 +792,14 @@ static inline void unmap_shared_mapping_range(struct address_space *mapping, | |||
| 790 | unmap_mapping_range(mapping, holebegin, holelen, 0); | 792 | unmap_mapping_range(mapping, holebegin, holelen, 0); |
| 791 | } | 793 | } |
| 792 | 794 | ||
| 793 | extern int vmtruncate(struct inode * inode, loff_t offset); | 795 | extern void truncate_pagecache(struct inode *inode, loff_t old, loff_t new); |
| 794 | extern int vmtruncate_range(struct inode * inode, loff_t offset, loff_t end); | 796 | extern int vmtruncate(struct inode *inode, loff_t offset); |
| 797 | extern int vmtruncate_range(struct inode *inode, loff_t offset, loff_t end); | ||
| 798 | |||
| 799 | int truncate_inode_page(struct address_space *mapping, struct page *page); | ||
| 800 | int generic_error_remove_page(struct address_space *mapping, struct page *page); | ||
| 801 | |||
| 802 | int invalidate_inode_page(struct page *page); | ||
| 795 | 803 | ||
| 796 | #ifdef CONFIG_MMU | 804 | #ifdef CONFIG_MMU |
| 797 | extern int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma, | 805 | extern int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma, |
| @@ -815,6 +823,7 @@ int get_user_pages(struct task_struct *tsk, struct mm_struct *mm, | |||
| 815 | struct page **pages, struct vm_area_struct **vmas); | 823 | struct page **pages, struct vm_area_struct **vmas); |
| 816 | int get_user_pages_fast(unsigned long start, int nr_pages, int write, | 824 | int get_user_pages_fast(unsigned long start, int nr_pages, int write, |
| 817 | struct page **pages); | 825 | struct page **pages); |
| 826 | struct page *get_dump_page(unsigned long addr); | ||
| 818 | 827 | ||
| 819 | extern int try_to_release_page(struct page * page, gfp_t gfp_mask); | 828 | extern int try_to_release_page(struct page * page, gfp_t gfp_mask); |
| 820 | extern void do_invalidatepage(struct page *page, unsigned long offset); | 829 | extern void do_invalidatepage(struct page *page, unsigned long offset); |
| @@ -1058,6 +1067,8 @@ extern void setup_per_cpu_pageset(void); | |||
| 1058 | static inline void setup_per_cpu_pageset(void) {} | 1067 | static inline void setup_per_cpu_pageset(void) {} |
| 1059 | #endif | 1068 | #endif |
| 1060 | 1069 | ||
| 1070 | extern void zone_pcp_update(struct zone *zone); | ||
| 1071 | |||
| 1061 | /* nommu.c */ | 1072 | /* nommu.c */ |
| 1062 | extern atomic_long_t mmap_pages_allocated; | 1073 | extern atomic_long_t mmap_pages_allocated; |
| 1063 | 1074 | ||
| @@ -1226,7 +1237,8 @@ struct page *follow_page(struct vm_area_struct *, unsigned long address, | |||
| 1226 | #define FOLL_WRITE 0x01 /* check pte is writable */ | 1237 | #define FOLL_WRITE 0x01 /* check pte is writable */ |
| 1227 | #define FOLL_TOUCH 0x02 /* mark page accessed */ | 1238 | #define FOLL_TOUCH 0x02 /* mark page accessed */ |
| 1228 | #define FOLL_GET 0x04 /* do get_page on page */ | 1239 | #define FOLL_GET 0x04 /* do get_page on page */ |
| 1229 | #define FOLL_ANON 0x08 /* give ZERO_PAGE if no pgtable */ | 1240 | #define FOLL_DUMP 0x08 /* give error on hole if it would be zero */ |
| 1241 | #define FOLL_FORCE 0x10 /* get_user_pages read/write w/o permission */ | ||
| 1230 | 1242 | ||
| 1231 | typedef int (*pte_fn_t)(pte_t *pte, pgtable_t token, unsigned long addr, | 1243 | typedef int (*pte_fn_t)(pte_t *pte, pgtable_t token, unsigned long addr, |
| 1232 | void *data); | 1244 | void *data); |
| @@ -1274,7 +1286,7 @@ int in_gate_area_no_task(unsigned long addr); | |||
| 1274 | #define in_gate_area(task, addr) ({(void)task; in_gate_area_no_task(addr);}) | 1286 | #define in_gate_area(task, addr) ({(void)task; in_gate_area_no_task(addr);}) |
| 1275 | #endif /* __HAVE_ARCH_GATE_AREA */ | 1287 | #endif /* __HAVE_ARCH_GATE_AREA */ |
| 1276 | 1288 | ||
| 1277 | int drop_caches_sysctl_handler(struct ctl_table *, int, struct file *, | 1289 | int drop_caches_sysctl_handler(struct ctl_table *, int, |
| 1278 | void __user *, size_t *, loff_t *); | 1290 | void __user *, size_t *, loff_t *); |
| 1279 | unsigned long shrink_slab(unsigned long scanned, gfp_t gfp_mask, | 1291 | unsigned long shrink_slab(unsigned long scanned, gfp_t gfp_mask, |
| 1280 | unsigned long lru_pages); | 1292 | unsigned long lru_pages); |
| @@ -1303,5 +1315,12 @@ void vmemmap_populate_print_last(void); | |||
| 1303 | extern int account_locked_memory(struct mm_struct *mm, struct rlimit *rlim, | 1315 | extern int account_locked_memory(struct mm_struct *mm, struct rlimit *rlim, |
| 1304 | size_t size); | 1316 | size_t size); |
| 1305 | extern void refund_locked_memory(struct mm_struct *mm, size_t size); | 1317 | extern void refund_locked_memory(struct mm_struct *mm, size_t size); |
| 1318 | |||
| 1319 | extern void memory_failure(unsigned long pfn, int trapno); | ||
| 1320 | extern int __memory_failure(unsigned long pfn, int trapno, int ref); | ||
| 1321 | extern int sysctl_memory_failure_early_kill; | ||
| 1322 | extern int sysctl_memory_failure_recovery; | ||
| 1323 | extern atomic_long_t mce_bad_pages; | ||
| 1324 | |||
| 1306 | #endif /* __KERNEL__ */ | 1325 | #endif /* __KERNEL__ */ |
| 1307 | #endif /* _LINUX_MM_H */ | 1326 | #endif /* _LINUX_MM_H */ |
diff --git a/include/linux/mm_inline.h b/include/linux/mm_inline.h index 7fbb97267556..8835b877b8db 100644 --- a/include/linux/mm_inline.h +++ b/include/linux/mm_inline.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | * page_is_file_cache - should the page be on a file LRU or anon LRU? | 5 | * page_is_file_cache - should the page be on a file LRU or anon LRU? |
| 6 | * @page: the page to test | 6 | * @page: the page to test |
| 7 | * | 7 | * |
| 8 | * Returns LRU_FILE if @page is page cache page backed by a regular filesystem, | 8 | * Returns 1 if @page is page cache page backed by a regular filesystem, |
| 9 | * or 0 if @page is anonymous, tmpfs or otherwise ram or swap backed. | 9 | * or 0 if @page is anonymous, tmpfs or otherwise ram or swap backed. |
| 10 | * Used by functions that manipulate the LRU lists, to sort a page | 10 | * Used by functions that manipulate the LRU lists, to sort a page |
| 11 | * onto the right LRU list. | 11 | * onto the right LRU list. |
| @@ -16,11 +16,7 @@ | |||
| 16 | */ | 16 | */ |
| 17 | static inline int page_is_file_cache(struct page *page) | 17 | static inline int page_is_file_cache(struct page *page) |
| 18 | { | 18 | { |
| 19 | if (PageSwapBacked(page)) | 19 | return !PageSwapBacked(page); |
| 20 | return 0; | ||
| 21 | |||
| 22 | /* The page is page cache backed by a normal filesystem. */ | ||
| 23 | return LRU_FILE; | ||
| 24 | } | 20 | } |
| 25 | 21 | ||
| 26 | static inline void | 22 | static inline void |
| @@ -39,21 +35,36 @@ del_page_from_lru_list(struct zone *zone, struct page *page, enum lru_list l) | |||
| 39 | mem_cgroup_del_lru_list(page, l); | 35 | mem_cgroup_del_lru_list(page, l); |
| 40 | } | 36 | } |
| 41 | 37 | ||
| 38 | /** | ||
| 39 | * page_lru_base_type - which LRU list type should a page be on? | ||
| 40 | * @page: the page to test | ||
| 41 | * | ||
| 42 | * Used for LRU list index arithmetic. | ||
| 43 | * | ||
| 44 | * Returns the base LRU type - file or anon - @page should be on. | ||
| 45 | */ | ||
| 46 | static inline enum lru_list page_lru_base_type(struct page *page) | ||
| 47 | { | ||
| 48 | if (page_is_file_cache(page)) | ||
| 49 | return LRU_INACTIVE_FILE; | ||
| 50 | return LRU_INACTIVE_ANON; | ||
| 51 | } | ||
| 52 | |||
| 42 | static inline void | 53 | static inline void |
| 43 | del_page_from_lru(struct zone *zone, struct page *page) | 54 | del_page_from_lru(struct zone *zone, struct page *page) |
| 44 | { | 55 | { |
| 45 | enum lru_list l = LRU_BASE; | 56 | enum lru_list l; |
| 46 | 57 | ||
| 47 | list_del(&page->lru); | 58 | list_del(&page->lru); |
| 48 | if (PageUnevictable(page)) { | 59 | if (PageUnevictable(page)) { |
| 49 | __ClearPageUnevictable(page); | 60 | __ClearPageUnevictable(page); |
| 50 | l = LRU_UNEVICTABLE; | 61 | l = LRU_UNEVICTABLE; |
| 51 | } else { | 62 | } else { |
| 63 | l = page_lru_base_type(page); | ||
| 52 | if (PageActive(page)) { | 64 | if (PageActive(page)) { |
| 53 | __ClearPageActive(page); | 65 | __ClearPageActive(page); |
| 54 | l += LRU_ACTIVE; | 66 | l += LRU_ACTIVE; |
| 55 | } | 67 | } |
| 56 | l += page_is_file_cache(page); | ||
| 57 | } | 68 | } |
| 58 | __dec_zone_state(zone, NR_LRU_BASE + l); | 69 | __dec_zone_state(zone, NR_LRU_BASE + l); |
| 59 | mem_cgroup_del_lru_list(page, l); | 70 | mem_cgroup_del_lru_list(page, l); |
| @@ -68,14 +79,14 @@ del_page_from_lru(struct zone *zone, struct page *page) | |||
| 68 | */ | 79 | */ |
| 69 | static inline enum lru_list page_lru(struct page *page) | 80 | static inline enum lru_list page_lru(struct page *page) |
| 70 | { | 81 | { |
| 71 | enum lru_list lru = LRU_BASE; | 82 | enum lru_list lru; |
| 72 | 83 | ||
| 73 | if (PageUnevictable(page)) | 84 | if (PageUnevictable(page)) |
| 74 | lru = LRU_UNEVICTABLE; | 85 | lru = LRU_UNEVICTABLE; |
| 75 | else { | 86 | else { |
| 87 | lru = page_lru_base_type(page); | ||
| 76 | if (PageActive(page)) | 88 | if (PageActive(page)) |
| 77 | lru += LRU_ACTIVE; | 89 | lru += LRU_ACTIVE; |
| 78 | lru += page_is_file_cache(page); | ||
| 79 | } | 90 | } |
| 80 | 91 | ||
| 81 | return lru; | 92 | return lru; |
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h index 0042090a4d70..84a524afb3dc 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h | |||
| @@ -171,7 +171,7 @@ struct vm_area_struct { | |||
| 171 | struct anon_vma *anon_vma; /* Serialized by page_table_lock */ | 171 | struct anon_vma *anon_vma; /* Serialized by page_table_lock */ |
| 172 | 172 | ||
| 173 | /* Function pointers to deal with this struct. */ | 173 | /* Function pointers to deal with this struct. */ |
| 174 | struct vm_operations_struct * vm_ops; | 174 | const struct vm_operations_struct *vm_ops; |
| 175 | 175 | ||
| 176 | /* Information about our backing store: */ | 176 | /* Information about our backing store: */ |
| 177 | unsigned long vm_pgoff; /* Offset (within vm_file) in PAGE_SIZE | 177 | unsigned long vm_pgoff; /* Offset (within vm_file) in PAGE_SIZE |
| @@ -240,6 +240,8 @@ struct mm_struct { | |||
| 240 | 240 | ||
| 241 | unsigned long saved_auxv[AT_VECTOR_SIZE]; /* for /proc/PID/auxv */ | 241 | unsigned long saved_auxv[AT_VECTOR_SIZE]; /* for /proc/PID/auxv */ |
| 242 | 242 | ||
| 243 | struct linux_binfmt *binfmt; | ||
| 244 | |||
| 243 | cpumask_t cpu_vm_mask; | 245 | cpumask_t cpu_vm_mask; |
| 244 | 246 | ||
| 245 | /* Architecture-specific MM context */ | 247 | /* Architecture-specific MM context */ |
| @@ -259,11 +261,10 @@ struct mm_struct { | |||
| 259 | unsigned long flags; /* Must use atomic bitops to access the bits */ | 261 | unsigned long flags; /* Must use atomic bitops to access the bits */ |
| 260 | 262 | ||
| 261 | struct core_state *core_state; /* coredumping support */ | 263 | struct core_state *core_state; /* coredumping support */ |
| 262 | 264 | #ifdef CONFIG_AIO | |
| 263 | /* aio bits */ | ||
| 264 | spinlock_t ioctx_lock; | 265 | spinlock_t ioctx_lock; |
| 265 | struct hlist_head ioctx_list; | 266 | struct hlist_head ioctx_list; |
| 266 | 267 | #endif | |
| 267 | #ifdef CONFIG_MM_OWNER | 268 | #ifdef CONFIG_MM_OWNER |
| 268 | /* | 269 | /* |
| 269 | * "owner" points to a task that is regarded as the canonical | 270 | * "owner" points to a task that is regarded as the canonical |
diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h index 403aa505f27e..2ee22e8af110 100644 --- a/include/linux/mmc/card.h +++ b/include/linux/mmc/card.h | |||
| @@ -40,6 +40,8 @@ struct mmc_csd { | |||
| 40 | }; | 40 | }; |
| 41 | 41 | ||
| 42 | struct mmc_ext_csd { | 42 | struct mmc_ext_csd { |
| 43 | u8 rev; | ||
| 44 | unsigned int sa_timeout; /* Units: 100ns */ | ||
| 43 | unsigned int hs_max_dtr; | 45 | unsigned int hs_max_dtr; |
| 44 | unsigned int sectors; | 46 | unsigned int sectors; |
| 45 | }; | 47 | }; |
| @@ -62,7 +64,8 @@ struct sdio_cccr { | |||
| 62 | low_speed:1, | 64 | low_speed:1, |
| 63 | wide_bus:1, | 65 | wide_bus:1, |
| 64 | high_power:1, | 66 | high_power:1, |
| 65 | high_speed:1; | 67 | high_speed:1, |
| 68 | disable_cd:1; | ||
| 66 | }; | 69 | }; |
| 67 | 70 | ||
| 68 | struct sdio_cis { | 71 | struct sdio_cis { |
| @@ -94,6 +97,8 @@ struct mmc_card { | |||
| 94 | #define MMC_STATE_READONLY (1<<1) /* card is read-only */ | 97 | #define MMC_STATE_READONLY (1<<1) /* card is read-only */ |
| 95 | #define MMC_STATE_HIGHSPEED (1<<2) /* card is in high speed mode */ | 98 | #define MMC_STATE_HIGHSPEED (1<<2) /* card is in high speed mode */ |
| 96 | #define MMC_STATE_BLOCKADDR (1<<3) /* card uses block-addressing */ | 99 | #define MMC_STATE_BLOCKADDR (1<<3) /* card uses block-addressing */ |
| 100 | unsigned int quirks; /* card quirks */ | ||
| 101 | #define MMC_QUIRK_LENIENT_FN0 (1<<0) /* allow SDIO FN0 writes outside of the VS CCCR range */ | ||
| 97 | 102 | ||
| 98 | u32 raw_cid[4]; /* raw card CID */ | 103 | u32 raw_cid[4]; /* raw card CID */ |
| 99 | u32 raw_csd[4]; /* raw card CSD */ | 104 | u32 raw_csd[4]; /* raw card CSD */ |
| @@ -129,6 +134,11 @@ struct mmc_card { | |||
| 129 | #define mmc_card_set_highspeed(c) ((c)->state |= MMC_STATE_HIGHSPEED) | 134 | #define mmc_card_set_highspeed(c) ((c)->state |= MMC_STATE_HIGHSPEED) |
| 130 | #define mmc_card_set_blockaddr(c) ((c)->state |= MMC_STATE_BLOCKADDR) | 135 | #define mmc_card_set_blockaddr(c) ((c)->state |= MMC_STATE_BLOCKADDR) |
| 131 | 136 | ||
| 137 | static inline int mmc_card_lenient_fn0(const struct mmc_card *c) | ||
| 138 | { | ||
| 139 | return c->quirks & MMC_QUIRK_LENIENT_FN0; | ||
| 140 | } | ||
| 141 | |||
| 132 | #define mmc_card_name(c) ((c)->cid.prod_name) | 142 | #define mmc_card_name(c) ((c)->cid.prod_name) |
| 133 | #define mmc_card_id(c) (dev_name(&(c)->dev)) | 143 | #define mmc_card_id(c) (dev_name(&(c)->dev)) |
| 134 | 144 | ||
diff --git a/include/linux/mmc/core.h b/include/linux/mmc/core.h index 7ac8b500d55c..e4898e9eeb59 100644 --- a/include/linux/mmc/core.h +++ b/include/linux/mmc/core.h | |||
| @@ -139,6 +139,7 @@ extern unsigned int mmc_align_data_size(struct mmc_card *, unsigned int); | |||
| 139 | 139 | ||
| 140 | extern int __mmc_claim_host(struct mmc_host *host, atomic_t *abort); | 140 | extern int __mmc_claim_host(struct mmc_host *host, atomic_t *abort); |
| 141 | extern void mmc_release_host(struct mmc_host *host); | 141 | extern void mmc_release_host(struct mmc_host *host); |
| 142 | extern int mmc_try_claim_host(struct mmc_host *host); | ||
| 142 | 143 | ||
| 143 | /** | 144 | /** |
| 144 | * mmc_claim_host - exclusively claim a host | 145 | * mmc_claim_host - exclusively claim a host |
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h index 3e7615e9087e..eaf36364b7d4 100644 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | #define LINUX_MMC_HOST_H | 11 | #define LINUX_MMC_HOST_H |
| 12 | 12 | ||
| 13 | #include <linux/leds.h> | 13 | #include <linux/leds.h> |
| 14 | #include <linux/sched.h> | ||
| 14 | 15 | ||
| 15 | #include <linux/mmc/core.h> | 16 | #include <linux/mmc/core.h> |
| 16 | 17 | ||
| @@ -51,6 +52,35 @@ struct mmc_ios { | |||
| 51 | }; | 52 | }; |
| 52 | 53 | ||
| 53 | struct mmc_host_ops { | 54 | struct mmc_host_ops { |
| 55 | /* | ||
| 56 | * Hosts that support power saving can use the 'enable' and 'disable' | ||
| 57 | * methods to exit and enter power saving states. 'enable' is called | ||
| 58 | * when the host is claimed and 'disable' is called (or scheduled with | ||
| 59 | * a delay) when the host is released. The 'disable' is scheduled if | ||
| 60 | * the disable delay set by 'mmc_set_disable_delay()' is non-zero, | ||
| 61 | * otherwise 'disable' is called immediately. 'disable' may be | ||
| 62 | * scheduled repeatedly, to permit ever greater power saving at the | ||
| 63 | * expense of ever greater latency to re-enable. Rescheduling is | ||
| 64 | * determined by the return value of the 'disable' method. A positive | ||
| 65 | * value gives the delay in milliseconds. | ||
| 66 | * | ||
| 67 | * In the case where a host function (like set_ios) may be called | ||
| 68 | * with or without the host claimed, enabling and disabling can be | ||
| 69 | * done directly and will nest correctly. Call 'mmc_host_enable()' and | ||
| 70 | * 'mmc_host_lazy_disable()' for this purpose, but note that these | ||
| 71 | * functions must be paired. | ||
| 72 | * | ||
| 73 | * Alternatively, 'mmc_host_enable()' may be paired with | ||
| 74 | * 'mmc_host_disable()' which calls 'disable' immediately. In this | ||
| 75 | * case the 'disable' method will be called with 'lazy' set to 0. | ||
| 76 | * This is mainly useful for error paths. | ||
| 77 | * | ||
| 78 | * Because lazy disable may be called from a work queue, the 'disable' | ||
| 79 | * method must claim the host when 'lazy' != 0, which will work | ||
| 80 | * correctly because recursion is detected and handled. | ||
| 81 | */ | ||
| 82 | int (*enable)(struct mmc_host *host); | ||
| 83 | int (*disable)(struct mmc_host *host, int lazy); | ||
| 54 | void (*request)(struct mmc_host *host, struct mmc_request *req); | 84 | void (*request)(struct mmc_host *host, struct mmc_request *req); |
| 55 | /* | 85 | /* |
| 56 | * Avoid calling these three functions too often or in a "fast path", | 86 | * Avoid calling these three functions too often or in a "fast path", |
| @@ -118,6 +148,9 @@ struct mmc_host { | |||
| 118 | #define MMC_CAP_SPI (1 << 4) /* Talks only SPI protocols */ | 148 | #define MMC_CAP_SPI (1 << 4) /* Talks only SPI protocols */ |
| 119 | #define MMC_CAP_NEEDS_POLL (1 << 5) /* Needs polling for card-detection */ | 149 | #define MMC_CAP_NEEDS_POLL (1 << 5) /* Needs polling for card-detection */ |
| 120 | #define MMC_CAP_8_BIT_DATA (1 << 6) /* Can the host do 8 bit transfers */ | 150 | #define MMC_CAP_8_BIT_DATA (1 << 6) /* Can the host do 8 bit transfers */ |
| 151 | #define MMC_CAP_DISABLE (1 << 7) /* Can the host be disabled */ | ||
| 152 | #define MMC_CAP_NONREMOVABLE (1 << 8) /* Nonremovable e.g. eMMC */ | ||
| 153 | #define MMC_CAP_WAIT_WHILE_BUSY (1 << 9) /* Waits while card is busy */ | ||
| 121 | 154 | ||
| 122 | /* host specific block data */ | 155 | /* host specific block data */ |
| 123 | unsigned int max_seg_size; /* see blk_queue_max_segment_size */ | 156 | unsigned int max_seg_size; /* see blk_queue_max_segment_size */ |
| @@ -142,9 +175,18 @@ struct mmc_host { | |||
| 142 | unsigned int removed:1; /* host is being removed */ | 175 | unsigned int removed:1; /* host is being removed */ |
| 143 | #endif | 176 | #endif |
| 144 | 177 | ||
| 178 | /* Only used with MMC_CAP_DISABLE */ | ||
| 179 | int enabled; /* host is enabled */ | ||
| 180 | int nesting_cnt; /* "enable" nesting count */ | ||
| 181 | int en_dis_recurs; /* detect recursion */ | ||
| 182 | unsigned int disable_delay; /* disable delay in msecs */ | ||
| 183 | struct delayed_work disable; /* disabling work */ | ||
| 184 | |||
| 145 | struct mmc_card *card; /* device attached to this host */ | 185 | struct mmc_card *card; /* device attached to this host */ |
| 146 | 186 | ||
| 147 | wait_queue_head_t wq; | 187 | wait_queue_head_t wq; |
| 188 | struct task_struct *claimer; /* task that has host claimed */ | ||
| 189 | int claim_cnt; /* "claim" nesting count */ | ||
| 148 | 190 | ||
| 149 | struct delayed_work detect; | 191 | struct delayed_work detect; |
| 150 | 192 | ||
| @@ -183,6 +225,9 @@ static inline void *mmc_priv(struct mmc_host *host) | |||
| 183 | extern int mmc_suspend_host(struct mmc_host *, pm_message_t); | 225 | extern int mmc_suspend_host(struct mmc_host *, pm_message_t); |
| 184 | extern int mmc_resume_host(struct mmc_host *); | 226 | extern int mmc_resume_host(struct mmc_host *); |
| 185 | 227 | ||
| 228 | extern void mmc_power_save_host(struct mmc_host *host); | ||
| 229 | extern void mmc_power_restore_host(struct mmc_host *host); | ||
| 230 | |||
| 186 | extern void mmc_detect_change(struct mmc_host *, unsigned long delay); | 231 | extern void mmc_detect_change(struct mmc_host *, unsigned long delay); |
| 187 | extern void mmc_request_done(struct mmc_host *, struct mmc_request *); | 232 | extern void mmc_request_done(struct mmc_host *, struct mmc_request *); |
| 188 | 233 | ||
| @@ -197,5 +242,19 @@ struct regulator; | |||
| 197 | int mmc_regulator_get_ocrmask(struct regulator *supply); | 242 | int mmc_regulator_get_ocrmask(struct regulator *supply); |
| 198 | int mmc_regulator_set_ocr(struct regulator *supply, unsigned short vdd_bit); | 243 | int mmc_regulator_set_ocr(struct regulator *supply, unsigned short vdd_bit); |
| 199 | 244 | ||
| 245 | int mmc_card_awake(struct mmc_host *host); | ||
| 246 | int mmc_card_sleep(struct mmc_host *host); | ||
| 247 | int mmc_card_can_sleep(struct mmc_host *host); | ||
| 248 | |||
| 249 | int mmc_host_enable(struct mmc_host *host); | ||
| 250 | int mmc_host_disable(struct mmc_host *host); | ||
| 251 | int mmc_host_lazy_disable(struct mmc_host *host); | ||
| 252 | |||
| 253 | static inline void mmc_set_disable_delay(struct mmc_host *host, | ||
| 254 | unsigned int disable_delay) | ||
| 255 | { | ||
| 256 | host->disable_delay = disable_delay; | ||
| 257 | } | ||
| 258 | |||
| 200 | #endif | 259 | #endif |
| 201 | 260 | ||
diff --git a/include/linux/mmc/mmc.h b/include/linux/mmc/mmc.h index 14b81f3e5232..c02c8db73701 100644 --- a/include/linux/mmc/mmc.h +++ b/include/linux/mmc/mmc.h | |||
| @@ -31,6 +31,7 @@ | |||
| 31 | #define MMC_ALL_SEND_CID 2 /* bcr R2 */ | 31 | #define MMC_ALL_SEND_CID 2 /* bcr R2 */ |
| 32 | #define MMC_SET_RELATIVE_ADDR 3 /* ac [31:16] RCA R1 */ | 32 | #define MMC_SET_RELATIVE_ADDR 3 /* ac [31:16] RCA R1 */ |
| 33 | #define MMC_SET_DSR 4 /* bc [31:16] RCA */ | 33 | #define MMC_SET_DSR 4 /* bc [31:16] RCA */ |
| 34 | #define MMC_SLEEP_AWAKE 5 /* ac [31:16] RCA 15:flg R1b */ | ||
| 34 | #define MMC_SWITCH 6 /* ac [31:0] See below R1b */ | 35 | #define MMC_SWITCH 6 /* ac [31:0] See below R1b */ |
| 35 | #define MMC_SELECT_CARD 7 /* ac [31:16] RCA R1 */ | 36 | #define MMC_SELECT_CARD 7 /* ac [31:16] RCA R1 */ |
| 36 | #define MMC_SEND_EXT_CSD 8 /* adtc R1 */ | 37 | #define MMC_SEND_EXT_CSD 8 /* adtc R1 */ |
| @@ -127,6 +128,7 @@ | |||
| 127 | #define R1_STATUS(x) (x & 0xFFFFE000) | 128 | #define R1_STATUS(x) (x & 0xFFFFE000) |
| 128 | #define R1_CURRENT_STATE(x) ((x & 0x00001E00) >> 9) /* sx, b (4 bits) */ | 129 | #define R1_CURRENT_STATE(x) ((x & 0x00001E00) >> 9) /* sx, b (4 bits) */ |
| 129 | #define R1_READY_FOR_DATA (1 << 8) /* sx, a */ | 130 | #define R1_READY_FOR_DATA (1 << 8) /* sx, a */ |
| 131 | #define R1_SWITCH_ERROR (1 << 7) /* sx, c */ | ||
| 130 | #define R1_APP_CMD (1 << 5) /* sr, c */ | 132 | #define R1_APP_CMD (1 << 5) /* sr, c */ |
| 131 | 133 | ||
| 132 | /* | 134 | /* |
| @@ -254,6 +256,7 @@ struct _mmc_csd { | |||
| 254 | #define EXT_CSD_CARD_TYPE 196 /* RO */ | 256 | #define EXT_CSD_CARD_TYPE 196 /* RO */ |
| 255 | #define EXT_CSD_REV 192 /* RO */ | 257 | #define EXT_CSD_REV 192 /* RO */ |
| 256 | #define EXT_CSD_SEC_CNT 212 /* RO, 4 bytes */ | 258 | #define EXT_CSD_SEC_CNT 212 /* RO, 4 bytes */ |
| 259 | #define EXT_CSD_S_A_TIMEOUT 217 | ||
| 257 | 260 | ||
| 258 | /* | 261 | /* |
| 259 | * EXT_CSD field definitions | 262 | * EXT_CSD field definitions |
diff --git a/include/linux/mmc/sdio_func.h b/include/linux/mmc/sdio_func.h index 451bdfc85830..ac3ab683fec6 100644 --- a/include/linux/mmc/sdio_func.h +++ b/include/linux/mmc/sdio_func.h | |||
| @@ -67,6 +67,7 @@ struct sdio_func { | |||
| 67 | 67 | ||
| 68 | #define sdio_get_drvdata(f) dev_get_drvdata(&(f)->dev) | 68 | #define sdio_get_drvdata(f) dev_get_drvdata(&(f)->dev) |
| 69 | #define sdio_set_drvdata(f,d) dev_set_drvdata(&(f)->dev, d) | 69 | #define sdio_set_drvdata(f,d) dev_set_drvdata(&(f)->dev, d) |
| 70 | #define dev_to_sdio_func(d) container_of(d, struct sdio_func, dev) | ||
| 70 | 71 | ||
| 71 | /* | 72 | /* |
| 72 | * SDIO function device driver | 73 | * SDIO function device driver |
| @@ -81,6 +82,8 @@ struct sdio_driver { | |||
| 81 | struct device_driver drv; | 82 | struct device_driver drv; |
| 82 | }; | 83 | }; |
| 83 | 84 | ||
| 85 | #define to_sdio_driver(d) container_of(d, struct sdio_driver, drv) | ||
| 86 | |||
| 84 | /** | 87 | /** |
| 85 | * SDIO_DEVICE - macro used to describe a specific SDIO device | 88 | * SDIO_DEVICE - macro used to describe a specific SDIO device |
| 86 | * @vend: the 16 bit manufacturer code | 89 | * @vend: the 16 bit manufacturer code |
diff --git a/include/linux/mmc/sdio_ids.h b/include/linux/mmc/sdio_ids.h index 39751c8cde9c..33b2ea09a4ad 100644 --- a/include/linux/mmc/sdio_ids.h +++ b/include/linux/mmc/sdio_ids.h | |||
| @@ -22,6 +22,13 @@ | |||
| 22 | /* | 22 | /* |
| 23 | * Vendors and devices. Sort key: vendor first, device next. | 23 | * Vendors and devices. Sort key: vendor first, device next. |
| 24 | */ | 24 | */ |
| 25 | #define SDIO_VENDOR_ID_INTEL 0x0089 | ||
| 26 | #define SDIO_DEVICE_ID_INTEL_IWMC3200WIMAX 0x1402 | ||
| 27 | #define SDIO_DEVICE_ID_INTEL_IWMC3200WIFI 0x1403 | ||
| 28 | #define SDIO_DEVICE_ID_INTEL_IWMC3200TOP 0x1404 | ||
| 29 | #define SDIO_DEVICE_ID_INTEL_IWMC3200GPS 0x1405 | ||
| 30 | #define SDIO_DEVICE_ID_INTEL_IWMC3200BT 0x1406 | ||
| 31 | #define SDIO_DEVICE_ID_INTEL_IWMC3200WIMAX_2G5 0x1407 | ||
| 25 | 32 | ||
| 26 | #define SDIO_VENDOR_ID_MARVELL 0x02df | 33 | #define SDIO_VENDOR_ID_MARVELL 0x02df |
| 27 | #define SDIO_DEVICE_ID_MARVELL_LIBERTAS 0x9103 | 34 | #define SDIO_DEVICE_ID_MARVELL_LIBERTAS 0x9103 |
diff --git a/include/linux/mmu_context.h b/include/linux/mmu_context.h new file mode 100644 index 000000000000..70fffeba7495 --- /dev/null +++ b/include/linux/mmu_context.h | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | #ifndef _LINUX_MMU_CONTEXT_H | ||
| 2 | #define _LINUX_MMU_CONTEXT_H | ||
| 3 | |||
| 4 | struct mm_struct; | ||
| 5 | |||
| 6 | void use_mm(struct mm_struct *mm); | ||
| 7 | void unuse_mm(struct mm_struct *mm); | ||
| 8 | |||
| 9 | #endif | ||
diff --git a/include/linux/mmu_notifier.h b/include/linux/mmu_notifier.h index b77486d152cd..4e02ee2b071e 100644 --- a/include/linux/mmu_notifier.h +++ b/include/linux/mmu_notifier.h | |||
| @@ -62,6 +62,15 @@ struct mmu_notifier_ops { | |||
| 62 | unsigned long address); | 62 | unsigned long address); |
| 63 | 63 | ||
| 64 | /* | 64 | /* |
| 65 | * change_pte is called in cases that pte mapping to page is changed: | ||
| 66 | * for example, when ksm remaps pte to point to a new shared page. | ||
| 67 | */ | ||
| 68 | void (*change_pte)(struct mmu_notifier *mn, | ||
| 69 | struct mm_struct *mm, | ||
| 70 | unsigned long address, | ||
| 71 | pte_t pte); | ||
| 72 | |||
| 73 | /* | ||
| 65 | * Before this is invoked any secondary MMU is still ok to | 74 | * Before this is invoked any secondary MMU is still ok to |
| 66 | * read/write to the page previously pointed to by the Linux | 75 | * read/write to the page previously pointed to by the Linux |
| 67 | * pte because the page hasn't been freed yet and it won't be | 76 | * pte because the page hasn't been freed yet and it won't be |
| @@ -154,6 +163,8 @@ extern void __mmu_notifier_mm_destroy(struct mm_struct *mm); | |||
| 154 | extern void __mmu_notifier_release(struct mm_struct *mm); | 163 | extern void __mmu_notifier_release(struct mm_struct *mm); |
| 155 | extern int __mmu_notifier_clear_flush_young(struct mm_struct *mm, | 164 | extern int __mmu_notifier_clear_flush_young(struct mm_struct *mm, |
| 156 | unsigned long address); | 165 | unsigned long address); |
| 166 | extern void __mmu_notifier_change_pte(struct mm_struct *mm, | ||
| 167 | unsigned long address, pte_t pte); | ||
| 157 | extern void __mmu_notifier_invalidate_page(struct mm_struct *mm, | 168 | extern void __mmu_notifier_invalidate_page(struct mm_struct *mm, |
| 158 | unsigned long address); | 169 | unsigned long address); |
| 159 | extern void __mmu_notifier_invalidate_range_start(struct mm_struct *mm, | 170 | extern void __mmu_notifier_invalidate_range_start(struct mm_struct *mm, |
| @@ -175,6 +186,13 @@ static inline int mmu_notifier_clear_flush_young(struct mm_struct *mm, | |||
| 175 | return 0; | 186 | return 0; |
| 176 | } | 187 | } |
| 177 | 188 | ||
| 189 | static inline void mmu_notifier_change_pte(struct mm_struct *mm, | ||
| 190 | unsigned long address, pte_t pte) | ||
| 191 | { | ||
| 192 | if (mm_has_notifiers(mm)) | ||
| 193 | __mmu_notifier_change_pte(mm, address, pte); | ||
| 194 | } | ||
| 195 | |||
| 178 | static inline void mmu_notifier_invalidate_page(struct mm_struct *mm, | 196 | static inline void mmu_notifier_invalidate_page(struct mm_struct *mm, |
| 179 | unsigned long address) | 197 | unsigned long address) |
| 180 | { | 198 | { |
| @@ -236,6 +254,16 @@ static inline void mmu_notifier_mm_destroy(struct mm_struct *mm) | |||
| 236 | __young; \ | 254 | __young; \ |
| 237 | }) | 255 | }) |
| 238 | 256 | ||
| 257 | #define set_pte_at_notify(__mm, __address, __ptep, __pte) \ | ||
| 258 | ({ \ | ||
| 259 | struct mm_struct *___mm = __mm; \ | ||
| 260 | unsigned long ___address = __address; \ | ||
| 261 | pte_t ___pte = __pte; \ | ||
| 262 | \ | ||
| 263 | set_pte_at(___mm, ___address, __ptep, ___pte); \ | ||
| 264 | mmu_notifier_change_pte(___mm, ___address, ___pte); \ | ||
| 265 | }) | ||
| 266 | |||
| 239 | #else /* CONFIG_MMU_NOTIFIER */ | 267 | #else /* CONFIG_MMU_NOTIFIER */ |
| 240 | 268 | ||
| 241 | static inline void mmu_notifier_release(struct mm_struct *mm) | 269 | static inline void mmu_notifier_release(struct mm_struct *mm) |
| @@ -248,6 +276,11 @@ static inline int mmu_notifier_clear_flush_young(struct mm_struct *mm, | |||
| 248 | return 0; | 276 | return 0; |
| 249 | } | 277 | } |
| 250 | 278 | ||
| 279 | static inline void mmu_notifier_change_pte(struct mm_struct *mm, | ||
| 280 | unsigned long address, pte_t pte) | ||
| 281 | { | ||
| 282 | } | ||
| 283 | |||
| 251 | static inline void mmu_notifier_invalidate_page(struct mm_struct *mm, | 284 | static inline void mmu_notifier_invalidate_page(struct mm_struct *mm, |
| 252 | unsigned long address) | 285 | unsigned long address) |
| 253 | { | 286 | { |
| @@ -273,6 +306,7 @@ static inline void mmu_notifier_mm_destroy(struct mm_struct *mm) | |||
| 273 | 306 | ||
| 274 | #define ptep_clear_flush_young_notify ptep_clear_flush_young | 307 | #define ptep_clear_flush_young_notify ptep_clear_flush_young |
| 275 | #define ptep_clear_flush_notify ptep_clear_flush | 308 | #define ptep_clear_flush_notify ptep_clear_flush |
| 309 | #define set_pte_at_notify set_pte_at | ||
| 276 | 310 | ||
| 277 | #endif /* CONFIG_MMU_NOTIFIER */ | 311 | #endif /* CONFIG_MMU_NOTIFIER */ |
| 278 | 312 | ||
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 889598537370..6f7561730d88 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h | |||
| @@ -38,6 +38,7 @@ | |||
| 38 | #define MIGRATE_UNMOVABLE 0 | 38 | #define MIGRATE_UNMOVABLE 0 |
| 39 | #define MIGRATE_RECLAIMABLE 1 | 39 | #define MIGRATE_RECLAIMABLE 1 |
| 40 | #define MIGRATE_MOVABLE 2 | 40 | #define MIGRATE_MOVABLE 2 |
| 41 | #define MIGRATE_PCPTYPES 3 /* the number of types on the pcp lists */ | ||
| 41 | #define MIGRATE_RESERVE 3 | 42 | #define MIGRATE_RESERVE 3 |
| 42 | #define MIGRATE_ISOLATE 4 /* can't allocate from here */ | 43 | #define MIGRATE_ISOLATE 4 /* can't allocate from here */ |
| 43 | #define MIGRATE_TYPES 5 | 44 | #define MIGRATE_TYPES 5 |
| @@ -94,11 +95,15 @@ enum zone_stat_item { | |||
| 94 | NR_SLAB_RECLAIMABLE, | 95 | NR_SLAB_RECLAIMABLE, |
| 95 | NR_SLAB_UNRECLAIMABLE, | 96 | NR_SLAB_UNRECLAIMABLE, |
| 96 | NR_PAGETABLE, /* used for pagetables */ | 97 | NR_PAGETABLE, /* used for pagetables */ |
| 98 | NR_KERNEL_STACK, | ||
| 99 | /* Second 128 byte cacheline */ | ||
| 97 | NR_UNSTABLE_NFS, /* NFS unstable pages */ | 100 | NR_UNSTABLE_NFS, /* NFS unstable pages */ |
| 98 | NR_BOUNCE, | 101 | NR_BOUNCE, |
| 99 | NR_VMSCAN_WRITE, | 102 | NR_VMSCAN_WRITE, |
| 100 | /* Second 128 byte cacheline */ | ||
| 101 | NR_WRITEBACK_TEMP, /* Writeback using temporary buffers */ | 103 | NR_WRITEBACK_TEMP, /* Writeback using temporary buffers */ |
| 104 | NR_ISOLATED_ANON, /* Temporary isolated pages from anon lru */ | ||
| 105 | NR_ISOLATED_FILE, /* Temporary isolated pages from file lru */ | ||
| 106 | NR_SHMEM, /* shmem pages (included tmpfs/GEM pages) */ | ||
| 102 | #ifdef CONFIG_NUMA | 107 | #ifdef CONFIG_NUMA |
| 103 | NUMA_HIT, /* allocated in intended node */ | 108 | NUMA_HIT, /* allocated in intended node */ |
| 104 | NUMA_MISS, /* allocated in non intended node */ | 109 | NUMA_MISS, /* allocated in non intended node */ |
| @@ -165,7 +170,9 @@ struct per_cpu_pages { | |||
| 165 | int count; /* number of pages in the list */ | 170 | int count; /* number of pages in the list */ |
| 166 | int high; /* high watermark, emptying needed */ | 171 | int high; /* high watermark, emptying needed */ |
| 167 | int batch; /* chunk size for buddy add/remove */ | 172 | int batch; /* chunk size for buddy add/remove */ |
| 168 | struct list_head list; /* the list of pages */ | 173 | |
| 174 | /* Lists of pages, one per migrate type stored on the pcp-lists */ | ||
| 175 | struct list_head lists[MIGRATE_PCPTYPES]; | ||
| 169 | }; | 176 | }; |
| 170 | 177 | ||
| 171 | struct per_cpu_pageset { | 178 | struct per_cpu_pageset { |
| @@ -269,6 +276,11 @@ struct zone_reclaim_stat { | |||
| 269 | */ | 276 | */ |
| 270 | unsigned long recent_rotated[2]; | 277 | unsigned long recent_rotated[2]; |
| 271 | unsigned long recent_scanned[2]; | 278 | unsigned long recent_scanned[2]; |
| 279 | |||
| 280 | /* | ||
| 281 | * accumulated for batching | ||
| 282 | */ | ||
| 283 | unsigned long nr_saved_scan[NR_LRU_LISTS]; | ||
| 272 | }; | 284 | }; |
| 273 | 285 | ||
| 274 | struct zone { | 286 | struct zone { |
| @@ -323,7 +335,6 @@ struct zone { | |||
| 323 | spinlock_t lru_lock; | 335 | spinlock_t lru_lock; |
| 324 | struct zone_lru { | 336 | struct zone_lru { |
| 325 | struct list_head list; | 337 | struct list_head list; |
| 326 | unsigned long nr_saved_scan; /* accumulated for batching */ | ||
| 327 | } lru[NR_LRU_LISTS]; | 338 | } lru[NR_LRU_LISTS]; |
| 328 | 339 | ||
| 329 | struct zone_reclaim_stat reclaim_stat; | 340 | struct zone_reclaim_stat reclaim_stat; |
| @@ -744,21 +755,20 @@ static inline int is_dma(struct zone *zone) | |||
| 744 | 755 | ||
| 745 | /* These two functions are used to setup the per zone pages min values */ | 756 | /* These two functions are used to setup the per zone pages min values */ |
| 746 | struct ctl_table; | 757 | struct ctl_table; |
| 747 | struct file; | 758 | int min_free_kbytes_sysctl_handler(struct ctl_table *, int, |
| 748 | int min_free_kbytes_sysctl_handler(struct ctl_table *, int, struct file *, | ||
| 749 | void __user *, size_t *, loff_t *); | 759 | void __user *, size_t *, loff_t *); |
| 750 | extern int sysctl_lowmem_reserve_ratio[MAX_NR_ZONES-1]; | 760 | extern int sysctl_lowmem_reserve_ratio[MAX_NR_ZONES-1]; |
| 751 | int lowmem_reserve_ratio_sysctl_handler(struct ctl_table *, int, struct file *, | 761 | int lowmem_reserve_ratio_sysctl_handler(struct ctl_table *, int, |
| 752 | void __user *, size_t *, loff_t *); | 762 | void __user *, size_t *, loff_t *); |
| 753 | int percpu_pagelist_fraction_sysctl_handler(struct ctl_table *, int, struct file *, | 763 | int percpu_pagelist_fraction_sysctl_handler(struct ctl_table *, int, |
| 754 | void __user *, size_t *, loff_t *); | 764 | void __user *, size_t *, loff_t *); |
| 755 | int sysctl_min_unmapped_ratio_sysctl_handler(struct ctl_table *, int, | 765 | int sysctl_min_unmapped_ratio_sysctl_handler(struct ctl_table *, int, |
| 756 | struct file *, void __user *, size_t *, loff_t *); | 766 | void __user *, size_t *, loff_t *); |
| 757 | int sysctl_min_slab_ratio_sysctl_handler(struct ctl_table *, int, | 767 | int sysctl_min_slab_ratio_sysctl_handler(struct ctl_table *, int, |
| 758 | struct file *, void __user *, size_t *, loff_t *); | 768 | void __user *, size_t *, loff_t *); |
| 759 | 769 | ||
| 760 | extern int numa_zonelist_order_handler(struct ctl_table *, int, | 770 | extern int numa_zonelist_order_handler(struct ctl_table *, int, |
| 761 | struct file *, void __user *, size_t *, loff_t *); | 771 | void __user *, size_t *, loff_t *); |
| 762 | extern char numa_zonelist_order[]; | 772 | extern char numa_zonelist_order[]; |
| 763 | #define NUMA_ZONELIST_ORDER_LEN 16 /* string buffer size */ | 773 | #define NUMA_ZONELIST_ORDER_LEN 16 /* string buffer size */ |
| 764 | 774 | ||
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h index 1bf5900ffe43..f58e9d836f32 100644 --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h | |||
| @@ -399,6 +399,17 @@ struct i2c_device_id { | |||
| 399 | __attribute__((aligned(sizeof(kernel_ulong_t)))); | 399 | __attribute__((aligned(sizeof(kernel_ulong_t)))); |
| 400 | }; | 400 | }; |
| 401 | 401 | ||
| 402 | /* spi */ | ||
| 403 | |||
| 404 | #define SPI_NAME_SIZE 32 | ||
| 405 | #define SPI_MODULE_PREFIX "spi:" | ||
| 406 | |||
| 407 | struct spi_device_id { | ||
| 408 | char name[SPI_NAME_SIZE]; | ||
| 409 | kernel_ulong_t driver_data /* Data private to the driver */ | ||
| 410 | __attribute__((aligned(sizeof(kernel_ulong_t)))); | ||
| 411 | }; | ||
| 412 | |||
| 402 | /* dmi */ | 413 | /* dmi */ |
| 403 | enum dmi_field { | 414 | enum dmi_field { |
| 404 | DMI_NONE, | 415 | DMI_NONE, |
diff --git a/include/linux/module.h b/include/linux/module.h index 098bdb7bfacf..482efc865acf 100644 --- a/include/linux/module.h +++ b/include/linux/module.h | |||
| @@ -15,12 +15,13 @@ | |||
| 15 | #include <linux/stringify.h> | 15 | #include <linux/stringify.h> |
| 16 | #include <linux/kobject.h> | 16 | #include <linux/kobject.h> |
| 17 | #include <linux/moduleparam.h> | 17 | #include <linux/moduleparam.h> |
| 18 | #include <linux/marker.h> | ||
| 19 | #include <linux/tracepoint.h> | 18 | #include <linux/tracepoint.h> |
| 20 | #include <asm/local.h> | ||
| 21 | 19 | ||
| 20 | #include <asm/local.h> | ||
| 22 | #include <asm/module.h> | 21 | #include <asm/module.h> |
| 23 | 22 | ||
| 23 | #include <trace/events/module.h> | ||
| 24 | |||
| 24 | /* Not Yet Implemented */ | 25 | /* Not Yet Implemented */ |
| 25 | #define MODULE_SUPPORTED_DEVICE(name) | 26 | #define MODULE_SUPPORTED_DEVICE(name) |
| 26 | 27 | ||
| @@ -127,7 +128,10 @@ extern struct module __this_module; | |||
| 127 | */ | 128 | */ |
| 128 | #define MODULE_LICENSE(_license) MODULE_INFO(license, _license) | 129 | #define MODULE_LICENSE(_license) MODULE_INFO(license, _license) |
| 129 | 130 | ||
| 130 | /* Author, ideally of form NAME[, NAME]*[ and NAME] */ | 131 | /* |
| 132 | * Author(s), use "Name <email>" or just "Name", for multiple | ||
| 133 | * authors use multiple MODULE_AUTHOR() statements/lines. | ||
| 134 | */ | ||
| 131 | #define MODULE_AUTHOR(_author) MODULE_INFO(author, _author) | 135 | #define MODULE_AUTHOR(_author) MODULE_INFO(author, _author) |
| 132 | 136 | ||
| 133 | /* What your module does. */ | 137 | /* What your module does. */ |
| @@ -307,10 +311,14 @@ struct module | |||
| 307 | #endif | 311 | #endif |
| 308 | 312 | ||
| 309 | #ifdef CONFIG_KALLSYMS | 313 | #ifdef CONFIG_KALLSYMS |
| 310 | /* We keep the symbol and string tables for kallsyms. */ | 314 | /* |
| 311 | Elf_Sym *symtab; | 315 | * We keep the symbol and string tables for kallsyms. |
| 312 | unsigned int num_symtab; | 316 | * The core_* fields below are temporary, loader-only (they |
| 313 | char *strtab; | 317 | * could really be discarded after module init). |
| 318 | */ | ||
| 319 | Elf_Sym *symtab, *core_symtab; | ||
| 320 | unsigned int num_symtab, core_num_syms; | ||
| 321 | char *strtab, *core_strtab; | ||
| 314 | 322 | ||
| 315 | /* Section attributes */ | 323 | /* Section attributes */ |
| 316 | struct module_sect_attrs *sect_attrs; | 324 | struct module_sect_attrs *sect_attrs; |
| @@ -325,10 +333,6 @@ struct module | |||
| 325 | /* The command line arguments (may be mangled). People like | 333 | /* The command line arguments (may be mangled). People like |
| 326 | keeping pointers to this stuff */ | 334 | keeping pointers to this stuff */ |
| 327 | char *args; | 335 | char *args; |
| 328 | #ifdef CONFIG_MARKERS | ||
| 329 | struct marker *markers; | ||
| 330 | unsigned int num_markers; | ||
| 331 | #endif | ||
| 332 | #ifdef CONFIG_TRACEPOINTS | 336 | #ifdef CONFIG_TRACEPOINTS |
| 333 | struct tracepoint *tracepoints; | 337 | struct tracepoint *tracepoints; |
| 334 | unsigned int num_tracepoints; | 338 | unsigned int num_tracepoints; |
| @@ -462,7 +466,10 @@ static inline local_t *__module_ref_addr(struct module *mod, int cpu) | |||
| 462 | static inline void __module_get(struct module *module) | 466 | static inline void __module_get(struct module *module) |
| 463 | { | 467 | { |
| 464 | if (module) { | 468 | if (module) { |
| 465 | local_inc(__module_ref_addr(module, get_cpu())); | 469 | unsigned int cpu = get_cpu(); |
| 470 | local_inc(__module_ref_addr(module, cpu)); | ||
| 471 | trace_module_get(module, _THIS_IP_, | ||
| 472 | local_read(__module_ref_addr(module, cpu))); | ||
| 466 | put_cpu(); | 473 | put_cpu(); |
| 467 | } | 474 | } |
| 468 | } | 475 | } |
| @@ -473,8 +480,11 @@ static inline int try_module_get(struct module *module) | |||
| 473 | 480 | ||
| 474 | if (module) { | 481 | if (module) { |
| 475 | unsigned int cpu = get_cpu(); | 482 | unsigned int cpu = get_cpu(); |
| 476 | if (likely(module_is_live(module))) | 483 | if (likely(module_is_live(module))) { |
| 477 | local_inc(__module_ref_addr(module, cpu)); | 484 | local_inc(__module_ref_addr(module, cpu)); |
| 485 | trace_module_get(module, _THIS_IP_, | ||
| 486 | local_read(__module_ref_addr(module, cpu))); | ||
| 487 | } | ||
| 478 | else | 488 | else |
| 479 | ret = 0; | 489 | ret = 0; |
| 480 | put_cpu(); | 490 | put_cpu(); |
| @@ -527,8 +537,6 @@ int unregister_module_notifier(struct notifier_block * nb); | |||
| 527 | 537 | ||
| 528 | extern void print_modules(void); | 538 | extern void print_modules(void); |
| 529 | 539 | ||
| 530 | extern void module_update_markers(void); | ||
| 531 | |||
| 532 | extern void module_update_tracepoints(void); | 540 | extern void module_update_tracepoints(void); |
| 533 | extern int module_get_iter_tracepoints(struct tracepoint_iter *iter); | 541 | extern int module_get_iter_tracepoints(struct tracepoint_iter *iter); |
| 534 | 542 | ||
| @@ -643,10 +651,6 @@ static inline void print_modules(void) | |||
| 643 | { | 651 | { |
| 644 | } | 652 | } |
| 645 | 653 | ||
| 646 | static inline void module_update_markers(void) | ||
| 647 | { | ||
| 648 | } | ||
| 649 | |||
| 650 | static inline void module_update_tracepoints(void) | 654 | static inline void module_update_tracepoints(void) |
| 651 | { | 655 | { |
| 652 | } | 656 | } |
diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h index 6547c3cdbc4c..82a9124f7d75 100644 --- a/include/linux/moduleparam.h +++ b/include/linux/moduleparam.h | |||
| @@ -37,7 +37,6 @@ typedef int (*param_set_fn)(const char *val, struct kernel_param *kp); | |||
| 37 | typedef int (*param_get_fn)(char *buffer, struct kernel_param *kp); | 37 | typedef int (*param_get_fn)(char *buffer, struct kernel_param *kp); |
| 38 | 38 | ||
| 39 | /* Flag bits for kernel_param.flags */ | 39 | /* Flag bits for kernel_param.flags */ |
| 40 | #define KPARAM_KMALLOCED 1 | ||
| 41 | #define KPARAM_ISBOOL 2 | 40 | #define KPARAM_ISBOOL 2 |
| 42 | 41 | ||
| 43 | struct kernel_param { | 42 | struct kernel_param { |
diff --git a/include/linux/mroute.h b/include/linux/mroute.h index 0d45b4e8d367..c5f3d53548e2 100644 --- a/include/linux/mroute.h +++ b/include/linux/mroute.h | |||
| @@ -59,20 +59,24 @@ struct vifctl { | |||
| 59 | unsigned char vifc_flags; /* VIFF_ flags */ | 59 | unsigned char vifc_flags; /* VIFF_ flags */ |
| 60 | unsigned char vifc_threshold; /* ttl limit */ | 60 | unsigned char vifc_threshold; /* ttl limit */ |
| 61 | unsigned int vifc_rate_limit; /* Rate limiter values (NI) */ | 61 | unsigned int vifc_rate_limit; /* Rate limiter values (NI) */ |
| 62 | struct in_addr vifc_lcl_addr; /* Our address */ | 62 | union { |
| 63 | struct in_addr vifc_lcl_addr; /* Local interface address */ | ||
| 64 | int vifc_lcl_ifindex; /* Local interface index */ | ||
| 65 | }; | ||
| 63 | struct in_addr vifc_rmt_addr; /* IPIP tunnel addr */ | 66 | struct in_addr vifc_rmt_addr; /* IPIP tunnel addr */ |
| 64 | }; | 67 | }; |
| 65 | 68 | ||
| 66 | #define VIFF_TUNNEL 0x1 /* IPIP tunnel */ | 69 | #define VIFF_TUNNEL 0x1 /* IPIP tunnel */ |
| 67 | #define VIFF_SRCRT 0x2 /* NI */ | 70 | #define VIFF_SRCRT 0x2 /* NI */ |
| 68 | #define VIFF_REGISTER 0x4 /* register vif */ | 71 | #define VIFF_REGISTER 0x4 /* register vif */ |
| 72 | #define VIFF_USE_IFINDEX 0x8 /* use vifc_lcl_ifindex instead of | ||
| 73 | vifc_lcl_addr to find an interface */ | ||
| 69 | 74 | ||
| 70 | /* | 75 | /* |
| 71 | * Cache manipulation structures for mrouted and PIMd | 76 | * Cache manipulation structures for mrouted and PIMd |
| 72 | */ | 77 | */ |
| 73 | 78 | ||
| 74 | struct mfcctl | 79 | struct mfcctl { |
| 75 | { | ||
| 76 | struct in_addr mfcc_origin; /* Origin of mcast */ | 80 | struct in_addr mfcc_origin; /* Origin of mcast */ |
| 77 | struct in_addr mfcc_mcastgrp; /* Group in question */ | 81 | struct in_addr mfcc_mcastgrp; /* Group in question */ |
| 78 | vifi_t mfcc_parent; /* Where it arrived */ | 82 | vifi_t mfcc_parent; /* Where it arrived */ |
| @@ -87,8 +91,7 @@ struct mfcctl | |||
| 87 | * Group count retrieval for mrouted | 91 | * Group count retrieval for mrouted |
| 88 | */ | 92 | */ |
| 89 | 93 | ||
| 90 | struct sioc_sg_req | 94 | struct sioc_sg_req { |
| 91 | { | ||
| 92 | struct in_addr src; | 95 | struct in_addr src; |
| 93 | struct in_addr grp; | 96 | struct in_addr grp; |
| 94 | unsigned long pktcnt; | 97 | unsigned long pktcnt; |
| @@ -100,8 +103,7 @@ struct sioc_sg_req | |||
| 100 | * To get vif packet counts | 103 | * To get vif packet counts |
| 101 | */ | 104 | */ |
| 102 | 105 | ||
| 103 | struct sioc_vif_req | 106 | struct sioc_vif_req { |
| 104 | { | ||
| 105 | vifi_t vifi; /* Which iface */ | 107 | vifi_t vifi; /* Which iface */ |
| 106 | unsigned long icount; /* In packets */ | 108 | unsigned long icount; /* In packets */ |
| 107 | unsigned long ocount; /* Out packets */ | 109 | unsigned long ocount; /* Out packets */ |
| @@ -114,8 +116,7 @@ struct sioc_vif_req | |||
| 114 | * data. Magically happens to be like an IP packet as per the original | 116 | * data. Magically happens to be like an IP packet as per the original |
| 115 | */ | 117 | */ |
| 116 | 118 | ||
| 117 | struct igmpmsg | 119 | struct igmpmsg { |
| 118 | { | ||
| 119 | __u32 unused1,unused2; | 120 | __u32 unused1,unused2; |
| 120 | unsigned char im_msgtype; /* What is this */ | 121 | unsigned char im_msgtype; /* What is this */ |
| 121 | unsigned char im_mbz; /* Must be zero */ | 122 | unsigned char im_mbz; /* Must be zero */ |
| @@ -145,14 +146,14 @@ static inline int ip_mroute_opt(int opt) | |||
| 145 | #endif | 146 | #endif |
| 146 | 147 | ||
| 147 | #ifdef CONFIG_IP_MROUTE | 148 | #ifdef CONFIG_IP_MROUTE |
| 148 | extern int ip_mroute_setsockopt(struct sock *, int, char __user *, int); | 149 | extern int ip_mroute_setsockopt(struct sock *, int, char __user *, unsigned int); |
| 149 | extern int ip_mroute_getsockopt(struct sock *, int, char __user *, int __user *); | 150 | extern int ip_mroute_getsockopt(struct sock *, int, char __user *, int __user *); |
| 150 | extern int ipmr_ioctl(struct sock *sk, int cmd, void __user *arg); | 151 | extern int ipmr_ioctl(struct sock *sk, int cmd, void __user *arg); |
| 151 | extern int ip_mr_init(void); | 152 | extern int ip_mr_init(void); |
| 152 | #else | 153 | #else |
| 153 | static inline | 154 | static inline |
| 154 | int ip_mroute_setsockopt(struct sock *sock, | 155 | int ip_mroute_setsockopt(struct sock *sock, |
| 155 | int optname, char __user *optval, int optlen) | 156 | int optname, char __user *optval, unsigned int optlen) |
| 156 | { | 157 | { |
| 157 | return -ENOPROTOOPT; | 158 | return -ENOPROTOOPT; |
| 158 | } | 159 | } |
| @@ -176,8 +177,7 @@ static inline int ip_mr_init(void) | |||
| 176 | } | 177 | } |
| 177 | #endif | 178 | #endif |
| 178 | 179 | ||
| 179 | struct vif_device | 180 | struct vif_device { |
| 180 | { | ||
| 181 | struct net_device *dev; /* Device we are using */ | 181 | struct net_device *dev; /* Device we are using */ |
| 182 | unsigned long bytes_in,bytes_out; | 182 | unsigned long bytes_in,bytes_out; |
| 183 | unsigned long pkt_in,pkt_out; /* Statistics */ | 183 | unsigned long pkt_in,pkt_out; /* Statistics */ |
| @@ -190,8 +190,7 @@ struct vif_device | |||
| 190 | 190 | ||
| 191 | #define VIFF_STATIC 0x8000 | 191 | #define VIFF_STATIC 0x8000 |
| 192 | 192 | ||
| 193 | struct mfc_cache | 193 | struct mfc_cache { |
| 194 | { | ||
| 195 | struct mfc_cache *next; /* Next entry on cache line */ | 194 | struct mfc_cache *next; /* Next entry on cache line */ |
| 196 | #ifdef CONFIG_NET_NS | 195 | #ifdef CONFIG_NET_NS |
| 197 | struct net *mfc_net; | 196 | struct net *mfc_net; |
diff --git a/include/linux/mroute6.h b/include/linux/mroute6.h index 43dc97e32183..2caa1a8e525d 100644 --- a/include/linux/mroute6.h +++ b/include/linux/mroute6.h | |||
| @@ -75,8 +75,7 @@ struct mif6ctl { | |||
| 75 | * Cache manipulation structures for mrouted and PIMd | 75 | * Cache manipulation structures for mrouted and PIMd |
| 76 | */ | 76 | */ |
| 77 | 77 | ||
| 78 | struct mf6cctl | 78 | struct mf6cctl { |
| 79 | { | ||
| 80 | struct sockaddr_in6 mf6cc_origin; /* Origin of mcast */ | 79 | struct sockaddr_in6 mf6cc_origin; /* Origin of mcast */ |
| 81 | struct sockaddr_in6 mf6cc_mcastgrp; /* Group in question */ | 80 | struct sockaddr_in6 mf6cc_mcastgrp; /* Group in question */ |
| 82 | mifi_t mf6cc_parent; /* Where it arrived */ | 81 | mifi_t mf6cc_parent; /* Where it arrived */ |
| @@ -87,8 +86,7 @@ struct mf6cctl | |||
| 87 | * Group count retrieval for pim6sd | 86 | * Group count retrieval for pim6sd |
| 88 | */ | 87 | */ |
| 89 | 88 | ||
| 90 | struct sioc_sg_req6 | 89 | struct sioc_sg_req6 { |
| 91 | { | ||
| 92 | struct sockaddr_in6 src; | 90 | struct sockaddr_in6 src; |
| 93 | struct sockaddr_in6 grp; | 91 | struct sockaddr_in6 grp; |
| 94 | unsigned long pktcnt; | 92 | unsigned long pktcnt; |
| @@ -100,8 +98,7 @@ struct sioc_sg_req6 | |||
| 100 | * To get vif packet counts | 98 | * To get vif packet counts |
| 101 | */ | 99 | */ |
| 102 | 100 | ||
| 103 | struct sioc_mif_req6 | 101 | struct sioc_mif_req6 { |
| 104 | { | ||
| 105 | mifi_t mifi; /* Which iface */ | 102 | mifi_t mifi; /* Which iface */ |
| 106 | unsigned long icount; /* In packets */ | 103 | unsigned long icount; /* In packets */ |
| 107 | unsigned long ocount; /* Out packets */ | 104 | unsigned long ocount; /* Out packets */ |
| @@ -134,7 +131,7 @@ static inline int ip6_mroute_opt(int opt) | |||
| 134 | struct sock; | 131 | struct sock; |
| 135 | 132 | ||
| 136 | #ifdef CONFIG_IPV6_MROUTE | 133 | #ifdef CONFIG_IPV6_MROUTE |
| 137 | extern int ip6_mroute_setsockopt(struct sock *, int, char __user *, int); | 134 | extern int ip6_mroute_setsockopt(struct sock *, int, char __user *, unsigned int); |
| 138 | extern int ip6_mroute_getsockopt(struct sock *, int, char __user *, int __user *); | 135 | extern int ip6_mroute_getsockopt(struct sock *, int, char __user *, int __user *); |
| 139 | extern int ip6_mr_input(struct sk_buff *skb); | 136 | extern int ip6_mr_input(struct sk_buff *skb); |
| 140 | extern int ip6mr_ioctl(struct sock *sk, int cmd, void __user *arg); | 137 | extern int ip6mr_ioctl(struct sock *sk, int cmd, void __user *arg); |
| @@ -143,7 +140,7 @@ extern void ip6_mr_cleanup(void); | |||
| 143 | #else | 140 | #else |
| 144 | static inline | 141 | static inline |
| 145 | int ip6_mroute_setsockopt(struct sock *sock, | 142 | int ip6_mroute_setsockopt(struct sock *sock, |
| 146 | int optname, char __user *optval, int optlen) | 143 | int optname, char __user *optval, unsigned int optlen) |
| 147 | { | 144 | { |
| 148 | return -ENOPROTOOPT; | 145 | return -ENOPROTOOPT; |
| 149 | } | 146 | } |
| @@ -172,8 +169,7 @@ static inline void ip6_mr_cleanup(void) | |||
| 172 | } | 169 | } |
| 173 | #endif | 170 | #endif |
| 174 | 171 | ||
| 175 | struct mif_device | 172 | struct mif_device { |
| 176 | { | ||
| 177 | struct net_device *dev; /* Device we are using */ | 173 | struct net_device *dev; /* Device we are using */ |
| 178 | unsigned long bytes_in,bytes_out; | 174 | unsigned long bytes_in,bytes_out; |
| 179 | unsigned long pkt_in,pkt_out; /* Statistics */ | 175 | unsigned long pkt_in,pkt_out; /* Statistics */ |
| @@ -185,8 +181,7 @@ struct mif_device | |||
| 185 | 181 | ||
| 186 | #define VIFF_STATIC 0x8000 | 182 | #define VIFF_STATIC 0x8000 |
| 187 | 183 | ||
| 188 | struct mfc6_cache | 184 | struct mfc6_cache { |
| 189 | { | ||
| 190 | struct mfc6_cache *next; /* Next entry on cache line */ | 185 | struct mfc6_cache *next; /* Next entry on cache line */ |
| 191 | #ifdef CONFIG_NET_NS | 186 | #ifdef CONFIG_NET_NS |
| 192 | struct net *mfc6_net; | 187 | struct net *mfc6_net; |
diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h index 4030ebada49e..7a232a9bdd62 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h | |||
| @@ -121,6 +121,7 @@ typedef enum { | |||
| 121 | NAND_ECC_SOFT, | 121 | NAND_ECC_SOFT, |
| 122 | NAND_ECC_HW, | 122 | NAND_ECC_HW, |
| 123 | NAND_ECC_HW_SYNDROME, | 123 | NAND_ECC_HW_SYNDROME, |
| 124 | NAND_ECC_HW_OOB_FIRST, | ||
| 124 | } nand_ecc_modes_t; | 125 | } nand_ecc_modes_t; |
| 125 | 126 | ||
| 126 | /* | 127 | /* |
| @@ -271,13 +272,13 @@ struct nand_ecc_ctrl { | |||
| 271 | uint8_t *calc_ecc); | 272 | uint8_t *calc_ecc); |
| 272 | int (*read_page_raw)(struct mtd_info *mtd, | 273 | int (*read_page_raw)(struct mtd_info *mtd, |
| 273 | struct nand_chip *chip, | 274 | struct nand_chip *chip, |
| 274 | uint8_t *buf); | 275 | uint8_t *buf, int page); |
| 275 | void (*write_page_raw)(struct mtd_info *mtd, | 276 | void (*write_page_raw)(struct mtd_info *mtd, |
| 276 | struct nand_chip *chip, | 277 | struct nand_chip *chip, |
| 277 | const uint8_t *buf); | 278 | const uint8_t *buf); |
| 278 | int (*read_page)(struct mtd_info *mtd, | 279 | int (*read_page)(struct mtd_info *mtd, |
| 279 | struct nand_chip *chip, | 280 | struct nand_chip *chip, |
| 280 | uint8_t *buf); | 281 | uint8_t *buf, int page); |
| 281 | int (*read_subpage)(struct mtd_info *mtd, | 282 | int (*read_subpage)(struct mtd_info *mtd, |
| 282 | struct nand_chip *chip, | 283 | struct nand_chip *chip, |
| 283 | uint32_t offs, uint32_t len, | 284 | uint32_t offs, uint32_t len, |
diff --git a/include/linux/mtd/nand_ecc.h b/include/linux/mtd/nand_ecc.h index 090da505425d..052ea8ca2434 100644 --- a/include/linux/mtd/nand_ecc.h +++ b/include/linux/mtd/nand_ecc.h | |||
| @@ -21,6 +21,12 @@ struct mtd_info; | |||
| 21 | int nand_calculate_ecc(struct mtd_info *mtd, const u_char *dat, u_char *ecc_code); | 21 | int nand_calculate_ecc(struct mtd_info *mtd, const u_char *dat, u_char *ecc_code); |
| 22 | 22 | ||
| 23 | /* | 23 | /* |
| 24 | * Detect and correct a 1 bit error for eccsize byte block | ||
| 25 | */ | ||
| 26 | int __nand_correct_data(u_char *dat, u_char *read_ecc, u_char *calc_ecc, | ||
| 27 | unsigned int eccsize); | ||
| 28 | |||
| 29 | /* | ||
| 24 | * Detect and correct a 1 bit error for 256 byte block | 30 | * Detect and correct a 1 bit error for 256 byte block |
| 25 | */ | 31 | */ |
| 26 | int nand_correct_data(struct mtd_info *mtd, u_char *dat, u_char *read_ecc, u_char *calc_ecc); | 32 | int nand_correct_data(struct mtd_info *mtd, u_char *dat, u_char *read_ecc, u_char *calc_ecc); |
diff --git a/include/linux/mtd/onenand.h b/include/linux/mtd/onenand.h index 8ed873374381..4e49f3350678 100644 --- a/include/linux/mtd/onenand.h +++ b/include/linux/mtd/onenand.h | |||
| @@ -214,4 +214,12 @@ unsigned onenand_block(struct onenand_chip *this, loff_t addr); | |||
| 214 | loff_t onenand_addr(struct onenand_chip *this, int block); | 214 | loff_t onenand_addr(struct onenand_chip *this, int block); |
| 215 | int flexonenand_region(struct mtd_info *mtd, loff_t addr); | 215 | int flexonenand_region(struct mtd_info *mtd, loff_t addr); |
| 216 | 216 | ||
| 217 | struct mtd_partition; | ||
| 218 | |||
| 219 | struct onenand_platform_data { | ||
| 220 | void (*mmcontrol)(struct mtd_info *mtd, int sync_read); | ||
| 221 | struct mtd_partition *parts; | ||
| 222 | unsigned int nr_parts; | ||
| 223 | }; | ||
| 224 | |||
| 217 | #endif /* __LINUX_MTD_ONENAND_H */ | 225 | #endif /* __LINUX_MTD_ONENAND_H */ |
diff --git a/include/linux/mtd/onenand_regs.h b/include/linux/mtd/onenand_regs.h index 86a6bbef6465..acadbf53a69f 100644 --- a/include/linux/mtd/onenand_regs.h +++ b/include/linux/mtd/onenand_regs.h | |||
| @@ -207,6 +207,9 @@ | |||
| 207 | #define ONENAND_ECC_2BIT (1 << 1) | 207 | #define ONENAND_ECC_2BIT (1 << 1) |
| 208 | #define ONENAND_ECC_2BIT_ALL (0xAAAA) | 208 | #define ONENAND_ECC_2BIT_ALL (0xAAAA) |
| 209 | #define FLEXONENAND_UNCORRECTABLE_ERROR (0x1010) | 209 | #define FLEXONENAND_UNCORRECTABLE_ERROR (0x1010) |
| 210 | #define ONENAND_ECC_3BIT (1 << 2) | ||
| 211 | #define ONENAND_ECC_4BIT (1 << 3) | ||
| 212 | #define ONENAND_ECC_4BIT_UNCORRECTABLE (0x1010) | ||
| 210 | 213 | ||
| 211 | /* | 214 | /* |
| 212 | * One-Time Programmable (OTP) | 215 | * One-Time Programmable (OTP) |
diff --git a/include/linux/mtd/partitions.h b/include/linux/mtd/partitions.h index b70313d33ff8..274b6196091d 100644 --- a/include/linux/mtd/partitions.h +++ b/include/linux/mtd/partitions.h | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * MTD partitioning layer definitions | 2 | * MTD partitioning layer definitions |
| 3 | * | 3 | * |
| 4 | * (C) 2000 Nicolas Pitre <nico@cam.org> | 4 | * (C) 2000 Nicolas Pitre <nico@fluxnic.net> |
| 5 | * | 5 | * |
| 6 | * This code is GPL | 6 | * This code is GPL |
| 7 | */ | 7 | */ |
diff --git a/include/linux/namei.h b/include/linux/namei.h index d870ae2faedc..ec0f607b364a 100644 --- a/include/linux/namei.h +++ b/include/linux/namei.h | |||
| @@ -40,7 +40,7 @@ enum {LAST_NORM, LAST_ROOT, LAST_DOT, LAST_DOTDOT, LAST_BIND}; | |||
| 40 | * - follow links at the end | 40 | * - follow links at the end |
| 41 | * - require a directory | 41 | * - require a directory |
| 42 | * - ending slashes ok even for nonexistent files | 42 | * - ending slashes ok even for nonexistent files |
| 43 | * - internal "there are more path compnents" flag | 43 | * - internal "there are more path components" flag |
| 44 | * - locked when lookup done with dcache_lock held | 44 | * - locked when lookup done with dcache_lock held |
| 45 | * - dentry cache is untrusted; force a real lookup | 45 | * - dentry cache is untrusted; force a real lookup |
| 46 | */ | 46 | */ |
diff --git a/include/linux/neighbour.h b/include/linux/neighbour.h index 12c9de138451..a7003b7a695d 100644 --- a/include/linux/neighbour.h +++ b/include/linux/neighbour.h | |||
| @@ -4,8 +4,7 @@ | |||
| 4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
| 5 | #include <linux/netlink.h> | 5 | #include <linux/netlink.h> |
| 6 | 6 | ||
| 7 | struct ndmsg | 7 | struct ndmsg { |
| 8 | { | ||
| 9 | __u8 ndm_family; | 8 | __u8 ndm_family; |
| 10 | __u8 ndm_pad1; | 9 | __u8 ndm_pad1; |
| 11 | __u16 ndm_pad2; | 10 | __u16 ndm_pad2; |
| @@ -15,8 +14,7 @@ struct ndmsg | |||
| 15 | __u8 ndm_type; | 14 | __u8 ndm_type; |
| 16 | }; | 15 | }; |
| 17 | 16 | ||
| 18 | enum | 17 | enum { |
| 19 | { | ||
| 20 | NDA_UNSPEC, | 18 | NDA_UNSPEC, |
| 21 | NDA_DST, | 19 | NDA_DST, |
| 22 | NDA_LLADDR, | 20 | NDA_LLADDR, |
| @@ -56,8 +54,7 @@ enum | |||
| 56 | NUD_PERMANENT is also cannot be deleted by garbage collectors. | 54 | NUD_PERMANENT is also cannot be deleted by garbage collectors. |
| 57 | */ | 55 | */ |
| 58 | 56 | ||
| 59 | struct nda_cacheinfo | 57 | struct nda_cacheinfo { |
| 60 | { | ||
| 61 | __u32 ndm_confirmed; | 58 | __u32 ndm_confirmed; |
| 62 | __u32 ndm_used; | 59 | __u32 ndm_used; |
| 63 | __u32 ndm_updated; | 60 | __u32 ndm_updated; |
| @@ -89,8 +86,7 @@ struct nda_cacheinfo | |||
| 89 | * device. | 86 | * device. |
| 90 | ****/ | 87 | ****/ |
| 91 | 88 | ||
| 92 | struct ndt_stats | 89 | struct ndt_stats { |
| 93 | { | ||
| 94 | __u64 ndts_allocs; | 90 | __u64 ndts_allocs; |
| 95 | __u64 ndts_destroys; | 91 | __u64 ndts_destroys; |
| 96 | __u64 ndts_hash_grows; | 92 | __u64 ndts_hash_grows; |
| @@ -124,15 +120,13 @@ enum { | |||
| 124 | }; | 120 | }; |
| 125 | #define NDTPA_MAX (__NDTPA_MAX - 1) | 121 | #define NDTPA_MAX (__NDTPA_MAX - 1) |
| 126 | 122 | ||
| 127 | struct ndtmsg | 123 | struct ndtmsg { |
| 128 | { | ||
| 129 | __u8 ndtm_family; | 124 | __u8 ndtm_family; |
| 130 | __u8 ndtm_pad1; | 125 | __u8 ndtm_pad1; |
| 131 | __u16 ndtm_pad2; | 126 | __u16 ndtm_pad2; |
| 132 | }; | 127 | }; |
| 133 | 128 | ||
| 134 | struct ndt_config | 129 | struct ndt_config { |
| 135 | { | ||
| 136 | __u16 ndtc_key_len; | 130 | __u16 ndtc_key_len; |
| 137 | __u16 ndtc_entry_size; | 131 | __u16 ndtc_entry_size; |
| 138 | __u32 ndtc_entries; | 132 | __u32 ndtc_entries; |
diff --git a/include/linux/net.h b/include/linux/net.h index 4fc2ffd527f9..5e8083cacc8b 100644 --- a/include/linux/net.h +++ b/include/linux/net.h | |||
| @@ -41,6 +41,7 @@ | |||
| 41 | #define SYS_SENDMSG 16 /* sys_sendmsg(2) */ | 41 | #define SYS_SENDMSG 16 /* sys_sendmsg(2) */ |
| 42 | #define SYS_RECVMSG 17 /* sys_recvmsg(2) */ | 42 | #define SYS_RECVMSG 17 /* sys_recvmsg(2) */ |
| 43 | #define SYS_ACCEPT4 18 /* sys_accept4(2) */ | 43 | #define SYS_ACCEPT4 18 /* sys_accept4(2) */ |
| 44 | #define SYS_RECVMMSG 19 /* sys_recvmmsg(2) */ | ||
| 44 | 45 | ||
| 45 | typedef enum { | 46 | typedef enum { |
| 46 | SS_FREE = 0, /* not allocated */ | 47 | SS_FREE = 0, /* not allocated */ |
| @@ -57,6 +58,7 @@ typedef enum { | |||
| 57 | #include <linux/random.h> | 58 | #include <linux/random.h> |
| 58 | #include <linux/wait.h> | 59 | #include <linux/wait.h> |
| 59 | #include <linux/fcntl.h> /* For O_CLOEXEC and O_NONBLOCK */ | 60 | #include <linux/fcntl.h> /* For O_CLOEXEC and O_NONBLOCK */ |
| 61 | #include <linux/kmemcheck.h> | ||
| 60 | 62 | ||
| 61 | struct poll_table_struct; | 63 | struct poll_table_struct; |
| 62 | struct pipe_inode_info; | 64 | struct pipe_inode_info; |
| @@ -127,7 +129,11 @@ enum sock_shutdown_cmd { | |||
| 127 | */ | 129 | */ |
| 128 | struct socket { | 130 | struct socket { |
| 129 | socket_state state; | 131 | socket_state state; |
| 132 | |||
| 133 | kmemcheck_bitfield_begin(type); | ||
| 130 | short type; | 134 | short type; |
| 135 | kmemcheck_bitfield_end(type); | ||
| 136 | |||
| 131 | unsigned long flags; | 137 | unsigned long flags; |
| 132 | /* | 138 | /* |
| 133 | * Please keep fasync_list & wait fields in the same cache line | 139 | * Please keep fasync_list & wait fields in the same cache line |
| @@ -173,11 +179,11 @@ struct proto_ops { | |||
| 173 | int (*listen) (struct socket *sock, int len); | 179 | int (*listen) (struct socket *sock, int len); |
| 174 | int (*shutdown) (struct socket *sock, int flags); | 180 | int (*shutdown) (struct socket *sock, int flags); |
| 175 | int (*setsockopt)(struct socket *sock, int level, | 181 | int (*setsockopt)(struct socket *sock, int level, |
| 176 | int optname, char __user *optval, int optlen); | 182 | int optname, char __user *optval, unsigned int optlen); |
| 177 | int (*getsockopt)(struct socket *sock, int level, | 183 | int (*getsockopt)(struct socket *sock, int level, |
| 178 | int optname, char __user *optval, int __user *optlen); | 184 | int optname, char __user *optval, int __user *optlen); |
| 179 | int (*compat_setsockopt)(struct socket *sock, int level, | 185 | int (*compat_setsockopt)(struct socket *sock, int level, |
| 180 | int optname, char __user *optval, int optlen); | 186 | int optname, char __user *optval, unsigned int optlen); |
| 181 | int (*compat_getsockopt)(struct socket *sock, int level, | 187 | int (*compat_getsockopt)(struct socket *sock, int level, |
| 182 | int optname, char __user *optval, int __user *optlen); | 188 | int optname, char __user *optval, int __user *optlen); |
| 183 | int (*sendmsg) (struct kiocb *iocb, struct socket *sock, | 189 | int (*sendmsg) (struct kiocb *iocb, struct socket *sock, |
| @@ -193,9 +199,13 @@ struct proto_ops { | |||
| 193 | struct pipe_inode_info *pipe, size_t len, unsigned int flags); | 199 | struct pipe_inode_info *pipe, size_t len, unsigned int flags); |
| 194 | }; | 200 | }; |
| 195 | 201 | ||
| 202 | #define DECLARE_SOCKADDR(type, dst, src) \ | ||
| 203 | type dst = ({ __sockaddr_check_size(sizeof(*dst)); (type) src; }) | ||
| 204 | |||
| 196 | struct net_proto_family { | 205 | struct net_proto_family { |
| 197 | int family; | 206 | int family; |
| 198 | int (*create)(struct net *net, struct socket *sock, int protocol); | 207 | int (*create)(struct net *net, struct socket *sock, |
| 208 | int protocol, int kern); | ||
| 199 | struct module *owner; | 209 | struct module *owner; |
| 200 | }; | 210 | }; |
| 201 | 211 | ||
| @@ -251,96 +261,13 @@ extern int kernel_getpeername(struct socket *sock, struct sockaddr *addr, | |||
| 251 | extern int kernel_getsockopt(struct socket *sock, int level, int optname, | 261 | extern int kernel_getsockopt(struct socket *sock, int level, int optname, |
| 252 | char *optval, int *optlen); | 262 | char *optval, int *optlen); |
| 253 | extern int kernel_setsockopt(struct socket *sock, int level, int optname, | 263 | extern int kernel_setsockopt(struct socket *sock, int level, int optname, |
| 254 | char *optval, int optlen); | 264 | char *optval, unsigned int optlen); |
| 255 | extern int kernel_sendpage(struct socket *sock, struct page *page, int offset, | 265 | extern int kernel_sendpage(struct socket *sock, struct page *page, int offset, |
| 256 | size_t size, int flags); | 266 | size_t size, int flags); |
| 257 | extern int kernel_sock_ioctl(struct socket *sock, int cmd, unsigned long arg); | 267 | extern int kernel_sock_ioctl(struct socket *sock, int cmd, unsigned long arg); |
| 258 | extern int kernel_sock_shutdown(struct socket *sock, | 268 | extern int kernel_sock_shutdown(struct socket *sock, |
| 259 | enum sock_shutdown_cmd how); | 269 | enum sock_shutdown_cmd how); |
| 260 | 270 | ||
| 261 | #ifndef CONFIG_SMP | ||
| 262 | #define SOCKOPS_WRAPPED(name) name | ||
| 263 | #define SOCKOPS_WRAP(name, fam) | ||
| 264 | #else | ||
| 265 | |||
| 266 | #define SOCKOPS_WRAPPED(name) __unlocked_##name | ||
| 267 | |||
| 268 | #define SOCKCALL_WRAP(name, call, parms, args) \ | ||
| 269 | static int __lock_##name##_##call parms \ | ||
| 270 | { \ | ||
| 271 | int ret; \ | ||
| 272 | lock_kernel(); \ | ||
| 273 | ret = __unlocked_##name##_ops.call args ;\ | ||
| 274 | unlock_kernel(); \ | ||
| 275 | return ret; \ | ||
| 276 | } | ||
| 277 | |||
| 278 | #define SOCKCALL_UWRAP(name, call, parms, args) \ | ||
| 279 | static unsigned int __lock_##name##_##call parms \ | ||
| 280 | { \ | ||
| 281 | int ret; \ | ||
| 282 | lock_kernel(); \ | ||
| 283 | ret = __unlocked_##name##_ops.call args ;\ | ||
| 284 | unlock_kernel(); \ | ||
| 285 | return ret; \ | ||
| 286 | } | ||
| 287 | |||
| 288 | |||
| 289 | #define SOCKOPS_WRAP(name, fam) \ | ||
| 290 | SOCKCALL_WRAP(name, release, (struct socket *sock), (sock)) \ | ||
| 291 | SOCKCALL_WRAP(name, bind, (struct socket *sock, struct sockaddr *uaddr, int addr_len), \ | ||
| 292 | (sock, uaddr, addr_len)) \ | ||
| 293 | SOCKCALL_WRAP(name, connect, (struct socket *sock, struct sockaddr * uaddr, \ | ||
| 294 | int addr_len, int flags), \ | ||
| 295 | (sock, uaddr, addr_len, flags)) \ | ||
| 296 | SOCKCALL_WRAP(name, socketpair, (struct socket *sock1, struct socket *sock2), \ | ||
| 297 | (sock1, sock2)) \ | ||
| 298 | SOCKCALL_WRAP(name, accept, (struct socket *sock, struct socket *newsock, \ | ||
| 299 | int flags), (sock, newsock, flags)) \ | ||
| 300 | SOCKCALL_WRAP(name, getname, (struct socket *sock, struct sockaddr *uaddr, \ | ||
| 301 | int *addr_len, int peer), (sock, uaddr, addr_len, peer)) \ | ||
| 302 | SOCKCALL_UWRAP(name, poll, (struct file *file, struct socket *sock, struct poll_table_struct *wait), \ | ||
| 303 | (file, sock, wait)) \ | ||
| 304 | SOCKCALL_WRAP(name, ioctl, (struct socket *sock, unsigned int cmd, \ | ||
| 305 | unsigned long arg), (sock, cmd, arg)) \ | ||
| 306 | SOCKCALL_WRAP(name, compat_ioctl, (struct socket *sock, unsigned int cmd, \ | ||
| 307 | unsigned long arg), (sock, cmd, arg)) \ | ||
| 308 | SOCKCALL_WRAP(name, listen, (struct socket *sock, int len), (sock, len)) \ | ||
| 309 | SOCKCALL_WRAP(name, shutdown, (struct socket *sock, int flags), (sock, flags)) \ | ||
| 310 | SOCKCALL_WRAP(name, setsockopt, (struct socket *sock, int level, int optname, \ | ||
| 311 | char __user *optval, int optlen), (sock, level, optname, optval, optlen)) \ | ||
| 312 | SOCKCALL_WRAP(name, getsockopt, (struct socket *sock, int level, int optname, \ | ||
| 313 | char __user *optval, int __user *optlen), (sock, level, optname, optval, optlen)) \ | ||
| 314 | SOCKCALL_WRAP(name, sendmsg, (struct kiocb *iocb, struct socket *sock, struct msghdr *m, size_t len), \ | ||
| 315 | (iocb, sock, m, len)) \ | ||
| 316 | SOCKCALL_WRAP(name, recvmsg, (struct kiocb *iocb, struct socket *sock, struct msghdr *m, size_t len, int flags), \ | ||
| 317 | (iocb, sock, m, len, flags)) \ | ||
| 318 | SOCKCALL_WRAP(name, mmap, (struct file *file, struct socket *sock, struct vm_area_struct *vma), \ | ||
| 319 | (file, sock, vma)) \ | ||
| 320 | \ | ||
| 321 | static const struct proto_ops name##_ops = { \ | ||
| 322 | .family = fam, \ | ||
| 323 | .owner = THIS_MODULE, \ | ||
| 324 | .release = __lock_##name##_release, \ | ||
| 325 | .bind = __lock_##name##_bind, \ | ||
| 326 | .connect = __lock_##name##_connect, \ | ||
| 327 | .socketpair = __lock_##name##_socketpair, \ | ||
| 328 | .accept = __lock_##name##_accept, \ | ||
| 329 | .getname = __lock_##name##_getname, \ | ||
| 330 | .poll = __lock_##name##_poll, \ | ||
| 331 | .ioctl = __lock_##name##_ioctl, \ | ||
| 332 | .compat_ioctl = __lock_##name##_compat_ioctl, \ | ||
| 333 | .listen = __lock_##name##_listen, \ | ||
| 334 | .shutdown = __lock_##name##_shutdown, \ | ||
| 335 | .setsockopt = __lock_##name##_setsockopt, \ | ||
| 336 | .getsockopt = __lock_##name##_getsockopt, \ | ||
| 337 | .sendmsg = __lock_##name##_sendmsg, \ | ||
| 338 | .recvmsg = __lock_##name##_recvmsg, \ | ||
| 339 | .mmap = __lock_##name##_mmap, \ | ||
| 340 | }; | ||
| 341 | |||
| 342 | #endif | ||
| 343 | |||
| 344 | #define MODULE_ALIAS_NETPROTO(proto) \ | 271 | #define MODULE_ALIAS_NETPROTO(proto) \ |
| 345 | MODULE_ALIAS("net-pf-" __stringify(proto)) | 272 | MODULE_ALIAS("net-pf-" __stringify(proto)) |
| 346 | 273 | ||
| @@ -353,6 +280,7 @@ static const struct proto_ops name##_ops = { \ | |||
| 353 | 280 | ||
| 354 | #ifdef CONFIG_SYSCTL | 281 | #ifdef CONFIG_SYSCTL |
| 355 | #include <linux/sysctl.h> | 282 | #include <linux/sysctl.h> |
| 283 | #include <linux/ratelimit.h> | ||
| 356 | extern struct ratelimit_state net_ratelimit_state; | 284 | extern struct ratelimit_state net_ratelimit_state; |
| 357 | #endif | 285 | #endif |
| 358 | 286 | ||
diff --git a/include/linux/net_dropmon.h b/include/linux/net_dropmon.h index 3ceb0cc1bc78..2a739462caeb 100644 --- a/include/linux/net_dropmon.h +++ b/include/linux/net_dropmon.h | |||
| @@ -3,7 +3,6 @@ | |||
| 3 | 3 | ||
| 4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
| 5 | #include <linux/netlink.h> | 5 | #include <linux/netlink.h> |
| 6 | #include <linux/types.h> | ||
| 7 | 6 | ||
| 8 | struct net_dm_drop_point { | 7 | struct net_dm_drop_point { |
| 9 | __u8 pc[8]; | 8 | __u8 pc[8]; |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index d4a4d9867794..a3fccc85b1a0 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
| @@ -63,37 +63,74 @@ struct wireless_dev; | |||
| 63 | #define HAVE_FREE_NETDEV /* free_netdev() */ | 63 | #define HAVE_FREE_NETDEV /* free_netdev() */ |
| 64 | #define HAVE_NETDEV_PRIV /* netdev_priv() */ | 64 | #define HAVE_NETDEV_PRIV /* netdev_priv() */ |
| 65 | 65 | ||
| 66 | #define NET_XMIT_SUCCESS 0 | ||
| 67 | #define NET_XMIT_DROP 1 /* skb dropped */ | ||
| 68 | #define NET_XMIT_CN 2 /* congestion notification */ | ||
| 69 | #define NET_XMIT_POLICED 3 /* skb is shot by police */ | ||
| 70 | #define NET_XMIT_MASK 0xFFFF /* qdisc flags in net/sch_generic.h */ | ||
| 71 | |||
| 72 | /* Backlog congestion levels */ | 66 | /* Backlog congestion levels */ |
| 73 | #define NET_RX_SUCCESS 0 /* keep 'em coming, baby */ | 67 | #define NET_RX_SUCCESS 0 /* keep 'em coming, baby */ |
| 74 | #define NET_RX_DROP 1 /* packet dropped */ | 68 | #define NET_RX_DROP 1 /* packet dropped */ |
| 75 | #define NET_RX_CN_LOW 2 /* storm alert, just in case */ | 69 | |
| 76 | #define NET_RX_CN_MOD 3 /* Storm on its way! */ | 70 | /* |
| 77 | #define NET_RX_CN_HIGH 4 /* The storm is here */ | 71 | * Transmit return codes: transmit return codes originate from three different |
| 78 | #define NET_RX_BAD 5 /* packet dropped due to kernel error */ | 72 | * namespaces: |
| 73 | * | ||
| 74 | * - qdisc return codes | ||
| 75 | * - driver transmit return codes | ||
| 76 | * - errno values | ||
| 77 | * | ||
| 78 | * Drivers are allowed to return any one of those in their hard_start_xmit() | ||
| 79 | * function. Real network devices commonly used with qdiscs should only return | ||
| 80 | * the driver transmit return codes though - when qdiscs are used, the actual | ||
| 81 | * transmission happens asynchronously, so the value is not propagated to | ||
| 82 | * higher layers. Virtual network devices transmit synchronously, in this case | ||
| 83 | * the driver transmit return codes are consumed by dev_queue_xmit(), all | ||
| 84 | * others are propagated to higher layers. | ||
| 85 | */ | ||
| 86 | |||
| 87 | /* qdisc ->enqueue() return codes. */ | ||
| 88 | #define NET_XMIT_SUCCESS 0x00 | ||
| 89 | #define NET_XMIT_DROP 0x01 /* skb dropped */ | ||
| 90 | #define NET_XMIT_CN 0x02 /* congestion notification */ | ||
| 91 | #define NET_XMIT_POLICED 0x03 /* skb is shot by police */ | ||
| 92 | #define NET_XMIT_MASK 0x0f /* qdisc flags in net/sch_generic.h */ | ||
| 79 | 93 | ||
| 80 | /* NET_XMIT_CN is special. It does not guarantee that this packet is lost. It | 94 | /* NET_XMIT_CN is special. It does not guarantee that this packet is lost. It |
| 81 | * indicates that the device will soon be dropping packets, or already drops | 95 | * indicates that the device will soon be dropping packets, or already drops |
| 82 | * some packets of the same priority; prompting us to send less aggressively. */ | 96 | * some packets of the same priority; prompting us to send less aggressively. */ |
| 83 | #define net_xmit_eval(e) ((e) == NET_XMIT_CN? 0 : (e)) | 97 | #define net_xmit_eval(e) ((e) == NET_XMIT_CN ? 0 : (e)) |
| 84 | #define net_xmit_errno(e) ((e) != NET_XMIT_CN ? -ENOBUFS : 0) | 98 | #define net_xmit_errno(e) ((e) != NET_XMIT_CN ? -ENOBUFS : 0) |
| 85 | 99 | ||
| 100 | /* Driver transmit return codes */ | ||
| 101 | #define NETDEV_TX_MASK 0xf0 | ||
| 102 | |||
| 103 | enum netdev_tx { | ||
| 104 | __NETDEV_TX_MIN = INT_MIN, /* make sure enum is signed */ | ||
| 105 | NETDEV_TX_OK = 0x00, /* driver took care of packet */ | ||
| 106 | NETDEV_TX_BUSY = 0x10, /* driver tx path was busy*/ | ||
| 107 | NETDEV_TX_LOCKED = 0x20, /* driver tx lock was already taken */ | ||
| 108 | }; | ||
| 109 | typedef enum netdev_tx netdev_tx_t; | ||
| 110 | |||
| 111 | /* | ||
| 112 | * Current order: NETDEV_TX_MASK > NET_XMIT_MASK >= 0 is significant; | ||
| 113 | * hard_start_xmit() return < NET_XMIT_MASK means skb was consumed. | ||
| 114 | */ | ||
| 115 | static inline bool dev_xmit_complete(int rc) | ||
| 116 | { | ||
| 117 | /* | ||
| 118 | * Positive cases with an skb consumed by a driver: | ||
| 119 | * - successful transmission (rc == NETDEV_TX_OK) | ||
| 120 | * - error while transmitting (rc < 0) | ||
| 121 | * - error while queueing to a different device (rc & NET_XMIT_MASK) | ||
| 122 | */ | ||
| 123 | if (likely(rc < NET_XMIT_MASK)) | ||
| 124 | return true; | ||
| 125 | |||
| 126 | return false; | ||
| 127 | } | ||
| 128 | |||
| 86 | #endif | 129 | #endif |
| 87 | 130 | ||
| 88 | #define MAX_ADDR_LEN 32 /* Largest hardware address length */ | 131 | #define MAX_ADDR_LEN 32 /* Largest hardware address length */ |
| 89 | 132 | ||
| 90 | /* Driver transmit return codes */ | ||
| 91 | #define NETDEV_TX_OK 0 /* driver took care of packet */ | ||
| 92 | #define NETDEV_TX_BUSY 1 /* driver tx path was busy*/ | ||
| 93 | #define NETDEV_TX_LOCKED -1 /* driver tx lock was already taken */ | ||
| 94 | |||
| 95 | #ifdef __KERNEL__ | 133 | #ifdef __KERNEL__ |
| 96 | |||
| 97 | /* | 134 | /* |
| 98 | * Compute the worst case header length according to the protocols | 135 | * Compute the worst case header length according to the protocols |
| 99 | * used. | 136 | * used. |
| @@ -127,8 +164,7 @@ struct wireless_dev; | |||
| 127 | * with byte counters. | 164 | * with byte counters. |
| 128 | */ | 165 | */ |
| 129 | 166 | ||
| 130 | struct net_device_stats | 167 | struct net_device_stats { |
| 131 | { | ||
| 132 | unsigned long rx_packets; /* total packets received */ | 168 | unsigned long rx_packets; /* total packets received */ |
| 133 | unsigned long tx_packets; /* total packets transmitted */ | 169 | unsigned long tx_packets; /* total packets transmitted */ |
| 134 | unsigned long rx_bytes; /* total bytes received */ | 170 | unsigned long rx_bytes; /* total bytes received */ |
| @@ -181,8 +217,7 @@ struct neighbour; | |||
| 181 | struct neigh_parms; | 217 | struct neigh_parms; |
| 182 | struct sk_buff; | 218 | struct sk_buff; |
| 183 | 219 | ||
| 184 | struct netif_rx_stats | 220 | struct netif_rx_stats { |
| 185 | { | ||
| 186 | unsigned total; | 221 | unsigned total; |
| 187 | unsigned dropped; | 222 | unsigned dropped; |
| 188 | unsigned time_squeeze; | 223 | unsigned time_squeeze; |
| @@ -191,8 +226,7 @@ struct netif_rx_stats | |||
| 191 | 226 | ||
| 192 | DECLARE_PER_CPU(struct netif_rx_stats, netdev_rx_stat); | 227 | DECLARE_PER_CPU(struct netif_rx_stats, netdev_rx_stat); |
| 193 | 228 | ||
| 194 | struct dev_addr_list | 229 | struct dev_addr_list { |
| 195 | { | ||
| 196 | struct dev_addr_list *next; | 230 | struct dev_addr_list *next; |
| 197 | u8 da_addr[MAX_ADDR_LEN]; | 231 | u8 da_addr[MAX_ADDR_LEN]; |
| 198 | u8 da_addrlen; | 232 | u8 da_addrlen; |
| @@ -229,8 +263,7 @@ struct netdev_hw_addr_list { | |||
| 229 | int count; | 263 | int count; |
| 230 | }; | 264 | }; |
| 231 | 265 | ||
| 232 | struct hh_cache | 266 | struct hh_cache { |
| 233 | { | ||
| 234 | struct hh_cache *hh_next; /* Next entry */ | 267 | struct hh_cache *hh_next; /* Next entry */ |
| 235 | atomic_t hh_refcnt; /* number of users */ | 268 | atomic_t hh_refcnt; /* number of users */ |
| 236 | /* | 269 | /* |
| @@ -293,8 +326,7 @@ struct header_ops { | |||
| 293 | * code. | 326 | * code. |
| 294 | */ | 327 | */ |
| 295 | 328 | ||
| 296 | enum netdev_state_t | 329 | enum netdev_state_t { |
| 297 | { | ||
| 298 | __LINK_STATE_START, | 330 | __LINK_STATE_START, |
| 299 | __LINK_STATE_PRESENT, | 331 | __LINK_STATE_PRESENT, |
| 300 | __LINK_STATE_NOCARRIER, | 332 | __LINK_STATE_NOCARRIER, |
| @@ -343,20 +375,20 @@ struct napi_struct { | |||
| 343 | struct sk_buff *skb; | 375 | struct sk_buff *skb; |
| 344 | }; | 376 | }; |
| 345 | 377 | ||
| 346 | enum | 378 | enum { |
| 347 | { | ||
| 348 | NAPI_STATE_SCHED, /* Poll is scheduled */ | 379 | NAPI_STATE_SCHED, /* Poll is scheduled */ |
| 349 | NAPI_STATE_DISABLE, /* Disable pending */ | 380 | NAPI_STATE_DISABLE, /* Disable pending */ |
| 350 | NAPI_STATE_NPSVC, /* Netpoll - don't dequeue from poll_list */ | 381 | NAPI_STATE_NPSVC, /* Netpoll - don't dequeue from poll_list */ |
| 351 | }; | 382 | }; |
| 352 | 383 | ||
| 353 | enum { | 384 | enum gro_result { |
| 354 | GRO_MERGED, | 385 | GRO_MERGED, |
| 355 | GRO_MERGED_FREE, | 386 | GRO_MERGED_FREE, |
| 356 | GRO_HELD, | 387 | GRO_HELD, |
| 357 | GRO_NORMAL, | 388 | GRO_NORMAL, |
| 358 | GRO_DROP, | 389 | GRO_DROP, |
| 359 | }; | 390 | }; |
| 391 | typedef enum gro_result gro_result_t; | ||
| 360 | 392 | ||
| 361 | extern void __napi_schedule(struct napi_struct *n); | 393 | extern void __napi_schedule(struct napi_struct *n); |
| 362 | 394 | ||
| @@ -459,8 +491,7 @@ static inline void napi_synchronize(const struct napi_struct *n) | |||
| 459 | # define napi_synchronize(n) barrier() | 491 | # define napi_synchronize(n) barrier() |
| 460 | #endif | 492 | #endif |
| 461 | 493 | ||
| 462 | enum netdev_queue_state_t | 494 | enum netdev_queue_state_t { |
| 463 | { | ||
| 464 | __QUEUE_STATE_XOFF, | 495 | __QUEUE_STATE_XOFF, |
| 465 | __QUEUE_STATE_FROZEN, | 496 | __QUEUE_STATE_FROZEN, |
| 466 | }; | 497 | }; |
| @@ -511,9 +542,11 @@ struct netdev_queue { | |||
| 511 | * This function is called when network device transistions to the down | 542 | * This function is called when network device transistions to the down |
| 512 | * state. | 543 | * state. |
| 513 | * | 544 | * |
| 514 | * int (*ndo_start_xmit)(struct sk_buff *skb, struct net_device *dev); | 545 | * netdev_tx_t (*ndo_start_xmit)(struct sk_buff *skb, |
| 546 | * struct net_device *dev); | ||
| 515 | * Called when a packet needs to be transmitted. | 547 | * Called when a packet needs to be transmitted. |
| 516 | * Must return NETDEV_TX_OK , NETDEV_TX_BUSY, or NETDEV_TX_LOCKED, | 548 | * Must return NETDEV_TX_OK , NETDEV_TX_BUSY. |
| 549 | * (can also return NETDEV_TX_LOCKED iff NETIF_F_LLTX) | ||
| 517 | * Required can not be NULL. | 550 | * Required can not be NULL. |
| 518 | * | 551 | * |
| 519 | * u16 (*ndo_select_queue)(struct net_device *dev, struct sk_buff *skb); | 552 | * u16 (*ndo_select_queue)(struct net_device *dev, struct sk_buff *skb); |
| @@ -557,7 +590,7 @@ struct netdev_queue { | |||
| 557 | * Callback uses when the transmitter has not made any progress | 590 | * Callback uses when the transmitter has not made any progress |
| 558 | * for dev->watchdog ticks. | 591 | * for dev->watchdog ticks. |
| 559 | * | 592 | * |
| 560 | * struct net_device_stats* (*get_stats)(struct net_device *dev); | 593 | * struct net_device_stats* (*ndo_get_stats)(struct net_device *dev); |
| 561 | * Called when a user wants to get the network device usage | 594 | * Called when a user wants to get the network device usage |
| 562 | * statistics. If not defined, the counters in dev->stats will | 595 | * statistics. If not defined, the counters in dev->stats will |
| 563 | * be used. | 596 | * be used. |
| @@ -584,7 +617,7 @@ struct net_device_ops { | |||
| 584 | void (*ndo_uninit)(struct net_device *dev); | 617 | void (*ndo_uninit)(struct net_device *dev); |
| 585 | int (*ndo_open)(struct net_device *dev); | 618 | int (*ndo_open)(struct net_device *dev); |
| 586 | int (*ndo_stop)(struct net_device *dev); | 619 | int (*ndo_stop)(struct net_device *dev); |
| 587 | int (*ndo_start_xmit) (struct sk_buff *skb, | 620 | netdev_tx_t (*ndo_start_xmit) (struct sk_buff *skb, |
| 588 | struct net_device *dev); | 621 | struct net_device *dev); |
| 589 | u16 (*ndo_select_queue)(struct net_device *dev, | 622 | u16 (*ndo_select_queue)(struct net_device *dev, |
| 590 | struct sk_buff *skb); | 623 | struct sk_buff *skb); |
| @@ -627,12 +660,18 @@ struct net_device_ops { | |||
| 627 | void (*ndo_poll_controller)(struct net_device *dev); | 660 | void (*ndo_poll_controller)(struct net_device *dev); |
| 628 | #endif | 661 | #endif |
| 629 | #if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE) | 662 | #if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE) |
| 663 | int (*ndo_fcoe_enable)(struct net_device *dev); | ||
| 664 | int (*ndo_fcoe_disable)(struct net_device *dev); | ||
| 630 | int (*ndo_fcoe_ddp_setup)(struct net_device *dev, | 665 | int (*ndo_fcoe_ddp_setup)(struct net_device *dev, |
| 631 | u16 xid, | 666 | u16 xid, |
| 632 | struct scatterlist *sgl, | 667 | struct scatterlist *sgl, |
| 633 | unsigned int sgc); | 668 | unsigned int sgc); |
| 634 | int (*ndo_fcoe_ddp_done)(struct net_device *dev, | 669 | int (*ndo_fcoe_ddp_done)(struct net_device *dev, |
| 635 | u16 xid); | 670 | u16 xid); |
| 671 | #define NETDEV_FCOE_WWNN 0 | ||
| 672 | #define NETDEV_FCOE_WWPN 1 | ||
| 673 | int (*ndo_fcoe_get_wwn)(struct net_device *dev, | ||
| 674 | u64 *wwn, int type); | ||
| 636 | #endif | 675 | #endif |
| 637 | }; | 676 | }; |
| 638 | 677 | ||
| @@ -646,8 +685,7 @@ struct net_device_ops { | |||
| 646 | * moves out. | 685 | * moves out. |
| 647 | */ | 686 | */ |
| 648 | 687 | ||
| 649 | struct net_device | 688 | struct net_device { |
| 650 | { | ||
| 651 | 689 | ||
| 652 | /* | 690 | /* |
| 653 | * This is the first field of the "visible" part of this structure | 691 | * This is the first field of the "visible" part of this structure |
| @@ -681,6 +719,7 @@ struct net_device | |||
| 681 | 719 | ||
| 682 | struct list_head dev_list; | 720 | struct list_head dev_list; |
| 683 | struct list_head napi_list; | 721 | struct list_head napi_list; |
| 722 | struct list_head unreg_list; | ||
| 684 | 723 | ||
| 685 | /* Net device features */ | 724 | /* Net device features */ |
| 686 | unsigned long features; | 725 | unsigned long features; |
| @@ -705,6 +744,7 @@ struct net_device | |||
| 705 | /* the GSO_MASK reserves bits 16 through 23 */ | 744 | /* the GSO_MASK reserves bits 16 through 23 */ |
| 706 | #define NETIF_F_FCOE_CRC (1 << 24) /* FCoE CRC32 */ | 745 | #define NETIF_F_FCOE_CRC (1 << 24) /* FCoE CRC32 */ |
| 707 | #define NETIF_F_SCTP_CSUM (1 << 25) /* SCTP checksum offload */ | 746 | #define NETIF_F_SCTP_CSUM (1 << 25) /* SCTP checksum offload */ |
| 747 | #define NETIF_F_FCOE_MTU (1 << 26) /* Supports max FCoE MTU, 2158 bytes*/ | ||
| 708 | 748 | ||
| 709 | /* Segmentation offload features */ | 749 | /* Segmentation offload features */ |
| 710 | #define NETIF_F_GSO_SHIFT 16 | 750 | #define NETIF_F_GSO_SHIFT 16 |
| @@ -829,6 +869,9 @@ struct net_device | |||
| 829 | /* Number of TX queues currently active in device */ | 869 | /* Number of TX queues currently active in device */ |
| 830 | unsigned int real_num_tx_queues; | 870 | unsigned int real_num_tx_queues; |
| 831 | 871 | ||
| 872 | /* root qdisc from userspace point of view */ | ||
| 873 | struct Qdisc *qdisc; | ||
| 874 | |||
| 832 | unsigned long tx_queue_len; /* Max frames per queue allowed */ | 875 | unsigned long tx_queue_len; /* Max frames per queue allowed */ |
| 833 | spinlock_t tx_global_lock; | 876 | spinlock_t tx_global_lock; |
| 834 | /* | 877 | /* |
| @@ -853,7 +896,7 @@ struct net_device | |||
| 853 | /* device index hash chain */ | 896 | /* device index hash chain */ |
| 854 | struct hlist_node index_hlist; | 897 | struct hlist_node index_hlist; |
| 855 | 898 | ||
| 856 | struct net_device *link_watch_next; | 899 | struct list_head link_watch_list; |
| 857 | 900 | ||
| 858 | /* register/unregister state machine */ | 901 | /* register/unregister state machine */ |
| 859 | enum { NETREG_UNINITIALIZED=0, | 902 | enum { NETREG_UNINITIALIZED=0, |
| @@ -888,8 +931,8 @@ struct net_device | |||
| 888 | 931 | ||
| 889 | /* class/net/name entry */ | 932 | /* class/net/name entry */ |
| 890 | struct device dev; | 933 | struct device dev; |
| 891 | /* space for optional statistics and wireless sysfs groups */ | 934 | /* space for optional device, statistics, and wireless sysfs groups */ |
| 892 | struct attribute_group *sysfs_groups[3]; | 935 | const struct attribute_group *sysfs_groups[4]; |
| 893 | 936 | ||
| 894 | /* rtnetlink link ops */ | 937 | /* rtnetlink link ops */ |
| 895 | const struct rtnl_link_ops *rtnl_link_ops; | 938 | const struct rtnl_link_ops *rtnl_link_ops; |
| @@ -903,7 +946,7 @@ struct net_device | |||
| 903 | 946 | ||
| 904 | #ifdef CONFIG_DCB | 947 | #ifdef CONFIG_DCB |
| 905 | /* Data Center Bridging netlink ops */ | 948 | /* Data Center Bridging netlink ops */ |
| 906 | struct dcbnl_rtnl_ops *dcbnl_ops; | 949 | const struct dcbnl_rtnl_ops *dcbnl_ops; |
| 907 | #endif | 950 | #endif |
| 908 | 951 | ||
| 909 | #if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE) | 952 | #if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE) |
| @@ -992,6 +1035,12 @@ static inline void *netdev_priv(const struct net_device *dev) | |||
| 992 | */ | 1035 | */ |
| 993 | #define SET_NETDEV_DEV(net, pdev) ((net)->dev.parent = (pdev)) | 1036 | #define SET_NETDEV_DEV(net, pdev) ((net)->dev.parent = (pdev)) |
| 994 | 1037 | ||
| 1038 | /* Set the sysfs device type for the network logical device to allow | ||
| 1039 | * fin grained indentification of different network device types. For | ||
| 1040 | * example Ethernet, Wirelss LAN, Bluetooth, WiMAX etc. | ||
| 1041 | */ | ||
| 1042 | #define SET_NETDEV_DEVTYPE(net, devtype) ((net)->dev.type = (devtype)) | ||
| 1043 | |||
| 995 | /** | 1044 | /** |
| 996 | * netif_napi_add - initialize a napi context | 1045 | * netif_napi_add - initialize a napi context |
| 997 | * @dev: network device | 1046 | * @dev: network device |
| @@ -1063,10 +1112,16 @@ extern rwlock_t dev_base_lock; /* Device list lock */ | |||
| 1063 | 1112 | ||
| 1064 | #define for_each_netdev(net, d) \ | 1113 | #define for_each_netdev(net, d) \ |
| 1065 | list_for_each_entry(d, &(net)->dev_base_head, dev_list) | 1114 | list_for_each_entry(d, &(net)->dev_base_head, dev_list) |
| 1115 | #define for_each_netdev_reverse(net, d) \ | ||
| 1116 | list_for_each_entry_reverse(d, &(net)->dev_base_head, dev_list) | ||
| 1117 | #define for_each_netdev_rcu(net, d) \ | ||
| 1118 | list_for_each_entry_rcu(d, &(net)->dev_base_head, dev_list) | ||
| 1066 | #define for_each_netdev_safe(net, d, n) \ | 1119 | #define for_each_netdev_safe(net, d, n) \ |
| 1067 | list_for_each_entry_safe(d, n, &(net)->dev_base_head, dev_list) | 1120 | list_for_each_entry_safe(d, n, &(net)->dev_base_head, dev_list) |
| 1068 | #define for_each_netdev_continue(net, d) \ | 1121 | #define for_each_netdev_continue(net, d) \ |
| 1069 | list_for_each_entry_continue(d, &(net)->dev_base_head, dev_list) | 1122 | list_for_each_entry_continue(d, &(net)->dev_base_head, dev_list) |
| 1123 | #define for_each_netdev_continue_rcu(net, d) \ | ||
| 1124 | list_for_each_entry_continue_rcu(d, &(net)->dev_base_head, dev_list) | ||
| 1070 | #define net_device_entry(lh) list_entry(lh, struct net_device, dev_list) | 1125 | #define net_device_entry(lh) list_entry(lh, struct net_device, dev_list) |
| 1071 | 1126 | ||
| 1072 | static inline struct net_device *next_net_device(struct net_device *dev) | 1127 | static inline struct net_device *next_net_device(struct net_device *dev) |
| @@ -1079,6 +1134,16 @@ static inline struct net_device *next_net_device(struct net_device *dev) | |||
| 1079 | return lh == &net->dev_base_head ? NULL : net_device_entry(lh); | 1134 | return lh == &net->dev_base_head ? NULL : net_device_entry(lh); |
| 1080 | } | 1135 | } |
| 1081 | 1136 | ||
| 1137 | static inline struct net_device *next_net_device_rcu(struct net_device *dev) | ||
| 1138 | { | ||
| 1139 | struct list_head *lh; | ||
| 1140 | struct net *net; | ||
| 1141 | |||
| 1142 | net = dev_net(dev); | ||
| 1143 | lh = rcu_dereference(dev->dev_list.next); | ||
| 1144 | return lh == &net->dev_base_head ? NULL : net_device_entry(lh); | ||
| 1145 | } | ||
| 1146 | |||
| 1082 | static inline struct net_device *first_net_device(struct net *net) | 1147 | static inline struct net_device *first_net_device(struct net *net) |
| 1083 | { | 1148 | { |
| 1084 | return list_empty(&net->dev_base_head) ? NULL : | 1149 | return list_empty(&net->dev_base_head) ? NULL : |
| @@ -1097,6 +1162,7 @@ extern void __dev_remove_pack(struct packet_type *pt); | |||
| 1097 | extern struct net_device *dev_get_by_flags(struct net *net, unsigned short flags, | 1162 | extern struct net_device *dev_get_by_flags(struct net *net, unsigned short flags, |
| 1098 | unsigned short mask); | 1163 | unsigned short mask); |
| 1099 | extern struct net_device *dev_get_by_name(struct net *net, const char *name); | 1164 | extern struct net_device *dev_get_by_name(struct net *net, const char *name); |
| 1165 | extern struct net_device *dev_get_by_name_rcu(struct net *net, const char *name); | ||
| 1100 | extern struct net_device *__dev_get_by_name(struct net *net, const char *name); | 1166 | extern struct net_device *__dev_get_by_name(struct net *net, const char *name); |
| 1101 | extern int dev_alloc_name(struct net_device *dev, const char *name); | 1167 | extern int dev_alloc_name(struct net_device *dev, const char *name); |
| 1102 | extern int dev_open(struct net_device *dev); | 1168 | extern int dev_open(struct net_device *dev); |
| @@ -1104,7 +1170,14 @@ extern int dev_close(struct net_device *dev); | |||
| 1104 | extern void dev_disable_lro(struct net_device *dev); | 1170 | extern void dev_disable_lro(struct net_device *dev); |
| 1105 | extern int dev_queue_xmit(struct sk_buff *skb); | 1171 | extern int dev_queue_xmit(struct sk_buff *skb); |
| 1106 | extern int register_netdevice(struct net_device *dev); | 1172 | extern int register_netdevice(struct net_device *dev); |
| 1107 | extern void unregister_netdevice(struct net_device *dev); | 1173 | extern void unregister_netdevice_queue(struct net_device *dev, |
| 1174 | struct list_head *head); | ||
| 1175 | extern void unregister_netdevice_many(struct list_head *head); | ||
| 1176 | static inline void unregister_netdevice(struct net_device *dev) | ||
| 1177 | { | ||
| 1178 | unregister_netdevice_queue(dev, NULL); | ||
| 1179 | } | ||
| 1180 | |||
| 1108 | extern void free_netdev(struct net_device *dev); | 1181 | extern void free_netdev(struct net_device *dev); |
| 1109 | extern void synchronize_net(void); | 1182 | extern void synchronize_net(void); |
| 1110 | extern int register_netdevice_notifier(struct notifier_block *nb); | 1183 | extern int register_netdevice_notifier(struct notifier_block *nb); |
| @@ -1115,6 +1188,7 @@ extern void netdev_resync_ops(struct net_device *dev); | |||
| 1115 | extern int call_netdevice_notifiers(unsigned long val, struct net_device *dev); | 1188 | extern int call_netdevice_notifiers(unsigned long val, struct net_device *dev); |
| 1116 | extern struct net_device *dev_get_by_index(struct net *net, int ifindex); | 1189 | extern struct net_device *dev_get_by_index(struct net *net, int ifindex); |
| 1117 | extern struct net_device *__dev_get_by_index(struct net *net, int ifindex); | 1190 | extern struct net_device *__dev_get_by_index(struct net *net, int ifindex); |
| 1191 | extern struct net_device *dev_get_by_index_rcu(struct net *net, int ifindex); | ||
| 1118 | extern int dev_restart(struct net_device *dev); | 1192 | extern int dev_restart(struct net_device *dev); |
| 1119 | #ifdef CONFIG_NETPOLL_TRAP | 1193 | #ifdef CONFIG_NETPOLL_TRAP |
| 1120 | extern int netpoll_trap(void); | 1194 | extern int netpoll_trap(void); |
| @@ -1200,8 +1274,7 @@ static inline int unregister_gifconf(unsigned int family) | |||
| 1200 | * Incoming packets are placed on per-cpu queues so that | 1274 | * Incoming packets are placed on per-cpu queues so that |
| 1201 | * no locking is needed. | 1275 | * no locking is needed. |
| 1202 | */ | 1276 | */ |
| 1203 | struct softnet_data | 1277 | struct softnet_data { |
| 1204 | { | ||
| 1205 | struct Qdisc *output_queue; | 1278 | struct Qdisc *output_queue; |
| 1206 | struct sk_buff_head input_pkt_queue; | 1279 | struct sk_buff_head input_pkt_queue; |
| 1207 | struct list_head poll_list; | 1280 | struct list_head poll_list; |
| @@ -1260,7 +1333,7 @@ static inline void netif_tx_wake_queue(struct netdev_queue *dev_queue) | |||
| 1260 | { | 1333 | { |
| 1261 | #ifdef CONFIG_NETPOLL_TRAP | 1334 | #ifdef CONFIG_NETPOLL_TRAP |
| 1262 | if (netpoll_trap()) { | 1335 | if (netpoll_trap()) { |
| 1263 | clear_bit(__QUEUE_STATE_XOFF, &dev_queue->state); | 1336 | netif_tx_start_queue(dev_queue); |
| 1264 | return; | 1337 | return; |
| 1265 | } | 1338 | } |
| 1266 | #endif | 1339 | #endif |
| @@ -1366,7 +1439,8 @@ static inline int netif_running(const struct net_device *dev) | |||
| 1366 | static inline void netif_start_subqueue(struct net_device *dev, u16 queue_index) | 1439 | static inline void netif_start_subqueue(struct net_device *dev, u16 queue_index) |
| 1367 | { | 1440 | { |
| 1368 | struct netdev_queue *txq = netdev_get_tx_queue(dev, queue_index); | 1441 | struct netdev_queue *txq = netdev_get_tx_queue(dev, queue_index); |
| 1369 | clear_bit(__QUEUE_STATE_XOFF, &txq->state); | 1442 | |
| 1443 | netif_tx_start_queue(txq); | ||
| 1370 | } | 1444 | } |
| 1371 | 1445 | ||
| 1372 | /** | 1446 | /** |
| @@ -1383,7 +1457,7 @@ static inline void netif_stop_subqueue(struct net_device *dev, u16 queue_index) | |||
| 1383 | if (netpoll_trap()) | 1457 | if (netpoll_trap()) |
| 1384 | return; | 1458 | return; |
| 1385 | #endif | 1459 | #endif |
| 1386 | set_bit(__QUEUE_STATE_XOFF, &txq->state); | 1460 | netif_tx_stop_queue(txq); |
| 1387 | } | 1461 | } |
| 1388 | 1462 | ||
| 1389 | /** | 1463 | /** |
| @@ -1397,7 +1471,8 @@ static inline int __netif_subqueue_stopped(const struct net_device *dev, | |||
| 1397 | u16 queue_index) | 1471 | u16 queue_index) |
| 1398 | { | 1472 | { |
| 1399 | struct netdev_queue *txq = netdev_get_tx_queue(dev, queue_index); | 1473 | struct netdev_queue *txq = netdev_get_tx_queue(dev, queue_index); |
| 1400 | return test_bit(__QUEUE_STATE_XOFF, &txq->state); | 1474 | |
| 1475 | return netif_tx_queue_stopped(txq); | ||
| 1401 | } | 1476 | } |
| 1402 | 1477 | ||
| 1403 | static inline int netif_subqueue_stopped(const struct net_device *dev, | 1478 | static inline int netif_subqueue_stopped(const struct net_device *dev, |
| @@ -1453,18 +1528,19 @@ extern int netif_rx_ni(struct sk_buff *skb); | |||
| 1453 | #define HAVE_NETIF_RECEIVE_SKB 1 | 1528 | #define HAVE_NETIF_RECEIVE_SKB 1 |
| 1454 | extern int netif_receive_skb(struct sk_buff *skb); | 1529 | extern int netif_receive_skb(struct sk_buff *skb); |
| 1455 | extern void napi_gro_flush(struct napi_struct *napi); | 1530 | extern void napi_gro_flush(struct napi_struct *napi); |
| 1456 | extern int dev_gro_receive(struct napi_struct *napi, | 1531 | extern gro_result_t dev_gro_receive(struct napi_struct *napi, |
| 1457 | struct sk_buff *skb); | 1532 | struct sk_buff *skb); |
| 1458 | extern int napi_skb_finish(int ret, struct sk_buff *skb); | 1533 | extern gro_result_t napi_skb_finish(gro_result_t ret, struct sk_buff *skb); |
| 1459 | extern int napi_gro_receive(struct napi_struct *napi, | 1534 | extern gro_result_t napi_gro_receive(struct napi_struct *napi, |
| 1460 | struct sk_buff *skb); | 1535 | struct sk_buff *skb); |
| 1461 | extern void napi_reuse_skb(struct napi_struct *napi, | 1536 | extern void napi_reuse_skb(struct napi_struct *napi, |
| 1462 | struct sk_buff *skb); | 1537 | struct sk_buff *skb); |
| 1463 | extern struct sk_buff * napi_get_frags(struct napi_struct *napi); | 1538 | extern struct sk_buff * napi_get_frags(struct napi_struct *napi); |
| 1464 | extern int napi_frags_finish(struct napi_struct *napi, | 1539 | extern gro_result_t napi_frags_finish(struct napi_struct *napi, |
| 1465 | struct sk_buff *skb, int ret); | 1540 | struct sk_buff *skb, |
| 1541 | gro_result_t ret); | ||
| 1466 | extern struct sk_buff * napi_frags_skb(struct napi_struct *napi); | 1542 | extern struct sk_buff * napi_frags_skb(struct napi_struct *napi); |
| 1467 | extern int napi_gro_frags(struct napi_struct *napi); | 1543 | extern gro_result_t napi_gro_frags(struct napi_struct *napi); |
| 1468 | 1544 | ||
| 1469 | static inline void napi_free_frags(struct napi_struct *napi) | 1545 | static inline void napi_free_frags(struct napi_struct *napi) |
| 1470 | { | 1546 | { |
| @@ -1488,6 +1564,8 @@ extern int dev_set_mac_address(struct net_device *, | |||
| 1488 | extern int dev_hard_start_xmit(struct sk_buff *skb, | 1564 | extern int dev_hard_start_xmit(struct sk_buff *skb, |
| 1489 | struct net_device *dev, | 1565 | struct net_device *dev, |
| 1490 | struct netdev_queue *txq); | 1566 | struct netdev_queue *txq); |
| 1567 | extern int dev_forward_skb(struct net_device *dev, | ||
| 1568 | struct sk_buff *skb); | ||
| 1491 | 1569 | ||
| 1492 | extern int netdev_budget; | 1570 | extern int netdev_budget; |
| 1493 | 1571 | ||
| @@ -1526,6 +1604,7 @@ static inline void dev_hold(struct net_device *dev) | |||
| 1526 | */ | 1604 | */ |
| 1527 | 1605 | ||
| 1528 | extern void linkwatch_fire_event(struct net_device *dev); | 1606 | extern void linkwatch_fire_event(struct net_device *dev); |
| 1607 | extern void linkwatch_forget_dev(struct net_device *dev); | ||
| 1529 | 1608 | ||
| 1530 | /** | 1609 | /** |
| 1531 | * netif_carrier_ok - test if carrier present | 1610 | * netif_carrier_ok - test if carrier present |
| @@ -1595,7 +1674,8 @@ static inline int netif_dormant(const struct net_device *dev) | |||
| 1595 | * | 1674 | * |
| 1596 | * Check if carrier is operational | 1675 | * Check if carrier is operational |
| 1597 | */ | 1676 | */ |
| 1598 | static inline int netif_oper_up(const struct net_device *dev) { | 1677 | static inline int netif_oper_up(const struct net_device *dev) |
| 1678 | { | ||
| 1599 | return (dev->operstate == IF_OPER_UP || | 1679 | return (dev->operstate == IF_OPER_UP || |
| 1600 | dev->operstate == IF_OPER_UNKNOWN /* backward compat */); | 1680 | dev->operstate == IF_OPER_UNKNOWN /* backward compat */); |
| 1601 | } | 1681 | } |
| @@ -1749,8 +1829,7 @@ static inline void netif_tx_unlock(struct net_device *dev) | |||
| 1749 | * force a schedule. | 1829 | * force a schedule. |
| 1750 | */ | 1830 | */ |
| 1751 | clear_bit(__QUEUE_STATE_FROZEN, &txq->state); | 1831 | clear_bit(__QUEUE_STATE_FROZEN, &txq->state); |
| 1752 | if (!test_bit(__QUEUE_STATE_XOFF, &txq->state)) | 1832 | netif_schedule_queue(txq); |
| 1753 | __netif_schedule(txq->qdisc); | ||
| 1754 | } | 1833 | } |
| 1755 | spin_unlock(&dev->tx_global_lock); | 1834 | spin_unlock(&dev->tx_global_lock); |
| 1756 | } | 1835 | } |
| @@ -1860,12 +1939,14 @@ extern void __dev_addr_unsync(struct dev_addr_list **to, int *to_count, struct | |||
| 1860 | extern int dev_set_promiscuity(struct net_device *dev, int inc); | 1939 | extern int dev_set_promiscuity(struct net_device *dev, int inc); |
| 1861 | extern int dev_set_allmulti(struct net_device *dev, int inc); | 1940 | extern int dev_set_allmulti(struct net_device *dev, int inc); |
| 1862 | extern void netdev_state_change(struct net_device *dev); | 1941 | extern void netdev_state_change(struct net_device *dev); |
| 1863 | extern void netdev_bonding_change(struct net_device *dev); | 1942 | extern void netdev_bonding_change(struct net_device *dev, |
| 1943 | unsigned long event); | ||
| 1864 | extern void netdev_features_change(struct net_device *dev); | 1944 | extern void netdev_features_change(struct net_device *dev); |
| 1865 | /* Load a device via the kmod */ | 1945 | /* Load a device via the kmod */ |
| 1866 | extern void dev_load(struct net *net, const char *name); | 1946 | extern void dev_load(struct net *net, const char *name); |
| 1867 | extern void dev_mcast_init(void); | 1947 | extern void dev_mcast_init(void); |
| 1868 | extern const struct net_device_stats *dev_get_stats(struct net_device *dev); | 1948 | extern const struct net_device_stats *dev_get_stats(struct net_device *dev); |
| 1949 | extern void dev_txq_stats_fold(const struct net_device *dev, struct net_device_stats *stats); | ||
| 1869 | 1950 | ||
| 1870 | extern int netdev_max_backlog; | 1951 | extern int netdev_max_backlog; |
| 1871 | extern int weight_p; | 1952 | extern int weight_p; |
| @@ -1900,6 +1981,9 @@ unsigned long netdev_increment_features(unsigned long all, unsigned long one, | |||
| 1900 | unsigned long mask); | 1981 | unsigned long mask); |
| 1901 | unsigned long netdev_fix_features(unsigned long features, const char *name); | 1982 | unsigned long netdev_fix_features(unsigned long features, const char *name); |
| 1902 | 1983 | ||
| 1984 | void netif_stacked_transfer_operstate(const struct net_device *rootdev, | ||
| 1985 | struct net_device *dev); | ||
| 1986 | |||
| 1903 | static inline int net_gso_ok(int features, int gso_type) | 1987 | static inline int net_gso_ok(int features, int gso_type) |
| 1904 | { | 1988 | { |
| 1905 | int feature = gso_type << NETIF_F_GSO_SHIFT; | 1989 | int feature = gso_type << NETIF_F_GSO_SHIFT; |
diff --git a/include/linux/netfilter.h b/include/linux/netfilter.h index 48cfe51bfddc..48c54960773c 100644 --- a/include/linux/netfilter.h +++ b/include/linux/netfilter.h | |||
| @@ -93,8 +93,7 @@ typedef unsigned int nf_hookfn(unsigned int hooknum, | |||
| 93 | const struct net_device *out, | 93 | const struct net_device *out, |
| 94 | int (*okfn)(struct sk_buff *)); | 94 | int (*okfn)(struct sk_buff *)); |
| 95 | 95 | ||
| 96 | struct nf_hook_ops | 96 | struct nf_hook_ops { |
| 97 | { | ||
| 98 | struct list_head list; | 97 | struct list_head list; |
| 99 | 98 | ||
| 100 | /* User fills in from here down. */ | 99 | /* User fills in from here down. */ |
| @@ -106,8 +105,7 @@ struct nf_hook_ops | |||
| 106 | int priority; | 105 | int priority; |
| 107 | }; | 106 | }; |
| 108 | 107 | ||
| 109 | struct nf_sockopt_ops | 108 | struct nf_sockopt_ops { |
| 110 | { | ||
| 111 | struct list_head list; | 109 | struct list_head list; |
| 112 | 110 | ||
| 113 | u_int8_t pf; | 111 | u_int8_t pf; |
| @@ -221,12 +219,12 @@ __ret;}) | |||
| 221 | 219 | ||
| 222 | /* Call setsockopt() */ | 220 | /* Call setsockopt() */ |
| 223 | int nf_setsockopt(struct sock *sk, u_int8_t pf, int optval, char __user *opt, | 221 | int nf_setsockopt(struct sock *sk, u_int8_t pf, int optval, char __user *opt, |
| 224 | int len); | 222 | unsigned int len); |
| 225 | int nf_getsockopt(struct sock *sk, u_int8_t pf, int optval, char __user *opt, | 223 | int nf_getsockopt(struct sock *sk, u_int8_t pf, int optval, char __user *opt, |
| 226 | int *len); | 224 | int *len); |
| 227 | 225 | ||
| 228 | int compat_nf_setsockopt(struct sock *sk, u_int8_t pf, int optval, | 226 | int compat_nf_setsockopt(struct sock *sk, u_int8_t pf, int optval, |
| 229 | char __user *opt, int len); | 227 | char __user *opt, unsigned int len); |
| 230 | int compat_nf_getsockopt(struct sock *sk, u_int8_t pf, int optval, | 228 | int compat_nf_getsockopt(struct sock *sk, u_int8_t pf, int optval, |
| 231 | char __user *opt, int *len); | 229 | char __user *opt, int *len); |
| 232 | 230 | ||
diff --git a/include/linux/netfilter/nf_conntrack_common.h b/include/linux/netfilter/nf_conntrack_common.h index a8248ee422b7..a374787ed9b0 100644 --- a/include/linux/netfilter/nf_conntrack_common.h +++ b/include/linux/netfilter/nf_conntrack_common.h | |||
| @@ -3,8 +3,7 @@ | |||
| 3 | /* Connection state tracking for netfilter. This is separated from, | 3 | /* Connection state tracking for netfilter. This is separated from, |
| 4 | but required by, the NAT layer; it can also be used by an iptables | 4 | but required by, the NAT layer; it can also be used by an iptables |
| 5 | extension. */ | 5 | extension. */ |
| 6 | enum ip_conntrack_info | 6 | enum ip_conntrack_info { |
| 7 | { | ||
| 8 | /* Part of an established connection (either direction). */ | 7 | /* Part of an established connection (either direction). */ |
| 9 | IP_CT_ESTABLISHED, | 8 | IP_CT_ESTABLISHED, |
| 10 | 9 | ||
| @@ -76,8 +75,7 @@ enum ip_conntrack_status { | |||
| 76 | }; | 75 | }; |
| 77 | 76 | ||
| 78 | #ifdef __KERNEL__ | 77 | #ifdef __KERNEL__ |
| 79 | struct ip_conntrack_stat | 78 | struct ip_conntrack_stat { |
| 80 | { | ||
| 81 | unsigned int searched; | 79 | unsigned int searched; |
| 82 | unsigned int found; | 80 | unsigned int found; |
| 83 | unsigned int new; | 81 | unsigned int new; |
diff --git a/include/linux/netfilter/nf_conntrack_ftp.h b/include/linux/netfilter/nf_conntrack_ftp.h index 47727d7546ea..3e3aa08980c3 100644 --- a/include/linux/netfilter/nf_conntrack_ftp.h +++ b/include/linux/netfilter/nf_conntrack_ftp.h | |||
| @@ -3,8 +3,7 @@ | |||
| 3 | /* FTP tracking. */ | 3 | /* FTP tracking. */ |
| 4 | 4 | ||
| 5 | /* This enum is exposed to userspace */ | 5 | /* This enum is exposed to userspace */ |
| 6 | enum nf_ct_ftp_type | 6 | enum nf_ct_ftp_type { |
| 7 | { | ||
| 8 | /* PORT command from client */ | 7 | /* PORT command from client */ |
| 9 | NF_CT_FTP_PORT, | 8 | NF_CT_FTP_PORT, |
| 10 | /* PASV response from server */ | 9 | /* PASV response from server */ |
diff --git a/include/linux/netfilter/nf_conntrack_sctp.h b/include/linux/netfilter/nf_conntrack_sctp.h index 768f78c4ac53..ceeefe6681b5 100644 --- a/include/linux/netfilter/nf_conntrack_sctp.h +++ b/include/linux/netfilter/nf_conntrack_sctp.h | |||
| @@ -16,8 +16,7 @@ enum sctp_conntrack { | |||
| 16 | SCTP_CONNTRACK_MAX | 16 | SCTP_CONNTRACK_MAX |
| 17 | }; | 17 | }; |
| 18 | 18 | ||
| 19 | struct ip_ct_sctp | 19 | struct ip_ct_sctp { |
| 20 | { | ||
| 21 | enum sctp_conntrack state; | 20 | enum sctp_conntrack state; |
| 22 | 21 | ||
| 23 | __be32 vtag[IP_CT_DIR_MAX]; | 22 | __be32 vtag[IP_CT_DIR_MAX]; |
diff --git a/include/linux/netfilter/nf_conntrack_tcp.h b/include/linux/netfilter/nf_conntrack_tcp.h index 4352feed2377..6e135f97e59a 100644 --- a/include/linux/netfilter/nf_conntrack_tcp.h +++ b/include/linux/netfilter/nf_conntrack_tcp.h | |||
| @@ -55,8 +55,7 @@ struct ip_ct_tcp_state { | |||
| 55 | u_int8_t flags; /* per direction options */ | 55 | u_int8_t flags; /* per direction options */ |
| 56 | }; | 56 | }; |
| 57 | 57 | ||
| 58 | struct ip_ct_tcp | 58 | struct ip_ct_tcp { |
| 59 | { | ||
| 60 | struct ip_ct_tcp_state seen[2]; /* connection parameters per direction */ | 59 | struct ip_ct_tcp_state seen[2]; /* connection parameters per direction */ |
| 61 | u_int8_t state; /* state of the connection (enum tcp_conntrack) */ | 60 | u_int8_t state; /* state of the connection (enum tcp_conntrack) */ |
| 62 | /* For detecting stale connections */ | 61 | /* For detecting stale connections */ |
| @@ -67,6 +66,9 @@ struct ip_ct_tcp | |||
| 67 | u_int32_t last_ack; /* Last sequence number seen in opposite dir */ | 66 | u_int32_t last_ack; /* Last sequence number seen in opposite dir */ |
| 68 | u_int32_t last_end; /* Last seq + len */ | 67 | u_int32_t last_end; /* Last seq + len */ |
| 69 | u_int16_t last_win; /* Last window advertisement seen in dir */ | 68 | u_int16_t last_win; /* Last window advertisement seen in dir */ |
| 69 | /* For SYN packets while we may be out-of-sync */ | ||
| 70 | u_int8_t last_wscale; /* Last window scaling factor seen */ | ||
| 71 | u_int8_t last_flags; /* Last flags set */ | ||
| 70 | }; | 72 | }; |
| 71 | 73 | ||
| 72 | #endif /* __KERNEL__ */ | 74 | #endif /* __KERNEL__ */ |
diff --git a/include/linux/netfilter/nfnetlink.h b/include/linux/netfilter/nfnetlink.h index bff4d5741d98..49d321f3ccd2 100644 --- a/include/linux/netfilter/nfnetlink.h +++ b/include/linux/netfilter/nfnetlink.h | |||
| @@ -55,16 +55,15 @@ struct nfgenmsg { | |||
| 55 | #include <linux/capability.h> | 55 | #include <linux/capability.h> |
| 56 | #include <net/netlink.h> | 56 | #include <net/netlink.h> |
| 57 | 57 | ||
| 58 | struct nfnl_callback | 58 | struct nfnl_callback { |
| 59 | { | ||
| 60 | int (*call)(struct sock *nl, struct sk_buff *skb, | 59 | int (*call)(struct sock *nl, struct sk_buff *skb, |
| 61 | struct nlmsghdr *nlh, struct nlattr *cda[]); | 60 | const struct nlmsghdr *nlh, |
| 61 | const struct nlattr * const cda[]); | ||
| 62 | const struct nla_policy *policy; /* netlink attribute policy */ | 62 | const struct nla_policy *policy; /* netlink attribute policy */ |
| 63 | const u_int16_t attr_count; /* number of nlattr's */ | 63 | const u_int16_t attr_count; /* number of nlattr's */ |
| 64 | }; | 64 | }; |
| 65 | 65 | ||
| 66 | struct nfnetlink_subsystem | 66 | struct nfnetlink_subsystem { |
| 67 | { | ||
| 68 | const char *name; | 67 | const char *name; |
| 69 | __u8 subsys_id; /* nfnetlink subsystem ID */ | 68 | __u8 subsys_id; /* nfnetlink subsystem ID */ |
| 70 | __u8 cb_count; /* number of callbacks */ | 69 | __u8 cb_count; /* number of callbacks */ |
diff --git a/include/linux/netfilter/nfnetlink_compat.h b/include/linux/netfilter/nfnetlink_compat.h index eda55cabceec..ffb95036bbd4 100644 --- a/include/linux/netfilter/nfnetlink_compat.h +++ b/include/linux/netfilter/nfnetlink_compat.h | |||
| @@ -21,8 +21,7 @@ | |||
| 21 | * ! nfnetlink use the same attributes methods. - J. Schulist. | 21 | * ! nfnetlink use the same attributes methods. - J. Schulist. |
| 22 | */ | 22 | */ |
| 23 | 23 | ||
| 24 | struct nfattr | 24 | struct nfattr { |
| 25 | { | ||
| 26 | __u16 nfa_len; | 25 | __u16 nfa_len; |
| 27 | __u16 nfa_type; /* we use 15 bits for the type, and the highest | 26 | __u16 nfa_type; /* we use 15 bits for the type, and the highest |
| 28 | * bit to indicate whether the payload is nested */ | 27 | * bit to indicate whether the payload is nested */ |
diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h index 1030b7593898..378f27ae7772 100644 --- a/include/linux/netfilter/x_tables.h +++ b/include/linux/netfilter/x_tables.h | |||
| @@ -6,8 +6,7 @@ | |||
| 6 | #define XT_FUNCTION_MAXNAMELEN 30 | 6 | #define XT_FUNCTION_MAXNAMELEN 30 |
| 7 | #define XT_TABLE_MAXNAMELEN 32 | 7 | #define XT_TABLE_MAXNAMELEN 32 |
| 8 | 8 | ||
| 9 | struct xt_entry_match | 9 | struct xt_entry_match { |
| 10 | { | ||
| 11 | union { | 10 | union { |
| 12 | struct { | 11 | struct { |
| 13 | __u16 match_size; | 12 | __u16 match_size; |
| @@ -31,8 +30,7 @@ struct xt_entry_match | |||
| 31 | unsigned char data[0]; | 30 | unsigned char data[0]; |
| 32 | }; | 31 | }; |
| 33 | 32 | ||
| 34 | struct xt_entry_target | 33 | struct xt_entry_target { |
| 35 | { | ||
| 36 | union { | 34 | union { |
| 37 | struct { | 35 | struct { |
| 38 | __u16 target_size; | 36 | __u16 target_size; |
| @@ -64,16 +62,14 @@ struct xt_entry_target | |||
| 64 | }, \ | 62 | }, \ |
| 65 | } | 63 | } |
| 66 | 64 | ||
| 67 | struct xt_standard_target | 65 | struct xt_standard_target { |
| 68 | { | ||
| 69 | struct xt_entry_target target; | 66 | struct xt_entry_target target; |
| 70 | int verdict; | 67 | int verdict; |
| 71 | }; | 68 | }; |
| 72 | 69 | ||
| 73 | /* The argument to IPT_SO_GET_REVISION_*. Returns highest revision | 70 | /* The argument to IPT_SO_GET_REVISION_*. Returns highest revision |
| 74 | * kernel supports, if >= revision. */ | 71 | * kernel supports, if >= revision. */ |
| 75 | struct xt_get_revision | 72 | struct xt_get_revision { |
| 76 | { | ||
| 77 | char name[XT_FUNCTION_MAXNAMELEN-1]; | 73 | char name[XT_FUNCTION_MAXNAMELEN-1]; |
| 78 | 74 | ||
| 79 | __u8 revision; | 75 | __u8 revision; |
| @@ -90,8 +86,7 @@ struct xt_get_revision | |||
| 90 | * ip6t_entry and arpt_entry. This sucks, and it is a hack. It will be my | 86 | * ip6t_entry and arpt_entry. This sucks, and it is a hack. It will be my |
| 91 | * personal pleasure to remove it -HW | 87 | * personal pleasure to remove it -HW |
| 92 | */ | 88 | */ |
| 93 | struct _xt_align | 89 | struct _xt_align { |
| 94 | { | ||
| 95 | __u8 u8; | 90 | __u8 u8; |
| 96 | __u16 u16; | 91 | __u16 u16; |
| 97 | __u32 u32; | 92 | __u32 u32; |
| @@ -109,14 +104,12 @@ struct _xt_align | |||
| 109 | #define SET_COUNTER(c,b,p) do { (c).bcnt = (b); (c).pcnt = (p); } while(0) | 104 | #define SET_COUNTER(c,b,p) do { (c).bcnt = (b); (c).pcnt = (p); } while(0) |
| 110 | #define ADD_COUNTER(c,b,p) do { (c).bcnt += (b); (c).pcnt += (p); } while(0) | 105 | #define ADD_COUNTER(c,b,p) do { (c).bcnt += (b); (c).pcnt += (p); } while(0) |
| 111 | 106 | ||
| 112 | struct xt_counters | 107 | struct xt_counters { |
| 113 | { | ||
| 114 | __u64 pcnt, bcnt; /* Packet and byte counters */ | 108 | __u64 pcnt, bcnt; /* Packet and byte counters */ |
| 115 | }; | 109 | }; |
| 116 | 110 | ||
| 117 | /* The argument to IPT_SO_ADD_COUNTERS. */ | 111 | /* The argument to IPT_SO_ADD_COUNTERS. */ |
| 118 | struct xt_counters_info | 112 | struct xt_counters_info { |
| 119 | { | ||
| 120 | /* Which table. */ | 113 | /* Which table. */ |
| 121 | char name[XT_TABLE_MAXNAMELEN]; | 114 | char name[XT_TABLE_MAXNAMELEN]; |
| 122 | 115 | ||
| @@ -238,9 +231,9 @@ struct xt_mtdtor_param { | |||
| 238 | */ | 231 | */ |
| 239 | struct xt_target_param { | 232 | struct xt_target_param { |
| 240 | const struct net_device *in, *out; | 233 | const struct net_device *in, *out; |
| 241 | unsigned int hooknum; | ||
| 242 | const struct xt_target *target; | 234 | const struct xt_target *target; |
| 243 | const void *targinfo; | 235 | const void *targinfo; |
| 236 | unsigned int hooknum; | ||
| 244 | u_int8_t family; | 237 | u_int8_t family; |
| 245 | }; | 238 | }; |
| 246 | 239 | ||
| @@ -269,8 +262,7 @@ struct xt_tgdtor_param { | |||
| 269 | u_int8_t family; | 262 | u_int8_t family; |
| 270 | }; | 263 | }; |
| 271 | 264 | ||
| 272 | struct xt_match | 265 | struct xt_match { |
| 273 | { | ||
| 274 | struct list_head list; | 266 | struct list_head list; |
| 275 | 267 | ||
| 276 | const char name[XT_FUNCTION_MAXNAMELEN-1]; | 268 | const char name[XT_FUNCTION_MAXNAMELEN-1]; |
| @@ -310,8 +302,7 @@ struct xt_match | |||
| 310 | }; | 302 | }; |
| 311 | 303 | ||
| 312 | /* Registration hooks for targets. */ | 304 | /* Registration hooks for targets. */ |
| 313 | struct xt_target | 305 | struct xt_target { |
| 314 | { | ||
| 315 | struct list_head list; | 306 | struct list_head list; |
| 316 | 307 | ||
| 317 | const char name[XT_FUNCTION_MAXNAMELEN-1]; | 308 | const char name[XT_FUNCTION_MAXNAMELEN-1]; |
| @@ -349,8 +340,7 @@ struct xt_target | |||
| 349 | }; | 340 | }; |
| 350 | 341 | ||
| 351 | /* Furniture shopping... */ | 342 | /* Furniture shopping... */ |
| 352 | struct xt_table | 343 | struct xt_table { |
| 353 | { | ||
| 354 | struct list_head list; | 344 | struct list_head list; |
| 355 | 345 | ||
| 356 | /* What hooks you will enter on */ | 346 | /* What hooks you will enter on */ |
| @@ -371,8 +361,7 @@ struct xt_table | |||
| 371 | #include <linux/netfilter_ipv4.h> | 361 | #include <linux/netfilter_ipv4.h> |
| 372 | 362 | ||
| 373 | /* The table itself */ | 363 | /* The table itself */ |
| 374 | struct xt_table_info | 364 | struct xt_table_info { |
| 375 | { | ||
| 376 | /* Size per table */ | 365 | /* Size per table */ |
| 377 | unsigned int size; | 366 | unsigned int size; |
| 378 | /* Number of entries: FIXME. --RR */ | 367 | /* Number of entries: FIXME. --RR */ |
| @@ -407,7 +396,7 @@ extern int xt_check_target(struct xt_tgchk_param *, | |||
| 407 | unsigned int size, u_int8_t proto, bool inv_proto); | 396 | unsigned int size, u_int8_t proto, bool inv_proto); |
| 408 | 397 | ||
| 409 | extern struct xt_table *xt_register_table(struct net *net, | 398 | extern struct xt_table *xt_register_table(struct net *net, |
| 410 | struct xt_table *table, | 399 | const struct xt_table *table, |
| 411 | struct xt_table_info *bootstrap, | 400 | struct xt_table_info *bootstrap, |
| 412 | struct xt_table_info *newinfo); | 401 | struct xt_table_info *newinfo); |
| 413 | extern void *xt_unregister_table(struct xt_table *table); | 402 | extern void *xt_unregister_table(struct xt_table *table); |
| @@ -528,8 +517,7 @@ static inline unsigned long ifname_compare_aligned(const char *_a, | |||
| 528 | #ifdef CONFIG_COMPAT | 517 | #ifdef CONFIG_COMPAT |
| 529 | #include <net/compat.h> | 518 | #include <net/compat.h> |
| 530 | 519 | ||
| 531 | struct compat_xt_entry_match | 520 | struct compat_xt_entry_match { |
| 532 | { | ||
| 533 | union { | 521 | union { |
| 534 | struct { | 522 | struct { |
| 535 | u_int16_t match_size; | 523 | u_int16_t match_size; |
| @@ -545,8 +533,7 @@ struct compat_xt_entry_match | |||
| 545 | unsigned char data[0]; | 533 | unsigned char data[0]; |
| 546 | }; | 534 | }; |
| 547 | 535 | ||
| 548 | struct compat_xt_entry_target | 536 | struct compat_xt_entry_target { |
| 549 | { | ||
| 550 | union { | 537 | union { |
| 551 | struct { | 538 | struct { |
| 552 | u_int16_t target_size; | 539 | u_int16_t target_size; |
| @@ -566,8 +553,7 @@ struct compat_xt_entry_target | |||
| 566 | * need to change whole approach in order to calculate align as function of | 553 | * need to change whole approach in order to calculate align as function of |
| 567 | * current task alignment */ | 554 | * current task alignment */ |
| 568 | 555 | ||
| 569 | struct compat_xt_counters | 556 | struct compat_xt_counters { |
| 570 | { | ||
| 571 | #if defined(CONFIG_X86_64) || defined(CONFIG_IA64) | 557 | #if defined(CONFIG_X86_64) || defined(CONFIG_IA64) |
| 572 | u_int32_t cnt[4]; | 558 | u_int32_t cnt[4]; |
| 573 | #else | 559 | #else |
| @@ -575,8 +561,7 @@ struct compat_xt_counters | |||
| 575 | #endif | 561 | #endif |
| 576 | }; | 562 | }; |
| 577 | 563 | ||
| 578 | struct compat_xt_counters_info | 564 | struct compat_xt_counters_info { |
| 579 | { | ||
| 580 | char name[XT_TABLE_MAXNAMELEN]; | 565 | char name[XT_TABLE_MAXNAMELEN]; |
| 581 | compat_uint_t num_counters; | 566 | compat_uint_t num_counters; |
| 582 | struct compat_xt_counters counters[0]; | 567 | struct compat_xt_counters counters[0]; |
diff --git a/include/linux/netfilter/xt_CONNMARK.h b/include/linux/netfilter/xt_CONNMARK.h index 7635c8ffdadb..0a8545866752 100644 --- a/include/linux/netfilter/xt_CONNMARK.h +++ b/include/linux/netfilter/xt_CONNMARK.h | |||
| @@ -18,12 +18,6 @@ enum { | |||
| 18 | XT_CONNMARK_RESTORE | 18 | XT_CONNMARK_RESTORE |
| 19 | }; | 19 | }; |
| 20 | 20 | ||
| 21 | struct xt_connmark_target_info { | ||
| 22 | unsigned long mark; | ||
| 23 | unsigned long mask; | ||
| 24 | __u8 mode; | ||
| 25 | }; | ||
| 26 | |||
| 27 | struct xt_connmark_tginfo1 { | 21 | struct xt_connmark_tginfo1 { |
| 28 | __u32 ctmark, ctmask, nfmask; | 22 | __u32 ctmark, ctmask, nfmask; |
| 29 | __u8 mode; | 23 | __u8 mode; |
diff --git a/include/linux/netfilter/xt_MARK.h b/include/linux/netfilter/xt_MARK.h index 028304bcc0b1..bc9561bdef79 100644 --- a/include/linux/netfilter/xt_MARK.h +++ b/include/linux/netfilter/xt_MARK.h | |||
| @@ -3,23 +3,6 @@ | |||
| 3 | 3 | ||
| 4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
| 5 | 5 | ||
| 6 | /* Version 0 */ | ||
| 7 | struct xt_mark_target_info { | ||
| 8 | unsigned long mark; | ||
| 9 | }; | ||
| 10 | |||
| 11 | /* Version 1 */ | ||
| 12 | enum { | ||
| 13 | XT_MARK_SET=0, | ||
| 14 | XT_MARK_AND, | ||
| 15 | XT_MARK_OR, | ||
| 16 | }; | ||
| 17 | |||
| 18 | struct xt_mark_target_info_v1 { | ||
| 19 | unsigned long mark; | ||
| 20 | __u8 mode; | ||
| 21 | }; | ||
| 22 | |||
| 23 | struct xt_mark_tginfo2 { | 6 | struct xt_mark_tginfo2 { |
| 24 | __u32 mark, mask; | 7 | __u32 mark, mask; |
| 25 | }; | 8 | }; |
diff --git a/include/linux/netfilter/xt_connbytes.h b/include/linux/netfilter/xt_connbytes.h index 52bd6153b996..92fcbb0d193e 100644 --- a/include/linux/netfilter/xt_connbytes.h +++ b/include/linux/netfilter/xt_connbytes.h | |||
| @@ -15,8 +15,7 @@ enum xt_connbytes_direction { | |||
| 15 | XT_CONNBYTES_DIR_BOTH, | 15 | XT_CONNBYTES_DIR_BOTH, |
| 16 | }; | 16 | }; |
| 17 | 17 | ||
| 18 | struct xt_connbytes_info | 18 | struct xt_connbytes_info { |
| 19 | { | ||
| 20 | struct { | 19 | struct { |
| 21 | aligned_u64 from; /* count to be matched */ | 20 | aligned_u64 from; /* count to be matched */ |
| 22 | aligned_u64 to; /* count to be matched */ | 21 | aligned_u64 to; /* count to be matched */ |
diff --git a/include/linux/netfilter/xt_connmark.h b/include/linux/netfilter/xt_connmark.h index 571e266d004c..619e47cde01a 100644 --- a/include/linux/netfilter/xt_connmark.h +++ b/include/linux/netfilter/xt_connmark.h | |||
| @@ -12,11 +12,6 @@ | |||
| 12 | * (at your option) any later version. | 12 | * (at your option) any later version. |
| 13 | */ | 13 | */ |
| 14 | 14 | ||
| 15 | struct xt_connmark_info { | ||
| 16 | unsigned long mark, mask; | ||
| 17 | __u8 invert; | ||
| 18 | }; | ||
| 19 | |||
| 20 | struct xt_connmark_mtinfo1 { | 15 | struct xt_connmark_mtinfo1 { |
| 21 | __u32 mark, mask; | 16 | __u32 mark, mask; |
| 22 | __u8 invert; | 17 | __u8 invert; |
diff --git a/include/linux/netfilter/xt_conntrack.h b/include/linux/netfilter/xt_conntrack.h index 7ae05338e94c..54f47a2f6152 100644 --- a/include/linux/netfilter/xt_conntrack.h +++ b/include/linux/netfilter/xt_conntrack.h | |||
| @@ -32,42 +32,6 @@ enum { | |||
| 32 | XT_CONNTRACK_DIRECTION = 1 << 12, | 32 | XT_CONNTRACK_DIRECTION = 1 << 12, |
| 33 | }; | 33 | }; |
| 34 | 34 | ||
| 35 | /* This is exposed to userspace, so remains frozen in time. */ | ||
| 36 | struct ip_conntrack_old_tuple | ||
| 37 | { | ||
| 38 | struct { | ||
| 39 | __be32 ip; | ||
| 40 | union { | ||
| 41 | __u16 all; | ||
| 42 | } u; | ||
| 43 | } src; | ||
| 44 | |||
| 45 | struct { | ||
| 46 | __be32 ip; | ||
| 47 | union { | ||
| 48 | __u16 all; | ||
| 49 | } u; | ||
| 50 | |||
| 51 | /* The protocol. */ | ||
| 52 | __u16 protonum; | ||
| 53 | } dst; | ||
| 54 | }; | ||
| 55 | |||
| 56 | struct xt_conntrack_info | ||
| 57 | { | ||
| 58 | unsigned int statemask, statusmask; | ||
| 59 | |||
| 60 | struct ip_conntrack_old_tuple tuple[IP_CT_DIR_MAX]; | ||
| 61 | struct in_addr sipmsk[IP_CT_DIR_MAX], dipmsk[IP_CT_DIR_MAX]; | ||
| 62 | |||
| 63 | unsigned long expires_min, expires_max; | ||
| 64 | |||
| 65 | /* Flags word */ | ||
| 66 | __u8 flags; | ||
| 67 | /* Inverse flags */ | ||
| 68 | __u8 invflags; | ||
| 69 | }; | ||
| 70 | |||
| 71 | struct xt_conntrack_mtinfo1 { | 35 | struct xt_conntrack_mtinfo1 { |
| 72 | union nf_inet_addr origsrc_addr, origsrc_mask; | 36 | union nf_inet_addr origsrc_addr, origsrc_mask; |
| 73 | union nf_inet_addr origdst_addr, origdst_mask; | 37 | union nf_inet_addr origdst_addr, origdst_mask; |
diff --git a/include/linux/netfilter/xt_esp.h b/include/linux/netfilter/xt_esp.h index ef6fa4747d0a..ee6882408000 100644 --- a/include/linux/netfilter/xt_esp.h +++ b/include/linux/netfilter/xt_esp.h | |||
| @@ -3,8 +3,7 @@ | |||
| 3 | 3 | ||
| 4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
| 5 | 5 | ||
| 6 | struct xt_esp | 6 | struct xt_esp { |
| 7 | { | ||
| 8 | __u32 spis[2]; /* Security Parameter Index */ | 7 | __u32 spis[2]; /* Security Parameter Index */ |
| 9 | __u8 invflags; /* Inverse flags */ | 8 | __u8 invflags; /* Inverse flags */ |
| 10 | }; | 9 | }; |
diff --git a/include/linux/netfilter/xt_mark.h b/include/linux/netfilter/xt_mark.h index 6fa460a3cc29..6607c8f38ea5 100644 --- a/include/linux/netfilter/xt_mark.h +++ b/include/linux/netfilter/xt_mark.h | |||
| @@ -3,11 +3,6 @@ | |||
| 3 | 3 | ||
| 4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
| 5 | 5 | ||
| 6 | struct xt_mark_info { | ||
| 7 | unsigned long mark, mask; | ||
| 8 | __u8 invert; | ||
| 9 | }; | ||
| 10 | |||
| 11 | struct xt_mark_mtinfo1 { | 6 | struct xt_mark_mtinfo1 { |
| 12 | __u32 mark, mask; | 7 | __u32 mark, mask; |
| 13 | __u8 invert; | 8 | __u8 invert; |
diff --git a/include/linux/netfilter/xt_multiport.h b/include/linux/netfilter/xt_multiport.h index 185db499fcbc..5b7e72dfffc5 100644 --- a/include/linux/netfilter/xt_multiport.h +++ b/include/linux/netfilter/xt_multiport.h | |||
| @@ -3,8 +3,7 @@ | |||
| 3 | 3 | ||
| 4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
| 5 | 5 | ||
| 6 | enum xt_multiport_flags | 6 | enum xt_multiport_flags { |
| 7 | { | ||
| 8 | XT_MULTIPORT_SOURCE, | 7 | XT_MULTIPORT_SOURCE, |
| 9 | XT_MULTIPORT_DESTINATION, | 8 | XT_MULTIPORT_DESTINATION, |
| 10 | XT_MULTIPORT_EITHER | 9 | XT_MULTIPORT_EITHER |
| @@ -13,15 +12,13 @@ enum xt_multiport_flags | |||
| 13 | #define XT_MULTI_PORTS 15 | 12 | #define XT_MULTI_PORTS 15 |
| 14 | 13 | ||
| 15 | /* Must fit inside union xt_matchinfo: 16 bytes */ | 14 | /* Must fit inside union xt_matchinfo: 16 bytes */ |
| 16 | struct xt_multiport | 15 | struct xt_multiport { |
| 17 | { | ||
| 18 | __u8 flags; /* Type of comparison */ | 16 | __u8 flags; /* Type of comparison */ |
| 19 | __u8 count; /* Number of ports */ | 17 | __u8 count; /* Number of ports */ |
| 20 | __u16 ports[XT_MULTI_PORTS]; /* Ports */ | 18 | __u16 ports[XT_MULTI_PORTS]; /* Ports */ |
| 21 | }; | 19 | }; |
| 22 | 20 | ||
| 23 | struct xt_multiport_v1 | 21 | struct xt_multiport_v1 { |
| 24 | { | ||
| 25 | __u8 flags; /* Type of comparison */ | 22 | __u8 flags; /* Type of comparison */ |
| 26 | __u8 count; /* Number of ports */ | 23 | __u8 count; /* Number of ports */ |
| 27 | __u16 ports[XT_MULTI_PORTS]; /* Ports */ | 24 | __u16 ports[XT_MULTI_PORTS]; /* Ports */ |
diff --git a/include/linux/netfilter/xt_policy.h b/include/linux/netfilter/xt_policy.h index 7bb64e7c853d..be8ead05c316 100644 --- a/include/linux/netfilter/xt_policy.h +++ b/include/linux/netfilter/xt_policy.h | |||
| @@ -5,22 +5,19 @@ | |||
| 5 | 5 | ||
| 6 | #define XT_POLICY_MAX_ELEM 4 | 6 | #define XT_POLICY_MAX_ELEM 4 |
| 7 | 7 | ||
| 8 | enum xt_policy_flags | 8 | enum xt_policy_flags { |
| 9 | { | ||
| 10 | XT_POLICY_MATCH_IN = 0x1, | 9 | XT_POLICY_MATCH_IN = 0x1, |
| 11 | XT_POLICY_MATCH_OUT = 0x2, | 10 | XT_POLICY_MATCH_OUT = 0x2, |
| 12 | XT_POLICY_MATCH_NONE = 0x4, | 11 | XT_POLICY_MATCH_NONE = 0x4, |
| 13 | XT_POLICY_MATCH_STRICT = 0x8, | 12 | XT_POLICY_MATCH_STRICT = 0x8, |
| 14 | }; | 13 | }; |
| 15 | 14 | ||
| 16 | enum xt_policy_modes | 15 | enum xt_policy_modes { |
| 17 | { | ||
| 18 | XT_POLICY_MODE_TRANSPORT, | 16 | XT_POLICY_MODE_TRANSPORT, |
| 19 | XT_POLICY_MODE_TUNNEL | 17 | XT_POLICY_MODE_TUNNEL |
| 20 | }; | 18 | }; |
| 21 | 19 | ||
| 22 | struct xt_policy_spec | 20 | struct xt_policy_spec { |
| 23 | { | ||
| 24 | __u8 saddr:1, | 21 | __u8 saddr:1, |
| 25 | daddr:1, | 22 | daddr:1, |
| 26 | proto:1, | 23 | proto:1, |
| @@ -30,15 +27,13 @@ struct xt_policy_spec | |||
| 30 | }; | 27 | }; |
| 31 | 28 | ||
| 32 | #ifndef __KERNEL__ | 29 | #ifndef __KERNEL__ |
| 33 | union xt_policy_addr | 30 | union xt_policy_addr { |
| 34 | { | ||
| 35 | struct in_addr a4; | 31 | struct in_addr a4; |
| 36 | struct in6_addr a6; | 32 | struct in6_addr a6; |
| 37 | }; | 33 | }; |
| 38 | #endif | 34 | #endif |
| 39 | 35 | ||
| 40 | struct xt_policy_elem | 36 | struct xt_policy_elem { |
| 41 | { | ||
| 42 | union { | 37 | union { |
| 43 | #ifdef __KERNEL__ | 38 | #ifdef __KERNEL__ |
| 44 | struct { | 39 | struct { |
| @@ -65,8 +60,7 @@ struct xt_policy_elem | |||
| 65 | struct xt_policy_spec invert; | 60 | struct xt_policy_spec invert; |
| 66 | }; | 61 | }; |
| 67 | 62 | ||
| 68 | struct xt_policy_info | 63 | struct xt_policy_info { |
| 69 | { | ||
| 70 | struct xt_policy_elem pol[XT_POLICY_MAX_ELEM]; | 64 | struct xt_policy_elem pol[XT_POLICY_MAX_ELEM]; |
| 71 | __u16 flags; | 65 | __u16 flags; |
| 72 | __u16 len; | 66 | __u16 len; |
diff --git a/include/linux/netfilter/xt_state.h b/include/linux/netfilter/xt_state.h index c06f32edee07..7b32de886613 100644 --- a/include/linux/netfilter/xt_state.h +++ b/include/linux/netfilter/xt_state.h | |||
| @@ -6,8 +6,7 @@ | |||
| 6 | 6 | ||
| 7 | #define XT_STATE_UNTRACKED (1 << (IP_CT_NUMBER + 1)) | 7 | #define XT_STATE_UNTRACKED (1 << (IP_CT_NUMBER + 1)) |
| 8 | 8 | ||
| 9 | struct xt_state_info | 9 | struct xt_state_info { |
| 10 | { | ||
| 11 | unsigned int statemask; | 10 | unsigned int statemask; |
| 12 | }; | 11 | }; |
| 13 | #endif /*_XT_STATE_H*/ | 12 | #endif /*_XT_STATE_H*/ |
diff --git a/include/linux/netfilter/xt_string.h b/include/linux/netfilter/xt_string.h index ecbb95fc89ed..235347c02eab 100644 --- a/include/linux/netfilter/xt_string.h +++ b/include/linux/netfilter/xt_string.h | |||
| @@ -11,8 +11,7 @@ enum { | |||
| 11 | XT_STRING_FLAG_IGNORECASE = 0x02 | 11 | XT_STRING_FLAG_IGNORECASE = 0x02 |
| 12 | }; | 12 | }; |
| 13 | 13 | ||
| 14 | struct xt_string_info | 14 | struct xt_string_info { |
| 15 | { | ||
| 16 | __u16 from_offset; | 15 | __u16 from_offset; |
| 17 | __u16 to_offset; | 16 | __u16 to_offset; |
| 18 | char algo[XT_STRING_MAX_ALGO_NAME_SIZE]; | 17 | char algo[XT_STRING_MAX_ALGO_NAME_SIZE]; |
diff --git a/include/linux/netfilter/xt_tcpudp.h b/include/linux/netfilter/xt_tcpudp.h index a490a0bc1d29..38aa7b399021 100644 --- a/include/linux/netfilter/xt_tcpudp.h +++ b/include/linux/netfilter/xt_tcpudp.h | |||
| @@ -4,8 +4,7 @@ | |||
| 4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
| 5 | 5 | ||
| 6 | /* TCP matching stuff */ | 6 | /* TCP matching stuff */ |
| 7 | struct xt_tcp | 7 | struct xt_tcp { |
| 8 | { | ||
| 9 | __u16 spts[2]; /* Source port range. */ | 8 | __u16 spts[2]; /* Source port range. */ |
| 10 | __u16 dpts[2]; /* Destination port range. */ | 9 | __u16 dpts[2]; /* Destination port range. */ |
| 11 | __u8 option; /* TCP Option iff non-zero*/ | 10 | __u8 option; /* TCP Option iff non-zero*/ |
| @@ -22,8 +21,7 @@ struct xt_tcp | |||
| 22 | #define XT_TCP_INV_MASK 0x0F /* All possible flags. */ | 21 | #define XT_TCP_INV_MASK 0x0F /* All possible flags. */ |
| 23 | 22 | ||
| 24 | /* UDP matching stuff */ | 23 | /* UDP matching stuff */ |
| 25 | struct xt_udp | 24 | struct xt_udp { |
| 26 | { | ||
| 27 | __u16 spts[2]; /* Source port range. */ | 25 | __u16 spts[2]; /* Source port range. */ |
| 28 | __u16 dpts[2]; /* Destination port range. */ | 26 | __u16 dpts[2]; /* Destination port range. */ |
| 29 | __u8 invflags; /* Inverse flags */ | 27 | __u8 invflags; /* Inverse flags */ |
diff --git a/include/linux/netfilter_arp/arp_tables.h b/include/linux/netfilter_arp/arp_tables.h index 590ac3d6d5d6..f2336523a9df 100644 --- a/include/linux/netfilter_arp/arp_tables.h +++ b/include/linux/netfilter_arp/arp_tables.h | |||
| @@ -132,8 +132,7 @@ struct arpt_entry | |||
| 132 | #define ARPT_RETURN XT_RETURN | 132 | #define ARPT_RETURN XT_RETURN |
| 133 | 133 | ||
| 134 | /* The argument to ARPT_SO_GET_INFO */ | 134 | /* The argument to ARPT_SO_GET_INFO */ |
| 135 | struct arpt_getinfo | 135 | struct arpt_getinfo { |
| 136 | { | ||
| 137 | /* Which table: caller fills this in. */ | 136 | /* Which table: caller fills this in. */ |
| 138 | char name[ARPT_TABLE_MAXNAMELEN]; | 137 | char name[ARPT_TABLE_MAXNAMELEN]; |
| 139 | 138 | ||
| @@ -155,8 +154,7 @@ struct arpt_getinfo | |||
| 155 | }; | 154 | }; |
| 156 | 155 | ||
| 157 | /* The argument to ARPT_SO_SET_REPLACE. */ | 156 | /* The argument to ARPT_SO_SET_REPLACE. */ |
| 158 | struct arpt_replace | 157 | struct arpt_replace { |
| 159 | { | ||
| 160 | /* Which table. */ | 158 | /* Which table. */ |
| 161 | char name[ARPT_TABLE_MAXNAMELEN]; | 159 | char name[ARPT_TABLE_MAXNAMELEN]; |
| 162 | 160 | ||
| @@ -191,8 +189,7 @@ struct arpt_replace | |||
| 191 | #define arpt_counters xt_counters | 189 | #define arpt_counters xt_counters |
| 192 | 190 | ||
| 193 | /* The argument to ARPT_SO_GET_ENTRIES. */ | 191 | /* The argument to ARPT_SO_GET_ENTRIES. */ |
| 194 | struct arpt_get_entries | 192 | struct arpt_get_entries { |
| 195 | { | ||
| 196 | /* Which table: user fills this in. */ | 193 | /* Which table: user fills this in. */ |
| 197 | char name[ARPT_TABLE_MAXNAMELEN]; | 194 | char name[ARPT_TABLE_MAXNAMELEN]; |
| 198 | 195 | ||
| @@ -224,20 +221,17 @@ static __inline__ struct arpt_entry_target *arpt_get_target(struct arpt_entry *e | |||
| 224 | #ifdef __KERNEL__ | 221 | #ifdef __KERNEL__ |
| 225 | 222 | ||
| 226 | /* Standard entry. */ | 223 | /* Standard entry. */ |
| 227 | struct arpt_standard | 224 | struct arpt_standard { |
| 228 | { | ||
| 229 | struct arpt_entry entry; | 225 | struct arpt_entry entry; |
| 230 | struct arpt_standard_target target; | 226 | struct arpt_standard_target target; |
| 231 | }; | 227 | }; |
| 232 | 228 | ||
| 233 | struct arpt_error_target | 229 | struct arpt_error_target { |
| 234 | { | ||
| 235 | struct arpt_entry_target target; | 230 | struct arpt_entry_target target; |
| 236 | char errorname[ARPT_FUNCTION_MAXNAMELEN]; | 231 | char errorname[ARPT_FUNCTION_MAXNAMELEN]; |
| 237 | }; | 232 | }; |
| 238 | 233 | ||
| 239 | struct arpt_error | 234 | struct arpt_error { |
| 240 | { | ||
| 241 | struct arpt_entry entry; | 235 | struct arpt_entry entry; |
| 242 | struct arpt_error_target target; | 236 | struct arpt_error_target target; |
| 243 | }; | 237 | }; |
| @@ -265,7 +259,7 @@ struct arpt_error | |||
| 265 | } | 259 | } |
| 266 | 260 | ||
| 267 | extern struct xt_table *arpt_register_table(struct net *net, | 261 | extern struct xt_table *arpt_register_table(struct net *net, |
| 268 | struct xt_table *table, | 262 | const struct xt_table *table, |
| 269 | const struct arpt_replace *repl); | 263 | const struct arpt_replace *repl); |
| 270 | extern void arpt_unregister_table(struct xt_table *table); | 264 | extern void arpt_unregister_table(struct xt_table *table); |
| 271 | extern unsigned int arpt_do_table(struct sk_buff *skb, | 265 | extern unsigned int arpt_do_table(struct sk_buff *skb, |
| @@ -279,8 +273,7 @@ extern unsigned int arpt_do_table(struct sk_buff *skb, | |||
| 279 | #ifdef CONFIG_COMPAT | 273 | #ifdef CONFIG_COMPAT |
| 280 | #include <net/compat.h> | 274 | #include <net/compat.h> |
| 281 | 275 | ||
| 282 | struct compat_arpt_entry | 276 | struct compat_arpt_entry { |
| 283 | { | ||
| 284 | struct arpt_arp arp; | 277 | struct arpt_arp arp; |
| 285 | u_int16_t target_offset; | 278 | u_int16_t target_offset; |
| 286 | u_int16_t next_offset; | 279 | u_int16_t next_offset; |
diff --git a/include/linux/netfilter_bridge/ebt_802_3.h b/include/linux/netfilter_bridge/ebt_802_3.h index a11b0c2017fd..c73ef0b18bdc 100644 --- a/include/linux/netfilter_bridge/ebt_802_3.h +++ b/include/linux/netfilter_bridge/ebt_802_3.h | |||
| @@ -58,8 +58,7 @@ static inline struct ebt_802_3_hdr *ebt_802_3_hdr(const struct sk_buff *skb) | |||
| 58 | } | 58 | } |
| 59 | #endif | 59 | #endif |
| 60 | 60 | ||
| 61 | struct ebt_802_3_info | 61 | struct ebt_802_3_info { |
| 62 | { | ||
| 63 | uint8_t sap; | 62 | uint8_t sap; |
| 64 | __be16 type; | 63 | __be16 type; |
| 65 | uint8_t bitmask; | 64 | uint8_t bitmask; |
diff --git a/include/linux/netfilter_bridge/ebt_among.h b/include/linux/netfilter_bridge/ebt_among.h index 7654069233ca..0009558609a7 100644 --- a/include/linux/netfilter_bridge/ebt_among.h +++ b/include/linux/netfilter_bridge/ebt_among.h | |||
| @@ -29,14 +29,12 @@ | |||
| 29 | * Yes, it is a memory overhead, but in 2003 AD, who cares? | 29 | * Yes, it is a memory overhead, but in 2003 AD, who cares? |
| 30 | */ | 30 | */ |
| 31 | 31 | ||
| 32 | struct ebt_mac_wormhash_tuple | 32 | struct ebt_mac_wormhash_tuple { |
| 33 | { | ||
| 34 | uint32_t cmp[2]; | 33 | uint32_t cmp[2]; |
| 35 | __be32 ip; | 34 | __be32 ip; |
| 36 | }; | 35 | }; |
| 37 | 36 | ||
| 38 | struct ebt_mac_wormhash | 37 | struct ebt_mac_wormhash { |
| 39 | { | ||
| 40 | int table[257]; | 38 | int table[257]; |
| 41 | int poolsize; | 39 | int poolsize; |
| 42 | struct ebt_mac_wormhash_tuple pool[0]; | 40 | struct ebt_mac_wormhash_tuple pool[0]; |
| @@ -45,8 +43,7 @@ struct ebt_mac_wormhash | |||
| 45 | #define ebt_mac_wormhash_size(x) ((x) ? sizeof(struct ebt_mac_wormhash) \ | 43 | #define ebt_mac_wormhash_size(x) ((x) ? sizeof(struct ebt_mac_wormhash) \ |
| 46 | + (x)->poolsize * sizeof(struct ebt_mac_wormhash_tuple) : 0) | 44 | + (x)->poolsize * sizeof(struct ebt_mac_wormhash_tuple) : 0) |
| 47 | 45 | ||
| 48 | struct ebt_among_info | 46 | struct ebt_among_info { |
| 49 | { | ||
| 50 | int wh_dst_ofs; | 47 | int wh_dst_ofs; |
| 51 | int wh_src_ofs; | 48 | int wh_src_ofs; |
| 52 | int bitmask; | 49 | int bitmask; |
diff --git a/include/linux/netfilter_bridge/ebt_arpreply.h b/include/linux/netfilter_bridge/ebt_arpreply.h index 96a8339960e0..7e77896e1fbf 100644 --- a/include/linux/netfilter_bridge/ebt_arpreply.h +++ b/include/linux/netfilter_bridge/ebt_arpreply.h | |||
| @@ -1,8 +1,7 @@ | |||
| 1 | #ifndef __LINUX_BRIDGE_EBT_ARPREPLY_H | 1 | #ifndef __LINUX_BRIDGE_EBT_ARPREPLY_H |
| 2 | #define __LINUX_BRIDGE_EBT_ARPREPLY_H | 2 | #define __LINUX_BRIDGE_EBT_ARPREPLY_H |
| 3 | 3 | ||
| 4 | struct ebt_arpreply_info | 4 | struct ebt_arpreply_info { |
| 5 | { | ||
| 6 | unsigned char mac[ETH_ALEN]; | 5 | unsigned char mac[ETH_ALEN]; |
| 7 | int target; | 6 | int target; |
| 8 | }; | 7 | }; |
diff --git a/include/linux/netfilter_bridge/ebt_ip.h b/include/linux/netfilter_bridge/ebt_ip.h index d6847475bf2e..6a708fb92241 100644 --- a/include/linux/netfilter_bridge/ebt_ip.h +++ b/include/linux/netfilter_bridge/ebt_ip.h | |||
| @@ -26,8 +26,7 @@ | |||
| 26 | #define EBT_IP_MATCH "ip" | 26 | #define EBT_IP_MATCH "ip" |
| 27 | 27 | ||
| 28 | /* the same values are used for the invflags */ | 28 | /* the same values are used for the invflags */ |
| 29 | struct ebt_ip_info | 29 | struct ebt_ip_info { |
| 30 | { | ||
| 31 | __be32 saddr; | 30 | __be32 saddr; |
| 32 | __be32 daddr; | 31 | __be32 daddr; |
| 33 | __be32 smsk; | 32 | __be32 smsk; |
diff --git a/include/linux/netfilter_bridge/ebt_ip6.h b/include/linux/netfilter_bridge/ebt_ip6.h index 2273c3ae33ca..e5de98701519 100644 --- a/include/linux/netfilter_bridge/ebt_ip6.h +++ b/include/linux/netfilter_bridge/ebt_ip6.h | |||
| @@ -23,8 +23,7 @@ | |||
| 23 | #define EBT_IP6_MATCH "ip6" | 23 | #define EBT_IP6_MATCH "ip6" |
| 24 | 24 | ||
| 25 | /* the same values are used for the invflags */ | 25 | /* the same values are used for the invflags */ |
| 26 | struct ebt_ip6_info | 26 | struct ebt_ip6_info { |
| 27 | { | ||
| 28 | struct in6_addr saddr; | 27 | struct in6_addr saddr; |
| 29 | struct in6_addr daddr; | 28 | struct in6_addr daddr; |
| 30 | struct in6_addr smsk; | 29 | struct in6_addr smsk; |
diff --git a/include/linux/netfilter_bridge/ebt_limit.h b/include/linux/netfilter_bridge/ebt_limit.h index d8b65000afe4..4bf76b751676 100644 --- a/include/linux/netfilter_bridge/ebt_limit.h +++ b/include/linux/netfilter_bridge/ebt_limit.h | |||
| @@ -9,8 +9,7 @@ | |||
| 9 | /* 1/10,000 sec period => max of 10,000/sec. Min rate is then 429490 | 9 | /* 1/10,000 sec period => max of 10,000/sec. Min rate is then 429490 |
| 10 | seconds, or one every 59 hours. */ | 10 | seconds, or one every 59 hours. */ |
| 11 | 11 | ||
| 12 | struct ebt_limit_info | 12 | struct ebt_limit_info { |
| 13 | { | ||
| 14 | u_int32_t avg; /* Average secs between packets * scale */ | 13 | u_int32_t avg; /* Average secs between packets * scale */ |
| 15 | u_int32_t burst; /* Period multiplier for upper limit. */ | 14 | u_int32_t burst; /* Period multiplier for upper limit. */ |
| 16 | 15 | ||
diff --git a/include/linux/netfilter_bridge/ebt_log.h b/include/linux/netfilter_bridge/ebt_log.h index b76e653157e5..cc2cdfb764bc 100644 --- a/include/linux/netfilter_bridge/ebt_log.h +++ b/include/linux/netfilter_bridge/ebt_log.h | |||
| @@ -9,8 +9,7 @@ | |||
| 9 | #define EBT_LOG_PREFIX_SIZE 30 | 9 | #define EBT_LOG_PREFIX_SIZE 30 |
| 10 | #define EBT_LOG_WATCHER "log" | 10 | #define EBT_LOG_WATCHER "log" |
| 11 | 11 | ||
| 12 | struct ebt_log_info | 12 | struct ebt_log_info { |
| 13 | { | ||
| 14 | uint8_t loglevel; | 13 | uint8_t loglevel; |
| 15 | uint8_t prefix[EBT_LOG_PREFIX_SIZE]; | 14 | uint8_t prefix[EBT_LOG_PREFIX_SIZE]; |
| 16 | uint32_t bitmask; | 15 | uint32_t bitmask; |
diff --git a/include/linux/netfilter_bridge/ebt_mark_m.h b/include/linux/netfilter_bridge/ebt_mark_m.h index 301524ff1065..9ceb10ec0ed6 100644 --- a/include/linux/netfilter_bridge/ebt_mark_m.h +++ b/include/linux/netfilter_bridge/ebt_mark_m.h | |||
| @@ -4,8 +4,7 @@ | |||
| 4 | #define EBT_MARK_AND 0x01 | 4 | #define EBT_MARK_AND 0x01 |
| 5 | #define EBT_MARK_OR 0x02 | 5 | #define EBT_MARK_OR 0x02 |
| 6 | #define EBT_MARK_MASK (EBT_MARK_AND | EBT_MARK_OR) | 6 | #define EBT_MARK_MASK (EBT_MARK_AND | EBT_MARK_OR) |
| 7 | struct ebt_mark_m_info | 7 | struct ebt_mark_m_info { |
| 8 | { | ||
| 9 | unsigned long mark, mask; | 8 | unsigned long mark, mask; |
| 10 | uint8_t invert; | 9 | uint8_t invert; |
| 11 | uint8_t bitmask; | 10 | uint8_t bitmask; |
diff --git a/include/linux/netfilter_bridge/ebt_mark_t.h b/include/linux/netfilter_bridge/ebt_mark_t.h index 6270f6f33693..7d5a268a4311 100644 --- a/include/linux/netfilter_bridge/ebt_mark_t.h +++ b/include/linux/netfilter_bridge/ebt_mark_t.h | |||
| @@ -13,8 +13,7 @@ | |||
| 13 | #define MARK_AND_VALUE (0xffffffd0) | 13 | #define MARK_AND_VALUE (0xffffffd0) |
| 14 | #define MARK_XOR_VALUE (0xffffffc0) | 14 | #define MARK_XOR_VALUE (0xffffffc0) |
| 15 | 15 | ||
| 16 | struct ebt_mark_t_info | 16 | struct ebt_mark_t_info { |
| 17 | { | ||
| 18 | unsigned long mark; | 17 | unsigned long mark; |
| 19 | /* EBT_ACCEPT, EBT_DROP, EBT_CONTINUE or EBT_RETURN */ | 18 | /* EBT_ACCEPT, EBT_DROP, EBT_CONTINUE or EBT_RETURN */ |
| 20 | int target; | 19 | int target; |
diff --git a/include/linux/netfilter_bridge/ebt_nat.h b/include/linux/netfilter_bridge/ebt_nat.h index 435b886a51aa..5e74e3b03bd6 100644 --- a/include/linux/netfilter_bridge/ebt_nat.h +++ b/include/linux/netfilter_bridge/ebt_nat.h | |||
| @@ -2,8 +2,7 @@ | |||
| 2 | #define __LINUX_BRIDGE_EBT_NAT_H | 2 | #define __LINUX_BRIDGE_EBT_NAT_H |
| 3 | 3 | ||
| 4 | #define NAT_ARP_BIT (0x00000010) | 4 | #define NAT_ARP_BIT (0x00000010) |
| 5 | struct ebt_nat_info | 5 | struct ebt_nat_info { |
| 6 | { | ||
| 7 | unsigned char mac[ETH_ALEN]; | 6 | unsigned char mac[ETH_ALEN]; |
| 8 | /* EBT_ACCEPT, EBT_DROP, EBT_CONTINUE or EBT_RETURN */ | 7 | /* EBT_ACCEPT, EBT_DROP, EBT_CONTINUE or EBT_RETURN */ |
| 9 | int target; | 8 | int target; |
diff --git a/include/linux/netfilter_bridge/ebt_pkttype.h b/include/linux/netfilter_bridge/ebt_pkttype.h index 0d64bbb29c66..51a799840931 100644 --- a/include/linux/netfilter_bridge/ebt_pkttype.h +++ b/include/linux/netfilter_bridge/ebt_pkttype.h | |||
| @@ -1,8 +1,7 @@ | |||
| 1 | #ifndef __LINUX_BRIDGE_EBT_PKTTYPE_H | 1 | #ifndef __LINUX_BRIDGE_EBT_PKTTYPE_H |
| 2 | #define __LINUX_BRIDGE_EBT_PKTTYPE_H | 2 | #define __LINUX_BRIDGE_EBT_PKTTYPE_H |
| 3 | 3 | ||
| 4 | struct ebt_pkttype_info | 4 | struct ebt_pkttype_info { |
| 5 | { | ||
| 6 | uint8_t pkt_type; | 5 | uint8_t pkt_type; |
| 7 | uint8_t invert; | 6 | uint8_t invert; |
| 8 | }; | 7 | }; |
diff --git a/include/linux/netfilter_bridge/ebt_redirect.h b/include/linux/netfilter_bridge/ebt_redirect.h index 5c67990fce39..dd9622ce8488 100644 --- a/include/linux/netfilter_bridge/ebt_redirect.h +++ b/include/linux/netfilter_bridge/ebt_redirect.h | |||
| @@ -1,8 +1,7 @@ | |||
| 1 | #ifndef __LINUX_BRIDGE_EBT_REDIRECT_H | 1 | #ifndef __LINUX_BRIDGE_EBT_REDIRECT_H |
| 2 | #define __LINUX_BRIDGE_EBT_REDIRECT_H | 2 | #define __LINUX_BRIDGE_EBT_REDIRECT_H |
| 3 | 3 | ||
| 4 | struct ebt_redirect_info | 4 | struct ebt_redirect_info { |
| 5 | { | ||
| 6 | /* EBT_ACCEPT, EBT_DROP, EBT_CONTINUE or EBT_RETURN */ | 5 | /* EBT_ACCEPT, EBT_DROP, EBT_CONTINUE or EBT_RETURN */ |
| 7 | int target; | 6 | int target; |
| 8 | }; | 7 | }; |
diff --git a/include/linux/netfilter_bridge/ebt_stp.h b/include/linux/netfilter_bridge/ebt_stp.h index e5fd67850f4d..e503a0aa2728 100644 --- a/include/linux/netfilter_bridge/ebt_stp.h +++ b/include/linux/netfilter_bridge/ebt_stp.h | |||
| @@ -20,8 +20,7 @@ | |||
| 20 | 20 | ||
| 21 | #define EBT_STP_MATCH "stp" | 21 | #define EBT_STP_MATCH "stp" |
| 22 | 22 | ||
| 23 | struct ebt_stp_config_info | 23 | struct ebt_stp_config_info { |
| 24 | { | ||
| 25 | uint8_t flags; | 24 | uint8_t flags; |
| 26 | uint16_t root_priol, root_priou; | 25 | uint16_t root_priol, root_priou; |
| 27 | char root_addr[6], root_addrmsk[6]; | 26 | char root_addr[6], root_addrmsk[6]; |
| @@ -35,8 +34,7 @@ struct ebt_stp_config_info | |||
| 35 | uint16_t forward_delayl, forward_delayu; | 34 | uint16_t forward_delayl, forward_delayu; |
| 36 | }; | 35 | }; |
| 37 | 36 | ||
| 38 | struct ebt_stp_info | 37 | struct ebt_stp_info { |
| 39 | { | ||
| 40 | uint8_t type; | 38 | uint8_t type; |
| 41 | struct ebt_stp_config_info config; | 39 | struct ebt_stp_config_info config; |
| 42 | uint16_t bitmask; | 40 | uint16_t bitmask; |
diff --git a/include/linux/netfilter_bridge/ebtables.h b/include/linux/netfilter_bridge/ebtables.h index e40ddb94b1af..3cc40c131cc3 100644 --- a/include/linux/netfilter_bridge/ebtables.h +++ b/include/linux/netfilter_bridge/ebtables.h | |||
| @@ -34,14 +34,12 @@ | |||
| 34 | struct xt_match; | 34 | struct xt_match; |
| 35 | struct xt_target; | 35 | struct xt_target; |
| 36 | 36 | ||
| 37 | struct ebt_counter | 37 | struct ebt_counter { |
| 38 | { | ||
| 39 | uint64_t pcnt; | 38 | uint64_t pcnt; |
| 40 | uint64_t bcnt; | 39 | uint64_t bcnt; |
| 41 | }; | 40 | }; |
| 42 | 41 | ||
| 43 | struct ebt_replace | 42 | struct ebt_replace { |
| 44 | { | ||
| 45 | char name[EBT_TABLE_MAXNAMELEN]; | 43 | char name[EBT_TABLE_MAXNAMELEN]; |
| 46 | unsigned int valid_hooks; | 44 | unsigned int valid_hooks; |
| 47 | /* nr of rules in the table */ | 45 | /* nr of rules in the table */ |
| @@ -57,8 +55,7 @@ struct ebt_replace | |||
| 57 | char __user *entries; | 55 | char __user *entries; |
| 58 | }; | 56 | }; |
| 59 | 57 | ||
| 60 | struct ebt_replace_kernel | 58 | struct ebt_replace_kernel { |
| 61 | { | ||
| 62 | char name[EBT_TABLE_MAXNAMELEN]; | 59 | char name[EBT_TABLE_MAXNAMELEN]; |
| 63 | unsigned int valid_hooks; | 60 | unsigned int valid_hooks; |
| 64 | /* nr of rules in the table */ | 61 | /* nr of rules in the table */ |
| @@ -120,8 +117,7 @@ struct ebt_entries { | |||
| 120 | #define EBT_INV_MASK (EBT_IPROTO | EBT_IIN | EBT_IOUT | EBT_ILOGICALIN \ | 117 | #define EBT_INV_MASK (EBT_IPROTO | EBT_IIN | EBT_IOUT | EBT_ILOGICALIN \ |
| 121 | | EBT_ILOGICALOUT | EBT_ISOURCE | EBT_IDEST) | 118 | | EBT_ILOGICALOUT | EBT_ISOURCE | EBT_IDEST) |
| 122 | 119 | ||
| 123 | struct ebt_entry_match | 120 | struct ebt_entry_match { |
| 124 | { | ||
| 125 | union { | 121 | union { |
| 126 | char name[EBT_FUNCTION_MAXNAMELEN]; | 122 | char name[EBT_FUNCTION_MAXNAMELEN]; |
| 127 | struct xt_match *match; | 123 | struct xt_match *match; |
| @@ -131,8 +127,7 @@ struct ebt_entry_match | |||
| 131 | unsigned char data[0] __attribute__ ((aligned (__alignof__(struct ebt_replace)))); | 127 | unsigned char data[0] __attribute__ ((aligned (__alignof__(struct ebt_replace)))); |
| 132 | }; | 128 | }; |
| 133 | 129 | ||
| 134 | struct ebt_entry_watcher | 130 | struct ebt_entry_watcher { |
| 135 | { | ||
| 136 | union { | 131 | union { |
| 137 | char name[EBT_FUNCTION_MAXNAMELEN]; | 132 | char name[EBT_FUNCTION_MAXNAMELEN]; |
| 138 | struct xt_target *watcher; | 133 | struct xt_target *watcher; |
| @@ -142,8 +137,7 @@ struct ebt_entry_watcher | |||
| 142 | unsigned char data[0] __attribute__ ((aligned (__alignof__(struct ebt_replace)))); | 137 | unsigned char data[0] __attribute__ ((aligned (__alignof__(struct ebt_replace)))); |
| 143 | }; | 138 | }; |
| 144 | 139 | ||
| 145 | struct ebt_entry_target | 140 | struct ebt_entry_target { |
| 146 | { | ||
| 147 | union { | 141 | union { |
| 148 | char name[EBT_FUNCTION_MAXNAMELEN]; | 142 | char name[EBT_FUNCTION_MAXNAMELEN]; |
| 149 | struct xt_target *target; | 143 | struct xt_target *target; |
| @@ -154,8 +148,7 @@ struct ebt_entry_target | |||
| 154 | }; | 148 | }; |
| 155 | 149 | ||
| 156 | #define EBT_STANDARD_TARGET "standard" | 150 | #define EBT_STANDARD_TARGET "standard" |
| 157 | struct ebt_standard_target | 151 | struct ebt_standard_target { |
| 158 | { | ||
| 159 | struct ebt_entry_target target; | 152 | struct ebt_entry_target target; |
| 160 | int verdict; | 153 | int verdict; |
| 161 | }; | 154 | }; |
| @@ -206,8 +199,7 @@ struct ebt_entry { | |||
| 206 | #define EBT_MATCH 0 | 199 | #define EBT_MATCH 0 |
| 207 | #define EBT_NOMATCH 1 | 200 | #define EBT_NOMATCH 1 |
| 208 | 201 | ||
| 209 | struct ebt_match | 202 | struct ebt_match { |
| 210 | { | ||
| 211 | struct list_head list; | 203 | struct list_head list; |
| 212 | const char name[EBT_FUNCTION_MAXNAMELEN]; | 204 | const char name[EBT_FUNCTION_MAXNAMELEN]; |
| 213 | bool (*match)(const struct sk_buff *skb, const struct net_device *in, | 205 | bool (*match)(const struct sk_buff *skb, const struct net_device *in, |
| @@ -224,8 +216,7 @@ struct ebt_match | |||
| 224 | struct module *me; | 216 | struct module *me; |
| 225 | }; | 217 | }; |
| 226 | 218 | ||
| 227 | struct ebt_watcher | 219 | struct ebt_watcher { |
| 228 | { | ||
| 229 | struct list_head list; | 220 | struct list_head list; |
| 230 | const char name[EBT_FUNCTION_MAXNAMELEN]; | 221 | const char name[EBT_FUNCTION_MAXNAMELEN]; |
| 231 | unsigned int (*target)(struct sk_buff *skb, | 222 | unsigned int (*target)(struct sk_buff *skb, |
| @@ -242,8 +233,7 @@ struct ebt_watcher | |||
| 242 | struct module *me; | 233 | struct module *me; |
| 243 | }; | 234 | }; |
| 244 | 235 | ||
| 245 | struct ebt_target | 236 | struct ebt_target { |
| 246 | { | ||
| 247 | struct list_head list; | 237 | struct list_head list; |
| 248 | const char name[EBT_FUNCTION_MAXNAMELEN]; | 238 | const char name[EBT_FUNCTION_MAXNAMELEN]; |
| 249 | /* returns one of the standard EBT_* verdicts */ | 239 | /* returns one of the standard EBT_* verdicts */ |
| @@ -262,15 +252,13 @@ struct ebt_target | |||
| 262 | }; | 252 | }; |
| 263 | 253 | ||
| 264 | /* used for jumping from and into user defined chains (udc) */ | 254 | /* used for jumping from and into user defined chains (udc) */ |
| 265 | struct ebt_chainstack | 255 | struct ebt_chainstack { |
| 266 | { | ||
| 267 | struct ebt_entries *chaininfo; /* pointer to chain data */ | 256 | struct ebt_entries *chaininfo; /* pointer to chain data */ |
| 268 | struct ebt_entry *e; /* pointer to entry data */ | 257 | struct ebt_entry *e; /* pointer to entry data */ |
| 269 | unsigned int n; /* n'th entry */ | 258 | unsigned int n; /* n'th entry */ |
| 270 | }; | 259 | }; |
| 271 | 260 | ||
| 272 | struct ebt_table_info | 261 | struct ebt_table_info { |
| 273 | { | ||
| 274 | /* total size of the entries */ | 262 | /* total size of the entries */ |
| 275 | unsigned int entries_size; | 263 | unsigned int entries_size; |
| 276 | unsigned int nentries; | 264 | unsigned int nentries; |
| @@ -282,8 +270,7 @@ struct ebt_table_info | |||
| 282 | struct ebt_counter counters[0] ____cacheline_aligned; | 270 | struct ebt_counter counters[0] ____cacheline_aligned; |
| 283 | }; | 271 | }; |
| 284 | 272 | ||
| 285 | struct ebt_table | 273 | struct ebt_table { |
| 286 | { | ||
| 287 | struct list_head list; | 274 | struct list_head list; |
| 288 | char name[EBT_TABLE_MAXNAMELEN]; | 275 | char name[EBT_TABLE_MAXNAMELEN]; |
| 289 | struct ebt_replace_kernel *table; | 276 | struct ebt_replace_kernel *table; |
| @@ -301,7 +288,7 @@ struct ebt_table | |||
| 301 | #define EBT_ALIGN(s) (((s) + (__alignof__(struct ebt_replace)-1)) & \ | 288 | #define EBT_ALIGN(s) (((s) + (__alignof__(struct ebt_replace)-1)) & \ |
| 302 | ~(__alignof__(struct ebt_replace)-1)) | 289 | ~(__alignof__(struct ebt_replace)-1)) |
| 303 | extern struct ebt_table *ebt_register_table(struct net *net, | 290 | extern struct ebt_table *ebt_register_table(struct net *net, |
| 304 | struct ebt_table *table); | 291 | const struct ebt_table *table); |
| 305 | extern void ebt_unregister_table(struct ebt_table *table); | 292 | extern void ebt_unregister_table(struct ebt_table *table); |
| 306 | extern unsigned int ebt_do_table(unsigned int hook, struct sk_buff *skb, | 293 | extern unsigned int ebt_do_table(unsigned int hook, struct sk_buff *skb, |
| 307 | const struct net_device *in, const struct net_device *out, | 294 | const struct net_device *in, const struct net_device *out, |
diff --git a/include/linux/netfilter_ipv4/Kbuild b/include/linux/netfilter_ipv4/Kbuild index 3a7105bb8f33..431b40761920 100644 --- a/include/linux/netfilter_ipv4/Kbuild +++ b/include/linux/netfilter_ipv4/Kbuild | |||
| @@ -1,46 +1,14 @@ | |||
| 1 | header-y += ipt_CLASSIFY.h | ||
| 2 | header-y += ipt_CLUSTERIP.h | 1 | header-y += ipt_CLUSTERIP.h |
| 3 | header-y += ipt_CONNMARK.h | ||
| 4 | header-y += ipt_DSCP.h | ||
| 5 | header-y += ipt_ECN.h | 2 | header-y += ipt_ECN.h |
| 6 | header-y += ipt_LOG.h | 3 | header-y += ipt_LOG.h |
| 7 | header-y += ipt_MARK.h | ||
| 8 | header-y += ipt_NFQUEUE.h | ||
| 9 | header-y += ipt_REJECT.h | 4 | header-y += ipt_REJECT.h |
| 10 | header-y += ipt_SAME.h | 5 | header-y += ipt_SAME.h |
| 11 | header-y += ipt_TCPMSS.h | ||
| 12 | header-y += ipt_TOS.h | ||
| 13 | header-y += ipt_TTL.h | 6 | header-y += ipt_TTL.h |
| 14 | header-y += ipt_ULOG.h | 7 | header-y += ipt_ULOG.h |
| 15 | header-y += ipt_addrtype.h | 8 | header-y += ipt_addrtype.h |
| 16 | header-y += ipt_ah.h | 9 | header-y += ipt_ah.h |
| 17 | header-y += ipt_comment.h | ||
| 18 | header-y += ipt_connbytes.h | ||
| 19 | header-y += ipt_connmark.h | ||
| 20 | header-y += ipt_conntrack.h | ||
| 21 | header-y += ipt_dccp.h | ||
| 22 | header-y += ipt_dscp.h | ||
| 23 | header-y += ipt_ecn.h | 10 | header-y += ipt_ecn.h |
| 24 | header-y += ipt_esp.h | ||
| 25 | header-y += ipt_hashlimit.h | ||
| 26 | header-y += ipt_helper.h | ||
| 27 | header-y += ipt_iprange.h | ||
| 28 | header-y += ipt_length.h | ||
| 29 | header-y += ipt_limit.h | ||
| 30 | header-y += ipt_mac.h | ||
| 31 | header-y += ipt_mark.h | ||
| 32 | header-y += ipt_multiport.h | ||
| 33 | header-y += ipt_owner.h | ||
| 34 | header-y += ipt_physdev.h | ||
| 35 | header-y += ipt_pkttype.h | ||
| 36 | header-y += ipt_policy.h | ||
| 37 | header-y += ipt_realm.h | 11 | header-y += ipt_realm.h |
| 38 | header-y += ipt_recent.h | ||
| 39 | header-y += ipt_sctp.h | ||
| 40 | header-y += ipt_state.h | ||
| 41 | header-y += ipt_string.h | ||
| 42 | header-y += ipt_tcpmss.h | ||
| 43 | header-y += ipt_tos.h | ||
| 44 | header-y += ipt_ttl.h | 12 | header-y += ipt_ttl.h |
| 45 | 13 | ||
| 46 | unifdef-y += ip_queue.h | 14 | unifdef-y += ip_queue.h |
diff --git a/include/linux/netfilter_ipv4/ip_tables.h b/include/linux/netfilter_ipv4/ip_tables.h index 092bd50581a9..27b3f5807305 100644 --- a/include/linux/netfilter_ipv4/ip_tables.h +++ b/include/linux/netfilter_ipv4/ip_tables.h | |||
| @@ -76,8 +76,7 @@ struct ipt_ip { | |||
| 76 | /* This structure defines each of the firewall rules. Consists of 3 | 76 | /* This structure defines each of the firewall rules. Consists of 3 |
| 77 | parts which are 1) general IP header stuff 2) match specific | 77 | parts which are 1) general IP header stuff 2) match specific |
| 78 | stuff 3) the target to perform if the rule matches */ | 78 | stuff 3) the target to perform if the rule matches */ |
| 79 | struct ipt_entry | 79 | struct ipt_entry { |
| 80 | { | ||
| 81 | struct ipt_ip ip; | 80 | struct ipt_ip ip; |
| 82 | 81 | ||
| 83 | /* Mark with fields that we care about. */ | 82 | /* Mark with fields that we care about. */ |
| @@ -135,8 +134,7 @@ struct ipt_entry | |||
| 135 | #define IPT_UDP_INV_MASK XT_UDP_INV_MASK | 134 | #define IPT_UDP_INV_MASK XT_UDP_INV_MASK |
| 136 | 135 | ||
| 137 | /* ICMP matching stuff */ | 136 | /* ICMP matching stuff */ |
| 138 | struct ipt_icmp | 137 | struct ipt_icmp { |
| 139 | { | ||
| 140 | u_int8_t type; /* type to match */ | 138 | u_int8_t type; /* type to match */ |
| 141 | u_int8_t code[2]; /* range of code */ | 139 | u_int8_t code[2]; /* range of code */ |
| 142 | u_int8_t invflags; /* Inverse flags */ | 140 | u_int8_t invflags; /* Inverse flags */ |
| @@ -146,8 +144,7 @@ struct ipt_icmp | |||
| 146 | #define IPT_ICMP_INV 0x01 /* Invert the sense of type/code test */ | 144 | #define IPT_ICMP_INV 0x01 /* Invert the sense of type/code test */ |
| 147 | 145 | ||
| 148 | /* The argument to IPT_SO_GET_INFO */ | 146 | /* The argument to IPT_SO_GET_INFO */ |
| 149 | struct ipt_getinfo | 147 | struct ipt_getinfo { |
| 150 | { | ||
| 151 | /* Which table: caller fills this in. */ | 148 | /* Which table: caller fills this in. */ |
| 152 | char name[IPT_TABLE_MAXNAMELEN]; | 149 | char name[IPT_TABLE_MAXNAMELEN]; |
| 153 | 150 | ||
| @@ -169,8 +166,7 @@ struct ipt_getinfo | |||
| 169 | }; | 166 | }; |
| 170 | 167 | ||
| 171 | /* The argument to IPT_SO_SET_REPLACE. */ | 168 | /* The argument to IPT_SO_SET_REPLACE. */ |
| 172 | struct ipt_replace | 169 | struct ipt_replace { |
| 173 | { | ||
| 174 | /* Which table. */ | 170 | /* Which table. */ |
| 175 | char name[IPT_TABLE_MAXNAMELEN]; | 171 | char name[IPT_TABLE_MAXNAMELEN]; |
| 176 | 172 | ||
| @@ -204,8 +200,7 @@ struct ipt_replace | |||
| 204 | #define ipt_counters_info xt_counters_info | 200 | #define ipt_counters_info xt_counters_info |
| 205 | 201 | ||
| 206 | /* The argument to IPT_SO_GET_ENTRIES. */ | 202 | /* The argument to IPT_SO_GET_ENTRIES. */ |
| 207 | struct ipt_get_entries | 203 | struct ipt_get_entries { |
| 208 | { | ||
| 209 | /* Which table: user fills this in. */ | 204 | /* Which table: user fills this in. */ |
| 210 | char name[IPT_TABLE_MAXNAMELEN]; | 205 | char name[IPT_TABLE_MAXNAMELEN]; |
| 211 | 206 | ||
| @@ -245,25 +240,22 @@ ipt_get_target(struct ipt_entry *e) | |||
| 245 | extern void ipt_init(void) __init; | 240 | extern void ipt_init(void) __init; |
| 246 | 241 | ||
| 247 | extern struct xt_table *ipt_register_table(struct net *net, | 242 | extern struct xt_table *ipt_register_table(struct net *net, |
| 248 | struct xt_table *table, | 243 | const struct xt_table *table, |
| 249 | const struct ipt_replace *repl); | 244 | const struct ipt_replace *repl); |
| 250 | extern void ipt_unregister_table(struct xt_table *table); | 245 | extern void ipt_unregister_table(struct xt_table *table); |
| 251 | 246 | ||
| 252 | /* Standard entry. */ | 247 | /* Standard entry. */ |
| 253 | struct ipt_standard | 248 | struct ipt_standard { |
| 254 | { | ||
| 255 | struct ipt_entry entry; | 249 | struct ipt_entry entry; |
| 256 | struct ipt_standard_target target; | 250 | struct ipt_standard_target target; |
| 257 | }; | 251 | }; |
| 258 | 252 | ||
| 259 | struct ipt_error_target | 253 | struct ipt_error_target { |
| 260 | { | ||
| 261 | struct ipt_entry_target target; | 254 | struct ipt_entry_target target; |
| 262 | char errorname[IPT_FUNCTION_MAXNAMELEN]; | 255 | char errorname[IPT_FUNCTION_MAXNAMELEN]; |
| 263 | }; | 256 | }; |
| 264 | 257 | ||
| 265 | struct ipt_error | 258 | struct ipt_error { |
| 266 | { | ||
| 267 | struct ipt_entry entry; | 259 | struct ipt_entry entry; |
| 268 | struct ipt_error_target target; | 260 | struct ipt_error_target target; |
| 269 | }; | 261 | }; |
| @@ -301,8 +293,7 @@ extern unsigned int ipt_do_table(struct sk_buff *skb, | |||
| 301 | #ifdef CONFIG_COMPAT | 293 | #ifdef CONFIG_COMPAT |
| 302 | #include <net/compat.h> | 294 | #include <net/compat.h> |
| 303 | 295 | ||
| 304 | struct compat_ipt_entry | 296 | struct compat_ipt_entry { |
| 305 | { | ||
| 306 | struct ipt_ip ip; | 297 | struct ipt_ip ip; |
| 307 | compat_uint_t nfcache; | 298 | compat_uint_t nfcache; |
| 308 | u_int16_t target_offset; | 299 | u_int16_t target_offset; |
diff --git a/include/linux/netfilter_ipv4/ipt_CLASSIFY.h b/include/linux/netfilter_ipv4/ipt_CLASSIFY.h deleted file mode 100644 index a46d511b5c36..000000000000 --- a/include/linux/netfilter_ipv4/ipt_CLASSIFY.h +++ /dev/null | |||
| @@ -1,7 +0,0 @@ | |||
| 1 | #ifndef _IPT_CLASSIFY_H | ||
| 2 | #define _IPT_CLASSIFY_H | ||
| 3 | |||
| 4 | #include <linux/netfilter/xt_CLASSIFY.h> | ||
| 5 | #define ipt_classify_target_info xt_classify_target_info | ||
| 6 | |||
| 7 | #endif /*_IPT_CLASSIFY_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_CONNMARK.h b/include/linux/netfilter_ipv4/ipt_CONNMARK.h deleted file mode 100644 index 9ecfee0a9e33..000000000000 --- a/include/linux/netfilter_ipv4/ipt_CONNMARK.h +++ /dev/null | |||
| @@ -1,19 +0,0 @@ | |||
| 1 | #ifndef _IPT_CONNMARK_H_target | ||
| 2 | #define _IPT_CONNMARK_H_target | ||
| 3 | |||
| 4 | /* Copyright (C) 2002,2004 MARA Systems AB <http://www.marasystems.com> | ||
| 5 | * by Henrik Nordstrom <hno@marasystems.com> | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify | ||
| 8 | * it under the terms of the GNU General Public License as published by | ||
| 9 | * the Free Software Foundation; either version 2 of the License, or | ||
| 10 | * (at your option) any later version. | ||
| 11 | */ | ||
| 12 | #include <linux/netfilter/xt_CONNMARK.h> | ||
| 13 | #define IPT_CONNMARK_SET XT_CONNMARK_SET | ||
| 14 | #define IPT_CONNMARK_SAVE XT_CONNMARK_SAVE | ||
| 15 | #define IPT_CONNMARK_RESTORE XT_CONNMARK_RESTORE | ||
| 16 | |||
| 17 | #define ipt_connmark_target_info xt_connmark_target_info | ||
| 18 | |||
| 19 | #endif /*_IPT_CONNMARK_H_target*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_DSCP.h b/include/linux/netfilter_ipv4/ipt_DSCP.h deleted file mode 100644 index 3491e524d5ea..000000000000 --- a/include/linux/netfilter_ipv4/ipt_DSCP.h +++ /dev/null | |||
| @@ -1,18 +0,0 @@ | |||
| 1 | /* iptables module for setting the IPv4 DSCP field | ||
| 2 | * | ||
| 3 | * (C) 2002 Harald Welte <laforge@gnumonks.org> | ||
| 4 | * based on ipt_FTOS.c (C) 2000 by Matthew G. Marsh <mgm@paktronix.com> | ||
| 5 | * This software is distributed under GNU GPL v2, 1991 | ||
| 6 | * | ||
| 7 | * See RFC2474 for a description of the DSCP field within the IP Header. | ||
| 8 | * | ||
| 9 | * ipt_DSCP.h,v 1.7 2002/03/14 12:03:13 laforge Exp | ||
| 10 | */ | ||
| 11 | #ifndef _IPT_DSCP_TARGET_H | ||
| 12 | #define _IPT_DSCP_TARGET_H | ||
| 13 | #include <linux/netfilter_ipv4/ipt_dscp.h> | ||
| 14 | #include <linux/netfilter/xt_DSCP.h> | ||
| 15 | |||
| 16 | #define ipt_DSCP_info xt_DSCP_info | ||
| 17 | |||
| 18 | #endif /* _IPT_DSCP_TARGET_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_ECN.h b/include/linux/netfilter_ipv4/ipt_ECN.h index 94e0d9866469..7ca45918ab8e 100644 --- a/include/linux/netfilter_ipv4/ipt_ECN.h +++ b/include/linux/netfilter_ipv4/ipt_ECN.h | |||
| @@ -8,9 +8,9 @@ | |||
| 8 | */ | 8 | */ |
| 9 | #ifndef _IPT_ECN_TARGET_H | 9 | #ifndef _IPT_ECN_TARGET_H |
| 10 | #define _IPT_ECN_TARGET_H | 10 | #define _IPT_ECN_TARGET_H |
| 11 | #include <linux/netfilter_ipv4/ipt_DSCP.h> | 11 | #include <linux/netfilter/xt_DSCP.h> |
| 12 | 12 | ||
| 13 | #define IPT_ECN_IP_MASK (~IPT_DSCP_MASK) | 13 | #define IPT_ECN_IP_MASK (~XT_DSCP_MASK) |
| 14 | 14 | ||
| 15 | #define IPT_ECN_OP_SET_IP 0x01 /* set ECN bits of IPv4 header */ | 15 | #define IPT_ECN_OP_SET_IP 0x01 /* set ECN bits of IPv4 header */ |
| 16 | #define IPT_ECN_OP_SET_ECE 0x10 /* set ECE bit of TCP header */ | 16 | #define IPT_ECN_OP_SET_ECE 0x10 /* set ECE bit of TCP header */ |
diff --git a/include/linux/netfilter_ipv4/ipt_MARK.h b/include/linux/netfilter_ipv4/ipt_MARK.h deleted file mode 100644 index 697a486a96d3..000000000000 --- a/include/linux/netfilter_ipv4/ipt_MARK.h +++ /dev/null | |||
| @@ -1,18 +0,0 @@ | |||
| 1 | #ifndef _IPT_MARK_H_target | ||
| 2 | #define _IPT_MARK_H_target | ||
| 3 | |||
| 4 | /* Backwards compatibility for old userspace */ | ||
| 5 | |||
| 6 | #include <linux/netfilter/xt_MARK.h> | ||
| 7 | |||
| 8 | /* Version 0 */ | ||
| 9 | #define ipt_mark_target_info xt_mark_target_info | ||
| 10 | |||
| 11 | /* Version 1 */ | ||
| 12 | #define IPT_MARK_SET XT_MARK_SET | ||
| 13 | #define IPT_MARK_AND XT_MARK_AND | ||
| 14 | #define IPT_MARK_OR XT_MARK_OR | ||
| 15 | |||
| 16 | #define ipt_mark_target_info_v1 xt_mark_target_info_v1 | ||
| 17 | |||
| 18 | #endif /*_IPT_MARK_H_target*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_NFQUEUE.h b/include/linux/netfilter_ipv4/ipt_NFQUEUE.h deleted file mode 100644 index 97a2a7557cb9..000000000000 --- a/include/linux/netfilter_ipv4/ipt_NFQUEUE.h +++ /dev/null | |||
| @@ -1,16 +0,0 @@ | |||
| 1 | /* iptables module for using NFQUEUE mechanism | ||
| 2 | * | ||
| 3 | * (C) 2005 Harald Welte <laforge@netfilter.org> | ||
| 4 | * | ||
| 5 | * This software is distributed under GNU GPL v2, 1991 | ||
| 6 | * | ||
| 7 | */ | ||
| 8 | #ifndef _IPT_NFQ_TARGET_H | ||
| 9 | #define _IPT_NFQ_TARGET_H | ||
| 10 | |||
| 11 | /* Backwards compatibility for old userspace */ | ||
| 12 | #include <linux/netfilter/xt_NFQUEUE.h> | ||
| 13 | |||
| 14 | #define ipt_NFQ_info xt_NFQ_info | ||
| 15 | |||
| 16 | #endif /* _IPT_DSCP_TARGET_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_SAME.h b/include/linux/netfilter_ipv4/ipt_SAME.h index be6e682a85ec..2529660c5b38 100644 --- a/include/linux/netfilter_ipv4/ipt_SAME.h +++ b/include/linux/netfilter_ipv4/ipt_SAME.h | |||
| @@ -5,8 +5,7 @@ | |||
| 5 | 5 | ||
| 6 | #define IPT_SAME_NODST 0x01 | 6 | #define IPT_SAME_NODST 0x01 |
| 7 | 7 | ||
| 8 | struct ipt_same_info | 8 | struct ipt_same_info { |
| 9 | { | ||
| 10 | unsigned char info; | 9 | unsigned char info; |
| 11 | u_int32_t rangesize; | 10 | u_int32_t rangesize; |
| 12 | u_int32_t ipnum; | 11 | u_int32_t ipnum; |
diff --git a/include/linux/netfilter_ipv4/ipt_TCPMSS.h b/include/linux/netfilter_ipv4/ipt_TCPMSS.h deleted file mode 100644 index 7a850f945824..000000000000 --- a/include/linux/netfilter_ipv4/ipt_TCPMSS.h +++ /dev/null | |||
| @@ -1,9 +0,0 @@ | |||
| 1 | #ifndef _IPT_TCPMSS_H | ||
| 2 | #define _IPT_TCPMSS_H | ||
| 3 | |||
| 4 | #include <linux/netfilter/xt_TCPMSS.h> | ||
| 5 | |||
| 6 | #define ipt_tcpmss_info xt_tcpmss_info | ||
| 7 | #define IPT_TCPMSS_CLAMP_PMTU XT_TCPMSS_CLAMP_PMTU | ||
| 8 | |||
| 9 | #endif /*_IPT_TCPMSS_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_TOS.h b/include/linux/netfilter_ipv4/ipt_TOS.h deleted file mode 100644 index 6bf9e1fdfd88..000000000000 --- a/include/linux/netfilter_ipv4/ipt_TOS.h +++ /dev/null | |||
| @@ -1,12 +0,0 @@ | |||
| 1 | #ifndef _IPT_TOS_H_target | ||
| 2 | #define _IPT_TOS_H_target | ||
| 3 | |||
| 4 | #ifndef IPTOS_NORMALSVC | ||
| 5 | #define IPTOS_NORMALSVC 0 | ||
| 6 | #endif | ||
| 7 | |||
| 8 | struct ipt_tos_target_info { | ||
| 9 | u_int8_t tos; | ||
| 10 | }; | ||
| 11 | |||
| 12 | #endif /*_IPT_TOS_H_target*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_ah.h b/include/linux/netfilter_ipv4/ipt_ah.h index 7b9a2ac7adb9..2e555b4d05e3 100644 --- a/include/linux/netfilter_ipv4/ipt_ah.h +++ b/include/linux/netfilter_ipv4/ipt_ah.h | |||
| @@ -1,8 +1,7 @@ | |||
| 1 | #ifndef _IPT_AH_H | 1 | #ifndef _IPT_AH_H |
| 2 | #define _IPT_AH_H | 2 | #define _IPT_AH_H |
| 3 | 3 | ||
| 4 | struct ipt_ah | 4 | struct ipt_ah { |
| 5 | { | ||
| 6 | u_int32_t spis[2]; /* Security Parameter Index */ | 5 | u_int32_t spis[2]; /* Security Parameter Index */ |
| 7 | u_int8_t invflags; /* Inverse flags */ | 6 | u_int8_t invflags; /* Inverse flags */ |
| 8 | }; | 7 | }; |
diff --git a/include/linux/netfilter_ipv4/ipt_comment.h b/include/linux/netfilter_ipv4/ipt_comment.h deleted file mode 100644 index ae2afc2f7481..000000000000 --- a/include/linux/netfilter_ipv4/ipt_comment.h +++ /dev/null | |||
| @@ -1,10 +0,0 @@ | |||
| 1 | #ifndef _IPT_COMMENT_H | ||
| 2 | #define _IPT_COMMENT_H | ||
| 3 | |||
| 4 | #include <linux/netfilter/xt_comment.h> | ||
| 5 | |||
| 6 | #define IPT_MAX_COMMENT_LEN XT_MAX_COMMENT_LEN | ||
| 7 | |||
| 8 | #define ipt_comment_info xt_comment_info | ||
| 9 | |||
| 10 | #endif /* _IPT_COMMENT_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_connbytes.h b/include/linux/netfilter_ipv4/ipt_connbytes.h deleted file mode 100644 index f63e6ee91113..000000000000 --- a/include/linux/netfilter_ipv4/ipt_connbytes.h +++ /dev/null | |||
| @@ -1,18 +0,0 @@ | |||
| 1 | #ifndef _IPT_CONNBYTES_H | ||
| 2 | #define _IPT_CONNBYTES_H | ||
| 3 | |||
| 4 | #include <linux/netfilter/xt_connbytes.h> | ||
| 5 | #define ipt_connbytes_what xt_connbytes_what | ||
| 6 | |||
| 7 | #define IPT_CONNBYTES_PKTS XT_CONNBYTES_PKTS | ||
| 8 | #define IPT_CONNBYTES_BYTES XT_CONNBYTES_BYTES | ||
| 9 | #define IPT_CONNBYTES_AVGPKT XT_CONNBYTES_AVGPKT | ||
| 10 | |||
| 11 | #define ipt_connbytes_direction xt_connbytes_direction | ||
| 12 | #define IPT_CONNBYTES_DIR_ORIGINAL XT_CONNBYTES_DIR_ORIGINAL | ||
| 13 | #define IPT_CONNBYTES_DIR_REPLY XT_CONNBYTES_DIR_REPLY | ||
| 14 | #define IPT_CONNBYTES_DIR_BOTH XT_CONNBYTES_DIR_BOTH | ||
| 15 | |||
| 16 | #define ipt_connbytes_info xt_connbytes_info | ||
| 17 | |||
| 18 | #endif | ||
diff --git a/include/linux/netfilter_ipv4/ipt_connmark.h b/include/linux/netfilter_ipv4/ipt_connmark.h deleted file mode 100644 index c7ba6560d44c..000000000000 --- a/include/linux/netfilter_ipv4/ipt_connmark.h +++ /dev/null | |||
| @@ -1,7 +0,0 @@ | |||
| 1 | #ifndef _IPT_CONNMARK_H | ||
| 2 | #define _IPT_CONNMARK_H | ||
| 3 | |||
| 4 | #include <linux/netfilter/xt_connmark.h> | ||
| 5 | #define ipt_connmark_info xt_connmark_info | ||
| 6 | |||
| 7 | #endif /*_IPT_CONNMARK_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_conntrack.h b/include/linux/netfilter_ipv4/ipt_conntrack.h deleted file mode 100644 index cde6762949c5..000000000000 --- a/include/linux/netfilter_ipv4/ipt_conntrack.h +++ /dev/null | |||
| @@ -1,28 +0,0 @@ | |||
| 1 | /* Header file for kernel module to match connection tracking information. | ||
| 2 | * GPL (C) 2001 Marc Boucher (marc@mbsi.ca). | ||
| 3 | */ | ||
| 4 | |||
| 5 | #ifndef _IPT_CONNTRACK_H | ||
| 6 | #define _IPT_CONNTRACK_H | ||
| 7 | |||
| 8 | #include <linux/netfilter/xt_conntrack.h> | ||
| 9 | |||
| 10 | #define IPT_CONNTRACK_STATE_BIT(ctinfo) XT_CONNTRACK_STATE_BIT(ctinfo) | ||
| 11 | #define IPT_CONNTRACK_STATE_INVALID XT_CONNTRACK_STATE_INVALID | ||
| 12 | |||
| 13 | #define IPT_CONNTRACK_STATE_SNAT XT_CONNTRACK_STATE_SNAT | ||
| 14 | #define IPT_CONNTRACK_STATE_DNAT XT_CONNTRACK_STATE_DNAT | ||
| 15 | #define IPT_CONNTRACK_STATE_UNTRACKED XT_CONNTRACK_STATE_UNTRACKED | ||
| 16 | |||
| 17 | /* flags, invflags: */ | ||
| 18 | #define IPT_CONNTRACK_STATE XT_CONNTRACK_STATE | ||
| 19 | #define IPT_CONNTRACK_PROTO XT_CONNTRACK_PROTO | ||
| 20 | #define IPT_CONNTRACK_ORIGSRC XT_CONNTRACK_ORIGSRC | ||
| 21 | #define IPT_CONNTRACK_ORIGDST XT_CONNTRACK_ORIGDST | ||
| 22 | #define IPT_CONNTRACK_REPLSRC XT_CONNTRACK_REPLSRC | ||
| 23 | #define IPT_CONNTRACK_REPLDST XT_CONNTRACK_REPLDST | ||
| 24 | #define IPT_CONNTRACK_STATUS XT_CONNTRACK_STATUS | ||
| 25 | #define IPT_CONNTRACK_EXPIRES XT_CONNTRACK_EXPIRES | ||
| 26 | |||
| 27 | #define ipt_conntrack_info xt_conntrack_info | ||
| 28 | #endif /*_IPT_CONNTRACK_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_dccp.h b/include/linux/netfilter_ipv4/ipt_dccp.h deleted file mode 100644 index e70d11e1f53c..000000000000 --- a/include/linux/netfilter_ipv4/ipt_dccp.h +++ /dev/null | |||
| @@ -1,15 +0,0 @@ | |||
| 1 | #ifndef _IPT_DCCP_H_ | ||
| 2 | #define _IPT_DCCP_H_ | ||
| 3 | |||
| 4 | #include <linux/netfilter/xt_dccp.h> | ||
| 5 | #define IPT_DCCP_SRC_PORTS XT_DCCP_SRC_PORTS | ||
| 6 | #define IPT_DCCP_DEST_PORTS XT_DCCP_DEST_PORTS | ||
| 7 | #define IPT_DCCP_TYPE XT_DCCP_TYPE | ||
| 8 | #define IPT_DCCP_OPTION XT_DCCP_OPTION | ||
| 9 | |||
| 10 | #define IPT_DCCP_VALID_FLAGS XT_DCCP_VALID_FLAGS | ||
| 11 | |||
| 12 | #define ipt_dccp_info xt_dccp_info | ||
| 13 | |||
| 14 | #endif /* _IPT_DCCP_H_ */ | ||
| 15 | |||
diff --git a/include/linux/netfilter_ipv4/ipt_dscp.h b/include/linux/netfilter_ipv4/ipt_dscp.h deleted file mode 100644 index 4b82ca912b0e..000000000000 --- a/include/linux/netfilter_ipv4/ipt_dscp.h +++ /dev/null | |||
| @@ -1,21 +0,0 @@ | |||
| 1 | /* iptables module for matching the IPv4 DSCP field | ||
| 2 | * | ||
| 3 | * (C) 2002 Harald Welte <laforge@gnumonks.org> | ||
| 4 | * This software is distributed under GNU GPL v2, 1991 | ||
| 5 | * | ||
| 6 | * See RFC2474 for a description of the DSCP field within the IP Header. | ||
| 7 | * | ||
| 8 | * ipt_dscp.h,v 1.3 2002/08/05 19:00:21 laforge Exp | ||
| 9 | */ | ||
| 10 | #ifndef _IPT_DSCP_H | ||
| 11 | #define _IPT_DSCP_H | ||
| 12 | |||
| 13 | #include <linux/netfilter/xt_dscp.h> | ||
| 14 | |||
| 15 | #define IPT_DSCP_MASK XT_DSCP_MASK | ||
| 16 | #define IPT_DSCP_SHIFT XT_DSCP_SHIFT | ||
| 17 | #define IPT_DSCP_MAX XT_DSCP_MAX | ||
| 18 | |||
| 19 | #define ipt_dscp_info xt_dscp_info | ||
| 20 | |||
| 21 | #endif /* _IPT_DSCP_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_ecn.h b/include/linux/netfilter_ipv4/ipt_ecn.h index 1f0d9a4d3378..9945baa4ccd7 100644 --- a/include/linux/netfilter_ipv4/ipt_ecn.h +++ b/include/linux/netfilter_ipv4/ipt_ecn.h | |||
| @@ -8,9 +8,9 @@ | |||
| 8 | */ | 8 | */ |
| 9 | #ifndef _IPT_ECN_H | 9 | #ifndef _IPT_ECN_H |
| 10 | #define _IPT_ECN_H | 10 | #define _IPT_ECN_H |
| 11 | #include <linux/netfilter_ipv4/ipt_dscp.h> | 11 | #include <linux/netfilter/xt_dscp.h> |
| 12 | 12 | ||
| 13 | #define IPT_ECN_IP_MASK (~IPT_DSCP_MASK) | 13 | #define IPT_ECN_IP_MASK (~XT_DSCP_MASK) |
| 14 | 14 | ||
| 15 | #define IPT_ECN_OP_MATCH_IP 0x01 | 15 | #define IPT_ECN_OP_MATCH_IP 0x01 |
| 16 | #define IPT_ECN_OP_MATCH_ECE 0x10 | 16 | #define IPT_ECN_OP_MATCH_ECE 0x10 |
diff --git a/include/linux/netfilter_ipv4/ipt_esp.h b/include/linux/netfilter_ipv4/ipt_esp.h deleted file mode 100644 index 78296e7eeff9..000000000000 --- a/include/linux/netfilter_ipv4/ipt_esp.h +++ /dev/null | |||
| @@ -1,10 +0,0 @@ | |||
| 1 | #ifndef _IPT_ESP_H | ||
| 2 | #define _IPT_ESP_H | ||
| 3 | |||
| 4 | #include <linux/netfilter/xt_esp.h> | ||
| 5 | |||
| 6 | #define ipt_esp xt_esp | ||
| 7 | #define IPT_ESP_INV_SPI XT_ESP_INV_SPI | ||
| 8 | #define IPT_ESP_INV_MASK XT_ESP_INV_MASK | ||
| 9 | |||
| 10 | #endif /*_IPT_ESP_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_hashlimit.h b/include/linux/netfilter_ipv4/ipt_hashlimit.h deleted file mode 100644 index 5662120a3d7b..000000000000 --- a/include/linux/netfilter_ipv4/ipt_hashlimit.h +++ /dev/null | |||
| @@ -1,14 +0,0 @@ | |||
| 1 | #ifndef _IPT_HASHLIMIT_H | ||
| 2 | #define _IPT_HASHLIMIT_H | ||
| 3 | |||
| 4 | #include <linux/netfilter/xt_hashlimit.h> | ||
| 5 | |||
| 6 | #define IPT_HASHLIMIT_SCALE XT_HASHLIMIT_SCALE | ||
| 7 | #define IPT_HASHLIMIT_HASH_DIP XT_HASHLIMIT_HASH_DIP | ||
| 8 | #define IPT_HASHLIMIT_HASH_DPT XT_HASHLIMIT_HASH_DPT | ||
| 9 | #define IPT_HASHLIMIT_HASH_SIP XT_HASHLIMIT_HASH_SIP | ||
| 10 | #define IPT_HASHLIMIT_HASH_SPT XT_HASHLIMIT_HASH_SPT | ||
| 11 | |||
| 12 | #define ipt_hashlimit_info xt_hashlimit_info | ||
| 13 | |||
| 14 | #endif /* _IPT_HASHLIMIT_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_helper.h b/include/linux/netfilter_ipv4/ipt_helper.h deleted file mode 100644 index 80452c218551..000000000000 --- a/include/linux/netfilter_ipv4/ipt_helper.h +++ /dev/null | |||
| @@ -1,7 +0,0 @@ | |||
| 1 | #ifndef _IPT_HELPER_H | ||
| 2 | #define _IPT_HELPER_H | ||
| 3 | |||
| 4 | #include <linux/netfilter/xt_helper.h> | ||
| 5 | #define ipt_helper_info xt_helper_info | ||
| 6 | |||
| 7 | #endif /* _IPT_HELPER_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_iprange.h b/include/linux/netfilter_ipv4/ipt_iprange.h deleted file mode 100644 index 5f1aebde4d2f..000000000000 --- a/include/linux/netfilter_ipv4/ipt_iprange.h +++ /dev/null | |||
| @@ -1,21 +0,0 @@ | |||
| 1 | #ifndef _IPT_IPRANGE_H | ||
| 2 | #define _IPT_IPRANGE_H | ||
| 3 | |||
| 4 | #include <linux/types.h> | ||
| 5 | #include <linux/netfilter/xt_iprange.h> | ||
| 6 | |||
| 7 | struct ipt_iprange { | ||
| 8 | /* Inclusive: network order. */ | ||
| 9 | __be32 min_ip, max_ip; | ||
| 10 | }; | ||
| 11 | |||
| 12 | struct ipt_iprange_info | ||
| 13 | { | ||
| 14 | struct ipt_iprange src; | ||
| 15 | struct ipt_iprange dst; | ||
| 16 | |||
| 17 | /* Flags from above */ | ||
| 18 | u_int8_t flags; | ||
| 19 | }; | ||
| 20 | |||
| 21 | #endif /* _IPT_IPRANGE_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_length.h b/include/linux/netfilter_ipv4/ipt_length.h deleted file mode 100644 index 9b45206ffcef..000000000000 --- a/include/linux/netfilter_ipv4/ipt_length.h +++ /dev/null | |||
| @@ -1,7 +0,0 @@ | |||
| 1 | #ifndef _IPT_LENGTH_H | ||
| 2 | #define _IPT_LENGTH_H | ||
| 3 | |||
| 4 | #include <linux/netfilter/xt_length.h> | ||
| 5 | #define ipt_length_info xt_length_info | ||
| 6 | |||
| 7 | #endif /*_IPT_LENGTH_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_limit.h b/include/linux/netfilter_ipv4/ipt_limit.h deleted file mode 100644 index 92f5cd07bbc4..000000000000 --- a/include/linux/netfilter_ipv4/ipt_limit.h +++ /dev/null | |||
| @@ -1,8 +0,0 @@ | |||
| 1 | #ifndef _IPT_RATE_H | ||
| 2 | #define _IPT_RATE_H | ||
| 3 | |||
| 4 | #include <linux/netfilter/xt_limit.h> | ||
| 5 | #define IPT_LIMIT_SCALE XT_LIMIT_SCALE | ||
| 6 | #define ipt_rateinfo xt_rateinfo | ||
| 7 | |||
| 8 | #endif /*_IPT_RATE_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_mac.h b/include/linux/netfilter_ipv4/ipt_mac.h deleted file mode 100644 index b186008a3c47..000000000000 --- a/include/linux/netfilter_ipv4/ipt_mac.h +++ /dev/null | |||
| @@ -1,7 +0,0 @@ | |||
| 1 | #ifndef _IPT_MAC_H | ||
| 2 | #define _IPT_MAC_H | ||
| 3 | |||
| 4 | #include <linux/netfilter/xt_mac.h> | ||
| 5 | #define ipt_mac_info xt_mac_info | ||
| 6 | |||
| 7 | #endif /*_IPT_MAC_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_mark.h b/include/linux/netfilter_ipv4/ipt_mark.h deleted file mode 100644 index bfde67c61224..000000000000 --- a/include/linux/netfilter_ipv4/ipt_mark.h +++ /dev/null | |||
| @@ -1,9 +0,0 @@ | |||
| 1 | #ifndef _IPT_MARK_H | ||
| 2 | #define _IPT_MARK_H | ||
| 3 | |||
| 4 | /* Backwards compatibility for old userspace */ | ||
| 5 | #include <linux/netfilter/xt_mark.h> | ||
| 6 | |||
| 7 | #define ipt_mark_info xt_mark_info | ||
| 8 | |||
| 9 | #endif /*_IPT_MARK_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_multiport.h b/include/linux/netfilter_ipv4/ipt_multiport.h deleted file mode 100644 index 55fe85eca88c..000000000000 --- a/include/linux/netfilter_ipv4/ipt_multiport.h +++ /dev/null | |||
| @@ -1,15 +0,0 @@ | |||
| 1 | #ifndef _IPT_MULTIPORT_H | ||
| 2 | #define _IPT_MULTIPORT_H | ||
| 3 | |||
| 4 | #include <linux/netfilter/xt_multiport.h> | ||
| 5 | |||
| 6 | #define IPT_MULTIPORT_SOURCE XT_MULTIPORT_SOURCE | ||
| 7 | #define IPT_MULTIPORT_DESTINATION XT_MULTIPORT_DESTINATION | ||
| 8 | #define IPT_MULTIPORT_EITHER XT_MULTIPORT_EITHER | ||
| 9 | |||
| 10 | #define IPT_MULTI_PORTS XT_MULTI_PORTS | ||
| 11 | |||
| 12 | #define ipt_multiport xt_multiport | ||
| 13 | #define ipt_multiport_v1 xt_multiport_v1 | ||
| 14 | |||
| 15 | #endif /*_IPT_MULTIPORT_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_owner.h b/include/linux/netfilter_ipv4/ipt_owner.h deleted file mode 100644 index a78445be9992..000000000000 --- a/include/linux/netfilter_ipv4/ipt_owner.h +++ /dev/null | |||
| @@ -1,20 +0,0 @@ | |||
| 1 | #ifndef _IPT_OWNER_H | ||
| 2 | #define _IPT_OWNER_H | ||
| 3 | |||
| 4 | /* match and invert flags */ | ||
| 5 | #define IPT_OWNER_UID 0x01 | ||
| 6 | #define IPT_OWNER_GID 0x02 | ||
| 7 | #define IPT_OWNER_PID 0x04 | ||
| 8 | #define IPT_OWNER_SID 0x08 | ||
| 9 | #define IPT_OWNER_COMM 0x10 | ||
| 10 | |||
| 11 | struct ipt_owner_info { | ||
| 12 | __kernel_uid32_t uid; | ||
| 13 | __kernel_gid32_t gid; | ||
| 14 | __kernel_pid_t pid; | ||
| 15 | __kernel_pid_t sid; | ||
| 16 | char comm[16]; | ||
| 17 | u_int8_t match, invert; /* flags */ | ||
| 18 | }; | ||
| 19 | |||
| 20 | #endif /*_IPT_OWNER_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_physdev.h b/include/linux/netfilter_ipv4/ipt_physdev.h deleted file mode 100644 index 2400e7140f26..000000000000 --- a/include/linux/netfilter_ipv4/ipt_physdev.h +++ /dev/null | |||
| @@ -1,17 +0,0 @@ | |||
| 1 | #ifndef _IPT_PHYSDEV_H | ||
| 2 | #define _IPT_PHYSDEV_H | ||
| 3 | |||
| 4 | /* Backwards compatibility for old userspace */ | ||
| 5 | |||
| 6 | #include <linux/netfilter/xt_physdev.h> | ||
| 7 | |||
| 8 | #define IPT_PHYSDEV_OP_IN XT_PHYSDEV_OP_IN | ||
| 9 | #define IPT_PHYSDEV_OP_OUT XT_PHYSDEV_OP_OUT | ||
| 10 | #define IPT_PHYSDEV_OP_BRIDGED XT_PHYSDEV_OP_BRIDGED | ||
| 11 | #define IPT_PHYSDEV_OP_ISIN XT_PHYSDEV_OP_ISIN | ||
| 12 | #define IPT_PHYSDEV_OP_ISOUT XT_PHYSDEV_OP_ISOUT | ||
| 13 | #define IPT_PHYSDEV_OP_MASK XT_PHYSDEV_OP_MASK | ||
| 14 | |||
| 15 | #define ipt_physdev_info xt_physdev_info | ||
| 16 | |||
| 17 | #endif /*_IPT_PHYSDEV_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_pkttype.h b/include/linux/netfilter_ipv4/ipt_pkttype.h deleted file mode 100644 index ff1fbc949a0c..000000000000 --- a/include/linux/netfilter_ipv4/ipt_pkttype.h +++ /dev/null | |||
| @@ -1,7 +0,0 @@ | |||
| 1 | #ifndef _IPT_PKTTYPE_H | ||
| 2 | #define _IPT_PKTTYPE_H | ||
| 3 | |||
| 4 | #include <linux/netfilter/xt_pkttype.h> | ||
| 5 | #define ipt_pkttype_info xt_pkttype_info | ||
| 6 | |||
| 7 | #endif /*_IPT_PKTTYPE_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_policy.h b/include/linux/netfilter_ipv4/ipt_policy.h deleted file mode 100644 index 1037fb2cd206..000000000000 --- a/include/linux/netfilter_ipv4/ipt_policy.h +++ /dev/null | |||
| @@ -1,23 +0,0 @@ | |||
| 1 | #ifndef _IPT_POLICY_H | ||
| 2 | #define _IPT_POLICY_H | ||
| 3 | |||
| 4 | #include <linux/netfilter/xt_policy.h> | ||
| 5 | |||
| 6 | #define IPT_POLICY_MAX_ELEM XT_POLICY_MAX_ELEM | ||
| 7 | |||
| 8 | /* ipt_policy_flags */ | ||
| 9 | #define IPT_POLICY_MATCH_IN XT_POLICY_MATCH_IN | ||
| 10 | #define IPT_POLICY_MATCH_OUT XT_POLICY_MATCH_OUT | ||
| 11 | #define IPT_POLICY_MATCH_NONE XT_POLICY_MATCH_NONE | ||
| 12 | #define IPT_POLICY_MATCH_STRICT XT_POLICY_MATCH_STRICT | ||
| 13 | |||
| 14 | /* ipt_policy_modes */ | ||
| 15 | #define IPT_POLICY_MODE_TRANSPORT XT_POLICY_MODE_TRANSPORT | ||
| 16 | #define IPT_POLICY_MODE_TUNNEL XT_POLICY_MODE_TUNNEL | ||
| 17 | |||
| 18 | #define ipt_policy_spec xt_policy_spec | ||
| 19 | #define ipt_policy_addr xt_policy_addr | ||
| 20 | #define ipt_policy_elem xt_policy_elem | ||
| 21 | #define ipt_policy_info xt_policy_info | ||
| 22 | |||
| 23 | #endif /* _IPT_POLICY_H */ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_recent.h b/include/linux/netfilter_ipv4/ipt_recent.h deleted file mode 100644 index d636cca133c2..000000000000 --- a/include/linux/netfilter_ipv4/ipt_recent.h +++ /dev/null | |||
| @@ -1,21 +0,0 @@ | |||
| 1 | #ifndef _IPT_RECENT_H | ||
| 2 | #define _IPT_RECENT_H | ||
| 3 | |||
| 4 | #include <linux/netfilter/xt_recent.h> | ||
| 5 | |||
| 6 | #define ipt_recent_info xt_recent_mtinfo | ||
| 7 | |||
| 8 | enum { | ||
| 9 | IPT_RECENT_CHECK = XT_RECENT_CHECK, | ||
| 10 | IPT_RECENT_SET = XT_RECENT_SET, | ||
| 11 | IPT_RECENT_UPDATE = XT_RECENT_UPDATE, | ||
| 12 | IPT_RECENT_REMOVE = XT_RECENT_REMOVE, | ||
| 13 | IPT_RECENT_TTL = XT_RECENT_TTL, | ||
| 14 | |||
| 15 | IPT_RECENT_SOURCE = XT_RECENT_SOURCE, | ||
| 16 | IPT_RECENT_DEST = XT_RECENT_DEST, | ||
| 17 | |||
| 18 | IPT_RECENT_NAME_LEN = XT_RECENT_NAME_LEN, | ||
| 19 | }; | ||
| 20 | |||
| 21 | #endif /*_IPT_RECENT_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_sctp.h b/include/linux/netfilter_ipv4/ipt_sctp.h deleted file mode 100644 index 80b3dbacd193..000000000000 --- a/include/linux/netfilter_ipv4/ipt_sctp.h +++ /dev/null | |||
| @@ -1,105 +0,0 @@ | |||
| 1 | #ifndef _IPT_SCTP_H_ | ||
| 2 | #define _IPT_SCTP_H_ | ||
| 3 | |||
| 4 | #define IPT_SCTP_SRC_PORTS 0x01 | ||
| 5 | #define IPT_SCTP_DEST_PORTS 0x02 | ||
| 6 | #define IPT_SCTP_CHUNK_TYPES 0x04 | ||
| 7 | |||
| 8 | #define IPT_SCTP_VALID_FLAGS 0x07 | ||
| 9 | |||
| 10 | |||
| 11 | struct ipt_sctp_flag_info { | ||
| 12 | u_int8_t chunktype; | ||
| 13 | u_int8_t flag; | ||
| 14 | u_int8_t flag_mask; | ||
| 15 | }; | ||
| 16 | |||
| 17 | #define IPT_NUM_SCTP_FLAGS 4 | ||
| 18 | |||
| 19 | struct ipt_sctp_info { | ||
| 20 | u_int16_t dpts[2]; /* Min, Max */ | ||
| 21 | u_int16_t spts[2]; /* Min, Max */ | ||
| 22 | |||
| 23 | u_int32_t chunkmap[256 / sizeof (u_int32_t)]; /* Bit mask of chunks to be matched according to RFC 2960 */ | ||
| 24 | |||
| 25 | #define SCTP_CHUNK_MATCH_ANY 0x01 /* Match if any of the chunk types are present */ | ||
| 26 | #define SCTP_CHUNK_MATCH_ALL 0x02 /* Match if all of the chunk types are present */ | ||
| 27 | #define SCTP_CHUNK_MATCH_ONLY 0x04 /* Match if these are the only chunk types present */ | ||
| 28 | |||
| 29 | u_int32_t chunk_match_type; | ||
| 30 | struct ipt_sctp_flag_info flag_info[IPT_NUM_SCTP_FLAGS]; | ||
| 31 | int flag_count; | ||
| 32 | |||
| 33 | u_int32_t flags; | ||
| 34 | u_int32_t invflags; | ||
| 35 | }; | ||
| 36 | |||
| 37 | #define bytes(type) (sizeof(type) * 8) | ||
| 38 | |||
| 39 | #define SCTP_CHUNKMAP_SET(chunkmap, type) \ | ||
| 40 | do { \ | ||
| 41 | chunkmap[type / bytes(u_int32_t)] |= \ | ||
| 42 | 1 << (type % bytes(u_int32_t)); \ | ||
| 43 | } while (0) | ||
| 44 | |||
| 45 | #define SCTP_CHUNKMAP_CLEAR(chunkmap, type) \ | ||
| 46 | do { \ | ||
| 47 | chunkmap[type / bytes(u_int32_t)] &= \ | ||
| 48 | ~(1 << (type % bytes(u_int32_t))); \ | ||
| 49 | } while (0) | ||
| 50 | |||
| 51 | #define SCTP_CHUNKMAP_IS_SET(chunkmap, type) \ | ||
| 52 | ({ \ | ||
| 53 | (chunkmap[type / bytes (u_int32_t)] & \ | ||
| 54 | (1 << (type % bytes (u_int32_t)))) ? 1: 0; \ | ||
| 55 | }) | ||
| 56 | |||
| 57 | #define SCTP_CHUNKMAP_RESET(chunkmap) \ | ||
| 58 | do { \ | ||
| 59 | int i; \ | ||
| 60 | for (i = 0; i < ARRAY_SIZE(chunkmap); i++) \ | ||
| 61 | chunkmap[i] = 0; \ | ||
| 62 | } while (0) | ||
| 63 | |||
| 64 | #define SCTP_CHUNKMAP_SET_ALL(chunkmap) \ | ||
| 65 | do { \ | ||
| 66 | int i; \ | ||
| 67 | for (i = 0; i < ARRAY_SIZE(chunkmap); i++) \ | ||
| 68 | chunkmap[i] = ~0; \ | ||
| 69 | } while (0) | ||
| 70 | |||
| 71 | #define SCTP_CHUNKMAP_COPY(destmap, srcmap) \ | ||
| 72 | do { \ | ||
| 73 | int i; \ | ||
| 74 | for (i = 0; i < ARRAY_SIZE(chunkmap); i++) \ | ||
| 75 | destmap[i] = srcmap[i]; \ | ||
| 76 | } while (0) | ||
| 77 | |||
| 78 | #define SCTP_CHUNKMAP_IS_CLEAR(chunkmap) \ | ||
| 79 | ({ \ | ||
| 80 | int i; \ | ||
| 81 | int flag = 1; \ | ||
| 82 | for (i = 0; i < ARRAY_SIZE(chunkmap); i++) { \ | ||
| 83 | if (chunkmap[i]) { \ | ||
| 84 | flag = 0; \ | ||
| 85 | break; \ | ||
| 86 | } \ | ||
| 87 | } \ | ||
| 88 | flag; \ | ||
| 89 | }) | ||
| 90 | |||
| 91 | #define SCTP_CHUNKMAP_IS_ALL_SET(chunkmap) \ | ||
| 92 | ({ \ | ||
| 93 | int i; \ | ||
| 94 | int flag = 1; \ | ||
| 95 | for (i = 0; i < ARRAY_SIZE(chunkmap); i++) { \ | ||
| 96 | if (chunkmap[i] != ~0) { \ | ||
| 97 | flag = 0; \ | ||
| 98 | break; \ | ||
| 99 | } \ | ||
| 100 | } \ | ||
| 101 | flag; \ | ||
| 102 | }) | ||
| 103 | |||
| 104 | #endif /* _IPT_SCTP_H_ */ | ||
| 105 | |||
diff --git a/include/linux/netfilter_ipv4/ipt_state.h b/include/linux/netfilter_ipv4/ipt_state.h deleted file mode 100644 index a44a99cc28cc..000000000000 --- a/include/linux/netfilter_ipv4/ipt_state.h +++ /dev/null | |||
| @@ -1,15 +0,0 @@ | |||
| 1 | #ifndef _IPT_STATE_H | ||
| 2 | #define _IPT_STATE_H | ||
| 3 | |||
| 4 | /* Backwards compatibility for old userspace */ | ||
| 5 | |||
| 6 | #include <linux/netfilter/xt_state.h> | ||
| 7 | |||
| 8 | #define IPT_STATE_BIT XT_STATE_BIT | ||
| 9 | #define IPT_STATE_INVALID XT_STATE_INVALID | ||
| 10 | |||
| 11 | #define IPT_STATE_UNTRACKED XT_STATE_UNTRACKED | ||
| 12 | |||
| 13 | #define ipt_state_info xt_state_info | ||
| 14 | |||
| 15 | #endif /*_IPT_STATE_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_string.h b/include/linux/netfilter_ipv4/ipt_string.h deleted file mode 100644 index c26de3059903..000000000000 --- a/include/linux/netfilter_ipv4/ipt_string.h +++ /dev/null | |||
| @@ -1,10 +0,0 @@ | |||
| 1 | #ifndef _IPT_STRING_H | ||
| 2 | #define _IPT_STRING_H | ||
| 3 | |||
| 4 | #include <linux/netfilter/xt_string.h> | ||
| 5 | |||
| 6 | #define IPT_STRING_MAX_PATTERN_SIZE XT_STRING_MAX_PATTERN_SIZE | ||
| 7 | #define IPT_STRING_MAX_ALGO_NAME_SIZE XT_STRING_MAX_ALGO_NAME_SIZE | ||
| 8 | #define ipt_string_info xt_string_info | ||
| 9 | |||
| 10 | #endif /*_IPT_STRING_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_tcpmss.h b/include/linux/netfilter_ipv4/ipt_tcpmss.h deleted file mode 100644 index 18bbc8e8e009..000000000000 --- a/include/linux/netfilter_ipv4/ipt_tcpmss.h +++ /dev/null | |||
| @@ -1,7 +0,0 @@ | |||
| 1 | #ifndef _IPT_TCPMSS_MATCH_H | ||
| 2 | #define _IPT_TCPMSS_MATCH_H | ||
| 3 | |||
| 4 | #include <linux/netfilter/xt_tcpmss.h> | ||
| 5 | #define ipt_tcpmss_match_info xt_tcpmss_match_info | ||
| 6 | |||
| 7 | #endif /*_IPT_TCPMSS_MATCH_H*/ | ||
diff --git a/include/linux/netfilter_ipv4/ipt_tos.h b/include/linux/netfilter_ipv4/ipt_tos.h deleted file mode 100644 index a21f5df23c50..000000000000 --- a/include/linux/netfilter_ipv4/ipt_tos.h +++ /dev/null | |||
| @@ -1,13 +0,0 @@ | |||
| 1 | #ifndef _IPT_TOS_H | ||
| 2 | #define _IPT_TOS_H | ||
| 3 | |||
| 4 | struct ipt_tos_info { | ||
| 5 | u_int8_t tos; | ||
| 6 | u_int8_t invert; | ||
| 7 | }; | ||
| 8 | |||
| 9 | #ifndef IPTOS_NORMALSVC | ||
| 10 | #define IPTOS_NORMALSVC 0 | ||
| 11 | #endif | ||
| 12 | |||
| 13 | #endif /*_IPT_TOS_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/Kbuild b/include/linux/netfilter_ipv6/Kbuild index aca4bd1f6d7c..e864eaee9e5e 100644 --- a/include/linux/netfilter_ipv6/Kbuild +++ b/include/linux/netfilter_ipv6/Kbuild | |||
| @@ -1,22 +1,12 @@ | |||
| 1 | header-y += ip6t_HL.h | 1 | header-y += ip6t_HL.h |
| 2 | header-y += ip6t_LOG.h | 2 | header-y += ip6t_LOG.h |
| 3 | header-y += ip6t_MARK.h | ||
| 4 | header-y += ip6t_REJECT.h | 3 | header-y += ip6t_REJECT.h |
| 5 | header-y += ip6t_ah.h | 4 | header-y += ip6t_ah.h |
| 6 | header-y += ip6t_esp.h | ||
| 7 | header-y += ip6t_frag.h | 5 | header-y += ip6t_frag.h |
| 8 | header-y += ip6t_hl.h | ||
| 9 | header-y += ip6t_ipv6header.h | 6 | header-y += ip6t_ipv6header.h |
| 10 | header-y += ip6t_length.h | 7 | header-y += ip6t_hl.h |
| 11 | header-y += ip6t_limit.h | ||
| 12 | header-y += ip6t_mac.h | ||
| 13 | header-y += ip6t_mark.h | ||
| 14 | header-y += ip6t_mh.h | 8 | header-y += ip6t_mh.h |
| 15 | header-y += ip6t_multiport.h | ||
| 16 | header-y += ip6t_opts.h | 9 | header-y += ip6t_opts.h |
| 17 | header-y += ip6t_owner.h | ||
| 18 | header-y += ip6t_physdev.h | ||
| 19 | header-y += ip6t_policy.h | ||
| 20 | header-y += ip6t_rt.h | 10 | header-y += ip6t_rt.h |
| 21 | 11 | ||
| 22 | unifdef-y += ip6_tables.h | 12 | unifdef-y += ip6_tables.h |
diff --git a/include/linux/netfilter_ipv6/ip6_tables.h b/include/linux/netfilter_ipv6/ip6_tables.h index 1089e33cf633..b31050d20ae4 100644 --- a/include/linux/netfilter_ipv6/ip6_tables.h +++ b/include/linux/netfilter_ipv6/ip6_tables.h | |||
| @@ -88,8 +88,7 @@ struct ip6t_ip6 { | |||
| 88 | /* This structure defines each of the firewall rules. Consists of 3 | 88 | /* This structure defines each of the firewall rules. Consists of 3 |
| 89 | parts which are 1) general IP header stuff 2) match specific | 89 | parts which are 1) general IP header stuff 2) match specific |
| 90 | stuff 3) the target to perform if the rule matches */ | 90 | stuff 3) the target to perform if the rule matches */ |
| 91 | struct ip6t_entry | 91 | struct ip6t_entry { |
| 92 | { | ||
| 93 | struct ip6t_ip6 ipv6; | 92 | struct ip6t_ip6 ipv6; |
| 94 | 93 | ||
| 95 | /* Mark with fields that we care about. */ | 94 | /* Mark with fields that we care about. */ |
| @@ -111,20 +110,17 @@ struct ip6t_entry | |||
| 111 | }; | 110 | }; |
| 112 | 111 | ||
| 113 | /* Standard entry */ | 112 | /* Standard entry */ |
| 114 | struct ip6t_standard | 113 | struct ip6t_standard { |
| 115 | { | ||
| 116 | struct ip6t_entry entry; | 114 | struct ip6t_entry entry; |
| 117 | struct ip6t_standard_target target; | 115 | struct ip6t_standard_target target; |
| 118 | }; | 116 | }; |
| 119 | 117 | ||
| 120 | struct ip6t_error_target | 118 | struct ip6t_error_target { |
| 121 | { | ||
| 122 | struct ip6t_entry_target target; | 119 | struct ip6t_entry_target target; |
| 123 | char errorname[IP6T_FUNCTION_MAXNAMELEN]; | 120 | char errorname[IP6T_FUNCTION_MAXNAMELEN]; |
| 124 | }; | 121 | }; |
| 125 | 122 | ||
| 126 | struct ip6t_error | 123 | struct ip6t_error { |
| 127 | { | ||
| 128 | struct ip6t_entry entry; | 124 | struct ip6t_entry entry; |
| 129 | struct ip6t_error_target target; | 125 | struct ip6t_error_target target; |
| 130 | }; | 126 | }; |
| @@ -195,8 +191,7 @@ struct ip6t_error | |||
| 195 | #define IP6T_UDP_INV_MASK XT_UDP_INV_MASK | 191 | #define IP6T_UDP_INV_MASK XT_UDP_INV_MASK |
| 196 | 192 | ||
| 197 | /* ICMP matching stuff */ | 193 | /* ICMP matching stuff */ |
| 198 | struct ip6t_icmp | 194 | struct ip6t_icmp { |
| 199 | { | ||
| 200 | u_int8_t type; /* type to match */ | 195 | u_int8_t type; /* type to match */ |
| 201 | u_int8_t code[2]; /* range of code */ | 196 | u_int8_t code[2]; /* range of code */ |
| 202 | u_int8_t invflags; /* Inverse flags */ | 197 | u_int8_t invflags; /* Inverse flags */ |
| @@ -206,8 +201,7 @@ struct ip6t_icmp | |||
| 206 | #define IP6T_ICMP_INV 0x01 /* Invert the sense of type/code test */ | 201 | #define IP6T_ICMP_INV 0x01 /* Invert the sense of type/code test */ |
| 207 | 202 | ||
| 208 | /* The argument to IP6T_SO_GET_INFO */ | 203 | /* The argument to IP6T_SO_GET_INFO */ |
| 209 | struct ip6t_getinfo | 204 | struct ip6t_getinfo { |
| 210 | { | ||
| 211 | /* Which table: caller fills this in. */ | 205 | /* Which table: caller fills this in. */ |
| 212 | char name[IP6T_TABLE_MAXNAMELEN]; | 206 | char name[IP6T_TABLE_MAXNAMELEN]; |
| 213 | 207 | ||
| @@ -229,8 +223,7 @@ struct ip6t_getinfo | |||
| 229 | }; | 223 | }; |
| 230 | 224 | ||
| 231 | /* The argument to IP6T_SO_SET_REPLACE. */ | 225 | /* The argument to IP6T_SO_SET_REPLACE. */ |
| 232 | struct ip6t_replace | 226 | struct ip6t_replace { |
| 233 | { | ||
| 234 | /* Which table. */ | 227 | /* Which table. */ |
| 235 | char name[IP6T_TABLE_MAXNAMELEN]; | 228 | char name[IP6T_TABLE_MAXNAMELEN]; |
| 236 | 229 | ||
| @@ -264,8 +257,7 @@ struct ip6t_replace | |||
| 264 | #define ip6t_counters_info xt_counters_info | 257 | #define ip6t_counters_info xt_counters_info |
| 265 | 258 | ||
| 266 | /* The argument to IP6T_SO_GET_ENTRIES. */ | 259 | /* The argument to IP6T_SO_GET_ENTRIES. */ |
| 267 | struct ip6t_get_entries | 260 | struct ip6t_get_entries { |
| 268 | { | ||
| 269 | /* Which table: user fills this in. */ | 261 | /* Which table: user fills this in. */ |
| 270 | char name[IP6T_TABLE_MAXNAMELEN]; | 262 | char name[IP6T_TABLE_MAXNAMELEN]; |
| 271 | 263 | ||
| @@ -306,7 +298,7 @@ ip6t_get_target(struct ip6t_entry *e) | |||
| 306 | extern void ip6t_init(void) __init; | 298 | extern void ip6t_init(void) __init; |
| 307 | 299 | ||
| 308 | extern struct xt_table *ip6t_register_table(struct net *net, | 300 | extern struct xt_table *ip6t_register_table(struct net *net, |
| 309 | struct xt_table *table, | 301 | const struct xt_table *table, |
| 310 | const struct ip6t_replace *repl); | 302 | const struct ip6t_replace *repl); |
| 311 | extern void ip6t_unregister_table(struct xt_table *table); | 303 | extern void ip6t_unregister_table(struct xt_table *table); |
| 312 | extern unsigned int ip6t_do_table(struct sk_buff *skb, | 304 | extern unsigned int ip6t_do_table(struct sk_buff *skb, |
| @@ -330,8 +322,7 @@ extern int ip6_masked_addrcmp(const struct in6_addr *addr1, | |||
| 330 | #ifdef CONFIG_COMPAT | 322 | #ifdef CONFIG_COMPAT |
| 331 | #include <net/compat.h> | 323 | #include <net/compat.h> |
| 332 | 324 | ||
| 333 | struct compat_ip6t_entry | 325 | struct compat_ip6t_entry { |
| 334 | { | ||
| 335 | struct ip6t_ip6 ipv6; | 326 | struct ip6t_ip6 ipv6; |
| 336 | compat_uint_t nfcache; | 327 | compat_uint_t nfcache; |
| 337 | u_int16_t target_offset; | 328 | u_int16_t target_offset; |
diff --git a/include/linux/netfilter_ipv6/ip6t_MARK.h b/include/linux/netfilter_ipv6/ip6t_MARK.h deleted file mode 100644 index 7cf629a8ab92..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_MARK.h +++ /dev/null | |||
| @@ -1,9 +0,0 @@ | |||
| 1 | #ifndef _IP6T_MARK_H_target | ||
| 2 | #define _IP6T_MARK_H_target | ||
| 3 | |||
| 4 | /* Backwards compatibility for old userspace */ | ||
| 5 | #include <linux/netfilter/xt_MARK.h> | ||
| 6 | |||
| 7 | #define ip6t_mark_target_info xt_mark_target_info | ||
| 8 | |||
| 9 | #endif /*_IP6T_MARK_H_target*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_ah.h b/include/linux/netfilter_ipv6/ip6t_ah.h index 8531879eb464..17a745cfb2c7 100644 --- a/include/linux/netfilter_ipv6/ip6t_ah.h +++ b/include/linux/netfilter_ipv6/ip6t_ah.h | |||
| @@ -1,8 +1,7 @@ | |||
| 1 | #ifndef _IP6T_AH_H | 1 | #ifndef _IP6T_AH_H |
| 2 | #define _IP6T_AH_H | 2 | #define _IP6T_AH_H |
| 3 | 3 | ||
| 4 | struct ip6t_ah | 4 | struct ip6t_ah { |
| 5 | { | ||
| 6 | u_int32_t spis[2]; /* Security Parameter Index */ | 5 | u_int32_t spis[2]; /* Security Parameter Index */ |
| 7 | u_int32_t hdrlen; /* Header Length */ | 6 | u_int32_t hdrlen; /* Header Length */ |
| 8 | u_int8_t hdrres; /* Test of the Reserved Filed */ | 7 | u_int8_t hdrres; /* Test of the Reserved Filed */ |
diff --git a/include/linux/netfilter_ipv6/ip6t_esp.h b/include/linux/netfilter_ipv6/ip6t_esp.h deleted file mode 100644 index f62eaf53c16c..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_esp.h +++ /dev/null | |||
| @@ -1,10 +0,0 @@ | |||
| 1 | #ifndef _IP6T_ESP_H | ||
| 2 | #define _IP6T_ESP_H | ||
| 3 | |||
| 4 | #include <linux/netfilter/xt_esp.h> | ||
| 5 | |||
| 6 | #define ip6t_esp xt_esp | ||
| 7 | #define IP6T_ESP_INV_SPI XT_ESP_INV_SPI | ||
| 8 | #define IP6T_ESP_INV_MASK XT_ESP_INV_MASK | ||
| 9 | |||
| 10 | #endif /*_IP6T_ESP_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_frag.h b/include/linux/netfilter_ipv6/ip6t_frag.h index 66070a0d6dfc..3724d0850920 100644 --- a/include/linux/netfilter_ipv6/ip6t_frag.h +++ b/include/linux/netfilter_ipv6/ip6t_frag.h | |||
| @@ -1,8 +1,7 @@ | |||
| 1 | #ifndef _IP6T_FRAG_H | 1 | #ifndef _IP6T_FRAG_H |
| 2 | #define _IP6T_FRAG_H | 2 | #define _IP6T_FRAG_H |
| 3 | 3 | ||
| 4 | struct ip6t_frag | 4 | struct ip6t_frag { |
| 5 | { | ||
| 6 | u_int32_t ids[2]; /* Security Parameter Index */ | 5 | u_int32_t ids[2]; /* Security Parameter Index */ |
| 7 | u_int32_t hdrlen; /* Header Length */ | 6 | u_int32_t hdrlen; /* Header Length */ |
| 8 | u_int8_t flags; /* */ | 7 | u_int8_t flags; /* */ |
diff --git a/include/linux/netfilter_ipv6/ip6t_ipv6header.h b/include/linux/netfilter_ipv6/ip6t_ipv6header.h index 51c53fc9c44a..01dfd445596a 100644 --- a/include/linux/netfilter_ipv6/ip6t_ipv6header.h +++ b/include/linux/netfilter_ipv6/ip6t_ipv6header.h | |||
| @@ -8,8 +8,7 @@ on whether they contain certain headers */ | |||
| 8 | #ifndef __IPV6HEADER_H | 8 | #ifndef __IPV6HEADER_H |
| 9 | #define __IPV6HEADER_H | 9 | #define __IPV6HEADER_H |
| 10 | 10 | ||
| 11 | struct ip6t_ipv6header_info | 11 | struct ip6t_ipv6header_info { |
| 12 | { | ||
| 13 | u_int8_t matchflags; | 12 | u_int8_t matchflags; |
| 14 | u_int8_t invflags; | 13 | u_int8_t invflags; |
| 15 | u_int8_t modeflag; | 14 | u_int8_t modeflag; |
diff --git a/include/linux/netfilter_ipv6/ip6t_length.h b/include/linux/netfilter_ipv6/ip6t_length.h deleted file mode 100644 index 9e9689d03ed7..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_length.h +++ /dev/null | |||
| @@ -1,8 +0,0 @@ | |||
| 1 | #ifndef _IP6T_LENGTH_H | ||
| 2 | #define _IP6T_LENGTH_H | ||
| 3 | |||
| 4 | #include <linux/netfilter/xt_length.h> | ||
| 5 | #define ip6t_length_info xt_length_info | ||
| 6 | |||
| 7 | #endif /*_IP6T_LENGTH_H*/ | ||
| 8 | |||
diff --git a/include/linux/netfilter_ipv6/ip6t_limit.h b/include/linux/netfilter_ipv6/ip6t_limit.h deleted file mode 100644 index 487e5ea342c6..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_limit.h +++ /dev/null | |||
| @@ -1,8 +0,0 @@ | |||
| 1 | #ifndef _IP6T_RATE_H | ||
| 2 | #define _IP6T_RATE_H | ||
| 3 | |||
| 4 | #include <linux/netfilter/xt_limit.h> | ||
| 5 | #define IP6T_LIMIT_SCALE XT_LIMIT_SCALE | ||
| 6 | #define ip6t_rateinfo xt_rateinfo | ||
| 7 | |||
| 8 | #endif /*_IP6T_RATE_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_mac.h b/include/linux/netfilter_ipv6/ip6t_mac.h deleted file mode 100644 index ac58e83e9423..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_mac.h +++ /dev/null | |||
| @@ -1,7 +0,0 @@ | |||
| 1 | #ifndef _IP6T_MAC_H | ||
| 2 | #define _IP6T_MAC_H | ||
| 3 | |||
| 4 | #include <linux/netfilter/xt_mac.h> | ||
| 5 | #define ip6t_mac_info xt_mac_info | ||
| 6 | |||
| 7 | #endif /*_IP6T_MAC_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_mark.h b/include/linux/netfilter_ipv6/ip6t_mark.h deleted file mode 100644 index ff204951ddc3..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_mark.h +++ /dev/null | |||
| @@ -1,9 +0,0 @@ | |||
| 1 | #ifndef _IP6T_MARK_H | ||
| 2 | #define _IP6T_MARK_H | ||
| 3 | |||
| 4 | /* Backwards compatibility for old userspace */ | ||
| 5 | #include <linux/netfilter/xt_mark.h> | ||
| 6 | |||
| 7 | #define ip6t_mark_info xt_mark_info | ||
| 8 | |||
| 9 | #endif /*_IPT_MARK_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_mh.h b/include/linux/netfilter_ipv6/ip6t_mh.h index b9ca9a5f74d0..18549bca2d1f 100644 --- a/include/linux/netfilter_ipv6/ip6t_mh.h +++ b/include/linux/netfilter_ipv6/ip6t_mh.h | |||
| @@ -2,8 +2,7 @@ | |||
| 2 | #define _IP6T_MH_H | 2 | #define _IP6T_MH_H |
| 3 | 3 | ||
| 4 | /* MH matching stuff */ | 4 | /* MH matching stuff */ |
| 5 | struct ip6t_mh | 5 | struct ip6t_mh { |
| 6 | { | ||
| 7 | u_int8_t types[2]; /* MH type range */ | 6 | u_int8_t types[2]; /* MH type range */ |
| 8 | u_int8_t invflags; /* Inverse flags */ | 7 | u_int8_t invflags; /* Inverse flags */ |
| 9 | }; | 8 | }; |
diff --git a/include/linux/netfilter_ipv6/ip6t_multiport.h b/include/linux/netfilter_ipv6/ip6t_multiport.h deleted file mode 100644 index 042c92661cee..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_multiport.h +++ /dev/null | |||
| @@ -1,14 +0,0 @@ | |||
| 1 | #ifndef _IP6T_MULTIPORT_H | ||
| 2 | #define _IP6T_MULTIPORT_H | ||
| 3 | |||
| 4 | #include <linux/netfilter/xt_multiport.h> | ||
| 5 | |||
| 6 | #define IP6T_MULTIPORT_SOURCE XT_MULTIPORT_SOURCE | ||
| 7 | #define IP6T_MULTIPORT_DESTINATION XT_MULTIPORT_DESTINATION | ||
| 8 | #define IP6T_MULTIPORT_EITHER XT_MULTIPORT_EITHER | ||
| 9 | |||
| 10 | #define IP6T_MULTI_PORTS XT_MULTI_PORTS | ||
| 11 | |||
| 12 | #define ip6t_multiport xt_multiport | ||
| 13 | |||
| 14 | #endif /*_IP6T_MULTIPORT_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_opts.h b/include/linux/netfilter_ipv6/ip6t_opts.h index a07e36380ae8..62d89bcd9f9c 100644 --- a/include/linux/netfilter_ipv6/ip6t_opts.h +++ b/include/linux/netfilter_ipv6/ip6t_opts.h | |||
| @@ -3,8 +3,7 @@ | |||
| 3 | 3 | ||
| 4 | #define IP6T_OPTS_OPTSNR 16 | 4 | #define IP6T_OPTS_OPTSNR 16 |
| 5 | 5 | ||
| 6 | struct ip6t_opts | 6 | struct ip6t_opts { |
| 7 | { | ||
| 8 | u_int32_t hdrlen; /* Header Length */ | 7 | u_int32_t hdrlen; /* Header Length */ |
| 9 | u_int8_t flags; /* */ | 8 | u_int8_t flags; /* */ |
| 10 | u_int8_t invflags; /* Inverse flags */ | 9 | u_int8_t invflags; /* Inverse flags */ |
diff --git a/include/linux/netfilter_ipv6/ip6t_owner.h b/include/linux/netfilter_ipv6/ip6t_owner.h deleted file mode 100644 index ec5cc7a38c42..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_owner.h +++ /dev/null | |||
| @@ -1,18 +0,0 @@ | |||
| 1 | #ifndef _IP6T_OWNER_H | ||
| 2 | #define _IP6T_OWNER_H | ||
| 3 | |||
| 4 | /* match and invert flags */ | ||
| 5 | #define IP6T_OWNER_UID 0x01 | ||
| 6 | #define IP6T_OWNER_GID 0x02 | ||
| 7 | #define IP6T_OWNER_PID 0x04 | ||
| 8 | #define IP6T_OWNER_SID 0x08 | ||
| 9 | |||
| 10 | struct ip6t_owner_info { | ||
| 11 | __kernel_uid32_t uid; | ||
| 12 | __kernel_gid32_t gid; | ||
| 13 | __kernel_pid_t pid; | ||
| 14 | __kernel_pid_t sid; | ||
| 15 | u_int8_t match, invert; /* flags */ | ||
| 16 | }; | ||
| 17 | |||
| 18 | #endif /*_IPT_OWNER_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_physdev.h b/include/linux/netfilter_ipv6/ip6t_physdev.h deleted file mode 100644 index c161c0a81b55..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_physdev.h +++ /dev/null | |||
| @@ -1,17 +0,0 @@ | |||
| 1 | #ifndef _IP6T_PHYSDEV_H | ||
| 2 | #define _IP6T_PHYSDEV_H | ||
| 3 | |||
| 4 | /* Backwards compatibility for old userspace */ | ||
| 5 | |||
| 6 | #include <linux/netfilter/xt_physdev.h> | ||
| 7 | |||
| 8 | #define IP6T_PHYSDEV_OP_IN XT_PHYSDEV_OP_IN | ||
| 9 | #define IP6T_PHYSDEV_OP_OUT XT_PHYSDEV_OP_OUT | ||
| 10 | #define IP6T_PHYSDEV_OP_BRIDGED XT_PHYSDEV_OP_BRIDGED | ||
| 11 | #define IP6T_PHYSDEV_OP_ISIN XT_PHYSDEV_OP_ISIN | ||
| 12 | #define IP6T_PHYSDEV_OP_ISOUT XT_PHYSDEV_OP_ISOUT | ||
| 13 | #define IP6T_PHYSDEV_OP_MASK XT_PHYSDEV_OP_MASK | ||
| 14 | |||
| 15 | #define ip6t_physdev_info xt_physdev_info | ||
| 16 | |||
| 17 | #endif /*_IP6T_PHYSDEV_H*/ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_policy.h b/include/linux/netfilter_ipv6/ip6t_policy.h deleted file mode 100644 index b1c449d7ec89..000000000000 --- a/include/linux/netfilter_ipv6/ip6t_policy.h +++ /dev/null | |||
| @@ -1,23 +0,0 @@ | |||
| 1 | #ifndef _IP6T_POLICY_H | ||
| 2 | #define _IP6T_POLICY_H | ||
| 3 | |||
| 4 | #include <linux/netfilter/xt_policy.h> | ||
| 5 | |||
| 6 | #define IP6T_POLICY_MAX_ELEM XT_POLICY_MAX_ELEM | ||
| 7 | |||
| 8 | /* ip6t_policy_flags */ | ||
| 9 | #define IP6T_POLICY_MATCH_IN XT_POLICY_MATCH_IN | ||
| 10 | #define IP6T_POLICY_MATCH_OUT XT_POLICY_MATCH_OUT | ||
| 11 | #define IP6T_POLICY_MATCH_NONE XT_POLICY_MATCH_NONE | ||
| 12 | #define IP6T_POLICY_MATCH_STRICT XT_POLICY_MATCH_STRICT | ||
| 13 | |||
| 14 | /* ip6t_policy_modes */ | ||
| 15 | #define IP6T_POLICY_MODE_TRANSPORT XT_POLICY_MODE_TRANSPORT | ||
| 16 | #define IP6T_POLICY_MODE_TUNNEL XT_POLICY_MODE_TUNNEL | ||
| 17 | |||
| 18 | #define ip6t_policy_spec xt_policy_spec | ||
| 19 | #define ip6t_policy_addr xt_policy_addr | ||
| 20 | #define ip6t_policy_elem xt_policy_elem | ||
| 21 | #define ip6t_policy_info xt_policy_info | ||
| 22 | |||
| 23 | #endif /* _IP6T_POLICY_H */ | ||
diff --git a/include/linux/netfilter_ipv6/ip6t_rt.h b/include/linux/netfilter_ipv6/ip6t_rt.h index 52156023e8db..ab91bfd2cd00 100644 --- a/include/linux/netfilter_ipv6/ip6t_rt.h +++ b/include/linux/netfilter_ipv6/ip6t_rt.h | |||
| @@ -5,8 +5,7 @@ | |||
| 5 | 5 | ||
| 6 | #define IP6T_RT_HOPS 16 | 6 | #define IP6T_RT_HOPS 16 |
| 7 | 7 | ||
| 8 | struct ip6t_rt | 8 | struct ip6t_rt { |
| 9 | { | ||
| 10 | u_int32_t rt_type; /* Routing Type */ | 9 | u_int32_t rt_type; /* Routing Type */ |
| 11 | u_int32_t segsleft[2]; /* Segments Left */ | 10 | u_int32_t segsleft[2]; /* Segments Left */ |
| 12 | u_int32_t hdrlen; /* Header Length */ | 11 | u_int32_t hdrlen; /* Header Length */ |
diff --git a/include/linux/netlink.h b/include/linux/netlink.h index 5ba398e90304..fde27c017326 100644 --- a/include/linux/netlink.h +++ b/include/linux/netlink.h | |||
| @@ -29,16 +29,14 @@ | |||
| 29 | 29 | ||
| 30 | struct net; | 30 | struct net; |
| 31 | 31 | ||
| 32 | struct sockaddr_nl | 32 | struct sockaddr_nl { |
| 33 | { | ||
| 34 | sa_family_t nl_family; /* AF_NETLINK */ | 33 | sa_family_t nl_family; /* AF_NETLINK */ |
| 35 | unsigned short nl_pad; /* zero */ | 34 | unsigned short nl_pad; /* zero */ |
| 36 | __u32 nl_pid; /* port ID */ | 35 | __u32 nl_pid; /* port ID */ |
| 37 | __u32 nl_groups; /* multicast groups mask */ | 36 | __u32 nl_groups; /* multicast groups mask */ |
| 38 | }; | 37 | }; |
| 39 | 38 | ||
| 40 | struct nlmsghdr | 39 | struct nlmsghdr { |
| 41 | { | ||
| 42 | __u32 nlmsg_len; /* Length of message including header */ | 40 | __u32 nlmsg_len; /* Length of message including header */ |
| 43 | __u16 nlmsg_type; /* Message content */ | 41 | __u16 nlmsg_type; /* Message content */ |
| 44 | __u16 nlmsg_flags; /* Additional flags */ | 42 | __u16 nlmsg_flags; /* Additional flags */ |
| @@ -94,8 +92,7 @@ struct nlmsghdr | |||
| 94 | 92 | ||
| 95 | #define NLMSG_MIN_TYPE 0x10 /* < 0x10: reserved control messages */ | 93 | #define NLMSG_MIN_TYPE 0x10 /* < 0x10: reserved control messages */ |
| 96 | 94 | ||
| 97 | struct nlmsgerr | 95 | struct nlmsgerr { |
| 98 | { | ||
| 99 | int error; | 96 | int error; |
| 100 | struct nlmsghdr msg; | 97 | struct nlmsghdr msg; |
| 101 | }; | 98 | }; |
| @@ -106,8 +103,7 @@ struct nlmsgerr | |||
| 106 | #define NETLINK_BROADCAST_ERROR 4 | 103 | #define NETLINK_BROADCAST_ERROR 4 |
| 107 | #define NETLINK_NO_ENOBUFS 5 | 104 | #define NETLINK_NO_ENOBUFS 5 |
| 108 | 105 | ||
| 109 | struct nl_pktinfo | 106 | struct nl_pktinfo { |
| 110 | { | ||
| 111 | __u32 group; | 107 | __u32 group; |
| 112 | }; | 108 | }; |
| 113 | 109 | ||
| @@ -127,8 +123,7 @@ enum { | |||
| 127 | * <-------------- nlattr->nla_len --------------> | 123 | * <-------------- nlattr->nla_len --------------> |
| 128 | */ | 124 | */ |
| 129 | 125 | ||
| 130 | struct nlattr | 126 | struct nlattr { |
| 131 | { | ||
| 132 | __u16 nla_len; | 127 | __u16 nla_len; |
| 133 | __u16 nla_type; | 128 | __u16 nla_type; |
| 134 | }; | 129 | }; |
| @@ -161,8 +156,7 @@ static inline struct nlmsghdr *nlmsg_hdr(const struct sk_buff *skb) | |||
| 161 | return (struct nlmsghdr *)skb->data; | 156 | return (struct nlmsghdr *)skb->data; |
| 162 | } | 157 | } |
| 163 | 158 | ||
| 164 | struct netlink_skb_parms | 159 | struct netlink_skb_parms { |
| 165 | { | ||
| 166 | struct ucred creds; /* Skb credentials */ | 160 | struct ucred creds; /* Skb credentials */ |
| 167 | __u32 pid; | 161 | __u32 pid; |
| 168 | __u32 dst_group; | 162 | __u32 dst_group; |
| @@ -176,13 +170,18 @@ struct netlink_skb_parms | |||
| 176 | #define NETLINK_CREDS(skb) (&NETLINK_CB((skb)).creds) | 170 | #define NETLINK_CREDS(skb) (&NETLINK_CB((skb)).creds) |
| 177 | 171 | ||
| 178 | 172 | ||
| 173 | extern void netlink_table_grab(void); | ||
| 174 | extern void netlink_table_ungrab(void); | ||
| 175 | |||
| 179 | extern struct sock *netlink_kernel_create(struct net *net, | 176 | extern struct sock *netlink_kernel_create(struct net *net, |
| 180 | int unit,unsigned int groups, | 177 | int unit,unsigned int groups, |
| 181 | void (*input)(struct sk_buff *skb), | 178 | void (*input)(struct sk_buff *skb), |
| 182 | struct mutex *cb_mutex, | 179 | struct mutex *cb_mutex, |
| 183 | struct module *module); | 180 | struct module *module); |
| 184 | extern void netlink_kernel_release(struct sock *sk); | 181 | extern void netlink_kernel_release(struct sock *sk); |
| 182 | extern int __netlink_change_ngroups(struct sock *sk, unsigned int groups); | ||
| 185 | extern int netlink_change_ngroups(struct sock *sk, unsigned int groups); | 183 | extern int netlink_change_ngroups(struct sock *sk, unsigned int groups); |
| 184 | extern void __netlink_clear_multicast_users(struct sock *sk, unsigned int group); | ||
| 186 | extern void netlink_clear_multicast_users(struct sock *sk, unsigned int group); | 185 | extern void netlink_clear_multicast_users(struct sock *sk, unsigned int group); |
| 187 | extern void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err); | 186 | extern void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err); |
| 188 | extern int netlink_has_listeners(struct sock *sk, unsigned int group); | 187 | extern int netlink_has_listeners(struct sock *sk, unsigned int group); |
| @@ -215,18 +214,17 @@ int netlink_sendskb(struct sock *sk, struct sk_buff *skb); | |||
| 215 | #define NLMSG_DEFAULT_SIZE (NLMSG_GOODSIZE - NLMSG_HDRLEN) | 214 | #define NLMSG_DEFAULT_SIZE (NLMSG_GOODSIZE - NLMSG_HDRLEN) |
| 216 | 215 | ||
| 217 | 216 | ||
| 218 | struct netlink_callback | 217 | struct netlink_callback { |
| 219 | { | 218 | struct sk_buff *skb; |
| 220 | struct sk_buff *skb; | 219 | const struct nlmsghdr *nlh; |
| 221 | struct nlmsghdr *nlh; | 220 | int (*dump)(struct sk_buff * skb, |
| 222 | int (*dump)(struct sk_buff * skb, struct netlink_callback *cb); | 221 | struct netlink_callback *cb); |
| 223 | int (*done)(struct netlink_callback *cb); | 222 | int (*done)(struct netlink_callback *cb); |
| 224 | int family; | 223 | int family; |
| 225 | long args[6]; | 224 | long args[6]; |
| 226 | }; | 225 | }; |
| 227 | 226 | ||
| 228 | struct netlink_notify | 227 | struct netlink_notify { |
| 229 | { | ||
| 230 | struct net *net; | 228 | struct net *net; |
| 231 | int pid; | 229 | int pid; |
| 232 | int protocol; | 230 | int protocol; |
| @@ -258,7 +256,7 @@ __nlmsg_put(struct sk_buff *skb, u32 pid, u32 seq, int type, int len, int flags) | |||
| 258 | NLMSG_NEW(skb, pid, seq, type, len, 0) | 256 | NLMSG_NEW(skb, pid, seq, type, len, 0) |
| 259 | 257 | ||
| 260 | extern int netlink_dump_start(struct sock *ssk, struct sk_buff *skb, | 258 | extern int netlink_dump_start(struct sock *ssk, struct sk_buff *skb, |
| 261 | struct nlmsghdr *nlh, | 259 | const struct nlmsghdr *nlh, |
| 262 | int (*dump)(struct sk_buff *skb, struct netlink_callback*), | 260 | int (*dump)(struct sk_buff *skb, struct netlink_callback*), |
| 263 | int (*done)(struct netlink_callback*)); | 261 | int (*done)(struct netlink_callback*)); |
| 264 | 262 | ||
diff --git a/include/linux/nfs4.h b/include/linux/nfs4.h index bd2eba530667..c4c060208109 100644 --- a/include/linux/nfs4.h +++ b/include/linux/nfs4.h | |||
| @@ -234,7 +234,7 @@ enum nfs_opnum4 { | |||
| 234 | Needs to be updated if more operations are defined in future.*/ | 234 | Needs to be updated if more operations are defined in future.*/ |
| 235 | 235 | ||
| 236 | #define FIRST_NFS4_OP OP_ACCESS | 236 | #define FIRST_NFS4_OP OP_ACCESS |
| 237 | #define LAST_NFS4_OP OP_RELEASE_LOCKOWNER | 237 | #define LAST_NFS4_OP OP_RECLAIM_COMPLETE |
| 238 | 238 | ||
| 239 | enum nfsstat4 { | 239 | enum nfsstat4 { |
| 240 | NFS4_OK = 0, | 240 | NFS4_OK = 0, |
| @@ -472,6 +472,7 @@ enum lock_type4 { | |||
| 472 | 472 | ||
| 473 | #define NFSPROC4_NULL 0 | 473 | #define NFSPROC4_NULL 0 |
| 474 | #define NFSPROC4_COMPOUND 1 | 474 | #define NFSPROC4_COMPOUND 1 |
| 475 | #define NFS4_VERSION 4 | ||
| 475 | #define NFS4_MINOR_VERSION 0 | 476 | #define NFS4_MINOR_VERSION 0 |
| 476 | 477 | ||
| 477 | #if defined(CONFIG_NFS_V4_1) | 478 | #if defined(CONFIG_NFS_V4_1) |
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index f6b90240dd41..d09db1bc9083 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h | |||
| @@ -40,7 +40,6 @@ | |||
| 40 | #ifdef __KERNEL__ | 40 | #ifdef __KERNEL__ |
| 41 | 41 | ||
| 42 | #include <linux/in.h> | 42 | #include <linux/in.h> |
| 43 | #include <linux/kref.h> | ||
| 44 | #include <linux/mm.h> | 43 | #include <linux/mm.h> |
| 45 | #include <linux/pagemap.h> | 44 | #include <linux/pagemap.h> |
| 46 | #include <linux/rbtree.h> | 45 | #include <linux/rbtree.h> |
diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h index 19fe15d12042..320569eabe3b 100644 --- a/include/linux/nfs_fs_sb.h +++ b/include/linux/nfs_fs_sb.h | |||
| @@ -167,6 +167,15 @@ struct nfs_server { | |||
| 167 | #define NFS_CAP_SYMLINKS (1U << 2) | 167 | #define NFS_CAP_SYMLINKS (1U << 2) |
| 168 | #define NFS_CAP_ACLS (1U << 3) | 168 | #define NFS_CAP_ACLS (1U << 3) |
| 169 | #define NFS_CAP_ATOMIC_OPEN (1U << 4) | 169 | #define NFS_CAP_ATOMIC_OPEN (1U << 4) |
| 170 | #define NFS_CAP_CHANGE_ATTR (1U << 5) | ||
| 171 | #define NFS_CAP_FILEID (1U << 6) | ||
| 172 | #define NFS_CAP_MODE (1U << 7) | ||
| 173 | #define NFS_CAP_NLINK (1U << 8) | ||
| 174 | #define NFS_CAP_OWNER (1U << 9) | ||
| 175 | #define NFS_CAP_OWNER_GROUP (1U << 10) | ||
| 176 | #define NFS_CAP_ATIME (1U << 11) | ||
| 177 | #define NFS_CAP_CTIME (1U << 12) | ||
| 178 | #define NFS_CAP_MTIME (1U << 13) | ||
| 170 | 179 | ||
| 171 | 180 | ||
| 172 | /* maximum number of slots to use */ | 181 | /* maximum number of slots to use */ |
diff --git a/include/linux/nfsd/nfsd.h b/include/linux/nfsd/nfsd.h index 2b49d676d0c9..510ffdd5020e 100644 --- a/include/linux/nfsd/nfsd.h +++ b/include/linux/nfsd/nfsd.h | |||
| @@ -56,8 +56,11 @@ extern struct svc_version nfsd_version2, nfsd_version3, | |||
| 56 | extern u32 nfsd_supported_minorversion; | 56 | extern u32 nfsd_supported_minorversion; |
| 57 | extern struct mutex nfsd_mutex; | 57 | extern struct mutex nfsd_mutex; |
| 58 | extern struct svc_serv *nfsd_serv; | 58 | extern struct svc_serv *nfsd_serv; |
| 59 | extern spinlock_t nfsd_drc_lock; | ||
| 60 | extern unsigned int nfsd_drc_max_mem; | ||
| 61 | extern unsigned int nfsd_drc_mem_used; | ||
| 59 | 62 | ||
| 60 | extern struct seq_operations nfs_exports_op; | 63 | extern const struct seq_operations nfs_exports_op; |
| 61 | 64 | ||
| 62 | /* | 65 | /* |
| 63 | * Function prototypes. | 66 | * Function prototypes. |
| @@ -163,7 +166,7 @@ extern int nfsd_max_blksize; | |||
| 163 | extern unsigned int max_delegations; | 166 | extern unsigned int max_delegations; |
| 164 | int nfs4_state_init(void); | 167 | int nfs4_state_init(void); |
| 165 | void nfsd4_free_slabs(void); | 168 | void nfsd4_free_slabs(void); |
| 166 | void nfs4_state_start(void); | 169 | int nfs4_state_start(void); |
| 167 | void nfs4_state_shutdown(void); | 170 | void nfs4_state_shutdown(void); |
| 168 | time_t nfs4_lease_time(void); | 171 | time_t nfs4_lease_time(void); |
| 169 | void nfs4_reset_lease(time_t leasetime); | 172 | void nfs4_reset_lease(time_t leasetime); |
| @@ -171,7 +174,7 @@ int nfs4_reset_recoverydir(char *recdir); | |||
| 171 | #else | 174 | #else |
| 172 | static inline int nfs4_state_init(void) { return 0; } | 175 | static inline int nfs4_state_init(void) { return 0; } |
| 173 | static inline void nfsd4_free_slabs(void) { } | 176 | static inline void nfsd4_free_slabs(void) { } |
| 174 | static inline void nfs4_state_start(void) { } | 177 | static inline int nfs4_state_start(void) { return 0; } |
| 175 | static inline void nfs4_state_shutdown(void) { } | 178 | static inline void nfs4_state_shutdown(void) { } |
| 176 | static inline time_t nfs4_lease_time(void) { return 0; } | 179 | static inline time_t nfs4_lease_time(void) { return 0; } |
| 177 | static inline void nfs4_reset_lease(time_t leasetime) { } | 180 | static inline void nfs4_reset_lease(time_t leasetime) { } |
diff --git a/include/linux/nfsd/state.h b/include/linux/nfsd/state.h index 57ab2ed08459..b38d11324189 100644 --- a/include/linux/nfsd/state.h +++ b/include/linux/nfsd/state.h | |||
| @@ -60,6 +60,12 @@ typedef struct { | |||
| 60 | #define si_stateownerid si_opaque.so_stateownerid | 60 | #define si_stateownerid si_opaque.so_stateownerid |
| 61 | #define si_fileid si_opaque.so_fileid | 61 | #define si_fileid si_opaque.so_fileid |
| 62 | 62 | ||
| 63 | struct nfsd4_cb_sequence { | ||
| 64 | /* args/res */ | ||
| 65 | u32 cbs_minorversion; | ||
| 66 | struct nfs4_client *cbs_clp; | ||
| 67 | }; | ||
| 68 | |||
| 63 | struct nfs4_delegation { | 69 | struct nfs4_delegation { |
| 64 | struct list_head dl_perfile; | 70 | struct list_head dl_perfile; |
| 65 | struct list_head dl_perclnt; | 71 | struct list_head dl_perclnt; |
| @@ -81,38 +87,35 @@ struct nfs4_delegation { | |||
| 81 | /* client delegation callback info */ | 87 | /* client delegation callback info */ |
| 82 | struct nfs4_cb_conn { | 88 | struct nfs4_cb_conn { |
| 83 | /* SETCLIENTID info */ | 89 | /* SETCLIENTID info */ |
| 84 | u32 cb_addr; | 90 | struct sockaddr_storage cb_addr; |
| 85 | unsigned short cb_port; | 91 | size_t cb_addrlen; |
| 86 | u32 cb_prog; | 92 | u32 cb_prog; |
| 87 | u32 cb_minorversion; | 93 | u32 cb_minorversion; |
| 88 | u32 cb_ident; /* minorversion 0 only */ | 94 | u32 cb_ident; /* minorversion 0 only */ |
| 89 | /* RPC client info */ | 95 | /* RPC client info */ |
| 90 | atomic_t cb_set; /* successful CB_NULL call */ | 96 | atomic_t cb_set; /* successful CB_NULL call */ |
| 91 | struct rpc_clnt * cb_client; | 97 | struct rpc_clnt * cb_client; |
| 92 | struct rpc_cred * cb_cred; | ||
| 93 | }; | 98 | }; |
| 94 | 99 | ||
| 95 | /* Maximum number of slots per session. 128 is useful for long haul TCP */ | 100 | /* Maximum number of slots per session. 160 is useful for long haul TCP */ |
| 96 | #define NFSD_MAX_SLOTS_PER_SESSION 128 | 101 | #define NFSD_MAX_SLOTS_PER_SESSION 160 |
| 97 | /* Maximum number of pages per slot cache entry */ | ||
| 98 | #define NFSD_PAGES_PER_SLOT 1 | ||
| 99 | /* Maximum number of operations per session compound */ | 102 | /* Maximum number of operations per session compound */ |
| 100 | #define NFSD_MAX_OPS_PER_COMPOUND 16 | 103 | #define NFSD_MAX_OPS_PER_COMPOUND 16 |
| 101 | 104 | /* Maximum session per slot cache size */ | |
| 102 | struct nfsd4_cache_entry { | 105 | #define NFSD_SLOT_CACHE_SIZE 1024 |
| 103 | __be32 ce_status; | 106 | /* Maximum number of NFSD_SLOT_CACHE_SIZE slots per session */ |
| 104 | struct kvec ce_datav; /* encoded NFSv4.1 data in rq_res.head[0] */ | 107 | #define NFSD_CACHE_SIZE_SLOTS_PER_SESSION 32 |
| 105 | struct page *ce_respages[NFSD_PAGES_PER_SLOT + 1]; | 108 | #define NFSD_MAX_MEM_PER_SESSION \ |
| 106 | int ce_cachethis; | 109 | (NFSD_CACHE_SIZE_SLOTS_PER_SESSION * NFSD_SLOT_CACHE_SIZE) |
| 107 | short ce_resused; | ||
| 108 | int ce_opcnt; | ||
| 109 | int ce_rpchdrlen; | ||
| 110 | }; | ||
| 111 | 110 | ||
| 112 | struct nfsd4_slot { | 111 | struct nfsd4_slot { |
| 113 | bool sl_inuse; | 112 | bool sl_inuse; |
| 114 | u32 sl_seqid; | 113 | bool sl_cachethis; |
| 115 | struct nfsd4_cache_entry sl_cache_entry; | 114 | u16 sl_opcnt; |
| 115 | u32 sl_seqid; | ||
| 116 | __be32 sl_status; | ||
| 117 | u32 sl_datalen; | ||
| 118 | char sl_data[]; | ||
| 116 | }; | 119 | }; |
| 117 | 120 | ||
| 118 | struct nfsd4_channel_attrs { | 121 | struct nfsd4_channel_attrs { |
| @@ -126,6 +129,25 @@ struct nfsd4_channel_attrs { | |||
| 126 | u32 rdma_attrs; | 129 | u32 rdma_attrs; |
| 127 | }; | 130 | }; |
| 128 | 131 | ||
| 132 | struct nfsd4_create_session { | ||
| 133 | clientid_t clientid; | ||
| 134 | struct nfs4_sessionid sessionid; | ||
| 135 | u32 seqid; | ||
| 136 | u32 flags; | ||
| 137 | struct nfsd4_channel_attrs fore_channel; | ||
| 138 | struct nfsd4_channel_attrs back_channel; | ||
| 139 | u32 callback_prog; | ||
| 140 | u32 uid; | ||
| 141 | u32 gid; | ||
| 142 | }; | ||
| 143 | |||
| 144 | /* The single slot clientid cache structure */ | ||
| 145 | struct nfsd4_clid_slot { | ||
| 146 | u32 sl_seqid; | ||
| 147 | __be32 sl_status; | ||
| 148 | struct nfsd4_create_session sl_cr_ses; | ||
| 149 | }; | ||
| 150 | |||
| 129 | struct nfsd4_session { | 151 | struct nfsd4_session { |
| 130 | struct kref se_ref; | 152 | struct kref se_ref; |
| 131 | struct list_head se_hash; /* hash by sessionid */ | 153 | struct list_head se_hash; /* hash by sessionid */ |
| @@ -135,7 +157,7 @@ struct nfsd4_session { | |||
| 135 | struct nfs4_sessionid se_sessionid; | 157 | struct nfs4_sessionid se_sessionid; |
| 136 | struct nfsd4_channel_attrs se_fchannel; | 158 | struct nfsd4_channel_attrs se_fchannel; |
| 137 | struct nfsd4_channel_attrs se_bchannel; | 159 | struct nfsd4_channel_attrs se_bchannel; |
| 138 | struct nfsd4_slot se_slots[]; /* forward channel slots */ | 160 | struct nfsd4_slot *se_slots[]; /* forward channel slots */ |
| 139 | }; | 161 | }; |
| 140 | 162 | ||
| 141 | static inline void | 163 | static inline void |
| @@ -180,7 +202,7 @@ struct nfs4_client { | |||
| 180 | char cl_recdir[HEXDIR_LEN]; /* recovery dir */ | 202 | char cl_recdir[HEXDIR_LEN]; /* recovery dir */ |
| 181 | nfs4_verifier cl_verifier; /* generated by client */ | 203 | nfs4_verifier cl_verifier; /* generated by client */ |
| 182 | time_t cl_time; /* time of last lease renewal */ | 204 | time_t cl_time; /* time of last lease renewal */ |
| 183 | __be32 cl_addr; /* client ipaddress */ | 205 | struct sockaddr_storage cl_addr; /* client ipaddress */ |
| 184 | u32 cl_flavor; /* setclientid pseudoflavor */ | 206 | u32 cl_flavor; /* setclientid pseudoflavor */ |
| 185 | char *cl_principal; /* setclientid principal name */ | 207 | char *cl_principal; /* setclientid principal name */ |
| 186 | struct svc_cred cl_cred; /* setclientid principal */ | 208 | struct svc_cred cl_cred; /* setclientid principal */ |
| @@ -192,9 +214,17 @@ struct nfs4_client { | |||
| 192 | 214 | ||
| 193 | /* for nfs41 */ | 215 | /* for nfs41 */ |
| 194 | struct list_head cl_sessions; | 216 | struct list_head cl_sessions; |
| 195 | struct nfsd4_slot cl_slot; /* create_session slot */ | 217 | struct nfsd4_clid_slot cl_cs_slot; /* create_session slot */ |
| 196 | u32 cl_exchange_flags; | 218 | u32 cl_exchange_flags; |
| 197 | struct nfs4_sessionid cl_sessionid; | 219 | struct nfs4_sessionid cl_sessionid; |
| 220 | |||
| 221 | /* for nfs41 callbacks */ | ||
| 222 | /* We currently support a single back channel with a single slot */ | ||
| 223 | unsigned long cl_cb_slot_busy; | ||
| 224 | u32 cl_cb_seq_nr; | ||
| 225 | struct svc_xprt *cl_cb_xprt; /* 4.1 callback transport */ | ||
| 226 | struct rpc_wait_queue cl_cb_waitq; /* backchannel callers may */ | ||
| 227 | /* wait here for slots */ | ||
| 198 | }; | 228 | }; |
| 199 | 229 | ||
| 200 | /* struct nfs4_client_reset | 230 | /* struct nfs4_client_reset |
| @@ -345,6 +375,7 @@ extern int nfs4_in_grace(void); | |||
| 345 | extern __be32 nfs4_check_open_reclaim(clientid_t *clid); | 375 | extern __be32 nfs4_check_open_reclaim(clientid_t *clid); |
| 346 | extern void put_nfs4_client(struct nfs4_client *clp); | 376 | extern void put_nfs4_client(struct nfs4_client *clp); |
| 347 | extern void nfs4_free_stateowner(struct kref *kref); | 377 | extern void nfs4_free_stateowner(struct kref *kref); |
| 378 | extern int set_callback_cred(void); | ||
| 348 | extern void nfsd4_probe_callback(struct nfs4_client *clp); | 379 | extern void nfsd4_probe_callback(struct nfs4_client *clp); |
| 349 | extern void nfsd4_cb_recall(struct nfs4_delegation *dp); | 380 | extern void nfsd4_cb_recall(struct nfs4_delegation *dp); |
| 350 | extern void nfs4_put_delegation(struct nfs4_delegation *dp); | 381 | extern void nfs4_put_delegation(struct nfs4_delegation *dp); |
diff --git a/include/linux/nfsd/xdr4.h b/include/linux/nfsd/xdr4.h index 2bacf7535069..73164c2b3d29 100644 --- a/include/linux/nfsd/xdr4.h +++ b/include/linux/nfsd/xdr4.h | |||
| @@ -51,7 +51,7 @@ struct nfsd4_compound_state { | |||
| 51 | /* For sessions DRC */ | 51 | /* For sessions DRC */ |
| 52 | struct nfsd4_session *session; | 52 | struct nfsd4_session *session; |
| 53 | struct nfsd4_slot *slot; | 53 | struct nfsd4_slot *slot; |
| 54 | __be32 *statp; | 54 | __be32 *datap; |
| 55 | size_t iovlen; | 55 | size_t iovlen; |
| 56 | u32 minorversion; | 56 | u32 minorversion; |
| 57 | u32 status; | 57 | u32 status; |
| @@ -366,18 +366,6 @@ struct nfsd4_exchange_id { | |||
| 366 | int spa_how; | 366 | int spa_how; |
| 367 | }; | 367 | }; |
| 368 | 368 | ||
| 369 | struct nfsd4_create_session { | ||
| 370 | clientid_t clientid; | ||
| 371 | struct nfs4_sessionid sessionid; | ||
| 372 | u32 seqid; | ||
| 373 | u32 flags; | ||
| 374 | struct nfsd4_channel_attrs fore_channel; | ||
| 375 | struct nfsd4_channel_attrs back_channel; | ||
| 376 | u32 callback_prog; | ||
| 377 | u32 uid; | ||
| 378 | u32 gid; | ||
| 379 | }; | ||
| 380 | |||
| 381 | struct nfsd4_sequence { | 369 | struct nfsd4_sequence { |
| 382 | struct nfs4_sessionid sessionid; /* request/response */ | 370 | struct nfs4_sessionid sessionid; /* request/response */ |
| 383 | u32 seqid; /* request/response */ | 371 | u32 seqid; /* request/response */ |
| @@ -479,13 +467,12 @@ struct nfsd4_compoundres { | |||
| 479 | static inline bool nfsd4_is_solo_sequence(struct nfsd4_compoundres *resp) | 467 | static inline bool nfsd4_is_solo_sequence(struct nfsd4_compoundres *resp) |
| 480 | { | 468 | { |
| 481 | struct nfsd4_compoundargs *args = resp->rqstp->rq_argp; | 469 | struct nfsd4_compoundargs *args = resp->rqstp->rq_argp; |
| 482 | return args->opcnt == 1; | 470 | return resp->opcnt == 1 && args->ops[0].opnum == OP_SEQUENCE; |
| 483 | } | 471 | } |
| 484 | 472 | ||
| 485 | static inline bool nfsd4_not_cached(struct nfsd4_compoundres *resp) | 473 | static inline bool nfsd4_not_cached(struct nfsd4_compoundres *resp) |
| 486 | { | 474 | { |
| 487 | return !resp->cstate.slot->sl_cache_entry.ce_cachethis || | 475 | return !resp->cstate.slot->sl_cachethis || nfsd4_is_solo_sequence(resp); |
| 488 | nfsd4_is_solo_sequence(resp); | ||
| 489 | } | 476 | } |
| 490 | 477 | ||
| 491 | #define NFS4_SVC_XDRSIZE sizeof(struct nfsd4_compoundargs) | 478 | #define NFS4_SVC_XDRSIZE sizeof(struct nfsd4_compoundargs) |
diff --git a/include/linux/nilfs2_fs.h b/include/linux/nilfs2_fs.h index 79fec6af3f9f..ce520402e840 100644 --- a/include/linux/nilfs2_fs.h +++ b/include/linux/nilfs2_fs.h | |||
| @@ -425,15 +425,6 @@ struct nilfs_dat_entry { | |||
| 425 | }; | 425 | }; |
| 426 | 426 | ||
| 427 | /** | 427 | /** |
| 428 | * struct nilfs_dat_group_desc - block group descriptor | ||
| 429 | * @dg_nfrees: number of free virtual block numbers in block group | ||
| 430 | */ | ||
| 431 | struct nilfs_dat_group_desc { | ||
| 432 | __le32 dg_nfrees; | ||
| 433 | }; | ||
| 434 | |||
| 435 | |||
| 436 | /** | ||
| 437 | * struct nilfs_snapshot_list - snapshot list | 428 | * struct nilfs_snapshot_list - snapshot list |
| 438 | * @ssl_next: next checkpoint number on snapshot list | 429 | * @ssl_next: next checkpoint number on snapshot list |
| 439 | * @ssl_prev: previous checkpoint number on snapshot list | 430 | * @ssl_prev: previous checkpoint number on snapshot list |
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h index dbea93b694e5..da8ea2e19273 100644 --- a/include/linux/nl80211.h +++ b/include/linux/nl80211.h | |||
| @@ -160,6 +160,11 @@ | |||
| 160 | * @NL80211_CMD_SCAN_ABORTED: scan was aborted, for unspecified reasons, | 160 | * @NL80211_CMD_SCAN_ABORTED: scan was aborted, for unspecified reasons, |
| 161 | * partial scan results may be available | 161 | * partial scan results may be available |
| 162 | * | 162 | * |
| 163 | * @NL80211_CMD_GET_SURVEY: get survey resuls, e.g. channel occupation | ||
| 164 | * or noise level | ||
| 165 | * @NL80211_CMD_NEW_SURVEY_RESULTS: survey data notification (as a reply to | ||
| 166 | * NL80211_CMD_GET_SURVEY and on the "scan" multicast group) | ||
| 167 | * | ||
| 163 | * @NL80211_CMD_REG_CHANGE: indicates to userspace the regulatory domain | 168 | * @NL80211_CMD_REG_CHANGE: indicates to userspace the regulatory domain |
| 164 | * has been changed and provides details of the request information | 169 | * has been changed and provides details of the request information |
| 165 | * that caused the change such as who initiated the regulatory request | 170 | * that caused the change such as who initiated the regulatory request |
| @@ -242,6 +247,29 @@ | |||
| 242 | * @NL80211_CMD_LEAVE_IBSS: Leave the IBSS -- no special arguments, the IBSS is | 247 | * @NL80211_CMD_LEAVE_IBSS: Leave the IBSS -- no special arguments, the IBSS is |
| 243 | * determined by the network interface. | 248 | * determined by the network interface. |
| 244 | * | 249 | * |
| 250 | * @NL80211_CMD_TESTMODE: testmode command, takes a wiphy (or ifindex) attribute | ||
| 251 | * to identify the device, and the TESTDATA blob attribute to pass through | ||
| 252 | * to the driver. | ||
| 253 | * | ||
| 254 | * @NL80211_CMD_CONNECT: connection request and notification; this command | ||
| 255 | * requests to connect to a specified network but without separating | ||
| 256 | * auth and assoc steps. For this, you need to specify the SSID in a | ||
| 257 | * %NL80211_ATTR_SSID attribute, and can optionally specify the association | ||
| 258 | * IEs in %NL80211_ATTR_IE, %NL80211_ATTR_AUTH_TYPE, %NL80211_ATTR_MAC, | ||
| 259 | * %NL80211_ATTR_WIPHY_FREQ and %NL80211_ATTR_CONTROL_PORT. | ||
| 260 | * It is also sent as an event, with the BSSID and response IEs when the | ||
| 261 | * connection is established or failed to be established. This can be | ||
| 262 | * determined by the STATUS_CODE attribute. | ||
| 263 | * @NL80211_CMD_ROAM: request that the card roam (currently not implemented), | ||
| 264 | * sent as an event when the card/driver roamed by itself. | ||
| 265 | * @NL80211_CMD_DISCONNECT: drop a given connection; also used to notify | ||
| 266 | * userspace that a connection was dropped by the AP or due to other | ||
| 267 | * reasons, for this the %NL80211_ATTR_DISCONNECTED_BY_AP and | ||
| 268 | * %NL80211_ATTR_REASON_CODE attributes are used. | ||
| 269 | * | ||
| 270 | * @NL80211_CMD_SET_WIPHY_NETNS: Set a wiphy's netns. Note that all devices | ||
| 271 | * associated with this wiphy must be down and will follow. | ||
| 272 | * | ||
| 245 | * @NL80211_CMD_MAX: highest used command number | 273 | * @NL80211_CMD_MAX: highest used command number |
| 246 | * @__NL80211_CMD_AFTER_LAST: internal use | 274 | * @__NL80211_CMD_AFTER_LAST: internal use |
| 247 | */ | 275 | */ |
| @@ -310,6 +338,21 @@ enum nl80211_commands { | |||
| 310 | NL80211_CMD_JOIN_IBSS, | 338 | NL80211_CMD_JOIN_IBSS, |
| 311 | NL80211_CMD_LEAVE_IBSS, | 339 | NL80211_CMD_LEAVE_IBSS, |
| 312 | 340 | ||
| 341 | NL80211_CMD_TESTMODE, | ||
| 342 | |||
| 343 | NL80211_CMD_CONNECT, | ||
| 344 | NL80211_CMD_ROAM, | ||
| 345 | NL80211_CMD_DISCONNECT, | ||
| 346 | |||
| 347 | NL80211_CMD_SET_WIPHY_NETNS, | ||
| 348 | |||
| 349 | NL80211_CMD_GET_SURVEY, | ||
| 350 | NL80211_CMD_NEW_SURVEY_RESULTS, | ||
| 351 | |||
| 352 | NL80211_CMD_SET_PMKSA, | ||
| 353 | NL80211_CMD_DEL_PMKSA, | ||
| 354 | NL80211_CMD_FLUSH_PMKSA, | ||
| 355 | |||
| 313 | /* add new commands above here */ | 356 | /* add new commands above here */ |
| 314 | 357 | ||
| 315 | /* used to define NL80211_CMD_MAX below */ | 358 | /* used to define NL80211_CMD_MAX below */ |
| @@ -449,10 +492,6 @@ enum nl80211_commands { | |||
| 449 | * @NL80211_ATTR_SCAN_FREQUENCIES: nested attribute with frequencies (in MHz) | 492 | * @NL80211_ATTR_SCAN_FREQUENCIES: nested attribute with frequencies (in MHz) |
| 450 | * @NL80211_ATTR_SCAN_SSIDS: nested attribute with SSIDs, leave out for passive | 493 | * @NL80211_ATTR_SCAN_SSIDS: nested attribute with SSIDs, leave out for passive |
| 451 | * scanning and include a zero-length SSID (wildcard) for wildcard scan | 494 | * scanning and include a zero-length SSID (wildcard) for wildcard scan |
| 452 | * @NL80211_ATTR_SCAN_GENERATION: the scan generation increases whenever the | ||
| 453 | * scan result list changes (BSS expired or added) so that applications | ||
| 454 | * can verify that they got a single, consistent snapshot (when all dump | ||
| 455 | * messages carried the same generation number) | ||
| 456 | * @NL80211_ATTR_BSS: scan result BSS | 495 | * @NL80211_ATTR_BSS: scan result BSS |
| 457 | * | 496 | * |
| 458 | * @NL80211_ATTR_REG_INITIATOR: indicates who requested the regulatory domain | 497 | * @NL80211_ATTR_REG_INITIATOR: indicates who requested the regulatory domain |
| @@ -511,6 +550,62 @@ enum nl80211_commands { | |||
| 511 | * authorized by user space. Otherwise, port is marked authorized by | 550 | * authorized by user space. Otherwise, port is marked authorized by |
| 512 | * default in station mode. | 551 | * default in station mode. |
| 513 | * | 552 | * |
| 553 | * @NL80211_ATTR_TESTDATA: Testmode data blob, passed through to the driver. | ||
| 554 | * We recommend using nested, driver-specific attributes within this. | ||
| 555 | * | ||
| 556 | * @NL80211_ATTR_DISCONNECTED_BY_AP: A flag indicating that the DISCONNECT | ||
| 557 | * event was due to the AP disconnecting the station, and not due to | ||
| 558 | * a local disconnect request. | ||
| 559 | * @NL80211_ATTR_STATUS_CODE: StatusCode for the %NL80211_CMD_CONNECT | ||
| 560 | * event (u16) | ||
| 561 | * @NL80211_ATTR_PRIVACY: Flag attribute, used with connect(), indicating | ||
| 562 | * that protected APs should be used. | ||
| 563 | * | ||
| 564 | * @NL80211_ATTR_CIPHERS_PAIRWISE: Used with CONNECT and ASSOCIATE to | ||
| 565 | * indicate which unicast key ciphers will be used with the connection | ||
| 566 | * (an array of u32). | ||
| 567 | * @NL80211_ATTR_CIPHER_GROUP: Used with CONNECT and ASSOCIATE to indicate | ||
| 568 | * which group key cipher will be used with the connection (a u32). | ||
| 569 | * @NL80211_ATTR_WPA_VERSIONS: Used with CONNECT and ASSOCIATE to indicate | ||
| 570 | * which WPA version(s) the AP we want to associate with is using | ||
| 571 | * (a u32 with flags from &enum nl80211_wpa_versions). | ||
| 572 | * @NL80211_ATTR_AKM_SUITES: Used with CONNECT and ASSOCIATE to indicate | ||
| 573 | * which key management algorithm(s) to use (an array of u32). | ||
| 574 | * | ||
| 575 | * @NL80211_ATTR_REQ_IE: (Re)association request information elements as | ||
| 576 | * sent out by the card, for ROAM and successful CONNECT events. | ||
| 577 | * @NL80211_ATTR_RESP_IE: (Re)association response information elements as | ||
| 578 | * sent by peer, for ROAM and successful CONNECT events. | ||
| 579 | * | ||
| 580 | * @NL80211_ATTR_PREV_BSSID: previous BSSID, to be used by in ASSOCIATE | ||
| 581 | * commands to specify using a reassociate frame | ||
| 582 | * | ||
| 583 | * @NL80211_ATTR_KEY: key information in a nested attribute with | ||
| 584 | * %NL80211_KEY_* sub-attributes | ||
| 585 | * @NL80211_ATTR_KEYS: array of keys for static WEP keys for connect() | ||
| 586 | * and join_ibss(), key information is in a nested attribute each | ||
| 587 | * with %NL80211_KEY_* sub-attributes | ||
| 588 | * | ||
| 589 | * @NL80211_ATTR_PID: Process ID of a network namespace. | ||
| 590 | * | ||
| 591 | * @NL80211_ATTR_GENERATION: Used to indicate consistent snapshots for | ||
| 592 | * dumps. This number increases whenever the object list being | ||
| 593 | * dumped changes, and as such userspace can verify that it has | ||
| 594 | * obtained a complete and consistent snapshot by verifying that | ||
| 595 | * all dump messages contain the same generation number. If it | ||
| 596 | * changed then the list changed and the dump should be repeated | ||
| 597 | * completely from scratch. | ||
| 598 | * | ||
| 599 | * @NL80211_ATTR_4ADDR: Use 4-address frames on a virtual interface | ||
| 600 | * | ||
| 601 | * @NL80211_ATTR_SURVEY_INFO: survey information about a channel, part of | ||
| 602 | * the survey response for %NL80211_CMD_GET_SURVEY, nested attribute | ||
| 603 | * containing info as possible, see &enum survey_info. | ||
| 604 | * | ||
| 605 | * @NL80211_ATTR_PMKID: PMK material for PMKSA caching. | ||
| 606 | * @NL80211_ATTR_MAX_NUM_PMKIDS: maximum number of PMKIDs a firmware can | ||
| 607 | * cache, a wiphy attribute. | ||
| 608 | * | ||
| 514 | * @NL80211_ATTR_MAX: highest attribute number currently defined | 609 | * @NL80211_ATTR_MAX: highest attribute number currently defined |
| 515 | * @__NL80211_ATTR_AFTER_LAST: internal use | 610 | * @__NL80211_ATTR_AFTER_LAST: internal use |
| 516 | */ | 611 | */ |
| @@ -582,7 +677,7 @@ enum nl80211_attrs { | |||
| 582 | 677 | ||
| 583 | NL80211_ATTR_SCAN_FREQUENCIES, | 678 | NL80211_ATTR_SCAN_FREQUENCIES, |
| 584 | NL80211_ATTR_SCAN_SSIDS, | 679 | NL80211_ATTR_SCAN_SSIDS, |
| 585 | NL80211_ATTR_SCAN_GENERATION, | 680 | NL80211_ATTR_GENERATION, /* replaces old SCAN_GENERATION */ |
| 586 | NL80211_ATTR_BSS, | 681 | NL80211_ATTR_BSS, |
| 587 | 682 | ||
| 588 | NL80211_ATTR_REG_INITIATOR, | 683 | NL80211_ATTR_REG_INITIATOR, |
| @@ -619,16 +714,49 @@ enum nl80211_attrs { | |||
| 619 | 714 | ||
| 620 | NL80211_ATTR_CONTROL_PORT, | 715 | NL80211_ATTR_CONTROL_PORT, |
| 621 | 716 | ||
| 717 | NL80211_ATTR_TESTDATA, | ||
| 718 | |||
| 719 | NL80211_ATTR_PRIVACY, | ||
| 720 | |||
| 721 | NL80211_ATTR_DISCONNECTED_BY_AP, | ||
| 722 | NL80211_ATTR_STATUS_CODE, | ||
| 723 | |||
| 724 | NL80211_ATTR_CIPHER_SUITES_PAIRWISE, | ||
| 725 | NL80211_ATTR_CIPHER_SUITE_GROUP, | ||
| 726 | NL80211_ATTR_WPA_VERSIONS, | ||
| 727 | NL80211_ATTR_AKM_SUITES, | ||
| 728 | |||
| 729 | NL80211_ATTR_REQ_IE, | ||
| 730 | NL80211_ATTR_RESP_IE, | ||
| 731 | |||
| 732 | NL80211_ATTR_PREV_BSSID, | ||
| 733 | |||
| 734 | NL80211_ATTR_KEY, | ||
| 735 | NL80211_ATTR_KEYS, | ||
| 736 | |||
| 737 | NL80211_ATTR_PID, | ||
| 738 | |||
| 739 | NL80211_ATTR_4ADDR, | ||
| 740 | |||
| 741 | NL80211_ATTR_SURVEY_INFO, | ||
| 742 | |||
| 743 | NL80211_ATTR_PMKID, | ||
| 744 | NL80211_ATTR_MAX_NUM_PMKIDS, | ||
| 745 | |||
| 622 | /* add attributes here, update the policy in nl80211.c */ | 746 | /* add attributes here, update the policy in nl80211.c */ |
| 623 | 747 | ||
| 624 | __NL80211_ATTR_AFTER_LAST, | 748 | __NL80211_ATTR_AFTER_LAST, |
| 625 | NL80211_ATTR_MAX = __NL80211_ATTR_AFTER_LAST - 1 | 749 | NL80211_ATTR_MAX = __NL80211_ATTR_AFTER_LAST - 1 |
| 626 | }; | 750 | }; |
| 627 | 751 | ||
| 752 | /* source-level API compatibility */ | ||
| 753 | #define NL80211_ATTR_SCAN_GENERATION NL80211_ATTR_GENERATION | ||
| 754 | |||
| 628 | /* | 755 | /* |
| 629 | * Allow user space programs to use #ifdef on new attributes by defining them | 756 | * Allow user space programs to use #ifdef on new attributes by defining them |
| 630 | * here | 757 | * here |
| 631 | */ | 758 | */ |
| 759 | #define NL80211_CMD_CONNECT NL80211_CMD_CONNECT | ||
| 632 | #define NL80211_ATTR_HT_CAPABILITY NL80211_ATTR_HT_CAPABILITY | 760 | #define NL80211_ATTR_HT_CAPABILITY NL80211_ATTR_HT_CAPABILITY |
| 633 | #define NL80211_ATTR_BSS_BASIC_RATES NL80211_ATTR_BSS_BASIC_RATES | 761 | #define NL80211_ATTR_BSS_BASIC_RATES NL80211_ATTR_BSS_BASIC_RATES |
| 634 | #define NL80211_ATTR_WIPHY_TXQ_PARAMS NL80211_ATTR_WIPHY_TXQ_PARAMS | 762 | #define NL80211_ATTR_WIPHY_TXQ_PARAMS NL80211_ATTR_WIPHY_TXQ_PARAMS |
| @@ -642,6 +770,12 @@ enum nl80211_attrs { | |||
| 642 | #define NL80211_ATTR_SSID NL80211_ATTR_SSID | 770 | #define NL80211_ATTR_SSID NL80211_ATTR_SSID |
| 643 | #define NL80211_ATTR_AUTH_TYPE NL80211_ATTR_AUTH_TYPE | 771 | #define NL80211_ATTR_AUTH_TYPE NL80211_ATTR_AUTH_TYPE |
| 644 | #define NL80211_ATTR_REASON_CODE NL80211_ATTR_REASON_CODE | 772 | #define NL80211_ATTR_REASON_CODE NL80211_ATTR_REASON_CODE |
| 773 | #define NL80211_ATTR_CIPHER_SUITES_PAIRWISE NL80211_ATTR_CIPHER_SUITES_PAIRWISE | ||
| 774 | #define NL80211_ATTR_CIPHER_SUITE_GROUP NL80211_ATTR_CIPHER_SUITE_GROUP | ||
| 775 | #define NL80211_ATTR_WPA_VERSIONS NL80211_ATTR_WPA_VERSIONS | ||
| 776 | #define NL80211_ATTR_AKM_SUITES NL80211_ATTR_AKM_SUITES | ||
| 777 | #define NL80211_ATTR_KEY NL80211_ATTR_KEY | ||
| 778 | #define NL80211_ATTR_KEYS NL80211_ATTR_KEYS | ||
| 645 | 779 | ||
| 646 | #define NL80211_MAX_SUPP_RATES 32 | 780 | #define NL80211_MAX_SUPP_RATES 32 |
| 647 | #define NL80211_MAX_SUPP_REG_RULES 32 | 781 | #define NL80211_MAX_SUPP_REG_RULES 32 |
| @@ -650,6 +784,9 @@ enum nl80211_attrs { | |||
| 650 | #define NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY 24 | 784 | #define NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY 24 |
| 651 | #define NL80211_HT_CAPABILITY_LEN 26 | 785 | #define NL80211_HT_CAPABILITY_LEN 26 |
| 652 | 786 | ||
| 787 | #define NL80211_MAX_NR_CIPHER_SUITES 5 | ||
| 788 | #define NL80211_MAX_NR_AKM_SUITES 2 | ||
| 789 | |||
| 653 | /** | 790 | /** |
| 654 | * enum nl80211_iftype - (virtual) interface types | 791 | * enum nl80211_iftype - (virtual) interface types |
| 655 | * | 792 | * |
| @@ -787,14 +924,14 @@ enum nl80211_sta_info { | |||
| 787 | * | 924 | * |
| 788 | * @NL80211_MPATH_FLAG_ACTIVE: the mesh path is active | 925 | * @NL80211_MPATH_FLAG_ACTIVE: the mesh path is active |
| 789 | * @NL80211_MPATH_FLAG_RESOLVING: the mesh path discovery process is running | 926 | * @NL80211_MPATH_FLAG_RESOLVING: the mesh path discovery process is running |
| 790 | * @NL80211_MPATH_FLAG_DSN_VALID: the mesh path contains a valid DSN | 927 | * @NL80211_MPATH_FLAG_SN_VALID: the mesh path contains a valid SN |
| 791 | * @NL80211_MPATH_FLAG_FIXED: the mesh path has been manually set | 928 | * @NL80211_MPATH_FLAG_FIXED: the mesh path has been manually set |
| 792 | * @NL80211_MPATH_FLAG_RESOLVED: the mesh path discovery process succeeded | 929 | * @NL80211_MPATH_FLAG_RESOLVED: the mesh path discovery process succeeded |
| 793 | */ | 930 | */ |
| 794 | enum nl80211_mpath_flags { | 931 | enum nl80211_mpath_flags { |
| 795 | NL80211_MPATH_FLAG_ACTIVE = 1<<0, | 932 | NL80211_MPATH_FLAG_ACTIVE = 1<<0, |
| 796 | NL80211_MPATH_FLAG_RESOLVING = 1<<1, | 933 | NL80211_MPATH_FLAG_RESOLVING = 1<<1, |
| 797 | NL80211_MPATH_FLAG_DSN_VALID = 1<<2, | 934 | NL80211_MPATH_FLAG_SN_VALID = 1<<2, |
| 798 | NL80211_MPATH_FLAG_FIXED = 1<<3, | 935 | NL80211_MPATH_FLAG_FIXED = 1<<3, |
| 799 | NL80211_MPATH_FLAG_RESOLVED = 1<<4, | 936 | NL80211_MPATH_FLAG_RESOLVED = 1<<4, |
| 800 | }; | 937 | }; |
| @@ -807,7 +944,7 @@ enum nl80211_mpath_flags { | |||
| 807 | * | 944 | * |
| 808 | * @__NL80211_MPATH_INFO_INVALID: attribute number 0 is reserved | 945 | * @__NL80211_MPATH_INFO_INVALID: attribute number 0 is reserved |
| 809 | * @NL80211_ATTR_MPATH_FRAME_QLEN: number of queued frames for this destination | 946 | * @NL80211_ATTR_MPATH_FRAME_QLEN: number of queued frames for this destination |
| 810 | * @NL80211_ATTR_MPATH_DSN: destination sequence number | 947 | * @NL80211_ATTR_MPATH_SN: destination sequence number |
| 811 | * @NL80211_ATTR_MPATH_METRIC: metric (cost) of this mesh path | 948 | * @NL80211_ATTR_MPATH_METRIC: metric (cost) of this mesh path |
| 812 | * @NL80211_ATTR_MPATH_EXPTIME: expiration time for the path, in msec from now | 949 | * @NL80211_ATTR_MPATH_EXPTIME: expiration time for the path, in msec from now |
| 813 | * @NL80211_ATTR_MPATH_FLAGS: mesh path flags, enumerated in | 950 | * @NL80211_ATTR_MPATH_FLAGS: mesh path flags, enumerated in |
| @@ -818,7 +955,7 @@ enum nl80211_mpath_flags { | |||
| 818 | enum nl80211_mpath_info { | 955 | enum nl80211_mpath_info { |
| 819 | __NL80211_MPATH_INFO_INVALID, | 956 | __NL80211_MPATH_INFO_INVALID, |
| 820 | NL80211_MPATH_INFO_FRAME_QLEN, | 957 | NL80211_MPATH_INFO_FRAME_QLEN, |
| 821 | NL80211_MPATH_INFO_DSN, | 958 | NL80211_MPATH_INFO_SN, |
| 822 | NL80211_MPATH_INFO_METRIC, | 959 | NL80211_MPATH_INFO_METRIC, |
| 823 | NL80211_MPATH_INFO_EXPTIME, | 960 | NL80211_MPATH_INFO_EXPTIME, |
| 824 | NL80211_MPATH_INFO_FLAGS, | 961 | NL80211_MPATH_INFO_FLAGS, |
| @@ -1009,6 +1146,26 @@ enum nl80211_reg_rule_flags { | |||
| 1009 | }; | 1146 | }; |
| 1010 | 1147 | ||
| 1011 | /** | 1148 | /** |
| 1149 | * enum nl80211_survey_info - survey information | ||
| 1150 | * | ||
| 1151 | * These attribute types are used with %NL80211_ATTR_SURVEY_INFO | ||
| 1152 | * when getting information about a survey. | ||
| 1153 | * | ||
| 1154 | * @__NL80211_SURVEY_INFO_INVALID: attribute number 0 is reserved | ||
| 1155 | * @NL80211_SURVEY_INFO_FREQUENCY: center frequency of channel | ||
| 1156 | * @NL80211_SURVEY_INFO_NOISE: noise level of channel (u8, dBm) | ||
| 1157 | */ | ||
| 1158 | enum nl80211_survey_info { | ||
| 1159 | __NL80211_SURVEY_INFO_INVALID, | ||
| 1160 | NL80211_SURVEY_INFO_FREQUENCY, | ||
| 1161 | NL80211_SURVEY_INFO_NOISE, | ||
| 1162 | |||
| 1163 | /* keep last */ | ||
| 1164 | __NL80211_SURVEY_INFO_AFTER_LAST, | ||
| 1165 | NL80211_SURVEY_INFO_MAX = __NL80211_SURVEY_INFO_AFTER_LAST - 1 | ||
| 1166 | }; | ||
| 1167 | |||
| 1168 | /** | ||
| 1012 | * enum nl80211_mntr_flags - monitor configuration flags | 1169 | * enum nl80211_mntr_flags - monitor configuration flags |
| 1013 | * | 1170 | * |
| 1014 | * Monitor configuration flags. | 1171 | * Monitor configuration flags. |
| @@ -1088,6 +1245,8 @@ enum nl80211_mntr_flags { | |||
| 1088 | * @NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME: The interval of time (in TUs) | 1245 | * @NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME: The interval of time (in TUs) |
| 1089 | * that it takes for an HWMP information element to propagate across the mesh | 1246 | * that it takes for an HWMP information element to propagate across the mesh |
| 1090 | * | 1247 | * |
| 1248 | * @NL80211_MESHCONF_ROOTMODE: whether root mode is enabled or not | ||
| 1249 | * | ||
| 1091 | * @NL80211_MESHCONF_ATTR_MAX: highest possible mesh configuration attribute | 1250 | * @NL80211_MESHCONF_ATTR_MAX: highest possible mesh configuration attribute |
| 1092 | * | 1251 | * |
| 1093 | * @__NL80211_MESHCONF_ATTR_AFTER_LAST: internal use | 1252 | * @__NL80211_MESHCONF_ATTR_AFTER_LAST: internal use |
| @@ -1107,6 +1266,7 @@ enum nl80211_meshconf_params { | |||
| 1107 | NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT, | 1266 | NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT, |
| 1108 | NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL, | 1267 | NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL, |
| 1109 | NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME, | 1268 | NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME, |
| 1269 | NL80211_MESHCONF_HWMP_ROOTMODE, | ||
| 1110 | 1270 | ||
| 1111 | /* keep last */ | 1271 | /* keep last */ |
| 1112 | __NL80211_MESHCONF_ATTR_AFTER_LAST, | 1272 | __NL80211_MESHCONF_ATTR_AFTER_LAST, |
| @@ -1168,6 +1328,8 @@ enum nl80211_channel_type { | |||
| 1168 | * in mBm (100 * dBm) (s32) | 1328 | * in mBm (100 * dBm) (s32) |
| 1169 | * @NL80211_BSS_SIGNAL_UNSPEC: signal strength of the probe response/beacon | 1329 | * @NL80211_BSS_SIGNAL_UNSPEC: signal strength of the probe response/beacon |
| 1170 | * in unspecified units, scaled to 0..100 (u8) | 1330 | * in unspecified units, scaled to 0..100 (u8) |
| 1331 | * @NL80211_BSS_STATUS: status, if this BSS is "used" | ||
| 1332 | * @NL80211_BSS_SEEN_MS_AGO: age of this BSS entry in ms | ||
| 1171 | * @__NL80211_BSS_AFTER_LAST: internal | 1333 | * @__NL80211_BSS_AFTER_LAST: internal |
| 1172 | * @NL80211_BSS_MAX: highest BSS attribute | 1334 | * @NL80211_BSS_MAX: highest BSS attribute |
| 1173 | */ | 1335 | */ |
| @@ -1181,6 +1343,8 @@ enum nl80211_bss { | |||
| 1181 | NL80211_BSS_INFORMATION_ELEMENTS, | 1343 | NL80211_BSS_INFORMATION_ELEMENTS, |
| 1182 | NL80211_BSS_SIGNAL_MBM, | 1344 | NL80211_BSS_SIGNAL_MBM, |
| 1183 | NL80211_BSS_SIGNAL_UNSPEC, | 1345 | NL80211_BSS_SIGNAL_UNSPEC, |
| 1346 | NL80211_BSS_STATUS, | ||
| 1347 | NL80211_BSS_SEEN_MS_AGO, | ||
| 1184 | 1348 | ||
| 1185 | /* keep last */ | 1349 | /* keep last */ |
| 1186 | __NL80211_BSS_AFTER_LAST, | 1350 | __NL80211_BSS_AFTER_LAST, |
| @@ -1188,18 +1352,37 @@ enum nl80211_bss { | |||
| 1188 | }; | 1352 | }; |
| 1189 | 1353 | ||
| 1190 | /** | 1354 | /** |
| 1355 | * enum nl80211_bss_status - BSS "status" | ||
| 1356 | */ | ||
| 1357 | enum nl80211_bss_status { | ||
| 1358 | NL80211_BSS_STATUS_AUTHENTICATED, | ||
| 1359 | NL80211_BSS_STATUS_ASSOCIATED, | ||
| 1360 | NL80211_BSS_STATUS_IBSS_JOINED, | ||
| 1361 | }; | ||
| 1362 | |||
| 1363 | /** | ||
| 1191 | * enum nl80211_auth_type - AuthenticationType | 1364 | * enum nl80211_auth_type - AuthenticationType |
| 1192 | * | 1365 | * |
| 1193 | * @NL80211_AUTHTYPE_OPEN_SYSTEM: Open System authentication | 1366 | * @NL80211_AUTHTYPE_OPEN_SYSTEM: Open System authentication |
| 1194 | * @NL80211_AUTHTYPE_SHARED_KEY: Shared Key authentication (WEP only) | 1367 | * @NL80211_AUTHTYPE_SHARED_KEY: Shared Key authentication (WEP only) |
| 1195 | * @NL80211_AUTHTYPE_FT: Fast BSS Transition (IEEE 802.11r) | 1368 | * @NL80211_AUTHTYPE_FT: Fast BSS Transition (IEEE 802.11r) |
| 1196 | * @NL80211_AUTHTYPE_NETWORK_EAP: Network EAP (some Cisco APs and mainly LEAP) | 1369 | * @NL80211_AUTHTYPE_NETWORK_EAP: Network EAP (some Cisco APs and mainly LEAP) |
| 1370 | * @__NL80211_AUTHTYPE_NUM: internal | ||
| 1371 | * @NL80211_AUTHTYPE_MAX: maximum valid auth algorithm | ||
| 1372 | * @NL80211_AUTHTYPE_AUTOMATIC: determine automatically (if necessary by | ||
| 1373 | * trying multiple times); this is invalid in netlink -- leave out | ||
| 1374 | * the attribute for this on CONNECT commands. | ||
| 1197 | */ | 1375 | */ |
| 1198 | enum nl80211_auth_type { | 1376 | enum nl80211_auth_type { |
| 1199 | NL80211_AUTHTYPE_OPEN_SYSTEM, | 1377 | NL80211_AUTHTYPE_OPEN_SYSTEM, |
| 1200 | NL80211_AUTHTYPE_SHARED_KEY, | 1378 | NL80211_AUTHTYPE_SHARED_KEY, |
| 1201 | NL80211_AUTHTYPE_FT, | 1379 | NL80211_AUTHTYPE_FT, |
| 1202 | NL80211_AUTHTYPE_NETWORK_EAP, | 1380 | NL80211_AUTHTYPE_NETWORK_EAP, |
| 1381 | |||
| 1382 | /* keep last */ | ||
| 1383 | __NL80211_AUTHTYPE_NUM, | ||
| 1384 | NL80211_AUTHTYPE_MAX = __NL80211_AUTHTYPE_NUM - 1, | ||
| 1385 | NL80211_AUTHTYPE_AUTOMATIC | ||
| 1203 | }; | 1386 | }; |
| 1204 | 1387 | ||
| 1205 | /** | 1388 | /** |
| @@ -1224,4 +1407,39 @@ enum nl80211_mfp { | |||
| 1224 | NL80211_MFP_REQUIRED, | 1407 | NL80211_MFP_REQUIRED, |
| 1225 | }; | 1408 | }; |
| 1226 | 1409 | ||
| 1410 | enum nl80211_wpa_versions { | ||
| 1411 | NL80211_WPA_VERSION_1 = 1 << 0, | ||
| 1412 | NL80211_WPA_VERSION_2 = 1 << 1, | ||
| 1413 | }; | ||
| 1414 | |||
| 1415 | /** | ||
| 1416 | * enum nl80211_key_attributes - key attributes | ||
| 1417 | * @__NL80211_KEY_INVALID: invalid | ||
| 1418 | * @NL80211_KEY_DATA: (temporal) key data; for TKIP this consists of | ||
| 1419 | * 16 bytes encryption key followed by 8 bytes each for TX and RX MIC | ||
| 1420 | * keys | ||
| 1421 | * @NL80211_KEY_IDX: key ID (u8, 0-3) | ||
| 1422 | * @NL80211_KEY_CIPHER: key cipher suite (u32, as defined by IEEE 802.11 | ||
| 1423 | * section 7.3.2.25.1, e.g. 0x000FAC04) | ||
| 1424 | * @NL80211_KEY_SEQ: transmit key sequence number (IV/PN) for TKIP and | ||
| 1425 | * CCMP keys, each six bytes in little endian | ||
| 1426 | * @NL80211_KEY_DEFAULT: flag indicating default key | ||
| 1427 | * @NL80211_KEY_DEFAULT_MGMT: flag indicating default management key | ||
| 1428 | * @__NL80211_KEY_AFTER_LAST: internal | ||
| 1429 | * @NL80211_KEY_MAX: highest key attribute | ||
| 1430 | */ | ||
| 1431 | enum nl80211_key_attributes { | ||
| 1432 | __NL80211_KEY_INVALID, | ||
| 1433 | NL80211_KEY_DATA, | ||
| 1434 | NL80211_KEY_IDX, | ||
| 1435 | NL80211_KEY_CIPHER, | ||
| 1436 | NL80211_KEY_SEQ, | ||
| 1437 | NL80211_KEY_DEFAULT, | ||
| 1438 | NL80211_KEY_DEFAULT_MGMT, | ||
| 1439 | |||
| 1440 | /* keep last */ | ||
| 1441 | __NL80211_KEY_AFTER_LAST, | ||
| 1442 | NL80211_KEY_MAX = __NL80211_KEY_AFTER_LAST - 1 | ||
| 1443 | }; | ||
| 1444 | |||
| 1227 | #endif /* __LINUX_NL80211_H */ | 1445 | #endif /* __LINUX_NL80211_H */ |
diff --git a/include/linux/nl802154.h b/include/linux/nl802154.h index 2cda00ccfcca..33d9f5175109 100644 --- a/include/linux/nl802154.h +++ b/include/linux/nl802154.h | |||
| @@ -64,12 +64,17 @@ enum { | |||
| 64 | IEEE802154_ATTR_COORD_REALIGN, | 64 | IEEE802154_ATTR_COORD_REALIGN, |
| 65 | IEEE802154_ATTR_SEC, | 65 | IEEE802154_ATTR_SEC, |
| 66 | 66 | ||
| 67 | IEEE802154_ATTR_PAGE, | ||
| 68 | IEEE802154_ATTR_CHANNEL_PAGE_LIST, | ||
| 69 | |||
| 70 | IEEE802154_ATTR_PHY_NAME, | ||
| 71 | |||
| 67 | __IEEE802154_ATTR_MAX, | 72 | __IEEE802154_ATTR_MAX, |
| 68 | }; | 73 | }; |
| 69 | 74 | ||
| 70 | #define IEEE802154_ATTR_MAX (__IEEE802154_ATTR_MAX - 1) | 75 | #define IEEE802154_ATTR_MAX (__IEEE802154_ATTR_MAX - 1) |
| 71 | 76 | ||
| 72 | extern struct nla_policy ieee802154_policy[]; | 77 | extern const struct nla_policy ieee802154_policy[]; |
| 73 | 78 | ||
| 74 | /* commands */ | 79 | /* commands */ |
| 75 | /* REQ should be responded with CONF | 80 | /* REQ should be responded with CONF |
| @@ -111,6 +116,11 @@ enum { | |||
| 111 | IEEE802154_RX_ENABLE_REQ, /* Not supported yet */ | 116 | IEEE802154_RX_ENABLE_REQ, /* Not supported yet */ |
| 112 | IEEE802154_RX_ENABLE_CONF, /* Not supported yet */ | 117 | IEEE802154_RX_ENABLE_CONF, /* Not supported yet */ |
| 113 | 118 | ||
| 119 | IEEE802154_LIST_IFACE, | ||
| 120 | IEEE802154_LIST_PHY, | ||
| 121 | IEEE802154_ADD_IFACE, | ||
| 122 | IEEE802154_DEL_IFACE, | ||
| 123 | |||
| 114 | __IEEE802154_CMD_MAX, | 124 | __IEEE802154_CMD_MAX, |
| 115 | }; | 125 | }; |
| 116 | 126 | ||
diff --git a/include/linux/nmi.h b/include/linux/nmi.h index 29af2d5df097..b752e807adde 100644 --- a/include/linux/nmi.h +++ b/include/linux/nmi.h | |||
| @@ -28,8 +28,23 @@ static inline void acpi_nmi_disable(void) { } | |||
| 28 | static inline void acpi_nmi_enable(void) { } | 28 | static inline void acpi_nmi_enable(void) { } |
| 29 | #endif | 29 | #endif |
| 30 | 30 | ||
| 31 | #ifndef trigger_all_cpu_backtrace | 31 | /* |
| 32 | #define trigger_all_cpu_backtrace() do { } while (0) | 32 | * Create trigger_all_cpu_backtrace() out of the arch-provided |
| 33 | * base function. Return whether such support was available, | ||
| 34 | * to allow calling code to fall back to some other mechanism: | ||
| 35 | */ | ||
| 36 | #ifdef arch_trigger_all_cpu_backtrace | ||
| 37 | static inline bool trigger_all_cpu_backtrace(void) | ||
| 38 | { | ||
| 39 | arch_trigger_all_cpu_backtrace(); | ||
| 40 | |||
| 41 | return true; | ||
| 42 | } | ||
| 43 | #else | ||
| 44 | static inline bool trigger_all_cpu_backtrace(void) | ||
| 45 | { | ||
| 46 | return false; | ||
| 47 | } | ||
| 33 | #endif | 48 | #endif |
| 34 | 49 | ||
| 35 | #endif | 50 | #endif |
diff --git a/include/linux/notifier.h b/include/linux/notifier.h index 81bc252dc8ac..fee6c2f68075 100644 --- a/include/linux/notifier.h +++ b/include/linux/notifier.h | |||
| @@ -199,6 +199,10 @@ static inline int notifier_to_errno(int ret) | |||
| 199 | #define NETDEV_FEAT_CHANGE 0x000B | 199 | #define NETDEV_FEAT_CHANGE 0x000B |
| 200 | #define NETDEV_BONDING_FAILOVER 0x000C | 200 | #define NETDEV_BONDING_FAILOVER 0x000C |
| 201 | #define NETDEV_PRE_UP 0x000D | 201 | #define NETDEV_PRE_UP 0x000D |
| 202 | #define NETDEV_BONDING_OLDTYPE 0x000E | ||
| 203 | #define NETDEV_BONDING_NEWTYPE 0x000F | ||
| 204 | #define NETDEV_POST_INIT 0x0010 | ||
| 205 | #define NETDEV_UNREGISTER_BATCH 0x0011 | ||
| 202 | 206 | ||
| 203 | #define SYS_DOWN 0x0001 /* Notify of system down */ | 207 | #define SYS_DOWN 0x0001 /* Notify of system down */ |
| 204 | #define SYS_RESTART SYS_DOWN | 208 | #define SYS_RESTART SYS_DOWN |
diff --git a/include/linux/of.h b/include/linux/of.h index 7be2d1043c16..e7facd8fbce8 100644 --- a/include/linux/of.h +++ b/include/linux/of.h | |||
| @@ -17,14 +17,117 @@ | |||
| 17 | */ | 17 | */ |
| 18 | #include <linux/types.h> | 18 | #include <linux/types.h> |
| 19 | #include <linux/bitops.h> | 19 | #include <linux/bitops.h> |
| 20 | #include <linux/kref.h> | ||
| 20 | #include <linux/mod_devicetable.h> | 21 | #include <linux/mod_devicetable.h> |
| 21 | 22 | ||
| 23 | typedef u32 phandle; | ||
| 24 | typedef u32 ihandle; | ||
| 25 | |||
| 26 | struct property { | ||
| 27 | char *name; | ||
| 28 | int length; | ||
| 29 | void *value; | ||
| 30 | struct property *next; | ||
| 31 | unsigned long _flags; | ||
| 32 | unsigned int unique_id; | ||
| 33 | }; | ||
| 34 | |||
| 35 | #if defined(CONFIG_SPARC) | ||
| 36 | struct of_irq_controller; | ||
| 37 | #endif | ||
| 38 | |||
| 39 | struct device_node { | ||
| 40 | const char *name; | ||
| 41 | const char *type; | ||
| 42 | phandle node; | ||
| 43 | #if !defined(CONFIG_SPARC) | ||
| 44 | phandle linux_phandle; | ||
| 45 | #endif | ||
| 46 | char *full_name; | ||
| 47 | |||
| 48 | struct property *properties; | ||
| 49 | struct property *deadprops; /* removed properties */ | ||
| 50 | struct device_node *parent; | ||
| 51 | struct device_node *child; | ||
| 52 | struct device_node *sibling; | ||
| 53 | struct device_node *next; /* next device of same type */ | ||
| 54 | struct device_node *allnext; /* next in list of all nodes */ | ||
| 55 | struct proc_dir_entry *pde; /* this node's proc directory */ | ||
| 56 | struct kref kref; | ||
| 57 | unsigned long _flags; | ||
| 58 | void *data; | ||
| 59 | #if defined(CONFIG_SPARC) | ||
| 60 | char *path_component_name; | ||
| 61 | unsigned int unique_id; | ||
| 62 | struct of_irq_controller *irq_trans; | ||
| 63 | #endif | ||
| 64 | }; | ||
| 65 | |||
| 66 | static inline int of_node_check_flag(struct device_node *n, unsigned long flag) | ||
| 67 | { | ||
| 68 | return test_bit(flag, &n->_flags); | ||
| 69 | } | ||
| 70 | |||
| 71 | static inline void of_node_set_flag(struct device_node *n, unsigned long flag) | ||
| 72 | { | ||
| 73 | set_bit(flag, &n->_flags); | ||
| 74 | } | ||
| 75 | |||
| 76 | static inline void | ||
| 77 | set_node_proc_entry(struct device_node *dn, struct proc_dir_entry *de) | ||
| 78 | { | ||
| 79 | dn->pde = de; | ||
| 80 | } | ||
| 81 | |||
| 82 | extern struct device_node *of_find_all_nodes(struct device_node *prev); | ||
| 83 | |||
| 84 | #if defined(CONFIG_SPARC) | ||
| 85 | /* Dummy ref counting routines - to be implemented later */ | ||
| 86 | static inline struct device_node *of_node_get(struct device_node *node) | ||
| 87 | { | ||
| 88 | return node; | ||
| 89 | } | ||
| 90 | static inline void of_node_put(struct device_node *node) | ||
| 91 | { | ||
| 92 | } | ||
| 93 | |||
| 94 | #else | ||
| 95 | extern struct device_node *of_node_get(struct device_node *node); | ||
| 96 | extern void of_node_put(struct device_node *node); | ||
| 97 | #endif | ||
| 98 | |||
| 99 | /* | ||
| 100 | * OF address retreival & translation | ||
| 101 | */ | ||
| 102 | |||
| 103 | /* Helper to read a big number; size is in cells (not bytes) */ | ||
| 104 | static inline u64 of_read_number(const u32 *cell, int size) | ||
| 105 | { | ||
| 106 | u64 r = 0; | ||
| 107 | while (size--) | ||
| 108 | r = (r << 32) | *(cell++); | ||
| 109 | return r; | ||
| 110 | } | ||
| 111 | |||
| 112 | /* Like of_read_number, but we want an unsigned long result */ | ||
| 113 | #ifdef CONFIG_PPC32 | ||
| 114 | static inline unsigned long of_read_ulong(const u32 *cell, int size) | ||
| 115 | { | ||
| 116 | return cell[size-1]; | ||
| 117 | } | ||
| 118 | #else | ||
| 119 | #define of_read_ulong(cell, size) of_read_number(cell, size) | ||
| 120 | #endif | ||
| 121 | |||
| 22 | #include <asm/prom.h> | 122 | #include <asm/prom.h> |
| 23 | 123 | ||
| 24 | /* flag descriptions */ | 124 | /* flag descriptions */ |
| 25 | #define OF_DYNAMIC 1 /* node and properties were allocated via kmalloc */ | 125 | #define OF_DYNAMIC 1 /* node and properties were allocated via kmalloc */ |
| 26 | #define OF_DETACHED 2 /* node has been detached from the device tree */ | 126 | #define OF_DETACHED 2 /* node has been detached from the device tree */ |
| 27 | 127 | ||
| 128 | #define OF_IS_DYNAMIC(x) test_bit(OF_DYNAMIC, &x->_flags) | ||
| 129 | #define OF_MARK_DYNAMIC(x) set_bit(OF_DYNAMIC, &x->_flags) | ||
| 130 | |||
| 28 | #define OF_BAD_ADDR ((u64)-1) | 131 | #define OF_BAD_ADDR ((u64)-1) |
| 29 | 132 | ||
| 30 | extern struct device_node *of_find_node_by_name(struct device_node *from, | 133 | extern struct device_node *of_find_node_by_name(struct device_node *from, |
diff --git a/include/linux/of_fdt.h b/include/linux/of_fdt.h new file mode 100644 index 000000000000..41d432b13553 --- /dev/null +++ b/include/linux/of_fdt.h | |||
| @@ -0,0 +1,86 @@ | |||
| 1 | /* | ||
| 2 | * Definitions for working with the Flattened Device Tree data format | ||
| 3 | * | ||
| 4 | * Copyright 2009 Benjamin Herrenschmidt, IBM Corp | ||
| 5 | * benh@kernel.crashing.org | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or | ||
| 8 | * modify it under the terms of the GNU General Public License | ||
| 9 | * version 2 as published by the Free Software Foundation. | ||
| 10 | */ | ||
| 11 | |||
| 12 | #ifndef _LINUX_OF_FDT_H | ||
| 13 | #define _LINUX_OF_FDT_H | ||
| 14 | |||
| 15 | #include <linux/types.h> | ||
| 16 | #include <linux/init.h> | ||
| 17 | |||
| 18 | /* Definitions used by the flattened device tree */ | ||
| 19 | #define OF_DT_HEADER 0xd00dfeed /* marker */ | ||
| 20 | #define OF_DT_BEGIN_NODE 0x1 /* Start of node, full name */ | ||
| 21 | #define OF_DT_END_NODE 0x2 /* End node */ | ||
| 22 | #define OF_DT_PROP 0x3 /* Property: name off, size, | ||
| 23 | * content */ | ||
| 24 | #define OF_DT_NOP 0x4 /* nop */ | ||
| 25 | #define OF_DT_END 0x9 | ||
| 26 | |||
| 27 | #define OF_DT_VERSION 0x10 | ||
| 28 | |||
| 29 | #ifndef __ASSEMBLY__ | ||
| 30 | /* | ||
| 31 | * This is what gets passed to the kernel by prom_init or kexec | ||
| 32 | * | ||
| 33 | * The dt struct contains the device tree structure, full pathes and | ||
| 34 | * property contents. The dt strings contain a separate block with just | ||
| 35 | * the strings for the property names, and is fully page aligned and | ||
| 36 | * self contained in a page, so that it can be kept around by the kernel, | ||
| 37 | * each property name appears only once in this page (cheap compression) | ||
| 38 | * | ||
| 39 | * the mem_rsvmap contains a map of reserved ranges of physical memory, | ||
| 40 | * passing it here instead of in the device-tree itself greatly simplifies | ||
| 41 | * the job of everybody. It's just a list of u64 pairs (base/size) that | ||
| 42 | * ends when size is 0 | ||
| 43 | */ | ||
| 44 | struct boot_param_header { | ||
| 45 | u32 magic; /* magic word OF_DT_HEADER */ | ||
| 46 | u32 totalsize; /* total size of DT block */ | ||
| 47 | u32 off_dt_struct; /* offset to structure */ | ||
| 48 | u32 off_dt_strings; /* offset to strings */ | ||
| 49 | u32 off_mem_rsvmap; /* offset to memory reserve map */ | ||
| 50 | u32 version; /* format version */ | ||
| 51 | u32 last_comp_version; /* last compatible version */ | ||
| 52 | /* version 2 fields below */ | ||
| 53 | u32 boot_cpuid_phys; /* Physical CPU id we're booting on */ | ||
| 54 | /* version 3 fields below */ | ||
| 55 | u32 dt_strings_size; /* size of the DT strings block */ | ||
| 56 | /* version 17 fields below */ | ||
| 57 | u32 dt_struct_size; /* size of the DT structure block */ | ||
| 58 | }; | ||
| 59 | |||
| 60 | /* For scanning the flat device-tree at boot time */ | ||
| 61 | extern int __init of_scan_flat_dt(int (*it)(unsigned long node, | ||
| 62 | const char *uname, int depth, | ||
| 63 | void *data), | ||
| 64 | void *data); | ||
| 65 | extern void __init *of_get_flat_dt_prop(unsigned long node, const char *name, | ||
| 66 | unsigned long *size); | ||
| 67 | extern int __init of_flat_dt_is_compatible(unsigned long node, | ||
| 68 | const char *name); | ||
| 69 | extern unsigned long __init of_get_flat_dt_root(void); | ||
| 70 | |||
| 71 | /* Other Prototypes */ | ||
| 72 | extern void finish_device_tree(void); | ||
| 73 | extern void unflatten_device_tree(void); | ||
| 74 | extern void early_init_devtree(void *); | ||
| 75 | extern int machine_is_compatible(const char *compat); | ||
| 76 | extern void print_properties(struct device_node *node); | ||
| 77 | extern int prom_n_intr_cells(struct device_node* np); | ||
| 78 | extern void prom_get_irq_senses(unsigned char *senses, int off, int max); | ||
| 79 | extern int prom_add_property(struct device_node* np, struct property* prop); | ||
| 80 | extern int prom_remove_property(struct device_node *np, struct property *prop); | ||
| 81 | extern int prom_update_property(struct device_node *np, | ||
| 82 | struct property *newprop, | ||
| 83 | struct property *oldprop); | ||
| 84 | |||
| 85 | #endif /* __ASSEMBLY__ */ | ||
| 86 | #endif /* _LINUX_OF_FDT_H */ | ||
diff --git a/include/linux/oom.h b/include/linux/oom.h index a7979baf1e39..6aac5fe4f6f1 100644 --- a/include/linux/oom.h +++ b/include/linux/oom.h | |||
| @@ -30,5 +30,16 @@ extern void out_of_memory(struct zonelist *zonelist, gfp_t gfp_mask, int order); | |||
| 30 | extern int register_oom_notifier(struct notifier_block *nb); | 30 | extern int register_oom_notifier(struct notifier_block *nb); |
| 31 | extern int unregister_oom_notifier(struct notifier_block *nb); | 31 | extern int unregister_oom_notifier(struct notifier_block *nb); |
| 32 | 32 | ||
| 33 | extern bool oom_killer_disabled; | ||
| 34 | |||
| 35 | static inline void oom_killer_disable(void) | ||
| 36 | { | ||
| 37 | oom_killer_disabled = true; | ||
| 38 | } | ||
| 39 | |||
| 40 | static inline void oom_killer_enable(void) | ||
| 41 | { | ||
| 42 | oom_killer_disabled = false; | ||
| 43 | } | ||
| 33 | #endif /* __KERNEL__*/ | 44 | #endif /* __KERNEL__*/ |
| 34 | #endif /* _INCLUDE_LINUX_OOM_H */ | 45 | #endif /* _INCLUDE_LINUX_OOM_H */ |
diff --git a/include/linux/oprofile.h b/include/linux/oprofile.h index 1d9518bc4c58..5171639ecf0f 100644 --- a/include/linux/oprofile.h +++ b/include/linux/oprofile.h | |||
| @@ -67,6 +67,9 @@ struct oprofile_operations { | |||
| 67 | 67 | ||
| 68 | /* Initiate a stack backtrace. Optional. */ | 68 | /* Initiate a stack backtrace. Optional. */ |
| 69 | void (*backtrace)(struct pt_regs * const regs, unsigned int depth); | 69 | void (*backtrace)(struct pt_regs * const regs, unsigned int depth); |
| 70 | |||
| 71 | /* Multiplex between different events. Optional. */ | ||
| 72 | int (*switch_events)(void); | ||
| 70 | /* CPU identification string. */ | 73 | /* CPU identification string. */ |
| 71 | char * cpu_type; | 74 | char * cpu_type; |
| 72 | }; | 75 | }; |
| @@ -171,7 +174,6 @@ struct op_sample; | |||
| 171 | struct op_entry { | 174 | struct op_entry { |
| 172 | struct ring_buffer_event *event; | 175 | struct ring_buffer_event *event; |
| 173 | struct op_sample *sample; | 176 | struct op_sample *sample; |
| 174 | unsigned long irq_flags; | ||
| 175 | unsigned long size; | 177 | unsigned long size; |
| 176 | unsigned long *data; | 178 | unsigned long *data; |
| 177 | }; | 179 | }; |
| @@ -180,6 +182,7 @@ void oprofile_write_reserve(struct op_entry *entry, | |||
| 180 | struct pt_regs * const regs, | 182 | struct pt_regs * const regs, |
| 181 | unsigned long pc, int code, int size); | 183 | unsigned long pc, int code, int size); |
| 182 | int oprofile_add_data(struct op_entry *entry, unsigned long val); | 184 | int oprofile_add_data(struct op_entry *entry, unsigned long val); |
| 185 | int oprofile_add_data64(struct op_entry *entry, u64 val); | ||
| 183 | int oprofile_write_commit(struct op_entry *entry); | 186 | int oprofile_write_commit(struct op_entry *entry); |
| 184 | 187 | ||
| 185 | #endif /* OPROFILE_H */ | 188 | #endif /* OPROFILE_H */ |
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index e2e5ce543595..6b202b173955 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h | |||
| @@ -51,6 +51,9 @@ | |||
| 51 | * PG_buddy is set to indicate that the page is free and in the buddy system | 51 | * PG_buddy is set to indicate that the page is free and in the buddy system |
| 52 | * (see mm/page_alloc.c). | 52 | * (see mm/page_alloc.c). |
| 53 | * | 53 | * |
| 54 | * PG_hwpoison indicates that a page got corrupted in hardware and contains | ||
| 55 | * data with incorrect ECC bits that triggered a machine check. Accessing is | ||
| 56 | * not safe since it may cause another machine check. Don't touch! | ||
| 54 | */ | 57 | */ |
| 55 | 58 | ||
| 56 | /* | 59 | /* |
| @@ -99,9 +102,12 @@ enum pageflags { | |||
| 99 | #ifdef CONFIG_HAVE_MLOCKED_PAGE_BIT | 102 | #ifdef CONFIG_HAVE_MLOCKED_PAGE_BIT |
| 100 | PG_mlocked, /* Page is vma mlocked */ | 103 | PG_mlocked, /* Page is vma mlocked */ |
| 101 | #endif | 104 | #endif |
| 102 | #ifdef CONFIG_IA64_UNCACHED_ALLOCATOR | 105 | #ifdef CONFIG_ARCH_USES_PG_UNCACHED |
| 103 | PG_uncached, /* Page has been mapped as uncached */ | 106 | PG_uncached, /* Page has been mapped as uncached */ |
| 104 | #endif | 107 | #endif |
| 108 | #ifdef CONFIG_MEMORY_FAILURE | ||
| 109 | PG_hwpoison, /* hardware poisoned page. Don't touch */ | ||
| 110 | #endif | ||
| 105 | __NR_PAGEFLAGS, | 111 | __NR_PAGEFLAGS, |
| 106 | 112 | ||
| 107 | /* Filesystems */ | 113 | /* Filesystems */ |
| @@ -158,6 +164,9 @@ static inline int TestSetPage##uname(struct page *page) \ | |||
| 158 | static inline int TestClearPage##uname(struct page *page) \ | 164 | static inline int TestClearPage##uname(struct page *page) \ |
| 159 | { return test_and_clear_bit(PG_##lname, &page->flags); } | 165 | { return test_and_clear_bit(PG_##lname, &page->flags); } |
| 160 | 166 | ||
| 167 | #define __TESTCLEARFLAG(uname, lname) \ | ||
| 168 | static inline int __TestClearPage##uname(struct page *page) \ | ||
| 169 | { return __test_and_clear_bit(PG_##lname, &page->flags); } | ||
| 161 | 170 | ||
| 162 | #define PAGEFLAG(uname, lname) TESTPAGEFLAG(uname, lname) \ | 171 | #define PAGEFLAG(uname, lname) TESTPAGEFLAG(uname, lname) \ |
| 163 | SETPAGEFLAG(uname, lname) CLEARPAGEFLAG(uname, lname) | 172 | SETPAGEFLAG(uname, lname) CLEARPAGEFLAG(uname, lname) |
| @@ -184,6 +193,9 @@ static inline void __ClearPage##uname(struct page *page) { } | |||
| 184 | #define TESTCLEARFLAG_FALSE(uname) \ | 193 | #define TESTCLEARFLAG_FALSE(uname) \ |
| 185 | static inline int TestClearPage##uname(struct page *page) { return 0; } | 194 | static inline int TestClearPage##uname(struct page *page) { return 0; } |
| 186 | 195 | ||
| 196 | #define __TESTCLEARFLAG_FALSE(uname) \ | ||
| 197 | static inline int __TestClearPage##uname(struct page *page) { return 0; } | ||
| 198 | |||
| 187 | struct page; /* forward declaration */ | 199 | struct page; /* forward declaration */ |
| 188 | 200 | ||
| 189 | TESTPAGEFLAG(Locked, locked) TESTSETFLAG(Locked, locked) | 201 | TESTPAGEFLAG(Locked, locked) TESTSETFLAG(Locked, locked) |
| @@ -250,19 +262,28 @@ PAGEFLAG(Unevictable, unevictable) __CLEARPAGEFLAG(Unevictable, unevictable) | |||
| 250 | #ifdef CONFIG_HAVE_MLOCKED_PAGE_BIT | 262 | #ifdef CONFIG_HAVE_MLOCKED_PAGE_BIT |
| 251 | #define MLOCK_PAGES 1 | 263 | #define MLOCK_PAGES 1 |
| 252 | PAGEFLAG(Mlocked, mlocked) __CLEARPAGEFLAG(Mlocked, mlocked) | 264 | PAGEFLAG(Mlocked, mlocked) __CLEARPAGEFLAG(Mlocked, mlocked) |
| 253 | TESTSCFLAG(Mlocked, mlocked) | 265 | TESTSCFLAG(Mlocked, mlocked) __TESTCLEARFLAG(Mlocked, mlocked) |
| 254 | #else | 266 | #else |
| 255 | #define MLOCK_PAGES 0 | 267 | #define MLOCK_PAGES 0 |
| 256 | PAGEFLAG_FALSE(Mlocked) | 268 | PAGEFLAG_FALSE(Mlocked) SETPAGEFLAG_NOOP(Mlocked) |
| 257 | SETPAGEFLAG_NOOP(Mlocked) TESTCLEARFLAG_FALSE(Mlocked) | 269 | TESTCLEARFLAG_FALSE(Mlocked) __TESTCLEARFLAG_FALSE(Mlocked) |
| 258 | #endif | 270 | #endif |
| 259 | 271 | ||
| 260 | #ifdef CONFIG_IA64_UNCACHED_ALLOCATOR | 272 | #ifdef CONFIG_ARCH_USES_PG_UNCACHED |
| 261 | PAGEFLAG(Uncached, uncached) | 273 | PAGEFLAG(Uncached, uncached) |
| 262 | #else | 274 | #else |
| 263 | PAGEFLAG_FALSE(Uncached) | 275 | PAGEFLAG_FALSE(Uncached) |
| 264 | #endif | 276 | #endif |
| 265 | 277 | ||
| 278 | #ifdef CONFIG_MEMORY_FAILURE | ||
| 279 | PAGEFLAG(HWPoison, hwpoison) | ||
| 280 | TESTSETFLAG(HWPoison, hwpoison) | ||
| 281 | #define __PG_HWPOISON (1UL << PG_hwpoison) | ||
| 282 | #else | ||
| 283 | PAGEFLAG_FALSE(HWPoison) | ||
| 284 | #define __PG_HWPOISON 0 | ||
| 285 | #endif | ||
| 286 | |||
| 266 | static inline int PageUptodate(struct page *page) | 287 | static inline int PageUptodate(struct page *page) |
| 267 | { | 288 | { |
| 268 | int ret = test_bit(PG_uptodate, &(page)->flags); | 289 | int ret = test_bit(PG_uptodate, &(page)->flags); |
| @@ -387,7 +408,7 @@ static inline void __ClearPageTail(struct page *page) | |||
| 387 | 1 << PG_private | 1 << PG_private_2 | \ | 408 | 1 << PG_private | 1 << PG_private_2 | \ |
| 388 | 1 << PG_buddy | 1 << PG_writeback | 1 << PG_reserved | \ | 409 | 1 << PG_buddy | 1 << PG_writeback | 1 << PG_reserved | \ |
| 389 | 1 << PG_slab | 1 << PG_swapcache | 1 << PG_active | \ | 410 | 1 << PG_slab | 1 << PG_swapcache | 1 << PG_active | \ |
| 390 | 1 << PG_unevictable | __PG_MLOCKED) | 411 | 1 << PG_unevictable | __PG_MLOCKED | __PG_HWPOISON) |
| 391 | 412 | ||
| 392 | /* | 413 | /* |
| 393 | * Flags checked when a page is prepped for return by the page allocator. | 414 | * Flags checked when a page is prepped for return by the page allocator. |
| @@ -396,8 +417,8 @@ static inline void __ClearPageTail(struct page *page) | |||
| 396 | */ | 417 | */ |
| 397 | #define PAGE_FLAGS_CHECK_AT_PREP ((1 << NR_PAGEFLAGS) - 1) | 418 | #define PAGE_FLAGS_CHECK_AT_PREP ((1 << NR_PAGEFLAGS) - 1) |
| 398 | 419 | ||
| 399 | #endif /* !__GENERATING_BOUNDS_H */ | 420 | #define PAGE_FLAGS_PRIVATE \ |
| 400 | 421 | (1 << PG_private | 1 << PG_private_2) | |
| 401 | /** | 422 | /** |
| 402 | * page_has_private - Determine if page has private stuff | 423 | * page_has_private - Determine if page has private stuff |
| 403 | * @page: The page to be checked | 424 | * @page: The page to be checked |
| @@ -405,8 +426,11 @@ static inline void __ClearPageTail(struct page *page) | |||
| 405 | * Determine if a page has private stuff, indicating that release routines | 426 | * Determine if a page has private stuff, indicating that release routines |
| 406 | * should be invoked upon it. | 427 | * should be invoked upon it. |
| 407 | */ | 428 | */ |
| 408 | #define page_has_private(page) \ | 429 | static inline int page_has_private(struct page *page) |
| 409 | ((page)->flags & ((1 << PG_private) | \ | 430 | { |
| 410 | (1 << PG_private_2))) | 431 | return !!(page->flags & PAGE_FLAGS_PRIVATE); |
| 432 | } | ||
| 433 | |||
| 434 | #endif /* !__GENERATING_BOUNDS_H */ | ||
| 411 | 435 | ||
| 412 | #endif /* PAGE_FLAGS_H */ | 436 | #endif /* PAGE_FLAGS_H */ |
diff --git a/include/linux/page_cgroup.h b/include/linux/page_cgroup.h index 13f126c89ae8..4b938d4f3ac2 100644 --- a/include/linux/page_cgroup.h +++ b/include/linux/page_cgroup.h | |||
| @@ -38,6 +38,7 @@ enum { | |||
| 38 | PCG_LOCK, /* page cgroup is locked */ | 38 | PCG_LOCK, /* page cgroup is locked */ |
| 39 | PCG_CACHE, /* charged as cache */ | 39 | PCG_CACHE, /* charged as cache */ |
| 40 | PCG_USED, /* this object is in use. */ | 40 | PCG_USED, /* this object is in use. */ |
| 41 | PCG_ACCT_LRU, /* page has been accounted for */ | ||
| 41 | }; | 42 | }; |
| 42 | 43 | ||
| 43 | #define TESTPCGFLAG(uname, lname) \ | 44 | #define TESTPCGFLAG(uname, lname) \ |
| @@ -52,11 +53,23 @@ static inline void SetPageCgroup##uname(struct page_cgroup *pc)\ | |||
| 52 | static inline void ClearPageCgroup##uname(struct page_cgroup *pc) \ | 53 | static inline void ClearPageCgroup##uname(struct page_cgroup *pc) \ |
| 53 | { clear_bit(PCG_##lname, &pc->flags); } | 54 | { clear_bit(PCG_##lname, &pc->flags); } |
| 54 | 55 | ||
| 56 | #define TESTCLEARPCGFLAG(uname, lname) \ | ||
| 57 | static inline int TestClearPageCgroup##uname(struct page_cgroup *pc) \ | ||
| 58 | { return test_and_clear_bit(PCG_##lname, &pc->flags); } | ||
| 59 | |||
| 55 | /* Cache flag is set only once (at allocation) */ | 60 | /* Cache flag is set only once (at allocation) */ |
| 56 | TESTPCGFLAG(Cache, CACHE) | 61 | TESTPCGFLAG(Cache, CACHE) |
| 62 | CLEARPCGFLAG(Cache, CACHE) | ||
| 63 | SETPCGFLAG(Cache, CACHE) | ||
| 57 | 64 | ||
| 58 | TESTPCGFLAG(Used, USED) | 65 | TESTPCGFLAG(Used, USED) |
| 59 | CLEARPCGFLAG(Used, USED) | 66 | CLEARPCGFLAG(Used, USED) |
| 67 | SETPCGFLAG(Used, USED) | ||
| 68 | |||
| 69 | SETPCGFLAG(AcctLRU, ACCT_LRU) | ||
| 70 | CLEARPCGFLAG(AcctLRU, ACCT_LRU) | ||
| 71 | TESTPCGFLAG(AcctLRU, ACCT_LRU) | ||
| 72 | TESTCLEARPCGFLAG(AcctLRU, ACCT_LRU) | ||
| 60 | 73 | ||
| 61 | static inline int page_cgroup_nid(struct page_cgroup *pc) | 74 | static inline int page_cgroup_nid(struct page_cgroup *pc) |
| 62 | { | 75 | { |
| @@ -105,14 +118,14 @@ static inline void __init page_cgroup_init_flatmem(void) | |||
| 105 | 118 | ||
| 106 | #endif | 119 | #endif |
| 107 | 120 | ||
| 108 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP | ||
| 109 | #include <linux/swap.h> | 121 | #include <linux/swap.h> |
| 122 | |||
| 123 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP | ||
| 110 | extern unsigned short swap_cgroup_record(swp_entry_t ent, unsigned short id); | 124 | extern unsigned short swap_cgroup_record(swp_entry_t ent, unsigned short id); |
| 111 | extern unsigned short lookup_swap_cgroup(swp_entry_t ent); | 125 | extern unsigned short lookup_swap_cgroup(swp_entry_t ent); |
| 112 | extern int swap_cgroup_swapon(int type, unsigned long max_pages); | 126 | extern int swap_cgroup_swapon(int type, unsigned long max_pages); |
| 113 | extern void swap_cgroup_swapoff(int type); | 127 | extern void swap_cgroup_swapoff(int type); |
| 114 | #else | 128 | #else |
| 115 | #include <linux/swap.h> | ||
| 116 | 129 | ||
| 117 | static inline | 130 | static inline |
| 118 | unsigned short swap_cgroup_record(swp_entry_t ent, unsigned short id) | 131 | unsigned short swap_cgroup_record(swp_entry_t ent, unsigned short id) |
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index aec3252afcf5..ed5d7501e181 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h | |||
| @@ -132,7 +132,7 @@ static inline int page_cache_get_speculative(struct page *page) | |||
| 132 | { | 132 | { |
| 133 | VM_BUG_ON(in_interrupt()); | 133 | VM_BUG_ON(in_interrupt()); |
| 134 | 134 | ||
| 135 | #if !defined(CONFIG_SMP) && defined(CONFIG_CLASSIC_RCU) | 135 | #if !defined(CONFIG_SMP) && defined(CONFIG_TREE_RCU) |
| 136 | # ifdef CONFIG_PREEMPT | 136 | # ifdef CONFIG_PREEMPT |
| 137 | VM_BUG_ON(!in_atomic()); | 137 | VM_BUG_ON(!in_atomic()); |
| 138 | # endif | 138 | # endif |
| @@ -170,7 +170,7 @@ static inline int page_cache_add_speculative(struct page *page, int count) | |||
| 170 | { | 170 | { |
| 171 | VM_BUG_ON(in_interrupt()); | 171 | VM_BUG_ON(in_interrupt()); |
| 172 | 172 | ||
| 173 | #if !defined(CONFIG_SMP) && defined(CONFIG_CLASSIC_RCU) | 173 | #if !defined(CONFIG_SMP) && defined(CONFIG_TREE_RCU) |
| 174 | # ifdef CONFIG_PREEMPT | 174 | # ifdef CONFIG_PREEMPT |
| 175 | VM_BUG_ON(!in_atomic()); | 175 | VM_BUG_ON(!in_atomic()); |
| 176 | # endif | 176 | # endif |
diff --git a/include/linux/pci.h b/include/linux/pci.h index 115fb7ba5089..f5c7cd343e56 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
| @@ -241,6 +241,7 @@ struct pci_dev { | |||
| 241 | unsigned int d1_support:1; /* Low power state D1 is supported */ | 241 | unsigned int d1_support:1; /* Low power state D1 is supported */ |
| 242 | unsigned int d2_support:1; /* Low power state D2 is supported */ | 242 | unsigned int d2_support:1; /* Low power state D2 is supported */ |
| 243 | unsigned int no_d1d2:1; /* Only allow D0 and D3 */ | 243 | unsigned int no_d1d2:1; /* Only allow D0 and D3 */ |
| 244 | unsigned int wakeup_prepared:1; | ||
| 244 | 245 | ||
| 245 | #ifdef CONFIG_PCIEASPM | 246 | #ifdef CONFIG_PCIEASPM |
| 246 | struct pcie_link_state *link_state; /* ASPM link state. */ | 247 | struct pcie_link_state *link_state; /* ASPM link state. */ |
| @@ -273,9 +274,12 @@ struct pci_dev { | |||
| 273 | unsigned int ari_enabled:1; /* ARI forwarding */ | 274 | unsigned int ari_enabled:1; /* ARI forwarding */ |
| 274 | unsigned int is_managed:1; | 275 | unsigned int is_managed:1; |
| 275 | unsigned int is_pcie:1; | 276 | unsigned int is_pcie:1; |
| 277 | unsigned int needs_freset:1; /* Dev requires fundamental reset */ | ||
| 276 | unsigned int state_saved:1; | 278 | unsigned int state_saved:1; |
| 277 | unsigned int is_physfn:1; | 279 | unsigned int is_physfn:1; |
| 278 | unsigned int is_virtfn:1; | 280 | unsigned int is_virtfn:1; |
| 281 | unsigned int reset_fn:1; | ||
| 282 | unsigned int is_hotplug_bridge:1; | ||
| 279 | pci_dev_flags_t dev_flags; | 283 | pci_dev_flags_t dev_flags; |
| 280 | atomic_t enable_cnt; /* pci_enable_device has been called */ | 284 | atomic_t enable_cnt; /* pci_enable_device has been called */ |
| 281 | 285 | ||
| @@ -794,6 +798,11 @@ int __must_check __pci_register_driver(struct pci_driver *, struct module *, | |||
| 794 | void pci_unregister_driver(struct pci_driver *dev); | 798 | void pci_unregister_driver(struct pci_driver *dev); |
| 795 | void pci_remove_behind_bridge(struct pci_dev *dev); | 799 | void pci_remove_behind_bridge(struct pci_dev *dev); |
| 796 | struct pci_driver *pci_dev_driver(const struct pci_dev *dev); | 800 | struct pci_driver *pci_dev_driver(const struct pci_dev *dev); |
| 801 | int pci_add_dynid(struct pci_driver *drv, | ||
| 802 | unsigned int vendor, unsigned int device, | ||
| 803 | unsigned int subvendor, unsigned int subdevice, | ||
| 804 | unsigned int class, unsigned int class_mask, | ||
| 805 | unsigned long driver_data); | ||
| 797 | const struct pci_device_id *pci_match_id(const struct pci_device_id *ids, | 806 | const struct pci_device_id *pci_match_id(const struct pci_device_id *ids, |
| 798 | struct pci_dev *dev); | 807 | struct pci_dev *dev); |
| 799 | int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, | 808 | int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, |
| @@ -805,6 +814,8 @@ int pci_cfg_space_size_ext(struct pci_dev *dev); | |||
| 805 | int pci_cfg_space_size(struct pci_dev *dev); | 814 | int pci_cfg_space_size(struct pci_dev *dev); |
| 806 | unsigned char pci_bus_max_busnr(struct pci_bus *bus); | 815 | unsigned char pci_bus_max_busnr(struct pci_bus *bus); |
| 807 | 816 | ||
| 817 | int pci_set_vga_state(struct pci_dev *pdev, bool decode, | ||
| 818 | unsigned int command_bits, bool change_bridge); | ||
| 808 | /* kmem_cache style wrapper around pci_alloc_consistent() */ | 819 | /* kmem_cache style wrapper around pci_alloc_consistent() */ |
| 809 | 820 | ||
| 810 | #include <linux/dmapool.h> | 821 | #include <linux/dmapool.h> |
| @@ -1236,6 +1247,9 @@ extern int pci_pci_problems; | |||
| 1236 | extern unsigned long pci_cardbus_io_size; | 1247 | extern unsigned long pci_cardbus_io_size; |
| 1237 | extern unsigned long pci_cardbus_mem_size; | 1248 | extern unsigned long pci_cardbus_mem_size; |
| 1238 | 1249 | ||
| 1250 | extern unsigned long pci_hotplug_io_size; | ||
| 1251 | extern unsigned long pci_hotplug_mem_size; | ||
| 1252 | |||
| 1239 | int pcibios_add_platform_entries(struct pci_dev *dev); | 1253 | int pcibios_add_platform_entries(struct pci_dev *dev); |
| 1240 | void pcibios_disable_device(struct pci_dev *dev); | 1254 | void pcibios_disable_device(struct pci_dev *dev); |
| 1241 | int pcibios_set_pcie_reset_state(struct pci_dev *dev, | 1255 | int pcibios_set_pcie_reset_state(struct pci_dev *dev, |
diff --git a/include/linux/pci_hotplug.h b/include/linux/pci_hotplug.h index 4391741b99dc..652ba797696d 100644 --- a/include/linux/pci_hotplug.h +++ b/include/linux/pci_hotplug.h | |||
| @@ -62,7 +62,8 @@ enum pcie_link_width { | |||
| 62 | }; | 62 | }; |
| 63 | 63 | ||
| 64 | enum pcie_link_speed { | 64 | enum pcie_link_speed { |
| 65 | PCIE_2PT5GB = 0x14, | 65 | PCIE_2_5GB = 0x14, |
| 66 | PCIE_5_0GB = 0x15, | ||
| 66 | PCIE_LNK_SPEED_UNKNOWN = 0xFF, | 67 | PCIE_LNK_SPEED_UNKNOWN = 0xFF, |
| 67 | }; | 68 | }; |
| 68 | 69 | ||
| @@ -226,11 +227,18 @@ struct hotplug_params { | |||
| 226 | #ifdef CONFIG_ACPI | 227 | #ifdef CONFIG_ACPI |
| 227 | #include <acpi/acpi.h> | 228 | #include <acpi/acpi.h> |
| 228 | #include <acpi/acpi_bus.h> | 229 | #include <acpi/acpi_bus.h> |
| 229 | extern acpi_status acpi_get_hp_params_from_firmware(struct pci_bus *bus, | 230 | int pci_get_hp_params(struct pci_dev *dev, struct hotplug_params *hpp); |
| 230 | struct hotplug_params *hpp); | ||
| 231 | int acpi_get_hp_hw_control_from_firmware(struct pci_dev *dev, u32 flags); | 231 | int acpi_get_hp_hw_control_from_firmware(struct pci_dev *dev, u32 flags); |
| 232 | int acpi_pci_check_ejectable(struct pci_bus *pbus, acpi_handle handle); | 232 | int acpi_pci_check_ejectable(struct pci_bus *pbus, acpi_handle handle); |
| 233 | int acpi_pci_detect_ejectable(struct pci_bus *pbus); | 233 | int acpi_pci_detect_ejectable(acpi_handle handle); |
| 234 | #else | ||
| 235 | static inline int pci_get_hp_params(struct pci_dev *dev, | ||
| 236 | struct hotplug_params *hpp) | ||
| 237 | { | ||
| 238 | return -ENODEV; | ||
| 239 | } | ||
| 234 | #endif | 240 | #endif |
| 241 | |||
| 242 | void pci_configure_slot(struct pci_dev *dev); | ||
| 235 | #endif | 243 | #endif |
| 236 | 244 | ||
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 73b46b6b904f..daecca3c8300 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -2,6 +2,9 @@ | |||
| 2 | * PCI Class, Vendor and Device IDs | 2 | * PCI Class, Vendor and Device IDs |
| 3 | * | 3 | * |
| 4 | * Please keep sorted. | 4 | * Please keep sorted. |
| 5 | * | ||
| 6 | * Do not add new entries to this file unless the definitions | ||
| 7 | * are shared between multiple drivers. | ||
| 5 | */ | 8 | */ |
| 6 | 9 | ||
| 7 | /* Device classes and subclasses */ | 10 | /* Device classes and subclasses */ |
| @@ -479,6 +482,9 @@ | |||
| 479 | #define PCI_DEVICE_ID_IBM_ICOM_V2_ONE_PORT_RVX_ONE_PORT_MDM_PCIE 0x0361 | 482 | #define PCI_DEVICE_ID_IBM_ICOM_V2_ONE_PORT_RVX_ONE_PORT_MDM_PCIE 0x0361 |
| 480 | #define PCI_DEVICE_ID_IBM_ICOM_FOUR_PORT_MODEL 0x252 | 483 | #define PCI_DEVICE_ID_IBM_ICOM_FOUR_PORT_MODEL 0x252 |
| 481 | 484 | ||
| 485 | #define PCI_SUBVENDOR_ID_IBM 0x1014 | ||
| 486 | #define PCI_SUBDEVICE_ID_IBM_SATURN_SERIAL_ONE_PORT 0x03d4 | ||
| 487 | |||
| 482 | #define PCI_VENDOR_ID_UNISYS 0x1018 | 488 | #define PCI_VENDOR_ID_UNISYS 0x1018 |
| 483 | #define PCI_DEVICE_ID_UNISYS_DMA_DIRECTOR 0x001C | 489 | #define PCI_DEVICE_ID_UNISYS_DMA_DIRECTOR 0x001C |
| 484 | 490 | ||
| @@ -537,6 +543,8 @@ | |||
| 537 | #define PCI_DEVICE_ID_AMD_8131_BRIDGE 0x7450 | 543 | #define PCI_DEVICE_ID_AMD_8131_BRIDGE 0x7450 |
| 538 | #define PCI_DEVICE_ID_AMD_8131_APIC 0x7451 | 544 | #define PCI_DEVICE_ID_AMD_8131_APIC 0x7451 |
| 539 | #define PCI_DEVICE_ID_AMD_8132_BRIDGE 0x7458 | 545 | #define PCI_DEVICE_ID_AMD_8132_BRIDGE 0x7458 |
| 546 | #define PCI_DEVICE_ID_AMD_HUDSON2_SMBUS 0x780b | ||
| 547 | #define PCI_DEVICE_ID_AMD_CS5535_IDE 0x208F | ||
| 540 | #define PCI_DEVICE_ID_AMD_CS5536_ISA 0x2090 | 548 | #define PCI_DEVICE_ID_AMD_CS5536_ISA 0x2090 |
| 541 | #define PCI_DEVICE_ID_AMD_CS5536_FLASH 0x2091 | 549 | #define PCI_DEVICE_ID_AMD_CS5536_FLASH 0x2091 |
| 542 | #define PCI_DEVICE_ID_AMD_CS5536_AUDIO 0x2093 | 550 | #define PCI_DEVICE_ID_AMD_CS5536_AUDIO 0x2093 |
| @@ -545,9 +553,10 @@ | |||
| 545 | #define PCI_DEVICE_ID_AMD_CS5536_UDC 0x2096 | 553 | #define PCI_DEVICE_ID_AMD_CS5536_UDC 0x2096 |
| 546 | #define PCI_DEVICE_ID_AMD_CS5536_UOC 0x2097 | 554 | #define PCI_DEVICE_ID_AMD_CS5536_UOC 0x2097 |
| 547 | #define PCI_DEVICE_ID_AMD_CS5536_IDE 0x209A | 555 | #define PCI_DEVICE_ID_AMD_CS5536_IDE 0x209A |
| 548 | |||
| 549 | #define PCI_DEVICE_ID_AMD_LX_VIDEO 0x2081 | 556 | #define PCI_DEVICE_ID_AMD_LX_VIDEO 0x2081 |
| 550 | #define PCI_DEVICE_ID_AMD_LX_AES 0x2082 | 557 | #define PCI_DEVICE_ID_AMD_LX_AES 0x2082 |
| 558 | #define PCI_DEVICE_ID_AMD_HUDSON2_IDE 0x780c | ||
| 559 | #define PCI_DEVICE_ID_AMD_HUDSON2_SATA_IDE 0x7800 | ||
| 551 | 560 | ||
| 552 | #define PCI_VENDOR_ID_TRIDENT 0x1023 | 561 | #define PCI_VENDOR_ID_TRIDENT 0x1023 |
| 553 | #define PCI_DEVICE_ID_TRIDENT_4DWAVE_DX 0x2000 | 562 | #define PCI_DEVICE_ID_TRIDENT_4DWAVE_DX 0x2000 |
| @@ -768,6 +777,7 @@ | |||
| 768 | #define PCI_DEVICE_ID_TI_X515 0x8036 | 777 | #define PCI_DEVICE_ID_TI_X515 0x8036 |
| 769 | #define PCI_DEVICE_ID_TI_XX12 0x8039 | 778 | #define PCI_DEVICE_ID_TI_XX12 0x8039 |
| 770 | #define PCI_DEVICE_ID_TI_XX12_FM 0x803b | 779 | #define PCI_DEVICE_ID_TI_XX12_FM 0x803b |
| 780 | #define PCI_DEVICE_ID_TI_XIO2000A 0x8231 | ||
| 771 | #define PCI_DEVICE_ID_TI_1130 0xac12 | 781 | #define PCI_DEVICE_ID_TI_1130 0xac12 |
| 772 | #define PCI_DEVICE_ID_TI_1031 0xac13 | 782 | #define PCI_DEVICE_ID_TI_1031 0xac13 |
| 773 | #define PCI_DEVICE_ID_TI_1131 0xac15 | 783 | #define PCI_DEVICE_ID_TI_1131 0xac15 |
| @@ -877,6 +887,7 @@ | |||
| 877 | #define PCI_DEVICE_ID_APPLE_SH_SUNGEM 0x0051 | 887 | #define PCI_DEVICE_ID_APPLE_SH_SUNGEM 0x0051 |
| 878 | #define PCI_DEVICE_ID_APPLE_U3L_AGP 0x0058 | 888 | #define PCI_DEVICE_ID_APPLE_U3L_AGP 0x0058 |
| 879 | #define PCI_DEVICE_ID_APPLE_U3H_AGP 0x0059 | 889 | #define PCI_DEVICE_ID_APPLE_U3H_AGP 0x0059 |
| 890 | #define PCI_DEVICE_ID_APPLE_U4_PCIE 0x005b | ||
| 880 | #define PCI_DEVICE_ID_APPLE_IPID2_AGP 0x0066 | 891 | #define PCI_DEVICE_ID_APPLE_IPID2_AGP 0x0066 |
| 881 | #define PCI_DEVICE_ID_APPLE_IPID2_ATA 0x0069 | 892 | #define PCI_DEVICE_ID_APPLE_IPID2_ATA 0x0069 |
| 882 | #define PCI_DEVICE_ID_APPLE_IPID2_FW 0x006a | 893 | #define PCI_DEVICE_ID_APPLE_IPID2_FW 0x006a |
| @@ -1521,6 +1532,8 @@ | |||
| 1521 | #define PCI_DEVICE_ID_ARTOP_ATP860R 0x0007 | 1532 | #define PCI_DEVICE_ID_ARTOP_ATP860R 0x0007 |
| 1522 | #define PCI_DEVICE_ID_ARTOP_ATP865 0x0008 | 1533 | #define PCI_DEVICE_ID_ARTOP_ATP865 0x0008 |
| 1523 | #define PCI_DEVICE_ID_ARTOP_ATP865R 0x0009 | 1534 | #define PCI_DEVICE_ID_ARTOP_ATP865R 0x0009 |
| 1535 | #define PCI_DEVICE_ID_ARTOP_ATP867A 0x000A | ||
| 1536 | #define PCI_DEVICE_ID_ARTOP_ATP867B 0x000B | ||
| 1524 | #define PCI_DEVICE_ID_ARTOP_AEC7610 0x8002 | 1537 | #define PCI_DEVICE_ID_ARTOP_AEC7610 0x8002 |
| 1525 | #define PCI_DEVICE_ID_ARTOP_AEC7612UW 0x8010 | 1538 | #define PCI_DEVICE_ID_ARTOP_AEC7612UW 0x8010 |
| 1526 | #define PCI_DEVICE_ID_ARTOP_AEC7612U 0x8020 | 1539 | #define PCI_DEVICE_ID_ARTOP_AEC7612U 0x8020 |
| @@ -1620,6 +1633,8 @@ | |||
| 1620 | #define PCI_DEVICE_ID_O2_6730 0x673a | 1633 | #define PCI_DEVICE_ID_O2_6730 0x673a |
| 1621 | #define PCI_DEVICE_ID_O2_6832 0x6832 | 1634 | #define PCI_DEVICE_ID_O2_6832 0x6832 |
| 1622 | #define PCI_DEVICE_ID_O2_6836 0x6836 | 1635 | #define PCI_DEVICE_ID_O2_6836 0x6836 |
| 1636 | #define PCI_DEVICE_ID_O2_6812 0x6872 | ||
| 1637 | #define PCI_DEVICE_ID_O2_6933 0x6933 | ||
| 1623 | 1638 | ||
| 1624 | #define PCI_VENDOR_ID_3DFX 0x121a | 1639 | #define PCI_VENDOR_ID_3DFX 0x121a |
| 1625 | #define PCI_DEVICE_ID_3DFX_VOODOO 0x0001 | 1640 | #define PCI_DEVICE_ID_3DFX_VOODOO 0x0001 |
| @@ -1943,6 +1958,8 @@ | |||
| 1943 | #define PCI_DEVICE_ID_LAVA_DSERIAL 0x0100 /* 2x 16550 */ | 1958 | #define PCI_DEVICE_ID_LAVA_DSERIAL 0x0100 /* 2x 16550 */ |
| 1944 | #define PCI_DEVICE_ID_LAVA_QUATRO_A 0x0101 /* 2x 16550, half of 4 port */ | 1959 | #define PCI_DEVICE_ID_LAVA_QUATRO_A 0x0101 /* 2x 16550, half of 4 port */ |
| 1945 | #define PCI_DEVICE_ID_LAVA_QUATRO_B 0x0102 /* 2x 16550, half of 4 port */ | 1960 | #define PCI_DEVICE_ID_LAVA_QUATRO_B 0x0102 /* 2x 16550, half of 4 port */ |
| 1961 | #define PCI_DEVICE_ID_LAVA_QUATTRO_A 0x0120 /* 2x 16550A, half of 4 port */ | ||
| 1962 | #define PCI_DEVICE_ID_LAVA_QUATTRO_B 0x0121 /* 2x 16550A, half of 4 port */ | ||
| 1946 | #define PCI_DEVICE_ID_LAVA_OCTO_A 0x0180 /* 4x 16550A, half of 8 port */ | 1963 | #define PCI_DEVICE_ID_LAVA_OCTO_A 0x0180 /* 4x 16550A, half of 8 port */ |
| 1947 | #define PCI_DEVICE_ID_LAVA_OCTO_B 0x0181 /* 4x 16550A, half of 8 port */ | 1964 | #define PCI_DEVICE_ID_LAVA_OCTO_B 0x0181 /* 4x 16550A, half of 8 port */ |
| 1948 | #define PCI_DEVICE_ID_LAVA_PORT_PLUS 0x0200 /* 2x 16650 */ | 1965 | #define PCI_DEVICE_ID_LAVA_PORT_PLUS 0x0200 /* 2x 16650 */ |
| @@ -1984,6 +2001,8 @@ | |||
| 1984 | 2001 | ||
| 1985 | #define PCI_VENDOR_ID_SAMSUNG 0x144d | 2002 | #define PCI_VENDOR_ID_SAMSUNG 0x144d |
| 1986 | 2003 | ||
| 2004 | #define PCI_VENDOR_ID_GIGABYTE 0x1458 | ||
| 2005 | |||
| 1987 | #define PCI_VENDOR_ID_AMBIT 0x1468 | 2006 | #define PCI_VENDOR_ID_AMBIT 0x1468 |
| 1988 | 2007 | ||
| 1989 | #define PCI_VENDOR_ID_MYRICOM 0x14c1 | 2008 | #define PCI_VENDOR_ID_MYRICOM 0x14c1 |
| @@ -2062,7 +2081,6 @@ | |||
| 2062 | #define PCI_DEVICE_ID_TIGON3_5787M 0x1693 | 2081 | #define PCI_DEVICE_ID_TIGON3_5787M 0x1693 |
| 2063 | #define PCI_DEVICE_ID_TIGON3_5782 0x1696 | 2082 | #define PCI_DEVICE_ID_TIGON3_5782 0x1696 |
| 2064 | #define PCI_DEVICE_ID_TIGON3_5784 0x1698 | 2083 | #define PCI_DEVICE_ID_TIGON3_5784 0x1698 |
| 2065 | #define PCI_DEVICE_ID_TIGON3_5785 0x1699 | ||
| 2066 | #define PCI_DEVICE_ID_TIGON3_5786 0x169a | 2084 | #define PCI_DEVICE_ID_TIGON3_5786 0x169a |
| 2067 | #define PCI_DEVICE_ID_TIGON3_5787 0x169b | 2085 | #define PCI_DEVICE_ID_TIGON3_5787 0x169b |
| 2068 | #define PCI_DEVICE_ID_TIGON3_5788 0x169c | 2086 | #define PCI_DEVICE_ID_TIGON3_5788 0x169c |
| @@ -2149,6 +2167,10 @@ | |||
| 2149 | #define PCI_DEVICE_ID_ADDIDATA_APCI7420_3 0x700D | 2167 | #define PCI_DEVICE_ID_ADDIDATA_APCI7420_3 0x700D |
| 2150 | #define PCI_DEVICE_ID_ADDIDATA_APCI7300_3 0x700E | 2168 | #define PCI_DEVICE_ID_ADDIDATA_APCI7300_3 0x700E |
| 2151 | #define PCI_DEVICE_ID_ADDIDATA_APCI7800_3 0x700F | 2169 | #define PCI_DEVICE_ID_ADDIDATA_APCI7800_3 0x700F |
| 2170 | #define PCI_DEVICE_ID_ADDIDATA_APCIe7300 0x7010 | ||
| 2171 | #define PCI_DEVICE_ID_ADDIDATA_APCIe7420 0x7011 | ||
| 2172 | #define PCI_DEVICE_ID_ADDIDATA_APCIe7500 0x7012 | ||
| 2173 | #define PCI_DEVICE_ID_ADDIDATA_APCIe7800 0x7013 | ||
| 2152 | 2174 | ||
| 2153 | #define PCI_VENDOR_ID_PDC 0x15e9 | 2175 | #define PCI_VENDOR_ID_PDC 0x15e9 |
| 2154 | 2176 | ||
| @@ -2515,6 +2537,16 @@ | |||
| 2515 | #define PCI_DEVICE_ID_INTEL_E7525_MCH 0x359e | 2537 | #define PCI_DEVICE_ID_INTEL_E7525_MCH 0x359e |
| 2516 | #define PCI_DEVICE_ID_INTEL_IOAT_CNB 0x360b | 2538 | #define PCI_DEVICE_ID_INTEL_IOAT_CNB 0x360b |
| 2517 | #define PCI_DEVICE_ID_INTEL_FBD_CNB 0x360c | 2539 | #define PCI_DEVICE_ID_INTEL_FBD_CNB 0x360c |
| 2540 | #define PCI_DEVICE_ID_INTEL_IOAT_JSF0 0x3710 | ||
| 2541 | #define PCI_DEVICE_ID_INTEL_IOAT_JSF1 0x3711 | ||
| 2542 | #define PCI_DEVICE_ID_INTEL_IOAT_JSF2 0x3712 | ||
| 2543 | #define PCI_DEVICE_ID_INTEL_IOAT_JSF3 0x3713 | ||
| 2544 | #define PCI_DEVICE_ID_INTEL_IOAT_JSF4 0x3714 | ||
| 2545 | #define PCI_DEVICE_ID_INTEL_IOAT_JSF5 0x3715 | ||
| 2546 | #define PCI_DEVICE_ID_INTEL_IOAT_JSF6 0x3716 | ||
| 2547 | #define PCI_DEVICE_ID_INTEL_IOAT_JSF7 0x3717 | ||
| 2548 | #define PCI_DEVICE_ID_INTEL_IOAT_JSF8 0x3718 | ||
| 2549 | #define PCI_DEVICE_ID_INTEL_IOAT_JSF9 0x3719 | ||
| 2518 | #define PCI_DEVICE_ID_INTEL_ICH10_0 0x3a14 | 2550 | #define PCI_DEVICE_ID_INTEL_ICH10_0 0x3a14 |
| 2519 | #define PCI_DEVICE_ID_INTEL_ICH10_1 0x3a16 | 2551 | #define PCI_DEVICE_ID_INTEL_ICH10_1 0x3a16 |
| 2520 | #define PCI_DEVICE_ID_INTEL_ICH10_2 0x3a18 | 2552 | #define PCI_DEVICE_ID_INTEL_ICH10_2 0x3a18 |
diff --git a/include/linux/pci_regs.h b/include/linux/pci_regs.h index fcaee42c7ac2..dd0bed4f1cf0 100644 --- a/include/linux/pci_regs.h +++ b/include/linux/pci_regs.h | |||
| @@ -42,6 +42,7 @@ | |||
| 42 | #define PCI_COMMAND_INTX_DISABLE 0x400 /* INTx Emulation Disable */ | 42 | #define PCI_COMMAND_INTX_DISABLE 0x400 /* INTx Emulation Disable */ |
| 43 | 43 | ||
| 44 | #define PCI_STATUS 0x06 /* 16 bits */ | 44 | #define PCI_STATUS 0x06 /* 16 bits */ |
| 45 | #define PCI_STATUS_INTERRUPT 0x08 /* Interrupt status */ | ||
| 45 | #define PCI_STATUS_CAP_LIST 0x10 /* Support Capability List */ | 46 | #define PCI_STATUS_CAP_LIST 0x10 /* Support Capability List */ |
| 46 | #define PCI_STATUS_66MHZ 0x20 /* Support 66 Mhz PCI 2.1 bus */ | 47 | #define PCI_STATUS_66MHZ 0x20 /* Support 66 Mhz PCI 2.1 bus */ |
| 47 | #define PCI_STATUS_UDF 0x40 /* Support User Definable Features [obsolete] */ | 48 | #define PCI_STATUS_UDF 0x40 /* Support User Definable Features [obsolete] */ |
diff --git a/include/linux/percpu-defs.h b/include/linux/percpu-defs.h index 68438e18fff4..9bd03193ecd4 100644 --- a/include/linux/percpu-defs.h +++ b/include/linux/percpu-defs.h | |||
| @@ -10,22 +10,70 @@ | |||
| 10 | /* | 10 | /* |
| 11 | * Base implementations of per-CPU variable declarations and definitions, where | 11 | * Base implementations of per-CPU variable declarations and definitions, where |
| 12 | * the section in which the variable is to be placed is provided by the | 12 | * the section in which the variable is to be placed is provided by the |
| 13 | * 'section' argument. This may be used to affect the parameters governing the | 13 | * 'sec' argument. This may be used to affect the parameters governing the |
| 14 | * variable's storage. | 14 | * variable's storage. |
| 15 | * | 15 | * |
| 16 | * NOTE! The sections for the DECLARE and for the DEFINE must match, lest | 16 | * NOTE! The sections for the DECLARE and for the DEFINE must match, lest |
| 17 | * linkage errors occur due the compiler generating the wrong code to access | 17 | * linkage errors occur due the compiler generating the wrong code to access |
| 18 | * that section. | 18 | * that section. |
| 19 | */ | 19 | */ |
| 20 | #define DECLARE_PER_CPU_SECTION(type, name, section) \ | 20 | #define __PCPU_ATTRS(sec) \ |
| 21 | extern \ | 21 | __attribute__((section(PER_CPU_BASE_SECTION sec))) \ |
| 22 | __attribute__((__section__(PER_CPU_BASE_SECTION section))) \ | 22 | PER_CPU_ATTRIBUTES |
| 23 | PER_CPU_ATTRIBUTES __typeof__(type) per_cpu__##name | 23 | |
| 24 | 24 | #define __PCPU_DUMMY_ATTRS \ | |
| 25 | #define DEFINE_PER_CPU_SECTION(type, name, section) \ | 25 | __attribute__((section(".discard"), unused)) |
| 26 | __attribute__((__section__(PER_CPU_BASE_SECTION section))) \ | 26 | |
| 27 | PER_CPU_ATTRIBUTES PER_CPU_DEF_ATTRIBUTES \ | 27 | /* |
| 28 | * s390 and alpha modules require percpu variables to be defined as | ||
| 29 | * weak to force the compiler to generate GOT based external | ||
| 30 | * references for them. This is necessary because percpu sections | ||
| 31 | * will be located outside of the usually addressable area. | ||
| 32 | * | ||
| 33 | * This definition puts the following two extra restrictions when | ||
| 34 | * defining percpu variables. | ||
| 35 | * | ||
| 36 | * 1. The symbol must be globally unique, even the static ones. | ||
| 37 | * 2. Static percpu variables cannot be defined inside a function. | ||
| 38 | * | ||
| 39 | * Archs which need weak percpu definitions should define | ||
| 40 | * ARCH_NEEDS_WEAK_PER_CPU in asm/percpu.h when necessary. | ||
| 41 | * | ||
| 42 | * To ensure that the generic code observes the above two | ||
| 43 | * restrictions, if CONFIG_DEBUG_FORCE_WEAK_PER_CPU is set weak | ||
| 44 | * definition is used for all cases. | ||
| 45 | */ | ||
| 46 | #if defined(ARCH_NEEDS_WEAK_PER_CPU) || defined(CONFIG_DEBUG_FORCE_WEAK_PER_CPU) | ||
| 47 | /* | ||
| 48 | * __pcpu_scope_* dummy variable is used to enforce scope. It | ||
| 49 | * receives the static modifier when it's used in front of | ||
| 50 | * DEFINE_PER_CPU() and will trigger build failure if | ||
| 51 | * DECLARE_PER_CPU() is used for the same variable. | ||
| 52 | * | ||
| 53 | * __pcpu_unique_* dummy variable is used to enforce symbol uniqueness | ||
| 54 | * such that hidden weak symbol collision, which will cause unrelated | ||
| 55 | * variables to share the same address, can be detected during build. | ||
| 56 | */ | ||
| 57 | #define DECLARE_PER_CPU_SECTION(type, name, sec) \ | ||
| 58 | extern __PCPU_DUMMY_ATTRS char __pcpu_scope_##name; \ | ||
| 59 | extern __PCPU_ATTRS(sec) __typeof__(type) per_cpu__##name | ||
| 60 | |||
| 61 | #define DEFINE_PER_CPU_SECTION(type, name, sec) \ | ||
| 62 | __PCPU_DUMMY_ATTRS char __pcpu_scope_##name; \ | ||
| 63 | __PCPU_DUMMY_ATTRS char __pcpu_unique_##name; \ | ||
| 64 | __PCPU_ATTRS(sec) PER_CPU_DEF_ATTRIBUTES __weak \ | ||
| 28 | __typeof__(type) per_cpu__##name | 65 | __typeof__(type) per_cpu__##name |
| 66 | #else | ||
| 67 | /* | ||
| 68 | * Normal declaration and definition macros. | ||
| 69 | */ | ||
| 70 | #define DECLARE_PER_CPU_SECTION(type, name, sec) \ | ||
| 71 | extern __PCPU_ATTRS(sec) __typeof__(type) per_cpu__##name | ||
| 72 | |||
| 73 | #define DEFINE_PER_CPU_SECTION(type, name, sec) \ | ||
| 74 | __PCPU_ATTRS(sec) PER_CPU_DEF_ATTRIBUTES \ | ||
| 75 | __typeof__(type) per_cpu__##name | ||
| 76 | #endif | ||
| 29 | 77 | ||
| 30 | /* | 78 | /* |
| 31 | * Variant on the per-CPU variable declaration/definition theme used for | 79 | * Variant on the per-CPU variable declaration/definition theme used for |
| @@ -66,14 +114,24 @@ | |||
| 66 | DEFINE_PER_CPU_SECTION(type, name, PER_CPU_SHARED_ALIGNED_SECTION) \ | 114 | DEFINE_PER_CPU_SECTION(type, name, PER_CPU_SHARED_ALIGNED_SECTION) \ |
| 67 | ____cacheline_aligned_in_smp | 115 | ____cacheline_aligned_in_smp |
| 68 | 116 | ||
| 117 | #define DECLARE_PER_CPU_ALIGNED(type, name) \ | ||
| 118 | DECLARE_PER_CPU_SECTION(type, name, PER_CPU_ALIGNED_SECTION) \ | ||
| 119 | ____cacheline_aligned | ||
| 120 | |||
| 121 | #define DEFINE_PER_CPU_ALIGNED(type, name) \ | ||
| 122 | DEFINE_PER_CPU_SECTION(type, name, PER_CPU_ALIGNED_SECTION) \ | ||
| 123 | ____cacheline_aligned | ||
| 124 | |||
| 69 | /* | 125 | /* |
| 70 | * Declaration/definition used for per-CPU variables that must be page aligned. | 126 | * Declaration/definition used for per-CPU variables that must be page aligned. |
| 71 | */ | 127 | */ |
| 72 | #define DECLARE_PER_CPU_PAGE_ALIGNED(type, name) \ | 128 | #define DECLARE_PER_CPU_PAGE_ALIGNED(type, name) \ |
| 73 | DECLARE_PER_CPU_SECTION(type, name, ".page_aligned") | 129 | DECLARE_PER_CPU_SECTION(type, name, ".page_aligned") \ |
| 130 | __aligned(PAGE_SIZE) | ||
| 74 | 131 | ||
| 75 | #define DEFINE_PER_CPU_PAGE_ALIGNED(type, name) \ | 132 | #define DEFINE_PER_CPU_PAGE_ALIGNED(type, name) \ |
| 76 | DEFINE_PER_CPU_SECTION(type, name, ".page_aligned") | 133 | DEFINE_PER_CPU_SECTION(type, name, ".page_aligned") \ |
| 134 | __aligned(PAGE_SIZE) | ||
| 77 | 135 | ||
| 78 | /* | 136 | /* |
| 79 | * Intermodule exports for per-CPU variables. | 137 | * Intermodule exports for per-CPU variables. |
diff --git a/include/linux/percpu.h b/include/linux/percpu.h index 26fd9d12f050..878836ca999c 100644 --- a/include/linux/percpu.h +++ b/include/linux/percpu.h | |||
| @@ -34,7 +34,7 @@ | |||
| 34 | 34 | ||
| 35 | #ifdef CONFIG_SMP | 35 | #ifdef CONFIG_SMP |
| 36 | 36 | ||
| 37 | #ifdef CONFIG_HAVE_DYNAMIC_PER_CPU_AREA | 37 | #ifndef CONFIG_HAVE_LEGACY_PER_CPU_AREA |
| 38 | 38 | ||
| 39 | /* minimum unit size, also is the maximum supported allocation size */ | 39 | /* minimum unit size, also is the maximum supported allocation size */ |
| 40 | #define PCPU_MIN_UNIT_SIZE PFN_ALIGN(64 << 10) | 40 | #define PCPU_MIN_UNIT_SIZE PFN_ALIGN(64 << 10) |
| @@ -57,19 +57,70 @@ | |||
| 57 | #endif | 57 | #endif |
| 58 | 58 | ||
| 59 | extern void *pcpu_base_addr; | 59 | extern void *pcpu_base_addr; |
| 60 | extern const unsigned long *pcpu_unit_offsets; | ||
| 60 | 61 | ||
| 61 | typedef struct page * (*pcpu_get_page_fn_t)(unsigned int cpu, int pageno); | 62 | struct pcpu_group_info { |
| 62 | typedef void (*pcpu_populate_pte_fn_t)(unsigned long addr); | 63 | int nr_units; /* aligned # of units */ |
| 64 | unsigned long base_offset; /* base address offset */ | ||
| 65 | unsigned int *cpu_map; /* unit->cpu map, empty | ||
| 66 | * entries contain NR_CPUS */ | ||
| 67 | }; | ||
| 68 | |||
| 69 | struct pcpu_alloc_info { | ||
| 70 | size_t static_size; | ||
| 71 | size_t reserved_size; | ||
| 72 | size_t dyn_size; | ||
| 73 | size_t unit_size; | ||
| 74 | size_t atom_size; | ||
| 75 | size_t alloc_size; | ||
| 76 | size_t __ai_size; /* internal, don't use */ | ||
| 77 | int nr_groups; /* 0 if grouping unnecessary */ | ||
| 78 | struct pcpu_group_info groups[]; | ||
| 79 | }; | ||
| 63 | 80 | ||
| 64 | extern size_t __init pcpu_setup_first_chunk(pcpu_get_page_fn_t get_page_fn, | 81 | enum pcpu_fc { |
| 65 | size_t static_size, size_t reserved_size, | 82 | PCPU_FC_AUTO, |
| 66 | ssize_t dyn_size, ssize_t unit_size, | 83 | PCPU_FC_EMBED, |
| 67 | void *base_addr, | 84 | PCPU_FC_PAGE, |
| 68 | pcpu_populate_pte_fn_t populate_pte_fn); | ||
| 69 | 85 | ||
| 70 | extern ssize_t __init pcpu_embed_first_chunk( | 86 | PCPU_FC_NR, |
| 71 | size_t static_size, size_t reserved_size, | 87 | }; |
| 72 | ssize_t dyn_size, ssize_t unit_size); | 88 | extern const char *pcpu_fc_names[PCPU_FC_NR]; |
| 89 | |||
| 90 | extern enum pcpu_fc pcpu_chosen_fc; | ||
| 91 | |||
| 92 | typedef void * (*pcpu_fc_alloc_fn_t)(unsigned int cpu, size_t size, | ||
| 93 | size_t align); | ||
| 94 | typedef void (*pcpu_fc_free_fn_t)(void *ptr, size_t size); | ||
| 95 | typedef void (*pcpu_fc_populate_pte_fn_t)(unsigned long addr); | ||
| 96 | typedef int (pcpu_fc_cpu_distance_fn_t)(unsigned int from, unsigned int to); | ||
| 97 | |||
| 98 | extern struct pcpu_alloc_info * __init pcpu_alloc_alloc_info(int nr_groups, | ||
| 99 | int nr_units); | ||
| 100 | extern void __init pcpu_free_alloc_info(struct pcpu_alloc_info *ai); | ||
| 101 | |||
| 102 | extern struct pcpu_alloc_info * __init pcpu_build_alloc_info( | ||
| 103 | size_t reserved_size, ssize_t dyn_size, | ||
| 104 | size_t atom_size, | ||
| 105 | pcpu_fc_cpu_distance_fn_t cpu_distance_fn); | ||
| 106 | |||
| 107 | extern int __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, | ||
| 108 | void *base_addr); | ||
| 109 | |||
| 110 | #ifdef CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK | ||
| 111 | extern int __init pcpu_embed_first_chunk(size_t reserved_size, ssize_t dyn_size, | ||
| 112 | size_t atom_size, | ||
| 113 | pcpu_fc_cpu_distance_fn_t cpu_distance_fn, | ||
| 114 | pcpu_fc_alloc_fn_t alloc_fn, | ||
| 115 | pcpu_fc_free_fn_t free_fn); | ||
| 116 | #endif | ||
| 117 | |||
| 118 | #ifdef CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK | ||
| 119 | extern int __init pcpu_page_first_chunk(size_t reserved_size, | ||
| 120 | pcpu_fc_alloc_fn_t alloc_fn, | ||
| 121 | pcpu_fc_free_fn_t free_fn, | ||
| 122 | pcpu_fc_populate_pte_fn_t populate_pte_fn); | ||
| 123 | #endif | ||
| 73 | 124 | ||
| 74 | /* | 125 | /* |
| 75 | * Use this to get to a cpu's version of the per-cpu object | 126 | * Use this to get to a cpu's version of the per-cpu object |
| @@ -80,7 +131,7 @@ extern ssize_t __init pcpu_embed_first_chunk( | |||
| 80 | 131 | ||
| 81 | extern void *__alloc_reserved_percpu(size_t size, size_t align); | 132 | extern void *__alloc_reserved_percpu(size_t size, size_t align); |
| 82 | 133 | ||
| 83 | #else /* CONFIG_HAVE_DYNAMIC_PER_CPU_AREA */ | 134 | #else /* CONFIG_HAVE_LEGACY_PER_CPU_AREA */ |
| 84 | 135 | ||
| 85 | struct percpu_data { | 136 | struct percpu_data { |
| 86 | void *ptrs[1]; | 137 | void *ptrs[1]; |
| @@ -99,11 +150,15 @@ struct percpu_data { | |||
| 99 | (__typeof__(ptr))__p->ptrs[(cpu)]; \ | 150 | (__typeof__(ptr))__p->ptrs[(cpu)]; \ |
| 100 | }) | 151 | }) |
| 101 | 152 | ||
| 102 | #endif /* CONFIG_HAVE_DYNAMIC_PER_CPU_AREA */ | 153 | #endif /* CONFIG_HAVE_LEGACY_PER_CPU_AREA */ |
| 103 | 154 | ||
| 104 | extern void *__alloc_percpu(size_t size, size_t align); | 155 | extern void *__alloc_percpu(size_t size, size_t align); |
| 105 | extern void free_percpu(void *__pdata); | 156 | extern void free_percpu(void *__pdata); |
| 106 | 157 | ||
| 158 | #ifndef CONFIG_HAVE_SETUP_PER_CPU_AREA | ||
| 159 | extern void __init setup_per_cpu_areas(void); | ||
| 160 | #endif | ||
| 161 | |||
| 107 | #else /* CONFIG_SMP */ | 162 | #else /* CONFIG_SMP */ |
| 108 | 163 | ||
| 109 | #define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); (ptr); }) | 164 | #define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); (ptr); }) |
| @@ -124,6 +179,13 @@ static inline void free_percpu(void *p) | |||
| 124 | kfree(p); | 179 | kfree(p); |
| 125 | } | 180 | } |
| 126 | 181 | ||
| 182 | static inline void __init setup_per_cpu_areas(void) { } | ||
| 183 | |||
| 184 | static inline void *pcpu_lpage_remapped(void *kaddr) | ||
| 185 | { | ||
| 186 | return NULL; | ||
| 187 | } | ||
| 188 | |||
| 127 | #endif /* CONFIG_SMP */ | 189 | #endif /* CONFIG_SMP */ |
| 128 | 190 | ||
| 129 | #define alloc_percpu(type) (type *)__alloc_percpu(sizeof(type), \ | 191 | #define alloc_percpu(type) (type *)__alloc_percpu(sizeof(type), \ |
diff --git a/include/linux/perf_counter.h b/include/linux/perf_counter.h index b53f7006cc4e..e3fb25606706 100644 --- a/include/linux/perf_counter.h +++ b/include/linux/perf_counter.h | |||
| @@ -1,5 +1,9 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Performance counters: | 2 | * NOTE: this file will be removed in a future kernel release, it is |
| 3 | * provided as a courtesy copy of user-space code that relies on the | ||
| 4 | * old (pre-rename) symbols and constants. | ||
| 5 | * | ||
| 6 | * Performance events: | ||
| 3 | * | 7 | * |
| 4 | * Copyright (C) 2008-2009, Thomas Gleixner <tglx@linutronix.de> | 8 | * Copyright (C) 2008-2009, Thomas Gleixner <tglx@linutronix.de> |
| 5 | * Copyright (C) 2008-2009, Red Hat, Inc., Ingo Molnar | 9 | * Copyright (C) 2008-2009, Red Hat, Inc., Ingo Molnar |
| @@ -102,6 +106,8 @@ enum perf_sw_ids { | |||
| 102 | PERF_COUNT_SW_CPU_MIGRATIONS = 4, | 106 | PERF_COUNT_SW_CPU_MIGRATIONS = 4, |
| 103 | PERF_COUNT_SW_PAGE_FAULTS_MIN = 5, | 107 | PERF_COUNT_SW_PAGE_FAULTS_MIN = 5, |
| 104 | PERF_COUNT_SW_PAGE_FAULTS_MAJ = 6, | 108 | PERF_COUNT_SW_PAGE_FAULTS_MAJ = 6, |
| 109 | PERF_COUNT_SW_ALIGNMENT_FAULTS = 7, | ||
| 110 | PERF_COUNT_SW_EMULATION_FAULTS = 8, | ||
| 105 | 111 | ||
| 106 | PERF_COUNT_SW_MAX, /* non-ABI */ | 112 | PERF_COUNT_SW_MAX, /* non-ABI */ |
| 107 | }; | 113 | }; |
| @@ -131,19 +137,19 @@ enum perf_counter_sample_format { | |||
| 131 | * as specified by attr.read_format: | 137 | * as specified by attr.read_format: |
| 132 | * | 138 | * |
| 133 | * struct read_format { | 139 | * struct read_format { |
| 134 | * { u64 value; | 140 | * { u64 value; |
| 135 | * { u64 time_enabled; } && PERF_FORMAT_ENABLED | 141 | * { u64 time_enabled; } && PERF_FORMAT_ENABLED |
| 136 | * { u64 time_running; } && PERF_FORMAT_RUNNING | 142 | * { u64 time_running; } && PERF_FORMAT_RUNNING |
| 137 | * { u64 id; } && PERF_FORMAT_ID | 143 | * { u64 id; } && PERF_FORMAT_ID |
| 138 | * } && !PERF_FORMAT_GROUP | 144 | * } && !PERF_FORMAT_GROUP |
| 139 | * | 145 | * |
| 140 | * { u64 nr; | 146 | * { u64 nr; |
| 141 | * { u64 time_enabled; } && PERF_FORMAT_ENABLED | 147 | * { u64 time_enabled; } && PERF_FORMAT_ENABLED |
| 142 | * { u64 time_running; } && PERF_FORMAT_RUNNING | 148 | * { u64 time_running; } && PERF_FORMAT_RUNNING |
| 143 | * { u64 value; | 149 | * { u64 value; |
| 144 | * { u64 id; } && PERF_FORMAT_ID | 150 | * { u64 id; } && PERF_FORMAT_ID |
| 145 | * } cntr[nr]; | 151 | * } cntr[nr]; |
| 146 | * } && PERF_FORMAT_GROUP | 152 | * } && PERF_FORMAT_GROUP |
| 147 | * }; | 153 | * }; |
| 148 | */ | 154 | */ |
| 149 | enum perf_counter_read_format { | 155 | enum perf_counter_read_format { |
| @@ -199,10 +205,14 @@ struct perf_counter_attr { | |||
| 199 | inherit_stat : 1, /* per task counts */ | 205 | inherit_stat : 1, /* per task counts */ |
| 200 | enable_on_exec : 1, /* next exec enables */ | 206 | enable_on_exec : 1, /* next exec enables */ |
| 201 | task : 1, /* trace fork/exit */ | 207 | task : 1, /* trace fork/exit */ |
| 208 | watermark : 1, /* wakeup_watermark */ | ||
| 202 | 209 | ||
| 203 | __reserved_1 : 50; | 210 | __reserved_1 : 49; |
| 204 | 211 | ||
| 205 | __u32 wakeup_events; /* wakeup every n events */ | 212 | union { |
| 213 | __u32 wakeup_events; /* wakeup every n events */ | ||
| 214 | __u32 wakeup_watermark; /* bytes before wakeup */ | ||
| 215 | }; | ||
| 206 | __u32 __reserved_2; | 216 | __u32 __reserved_2; |
| 207 | 217 | ||
| 208 | __u64 __reserved_3; | 218 | __u64 __reserved_3; |
| @@ -216,6 +226,8 @@ struct perf_counter_attr { | |||
| 216 | #define PERF_COUNTER_IOC_REFRESH _IO ('$', 2) | 226 | #define PERF_COUNTER_IOC_REFRESH _IO ('$', 2) |
| 217 | #define PERF_COUNTER_IOC_RESET _IO ('$', 3) | 227 | #define PERF_COUNTER_IOC_RESET _IO ('$', 3) |
| 218 | #define PERF_COUNTER_IOC_PERIOD _IOW('$', 4, u64) | 228 | #define PERF_COUNTER_IOC_PERIOD _IOW('$', 4, u64) |
| 229 | #define PERF_COUNTER_IOC_SET_OUTPUT _IO ('$', 5) | ||
| 230 | #define PERF_COUNTER_IOC_SET_FILTER _IOW('$', 6, char *) | ||
| 219 | 231 | ||
| 220 | enum perf_counter_ioc_flags { | 232 | enum perf_counter_ioc_flags { |
| 221 | PERF_IOC_FLAG_GROUP = 1U << 0, | 233 | PERF_IOC_FLAG_GROUP = 1U << 0, |
| @@ -309,9 +321,9 @@ enum perf_event_type { | |||
| 309 | 321 | ||
| 310 | /* | 322 | /* |
| 311 | * struct { | 323 | * struct { |
| 312 | * struct perf_event_header header; | 324 | * struct perf_event_header header; |
| 313 | * u64 id; | 325 | * u64 id; |
| 314 | * u64 lost; | 326 | * u64 lost; |
| 315 | * }; | 327 | * }; |
| 316 | */ | 328 | */ |
| 317 | PERF_EVENT_LOST = 2, | 329 | PERF_EVENT_LOST = 2, |
| @@ -331,6 +343,7 @@ enum perf_event_type { | |||
| 331 | * struct perf_event_header header; | 343 | * struct perf_event_header header; |
| 332 | * u32 pid, ppid; | 344 | * u32 pid, ppid; |
| 333 | * u32 tid, ptid; | 345 | * u32 tid, ptid; |
| 346 | * u64 time; | ||
| 334 | * }; | 347 | * }; |
| 335 | */ | 348 | */ |
| 336 | PERF_EVENT_EXIT = 4, | 349 | PERF_EVENT_EXIT = 4, |
| @@ -351,16 +364,17 @@ enum perf_event_type { | |||
| 351 | * struct perf_event_header header; | 364 | * struct perf_event_header header; |
| 352 | * u32 pid, ppid; | 365 | * u32 pid, ppid; |
| 353 | * u32 tid, ptid; | 366 | * u32 tid, ptid; |
| 367 | * u64 time; | ||
| 354 | * }; | 368 | * }; |
| 355 | */ | 369 | */ |
| 356 | PERF_EVENT_FORK = 7, | 370 | PERF_EVENT_FORK = 7, |
| 357 | 371 | ||
| 358 | /* | 372 | /* |
| 359 | * struct { | 373 | * struct { |
| 360 | * struct perf_event_header header; | 374 | * struct perf_event_header header; |
| 361 | * u32 pid, tid; | 375 | * u32 pid, tid; |
| 362 | * | 376 | * |
| 363 | * struct read_format values; | 377 | * struct read_format values; |
| 364 | * }; | 378 | * }; |
| 365 | */ | 379 | */ |
| 366 | PERF_EVENT_READ = 8, | 380 | PERF_EVENT_READ = 8, |
| @@ -376,23 +390,23 @@ enum perf_event_type { | |||
| 376 | * { u64 id; } && PERF_SAMPLE_ID | 390 | * { u64 id; } && PERF_SAMPLE_ID |
| 377 | * { u64 stream_id;} && PERF_SAMPLE_STREAM_ID | 391 | * { u64 stream_id;} && PERF_SAMPLE_STREAM_ID |
| 378 | * { u32 cpu, res; } && PERF_SAMPLE_CPU | 392 | * { u32 cpu, res; } && PERF_SAMPLE_CPU |
| 379 | * { u64 period; } && PERF_SAMPLE_PERIOD | 393 | * { u64 period; } && PERF_SAMPLE_PERIOD |
| 380 | * | 394 | * |
| 381 | * { struct read_format values; } && PERF_SAMPLE_READ | 395 | * { struct read_format values; } && PERF_SAMPLE_READ |
| 382 | * | 396 | * |
| 383 | * { u64 nr, | 397 | * { u64 nr, |
| 384 | * u64 ips[nr]; } && PERF_SAMPLE_CALLCHAIN | 398 | * u64 ips[nr]; } && PERF_SAMPLE_CALLCHAIN |
| 385 | * | 399 | * |
| 386 | * # | 400 | * # |
| 387 | * # The RAW record below is opaque data wrt the ABI | 401 | * # The RAW record below is opaque data wrt the ABI |
| 388 | * # | 402 | * # |
| 389 | * # That is, the ABI doesn't make any promises wrt to | 403 | * # That is, the ABI doesn't make any promises wrt to |
| 390 | * # the stability of its content, it may vary depending | 404 | * # the stability of its content, it may vary depending |
| 391 | * # on event, hardware, kernel version and phase of | 405 | * # on event, hardware, kernel version and phase of |
| 392 | * # the moon. | 406 | * # the moon. |
| 393 | * # | 407 | * # |
| 394 | * # In other words, PERF_SAMPLE_RAW contents are not an ABI. | 408 | * # In other words, PERF_SAMPLE_RAW contents are not an ABI. |
| 395 | * # | 409 | * # |
| 396 | * | 410 | * |
| 397 | * { u32 size; | 411 | * { u32 size; |
| 398 | * char data[size];}&& PERF_SAMPLE_RAW | 412 | * char data[size];}&& PERF_SAMPLE_RAW |
| @@ -415,386 +429,16 @@ enum perf_callchain_context { | |||
| 415 | PERF_CONTEXT_MAX = (__u64)-4095, | 429 | PERF_CONTEXT_MAX = (__u64)-4095, |
| 416 | }; | 430 | }; |
| 417 | 431 | ||
| 418 | #ifdef __KERNEL__ | 432 | #define PERF_FLAG_FD_NO_GROUP (1U << 0) |
| 419 | /* | 433 | #define PERF_FLAG_FD_OUTPUT (1U << 1) |
| 420 | * Kernel-internal data types and definitions: | ||
| 421 | */ | ||
| 422 | |||
| 423 | #ifdef CONFIG_PERF_COUNTERS | ||
| 424 | # include <asm/perf_counter.h> | ||
| 425 | #endif | ||
| 426 | |||
| 427 | #include <linux/list.h> | ||
| 428 | #include <linux/mutex.h> | ||
| 429 | #include <linux/rculist.h> | ||
| 430 | #include <linux/rcupdate.h> | ||
| 431 | #include <linux/spinlock.h> | ||
| 432 | #include <linux/hrtimer.h> | ||
| 433 | #include <linux/fs.h> | ||
| 434 | #include <linux/pid_namespace.h> | ||
| 435 | #include <asm/atomic.h> | ||
| 436 | |||
| 437 | #define PERF_MAX_STACK_DEPTH 255 | ||
| 438 | |||
| 439 | struct perf_callchain_entry { | ||
| 440 | __u64 nr; | ||
| 441 | __u64 ip[PERF_MAX_STACK_DEPTH]; | ||
| 442 | }; | ||
| 443 | |||
| 444 | struct perf_raw_record { | ||
| 445 | u32 size; | ||
| 446 | void *data; | ||
| 447 | }; | ||
| 448 | |||
| 449 | struct task_struct; | ||
| 450 | |||
| 451 | /** | ||
| 452 | * struct hw_perf_counter - performance counter hardware details: | ||
| 453 | */ | ||
| 454 | struct hw_perf_counter { | ||
| 455 | #ifdef CONFIG_PERF_COUNTERS | ||
| 456 | union { | ||
| 457 | struct { /* hardware */ | ||
| 458 | u64 config; | ||
| 459 | unsigned long config_base; | ||
| 460 | unsigned long counter_base; | ||
| 461 | int idx; | ||
| 462 | }; | ||
| 463 | union { /* software */ | ||
| 464 | atomic64_t count; | ||
| 465 | struct hrtimer hrtimer; | ||
| 466 | }; | ||
| 467 | }; | ||
| 468 | atomic64_t prev_count; | ||
| 469 | u64 sample_period; | ||
| 470 | u64 last_period; | ||
| 471 | atomic64_t period_left; | ||
| 472 | u64 interrupts; | ||
| 473 | |||
| 474 | u64 freq_count; | ||
| 475 | u64 freq_interrupts; | ||
| 476 | u64 freq_stamp; | ||
| 477 | #endif | ||
| 478 | }; | ||
| 479 | |||
| 480 | struct perf_counter; | ||
| 481 | |||
| 482 | /** | ||
| 483 | * struct pmu - generic performance monitoring unit | ||
| 484 | */ | ||
| 485 | struct pmu { | ||
| 486 | int (*enable) (struct perf_counter *counter); | ||
| 487 | void (*disable) (struct perf_counter *counter); | ||
| 488 | void (*read) (struct perf_counter *counter); | ||
| 489 | void (*unthrottle) (struct perf_counter *counter); | ||
| 490 | }; | ||
| 491 | |||
| 492 | /** | ||
| 493 | * enum perf_counter_active_state - the states of a counter | ||
| 494 | */ | ||
| 495 | enum perf_counter_active_state { | ||
| 496 | PERF_COUNTER_STATE_ERROR = -2, | ||
| 497 | PERF_COUNTER_STATE_OFF = -1, | ||
| 498 | PERF_COUNTER_STATE_INACTIVE = 0, | ||
| 499 | PERF_COUNTER_STATE_ACTIVE = 1, | ||
| 500 | }; | ||
| 501 | |||
| 502 | struct file; | ||
| 503 | |||
| 504 | struct perf_mmap_data { | ||
| 505 | struct rcu_head rcu_head; | ||
| 506 | int nr_pages; /* nr of data pages */ | ||
| 507 | int writable; /* are we writable */ | ||
| 508 | int nr_locked; /* nr pages mlocked */ | ||
| 509 | |||
| 510 | atomic_t poll; /* POLL_ for wakeups */ | ||
| 511 | atomic_t events; /* event limit */ | ||
| 512 | |||
| 513 | atomic_long_t head; /* write position */ | ||
| 514 | atomic_long_t done_head; /* completed head */ | ||
| 515 | |||
| 516 | atomic_t lock; /* concurrent writes */ | ||
| 517 | atomic_t wakeup; /* needs a wakeup */ | ||
| 518 | atomic_t lost; /* nr records lost */ | ||
| 519 | |||
| 520 | struct perf_counter_mmap_page *user_page; | ||
| 521 | void *data_pages[0]; | ||
| 522 | }; | ||
| 523 | |||
| 524 | struct perf_pending_entry { | ||
| 525 | struct perf_pending_entry *next; | ||
| 526 | void (*func)(struct perf_pending_entry *); | ||
| 527 | }; | ||
| 528 | |||
| 529 | /** | ||
| 530 | * struct perf_counter - performance counter kernel representation: | ||
| 531 | */ | ||
| 532 | struct perf_counter { | ||
| 533 | #ifdef CONFIG_PERF_COUNTERS | ||
| 534 | struct list_head list_entry; | ||
| 535 | struct list_head event_entry; | ||
| 536 | struct list_head sibling_list; | ||
| 537 | int nr_siblings; | ||
| 538 | struct perf_counter *group_leader; | ||
| 539 | const struct pmu *pmu; | ||
| 540 | |||
| 541 | enum perf_counter_active_state state; | ||
| 542 | atomic64_t count; | ||
| 543 | |||
| 544 | /* | ||
| 545 | * These are the total time in nanoseconds that the counter | ||
| 546 | * has been enabled (i.e. eligible to run, and the task has | ||
| 547 | * been scheduled in, if this is a per-task counter) | ||
| 548 | * and running (scheduled onto the CPU), respectively. | ||
| 549 | * | ||
| 550 | * They are computed from tstamp_enabled, tstamp_running and | ||
| 551 | * tstamp_stopped when the counter is in INACTIVE or ACTIVE state. | ||
| 552 | */ | ||
| 553 | u64 total_time_enabled; | ||
| 554 | u64 total_time_running; | ||
| 555 | |||
| 556 | /* | ||
| 557 | * These are timestamps used for computing total_time_enabled | ||
| 558 | * and total_time_running when the counter is in INACTIVE or | ||
| 559 | * ACTIVE state, measured in nanoseconds from an arbitrary point | ||
| 560 | * in time. | ||
| 561 | * tstamp_enabled: the notional time when the counter was enabled | ||
| 562 | * tstamp_running: the notional time when the counter was scheduled on | ||
| 563 | * tstamp_stopped: in INACTIVE state, the notional time when the | ||
| 564 | * counter was scheduled off. | ||
| 565 | */ | ||
| 566 | u64 tstamp_enabled; | ||
| 567 | u64 tstamp_running; | ||
| 568 | u64 tstamp_stopped; | ||
| 569 | |||
| 570 | struct perf_counter_attr attr; | ||
| 571 | struct hw_perf_counter hw; | ||
| 572 | |||
| 573 | struct perf_counter_context *ctx; | ||
| 574 | struct file *filp; | ||
| 575 | |||
| 576 | /* | ||
| 577 | * These accumulate total time (in nanoseconds) that children | ||
| 578 | * counters have been enabled and running, respectively. | ||
| 579 | */ | ||
| 580 | atomic64_t child_total_time_enabled; | ||
| 581 | atomic64_t child_total_time_running; | ||
| 582 | |||
| 583 | /* | ||
| 584 | * Protect attach/detach and child_list: | ||
| 585 | */ | ||
| 586 | struct mutex child_mutex; | ||
| 587 | struct list_head child_list; | ||
| 588 | struct perf_counter *parent; | ||
| 589 | |||
| 590 | int oncpu; | ||
| 591 | int cpu; | ||
| 592 | |||
| 593 | struct list_head owner_entry; | ||
| 594 | struct task_struct *owner; | ||
| 595 | |||
| 596 | /* mmap bits */ | ||
| 597 | struct mutex mmap_mutex; | ||
| 598 | atomic_t mmap_count; | ||
| 599 | struct perf_mmap_data *data; | ||
| 600 | |||
| 601 | /* poll related */ | ||
| 602 | wait_queue_head_t waitq; | ||
| 603 | struct fasync_struct *fasync; | ||
| 604 | |||
| 605 | /* delayed work for NMIs and such */ | ||
| 606 | int pending_wakeup; | ||
| 607 | int pending_kill; | ||
| 608 | int pending_disable; | ||
| 609 | struct perf_pending_entry pending; | ||
| 610 | |||
| 611 | atomic_t event_limit; | ||
| 612 | |||
| 613 | void (*destroy)(struct perf_counter *); | ||
| 614 | struct rcu_head rcu_head; | ||
| 615 | |||
| 616 | struct pid_namespace *ns; | ||
| 617 | u64 id; | ||
| 618 | #endif | ||
| 619 | }; | ||
| 620 | |||
| 621 | /** | ||
| 622 | * struct perf_counter_context - counter context structure | ||
| 623 | * | ||
| 624 | * Used as a container for task counters and CPU counters as well: | ||
| 625 | */ | ||
| 626 | struct perf_counter_context { | ||
| 627 | /* | ||
| 628 | * Protect the states of the counters in the list, | ||
| 629 | * nr_active, and the list: | ||
| 630 | */ | ||
| 631 | spinlock_t lock; | ||
| 632 | /* | ||
| 633 | * Protect the list of counters. Locking either mutex or lock | ||
| 634 | * is sufficient to ensure the list doesn't change; to change | ||
| 635 | * the list you need to lock both the mutex and the spinlock. | ||
| 636 | */ | ||
| 637 | struct mutex mutex; | ||
| 638 | |||
| 639 | struct list_head counter_list; | ||
| 640 | struct list_head event_list; | ||
| 641 | int nr_counters; | ||
| 642 | int nr_active; | ||
| 643 | int is_active; | ||
| 644 | int nr_stat; | ||
| 645 | atomic_t refcount; | ||
| 646 | struct task_struct *task; | ||
| 647 | |||
| 648 | /* | ||
| 649 | * Context clock, runs when context enabled. | ||
| 650 | */ | ||
| 651 | u64 time; | ||
| 652 | u64 timestamp; | ||
| 653 | |||
| 654 | /* | ||
| 655 | * These fields let us detect when two contexts have both | ||
| 656 | * been cloned (inherited) from a common ancestor. | ||
| 657 | */ | ||
| 658 | struct perf_counter_context *parent_ctx; | ||
| 659 | u64 parent_gen; | ||
| 660 | u64 generation; | ||
| 661 | int pin_count; | ||
| 662 | struct rcu_head rcu_head; | ||
| 663 | }; | ||
| 664 | |||
| 665 | /** | ||
| 666 | * struct perf_counter_cpu_context - per cpu counter context structure | ||
| 667 | */ | ||
| 668 | struct perf_cpu_context { | ||
| 669 | struct perf_counter_context ctx; | ||
| 670 | struct perf_counter_context *task_ctx; | ||
| 671 | int active_oncpu; | ||
| 672 | int max_pertask; | ||
| 673 | int exclusive; | ||
| 674 | |||
| 675 | /* | ||
| 676 | * Recursion avoidance: | ||
| 677 | * | ||
| 678 | * task, softirq, irq, nmi context | ||
| 679 | */ | ||
| 680 | int recursion[4]; | ||
| 681 | }; | ||
| 682 | |||
| 683 | #ifdef CONFIG_PERF_COUNTERS | ||
| 684 | 434 | ||
| 685 | /* | 435 | /* |
| 686 | * Set by architecture code: | 436 | * In case some app still references the old symbols: |
| 687 | */ | 437 | */ |
| 688 | extern int perf_max_counters; | ||
| 689 | |||
| 690 | extern const struct pmu *hw_perf_counter_init(struct perf_counter *counter); | ||
| 691 | |||
| 692 | extern void perf_counter_task_sched_in(struct task_struct *task, int cpu); | ||
| 693 | extern void perf_counter_task_sched_out(struct task_struct *task, | ||
| 694 | struct task_struct *next, int cpu); | ||
| 695 | extern void perf_counter_task_tick(struct task_struct *task, int cpu); | ||
| 696 | extern int perf_counter_init_task(struct task_struct *child); | ||
| 697 | extern void perf_counter_exit_task(struct task_struct *child); | ||
| 698 | extern void perf_counter_free_task(struct task_struct *task); | ||
| 699 | extern void set_perf_counter_pending(void); | ||
| 700 | extern void perf_counter_do_pending(void); | ||
| 701 | extern void perf_counter_print_debug(void); | ||
| 702 | extern void __perf_disable(void); | ||
| 703 | extern bool __perf_enable(void); | ||
| 704 | extern void perf_disable(void); | ||
| 705 | extern void perf_enable(void); | ||
| 706 | extern int perf_counter_task_disable(void); | ||
| 707 | extern int perf_counter_task_enable(void); | ||
| 708 | extern int hw_perf_group_sched_in(struct perf_counter *group_leader, | ||
| 709 | struct perf_cpu_context *cpuctx, | ||
| 710 | struct perf_counter_context *ctx, int cpu); | ||
| 711 | extern void perf_counter_update_userpage(struct perf_counter *counter); | ||
| 712 | |||
| 713 | struct perf_sample_data { | ||
| 714 | struct pt_regs *regs; | ||
| 715 | u64 addr; | ||
| 716 | u64 period; | ||
| 717 | struct perf_raw_record *raw; | ||
| 718 | }; | ||
| 719 | 438 | ||
| 720 | extern int perf_counter_overflow(struct perf_counter *counter, int nmi, | 439 | #define __NR_perf_counter_open __NR_perf_event_open |
| 721 | struct perf_sample_data *data); | 440 | |
| 722 | extern void perf_counter_output(struct perf_counter *counter, int nmi, | 441 | #define PR_TASK_PERF_COUNTERS_DISABLE PR_TASK_PERF_EVENTS_DISABLE |
| 723 | struct perf_sample_data *data); | 442 | #define PR_TASK_PERF_COUNTERS_ENABLE PR_TASK_PERF_EVENTS_ENABLE |
| 724 | 443 | ||
| 725 | /* | ||
| 726 | * Return 1 for a software counter, 0 for a hardware counter | ||
| 727 | */ | ||
| 728 | static inline int is_software_counter(struct perf_counter *counter) | ||
| 729 | { | ||
| 730 | return (counter->attr.type != PERF_TYPE_RAW) && | ||
| 731 | (counter->attr.type != PERF_TYPE_HARDWARE) && | ||
| 732 | (counter->attr.type != PERF_TYPE_HW_CACHE); | ||
| 733 | } | ||
| 734 | |||
| 735 | extern atomic_t perf_swcounter_enabled[PERF_COUNT_SW_MAX]; | ||
| 736 | |||
| 737 | extern void __perf_swcounter_event(u32, u64, int, struct pt_regs *, u64); | ||
| 738 | |||
| 739 | static inline void | ||
| 740 | perf_swcounter_event(u32 event, u64 nr, int nmi, struct pt_regs *regs, u64 addr) | ||
| 741 | { | ||
| 742 | if (atomic_read(&perf_swcounter_enabled[event])) | ||
| 743 | __perf_swcounter_event(event, nr, nmi, regs, addr); | ||
| 744 | } | ||
| 745 | |||
| 746 | extern void __perf_counter_mmap(struct vm_area_struct *vma); | ||
| 747 | |||
| 748 | static inline void perf_counter_mmap(struct vm_area_struct *vma) | ||
| 749 | { | ||
| 750 | if (vma->vm_flags & VM_EXEC) | ||
| 751 | __perf_counter_mmap(vma); | ||
| 752 | } | ||
| 753 | |||
| 754 | extern void perf_counter_comm(struct task_struct *tsk); | ||
| 755 | extern void perf_counter_fork(struct task_struct *tsk); | ||
| 756 | |||
| 757 | extern struct perf_callchain_entry *perf_callchain(struct pt_regs *regs); | ||
| 758 | |||
| 759 | extern int sysctl_perf_counter_paranoid; | ||
| 760 | extern int sysctl_perf_counter_mlock; | ||
| 761 | extern int sysctl_perf_counter_sample_rate; | ||
| 762 | |||
| 763 | extern void perf_counter_init(void); | ||
| 764 | |||
| 765 | #ifndef perf_misc_flags | ||
| 766 | #define perf_misc_flags(regs) (user_mode(regs) ? PERF_EVENT_MISC_USER : \ | ||
| 767 | PERF_EVENT_MISC_KERNEL) | ||
| 768 | #define perf_instruction_pointer(regs) instruction_pointer(regs) | ||
| 769 | #endif | ||
| 770 | |||
| 771 | #else | ||
| 772 | static inline void | ||
| 773 | perf_counter_task_sched_in(struct task_struct *task, int cpu) { } | ||
| 774 | static inline void | ||
| 775 | perf_counter_task_sched_out(struct task_struct *task, | ||
| 776 | struct task_struct *next, int cpu) { } | ||
| 777 | static inline void | ||
| 778 | perf_counter_task_tick(struct task_struct *task, int cpu) { } | ||
| 779 | static inline int perf_counter_init_task(struct task_struct *child) { return 0; } | ||
| 780 | static inline void perf_counter_exit_task(struct task_struct *child) { } | ||
| 781 | static inline void perf_counter_free_task(struct task_struct *task) { } | ||
| 782 | static inline void perf_counter_do_pending(void) { } | ||
| 783 | static inline void perf_counter_print_debug(void) { } | ||
| 784 | static inline void perf_disable(void) { } | ||
| 785 | static inline void perf_enable(void) { } | ||
| 786 | static inline int perf_counter_task_disable(void) { return -EINVAL; } | ||
| 787 | static inline int perf_counter_task_enable(void) { return -EINVAL; } | ||
| 788 | |||
| 789 | static inline void | ||
| 790 | perf_swcounter_event(u32 event, u64 nr, int nmi, | ||
| 791 | struct pt_regs *regs, u64 addr) { } | ||
| 792 | |||
| 793 | static inline void perf_counter_mmap(struct vm_area_struct *vma) { } | ||
| 794 | static inline void perf_counter_comm(struct task_struct *tsk) { } | ||
| 795 | static inline void perf_counter_fork(struct task_struct *tsk) { } | ||
| 796 | static inline void perf_counter_init(void) { } | ||
| 797 | #endif | ||
| 798 | |||
| 799 | #endif /* __KERNEL__ */ | ||
| 800 | #endif /* _LINUX_PERF_COUNTER_H */ | 444 | #endif /* _LINUX_PERF_COUNTER_H */ |
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h new file mode 100644 index 000000000000..43adbd7f0010 --- /dev/null +++ b/include/linux/perf_event.h | |||
| @@ -0,0 +1,916 @@ | |||
| 1 | /* | ||
| 2 | * Performance events: | ||
| 3 | * | ||
| 4 | * Copyright (C) 2008-2009, Thomas Gleixner <tglx@linutronix.de> | ||
| 5 | * Copyright (C) 2008-2009, Red Hat, Inc., Ingo Molnar | ||
| 6 | * Copyright (C) 2008-2009, Red Hat, Inc., Peter Zijlstra | ||
| 7 | * | ||
| 8 | * Data type definitions, declarations, prototypes. | ||
| 9 | * | ||
| 10 | * Started by: Thomas Gleixner and Ingo Molnar | ||
| 11 | * | ||
| 12 | * For licencing details see kernel-base/COPYING | ||
| 13 | */ | ||
| 14 | #ifndef _LINUX_PERF_EVENT_H | ||
| 15 | #define _LINUX_PERF_EVENT_H | ||
| 16 | |||
| 17 | #include <linux/types.h> | ||
| 18 | #include <linux/ioctl.h> | ||
| 19 | #include <asm/byteorder.h> | ||
| 20 | |||
| 21 | #ifdef CONFIG_HAVE_HW_BREAKPOINT | ||
| 22 | #include <asm/hw_breakpoint.h> | ||
| 23 | #endif | ||
| 24 | |||
| 25 | /* | ||
| 26 | * User-space ABI bits: | ||
| 27 | */ | ||
| 28 | |||
| 29 | /* | ||
| 30 | * attr.type | ||
| 31 | */ | ||
| 32 | enum perf_type_id { | ||
| 33 | PERF_TYPE_HARDWARE = 0, | ||
| 34 | PERF_TYPE_SOFTWARE = 1, | ||
| 35 | PERF_TYPE_TRACEPOINT = 2, | ||
| 36 | PERF_TYPE_HW_CACHE = 3, | ||
| 37 | PERF_TYPE_RAW = 4, | ||
| 38 | PERF_TYPE_BREAKPOINT = 5, | ||
| 39 | |||
| 40 | PERF_TYPE_MAX, /* non-ABI */ | ||
| 41 | }; | ||
| 42 | |||
| 43 | /* | ||
| 44 | * Generalized performance event event_id types, used by the | ||
| 45 | * attr.event_id parameter of the sys_perf_event_open() | ||
| 46 | * syscall: | ||
| 47 | */ | ||
| 48 | enum perf_hw_id { | ||
| 49 | /* | ||
| 50 | * Common hardware events, generalized by the kernel: | ||
| 51 | */ | ||
| 52 | PERF_COUNT_HW_CPU_CYCLES = 0, | ||
| 53 | PERF_COUNT_HW_INSTRUCTIONS = 1, | ||
| 54 | PERF_COUNT_HW_CACHE_REFERENCES = 2, | ||
| 55 | PERF_COUNT_HW_CACHE_MISSES = 3, | ||
| 56 | PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 4, | ||
| 57 | PERF_COUNT_HW_BRANCH_MISSES = 5, | ||
| 58 | PERF_COUNT_HW_BUS_CYCLES = 6, | ||
| 59 | |||
| 60 | PERF_COUNT_HW_MAX, /* non-ABI */ | ||
| 61 | }; | ||
| 62 | |||
| 63 | /* | ||
| 64 | * Generalized hardware cache events: | ||
| 65 | * | ||
| 66 | * { L1-D, L1-I, LLC, ITLB, DTLB, BPU } x | ||
| 67 | * { read, write, prefetch } x | ||
| 68 | * { accesses, misses } | ||
| 69 | */ | ||
| 70 | enum perf_hw_cache_id { | ||
| 71 | PERF_COUNT_HW_CACHE_L1D = 0, | ||
| 72 | PERF_COUNT_HW_CACHE_L1I = 1, | ||
| 73 | PERF_COUNT_HW_CACHE_LL = 2, | ||
| 74 | PERF_COUNT_HW_CACHE_DTLB = 3, | ||
| 75 | PERF_COUNT_HW_CACHE_ITLB = 4, | ||
| 76 | PERF_COUNT_HW_CACHE_BPU = 5, | ||
| 77 | |||
| 78 | PERF_COUNT_HW_CACHE_MAX, /* non-ABI */ | ||
| 79 | }; | ||
| 80 | |||
| 81 | enum perf_hw_cache_op_id { | ||
| 82 | PERF_COUNT_HW_CACHE_OP_READ = 0, | ||
| 83 | PERF_COUNT_HW_CACHE_OP_WRITE = 1, | ||
| 84 | PERF_COUNT_HW_CACHE_OP_PREFETCH = 2, | ||
| 85 | |||
| 86 | PERF_COUNT_HW_CACHE_OP_MAX, /* non-ABI */ | ||
| 87 | }; | ||
| 88 | |||
| 89 | enum perf_hw_cache_op_result_id { | ||
| 90 | PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0, | ||
| 91 | PERF_COUNT_HW_CACHE_RESULT_MISS = 1, | ||
| 92 | |||
| 93 | PERF_COUNT_HW_CACHE_RESULT_MAX, /* non-ABI */ | ||
| 94 | }; | ||
| 95 | |||
| 96 | /* | ||
| 97 | * Special "software" events provided by the kernel, even if the hardware | ||
| 98 | * does not support performance events. These events measure various | ||
| 99 | * physical and sw events of the kernel (and allow the profiling of them as | ||
| 100 | * well): | ||
| 101 | */ | ||
| 102 | enum perf_sw_ids { | ||
| 103 | PERF_COUNT_SW_CPU_CLOCK = 0, | ||
| 104 | PERF_COUNT_SW_TASK_CLOCK = 1, | ||
| 105 | PERF_COUNT_SW_PAGE_FAULTS = 2, | ||
| 106 | PERF_COUNT_SW_CONTEXT_SWITCHES = 3, | ||
| 107 | PERF_COUNT_SW_CPU_MIGRATIONS = 4, | ||
| 108 | PERF_COUNT_SW_PAGE_FAULTS_MIN = 5, | ||
| 109 | PERF_COUNT_SW_PAGE_FAULTS_MAJ = 6, | ||
| 110 | PERF_COUNT_SW_ALIGNMENT_FAULTS = 7, | ||
| 111 | PERF_COUNT_SW_EMULATION_FAULTS = 8, | ||
| 112 | |||
| 113 | PERF_COUNT_SW_MAX, /* non-ABI */ | ||
| 114 | }; | ||
| 115 | |||
| 116 | /* | ||
| 117 | * Bits that can be set in attr.sample_type to request information | ||
| 118 | * in the overflow packets. | ||
| 119 | */ | ||
| 120 | enum perf_event_sample_format { | ||
| 121 | PERF_SAMPLE_IP = 1U << 0, | ||
| 122 | PERF_SAMPLE_TID = 1U << 1, | ||
| 123 | PERF_SAMPLE_TIME = 1U << 2, | ||
| 124 | PERF_SAMPLE_ADDR = 1U << 3, | ||
| 125 | PERF_SAMPLE_READ = 1U << 4, | ||
| 126 | PERF_SAMPLE_CALLCHAIN = 1U << 5, | ||
| 127 | PERF_SAMPLE_ID = 1U << 6, | ||
| 128 | PERF_SAMPLE_CPU = 1U << 7, | ||
| 129 | PERF_SAMPLE_PERIOD = 1U << 8, | ||
| 130 | PERF_SAMPLE_STREAM_ID = 1U << 9, | ||
| 131 | PERF_SAMPLE_RAW = 1U << 10, | ||
| 132 | |||
| 133 | PERF_SAMPLE_MAX = 1U << 11, /* non-ABI */ | ||
| 134 | }; | ||
| 135 | |||
| 136 | /* | ||
| 137 | * The format of the data returned by read() on a perf event fd, | ||
| 138 | * as specified by attr.read_format: | ||
| 139 | * | ||
| 140 | * struct read_format { | ||
| 141 | * { u64 value; | ||
| 142 | * { u64 time_enabled; } && PERF_FORMAT_ENABLED | ||
| 143 | * { u64 time_running; } && PERF_FORMAT_RUNNING | ||
| 144 | * { u64 id; } && PERF_FORMAT_ID | ||
| 145 | * } && !PERF_FORMAT_GROUP | ||
| 146 | * | ||
| 147 | * { u64 nr; | ||
| 148 | * { u64 time_enabled; } && PERF_FORMAT_ENABLED | ||
| 149 | * { u64 time_running; } && PERF_FORMAT_RUNNING | ||
| 150 | * { u64 value; | ||
| 151 | * { u64 id; } && PERF_FORMAT_ID | ||
| 152 | * } cntr[nr]; | ||
| 153 | * } && PERF_FORMAT_GROUP | ||
| 154 | * }; | ||
| 155 | */ | ||
| 156 | enum perf_event_read_format { | ||
| 157 | PERF_FORMAT_TOTAL_TIME_ENABLED = 1U << 0, | ||
| 158 | PERF_FORMAT_TOTAL_TIME_RUNNING = 1U << 1, | ||
| 159 | PERF_FORMAT_ID = 1U << 2, | ||
| 160 | PERF_FORMAT_GROUP = 1U << 3, | ||
| 161 | |||
| 162 | PERF_FORMAT_MAX = 1U << 4, /* non-ABI */ | ||
| 163 | }; | ||
| 164 | |||
| 165 | #define PERF_ATTR_SIZE_VER0 64 /* sizeof first published struct */ | ||
| 166 | |||
| 167 | /* | ||
| 168 | * Hardware event_id to monitor via a performance monitoring event: | ||
| 169 | */ | ||
| 170 | struct perf_event_attr { | ||
| 171 | |||
| 172 | /* | ||
| 173 | * Major type: hardware/software/tracepoint/etc. | ||
| 174 | */ | ||
| 175 | __u32 type; | ||
| 176 | |||
| 177 | /* | ||
| 178 | * Size of the attr structure, for fwd/bwd compat. | ||
| 179 | */ | ||
| 180 | __u32 size; | ||
| 181 | |||
| 182 | /* | ||
| 183 | * Type specific configuration information. | ||
| 184 | */ | ||
| 185 | __u64 config; | ||
| 186 | |||
| 187 | union { | ||
| 188 | __u64 sample_period; | ||
| 189 | __u64 sample_freq; | ||
| 190 | }; | ||
| 191 | |||
| 192 | __u64 sample_type; | ||
| 193 | __u64 read_format; | ||
| 194 | |||
| 195 | __u64 disabled : 1, /* off by default */ | ||
| 196 | inherit : 1, /* children inherit it */ | ||
| 197 | pinned : 1, /* must always be on PMU */ | ||
| 198 | exclusive : 1, /* only group on PMU */ | ||
| 199 | exclude_user : 1, /* don't count user */ | ||
| 200 | exclude_kernel : 1, /* ditto kernel */ | ||
| 201 | exclude_hv : 1, /* ditto hypervisor */ | ||
| 202 | exclude_idle : 1, /* don't count when idle */ | ||
| 203 | mmap : 1, /* include mmap data */ | ||
| 204 | comm : 1, /* include comm data */ | ||
| 205 | freq : 1, /* use freq, not period */ | ||
| 206 | inherit_stat : 1, /* per task counts */ | ||
| 207 | enable_on_exec : 1, /* next exec enables */ | ||
| 208 | task : 1, /* trace fork/exit */ | ||
| 209 | watermark : 1, /* wakeup_watermark */ | ||
| 210 | |||
| 211 | __reserved_1 : 49; | ||
| 212 | |||
| 213 | union { | ||
| 214 | __u32 wakeup_events; /* wakeup every n events */ | ||
| 215 | __u32 wakeup_watermark; /* bytes before wakeup */ | ||
| 216 | }; | ||
| 217 | |||
| 218 | union { | ||
| 219 | struct { /* Hardware breakpoint info */ | ||
| 220 | __u64 bp_addr; | ||
| 221 | __u32 bp_type; | ||
| 222 | __u32 bp_len; | ||
| 223 | }; | ||
| 224 | }; | ||
| 225 | |||
| 226 | __u32 __reserved_2; | ||
| 227 | |||
| 228 | __u64 __reserved_3; | ||
| 229 | }; | ||
| 230 | |||
| 231 | /* | ||
| 232 | * Ioctls that can be done on a perf event fd: | ||
| 233 | */ | ||
| 234 | #define PERF_EVENT_IOC_ENABLE _IO ('$', 0) | ||
| 235 | #define PERF_EVENT_IOC_DISABLE _IO ('$', 1) | ||
| 236 | #define PERF_EVENT_IOC_REFRESH _IO ('$', 2) | ||
| 237 | #define PERF_EVENT_IOC_RESET _IO ('$', 3) | ||
| 238 | #define PERF_EVENT_IOC_PERIOD _IOW('$', 4, __u64) | ||
| 239 | #define PERF_EVENT_IOC_SET_OUTPUT _IO ('$', 5) | ||
| 240 | #define PERF_EVENT_IOC_SET_FILTER _IOW('$', 6, char *) | ||
| 241 | |||
| 242 | enum perf_event_ioc_flags { | ||
| 243 | PERF_IOC_FLAG_GROUP = 1U << 0, | ||
| 244 | }; | ||
| 245 | |||
| 246 | /* | ||
| 247 | * Structure of the page that can be mapped via mmap | ||
| 248 | */ | ||
| 249 | struct perf_event_mmap_page { | ||
| 250 | __u32 version; /* version number of this structure */ | ||
| 251 | __u32 compat_version; /* lowest version this is compat with */ | ||
| 252 | |||
| 253 | /* | ||
| 254 | * Bits needed to read the hw events in user-space. | ||
| 255 | * | ||
| 256 | * u32 seq; | ||
| 257 | * s64 count; | ||
| 258 | * | ||
| 259 | * do { | ||
| 260 | * seq = pc->lock; | ||
| 261 | * | ||
| 262 | * barrier() | ||
| 263 | * if (pc->index) { | ||
| 264 | * count = pmc_read(pc->index - 1); | ||
| 265 | * count += pc->offset; | ||
| 266 | * } else | ||
| 267 | * goto regular_read; | ||
| 268 | * | ||
| 269 | * barrier(); | ||
| 270 | * } while (pc->lock != seq); | ||
| 271 | * | ||
| 272 | * NOTE: for obvious reason this only works on self-monitoring | ||
| 273 | * processes. | ||
| 274 | */ | ||
| 275 | __u32 lock; /* seqlock for synchronization */ | ||
| 276 | __u32 index; /* hardware event identifier */ | ||
| 277 | __s64 offset; /* add to hardware event value */ | ||
| 278 | __u64 time_enabled; /* time event active */ | ||
| 279 | __u64 time_running; /* time event on cpu */ | ||
| 280 | |||
| 281 | /* | ||
| 282 | * Hole for extension of the self monitor capabilities | ||
| 283 | */ | ||
| 284 | |||
| 285 | __u64 __reserved[123]; /* align to 1k */ | ||
| 286 | |||
| 287 | /* | ||
| 288 | * Control data for the mmap() data buffer. | ||
| 289 | * | ||
| 290 | * User-space reading the @data_head value should issue an rmb(), on | ||
| 291 | * SMP capable platforms, after reading this value -- see | ||
| 292 | * perf_event_wakeup(). | ||
| 293 | * | ||
| 294 | * When the mapping is PROT_WRITE the @data_tail value should be | ||
| 295 | * written by userspace to reflect the last read data. In this case | ||
| 296 | * the kernel will not over-write unread data. | ||
| 297 | */ | ||
| 298 | __u64 data_head; /* head in the data section */ | ||
| 299 | __u64 data_tail; /* user-space written tail */ | ||
| 300 | }; | ||
| 301 | |||
| 302 | #define PERF_RECORD_MISC_CPUMODE_MASK (3 << 0) | ||
| 303 | #define PERF_RECORD_MISC_CPUMODE_UNKNOWN (0 << 0) | ||
| 304 | #define PERF_RECORD_MISC_KERNEL (1 << 0) | ||
| 305 | #define PERF_RECORD_MISC_USER (2 << 0) | ||
| 306 | #define PERF_RECORD_MISC_HYPERVISOR (3 << 0) | ||
| 307 | |||
| 308 | struct perf_event_header { | ||
| 309 | __u32 type; | ||
| 310 | __u16 misc; | ||
| 311 | __u16 size; | ||
| 312 | }; | ||
| 313 | |||
| 314 | enum perf_event_type { | ||
| 315 | |||
| 316 | /* | ||
| 317 | * The MMAP events record the PROT_EXEC mappings so that we can | ||
| 318 | * correlate userspace IPs to code. They have the following structure: | ||
| 319 | * | ||
| 320 | * struct { | ||
| 321 | * struct perf_event_header header; | ||
| 322 | * | ||
| 323 | * u32 pid, tid; | ||
| 324 | * u64 addr; | ||
| 325 | * u64 len; | ||
| 326 | * u64 pgoff; | ||
| 327 | * char filename[]; | ||
| 328 | * }; | ||
| 329 | */ | ||
| 330 | PERF_RECORD_MMAP = 1, | ||
| 331 | |||
| 332 | /* | ||
| 333 | * struct { | ||
| 334 | * struct perf_event_header header; | ||
| 335 | * u64 id; | ||
| 336 | * u64 lost; | ||
| 337 | * }; | ||
| 338 | */ | ||
| 339 | PERF_RECORD_LOST = 2, | ||
| 340 | |||
| 341 | /* | ||
| 342 | * struct { | ||
| 343 | * struct perf_event_header header; | ||
| 344 | * | ||
| 345 | * u32 pid, tid; | ||
| 346 | * char comm[]; | ||
| 347 | * }; | ||
| 348 | */ | ||
| 349 | PERF_RECORD_COMM = 3, | ||
| 350 | |||
| 351 | /* | ||
| 352 | * struct { | ||
| 353 | * struct perf_event_header header; | ||
| 354 | * u32 pid, ppid; | ||
| 355 | * u32 tid, ptid; | ||
| 356 | * u64 time; | ||
| 357 | * }; | ||
| 358 | */ | ||
| 359 | PERF_RECORD_EXIT = 4, | ||
| 360 | |||
| 361 | /* | ||
| 362 | * struct { | ||
| 363 | * struct perf_event_header header; | ||
| 364 | * u64 time; | ||
| 365 | * u64 id; | ||
| 366 | * u64 stream_id; | ||
| 367 | * }; | ||
| 368 | */ | ||
| 369 | PERF_RECORD_THROTTLE = 5, | ||
| 370 | PERF_RECORD_UNTHROTTLE = 6, | ||
| 371 | |||
| 372 | /* | ||
| 373 | * struct { | ||
| 374 | * struct perf_event_header header; | ||
| 375 | * u32 pid, ppid; | ||
| 376 | * u32 tid, ptid; | ||
| 377 | * u64 time; | ||
| 378 | * }; | ||
| 379 | */ | ||
| 380 | PERF_RECORD_FORK = 7, | ||
| 381 | |||
| 382 | /* | ||
| 383 | * struct { | ||
| 384 | * struct perf_event_header header; | ||
| 385 | * u32 pid, tid; | ||
| 386 | * | ||
| 387 | * struct read_format values; | ||
| 388 | * }; | ||
| 389 | */ | ||
| 390 | PERF_RECORD_READ = 8, | ||
| 391 | |||
| 392 | /* | ||
| 393 | * struct { | ||
| 394 | * struct perf_event_header header; | ||
| 395 | * | ||
| 396 | * { u64 ip; } && PERF_SAMPLE_IP | ||
| 397 | * { u32 pid, tid; } && PERF_SAMPLE_TID | ||
| 398 | * { u64 time; } && PERF_SAMPLE_TIME | ||
| 399 | * { u64 addr; } && PERF_SAMPLE_ADDR | ||
| 400 | * { u64 id; } && PERF_SAMPLE_ID | ||
| 401 | * { u64 stream_id;} && PERF_SAMPLE_STREAM_ID | ||
| 402 | * { u32 cpu, res; } && PERF_SAMPLE_CPU | ||
| 403 | * { u64 period; } && PERF_SAMPLE_PERIOD | ||
| 404 | * | ||
| 405 | * { struct read_format values; } && PERF_SAMPLE_READ | ||
| 406 | * | ||
| 407 | * { u64 nr, | ||
| 408 | * u64 ips[nr]; } && PERF_SAMPLE_CALLCHAIN | ||
| 409 | * | ||
| 410 | * # | ||
| 411 | * # The RAW record below is opaque data wrt the ABI | ||
| 412 | * # | ||
| 413 | * # That is, the ABI doesn't make any promises wrt to | ||
| 414 | * # the stability of its content, it may vary depending | ||
| 415 | * # on event, hardware, kernel version and phase of | ||
| 416 | * # the moon. | ||
| 417 | * # | ||
| 418 | * # In other words, PERF_SAMPLE_RAW contents are not an ABI. | ||
| 419 | * # | ||
| 420 | * | ||
| 421 | * { u32 size; | ||
| 422 | * char data[size];}&& PERF_SAMPLE_RAW | ||
| 423 | * }; | ||
| 424 | */ | ||
| 425 | PERF_RECORD_SAMPLE = 9, | ||
| 426 | |||
| 427 | PERF_RECORD_MAX, /* non-ABI */ | ||
| 428 | }; | ||
| 429 | |||
| 430 | enum perf_callchain_context { | ||
| 431 | PERF_CONTEXT_HV = (__u64)-32, | ||
| 432 | PERF_CONTEXT_KERNEL = (__u64)-128, | ||
| 433 | PERF_CONTEXT_USER = (__u64)-512, | ||
| 434 | |||
| 435 | PERF_CONTEXT_GUEST = (__u64)-2048, | ||
| 436 | PERF_CONTEXT_GUEST_KERNEL = (__u64)-2176, | ||
| 437 | PERF_CONTEXT_GUEST_USER = (__u64)-2560, | ||
| 438 | |||
| 439 | PERF_CONTEXT_MAX = (__u64)-4095, | ||
| 440 | }; | ||
| 441 | |||
| 442 | #define PERF_FLAG_FD_NO_GROUP (1U << 0) | ||
| 443 | #define PERF_FLAG_FD_OUTPUT (1U << 1) | ||
| 444 | |||
| 445 | #ifdef __KERNEL__ | ||
| 446 | /* | ||
| 447 | * Kernel-internal data types and definitions: | ||
| 448 | */ | ||
| 449 | |||
| 450 | #ifdef CONFIG_PERF_EVENTS | ||
| 451 | # include <asm/perf_event.h> | ||
| 452 | #endif | ||
| 453 | |||
| 454 | #include <linux/list.h> | ||
| 455 | #include <linux/mutex.h> | ||
| 456 | #include <linux/rculist.h> | ||
| 457 | #include <linux/rcupdate.h> | ||
| 458 | #include <linux/spinlock.h> | ||
| 459 | #include <linux/hrtimer.h> | ||
| 460 | #include <linux/fs.h> | ||
| 461 | #include <linux/pid_namespace.h> | ||
| 462 | #include <linux/workqueue.h> | ||
| 463 | #include <asm/atomic.h> | ||
| 464 | |||
| 465 | #define PERF_MAX_STACK_DEPTH 255 | ||
| 466 | |||
| 467 | struct perf_callchain_entry { | ||
| 468 | __u64 nr; | ||
| 469 | __u64 ip[PERF_MAX_STACK_DEPTH]; | ||
| 470 | }; | ||
| 471 | |||
| 472 | struct perf_raw_record { | ||
| 473 | u32 size; | ||
| 474 | void *data; | ||
| 475 | }; | ||
| 476 | |||
| 477 | struct task_struct; | ||
| 478 | |||
| 479 | /** | ||
| 480 | * struct hw_perf_event - performance event hardware details: | ||
| 481 | */ | ||
| 482 | struct hw_perf_event { | ||
| 483 | #ifdef CONFIG_PERF_EVENTS | ||
| 484 | union { | ||
| 485 | struct { /* hardware */ | ||
| 486 | u64 config; | ||
| 487 | unsigned long config_base; | ||
| 488 | unsigned long event_base; | ||
| 489 | int idx; | ||
| 490 | }; | ||
| 491 | struct { /* software */ | ||
| 492 | s64 remaining; | ||
| 493 | struct hrtimer hrtimer; | ||
| 494 | }; | ||
| 495 | #ifdef CONFIG_HAVE_HW_BREAKPOINT | ||
| 496 | union { /* breakpoint */ | ||
| 497 | struct arch_hw_breakpoint info; | ||
| 498 | }; | ||
| 499 | #endif | ||
| 500 | }; | ||
| 501 | atomic64_t prev_count; | ||
| 502 | u64 sample_period; | ||
| 503 | u64 last_period; | ||
| 504 | atomic64_t period_left; | ||
| 505 | u64 interrupts; | ||
| 506 | |||
| 507 | u64 freq_count; | ||
| 508 | u64 freq_interrupts; | ||
| 509 | u64 freq_stamp; | ||
| 510 | #endif | ||
| 511 | }; | ||
| 512 | |||
| 513 | struct perf_event; | ||
| 514 | |||
| 515 | /** | ||
| 516 | * struct pmu - generic performance monitoring unit | ||
| 517 | */ | ||
| 518 | struct pmu { | ||
| 519 | int (*enable) (struct perf_event *event); | ||
| 520 | void (*disable) (struct perf_event *event); | ||
| 521 | void (*read) (struct perf_event *event); | ||
| 522 | void (*unthrottle) (struct perf_event *event); | ||
| 523 | }; | ||
| 524 | |||
| 525 | /** | ||
| 526 | * enum perf_event_active_state - the states of a event | ||
| 527 | */ | ||
| 528 | enum perf_event_active_state { | ||
| 529 | PERF_EVENT_STATE_ERROR = -2, | ||
| 530 | PERF_EVENT_STATE_OFF = -1, | ||
| 531 | PERF_EVENT_STATE_INACTIVE = 0, | ||
| 532 | PERF_EVENT_STATE_ACTIVE = 1, | ||
| 533 | }; | ||
| 534 | |||
| 535 | struct file; | ||
| 536 | |||
| 537 | struct perf_mmap_data { | ||
| 538 | struct rcu_head rcu_head; | ||
| 539 | #ifdef CONFIG_PERF_USE_VMALLOC | ||
| 540 | struct work_struct work; | ||
| 541 | #endif | ||
| 542 | int data_order; | ||
| 543 | int nr_pages; /* nr of data pages */ | ||
| 544 | int writable; /* are we writable */ | ||
| 545 | int nr_locked; /* nr pages mlocked */ | ||
| 546 | |||
| 547 | atomic_t poll; /* POLL_ for wakeups */ | ||
| 548 | atomic_t events; /* event_id limit */ | ||
| 549 | |||
| 550 | atomic_long_t head; /* write position */ | ||
| 551 | atomic_long_t done_head; /* completed head */ | ||
| 552 | |||
| 553 | atomic_t lock; /* concurrent writes */ | ||
| 554 | atomic_t wakeup; /* needs a wakeup */ | ||
| 555 | atomic_t lost; /* nr records lost */ | ||
| 556 | |||
| 557 | long watermark; /* wakeup watermark */ | ||
| 558 | |||
| 559 | struct perf_event_mmap_page *user_page; | ||
| 560 | void *data_pages[0]; | ||
| 561 | }; | ||
| 562 | |||
| 563 | struct perf_pending_entry { | ||
| 564 | struct perf_pending_entry *next; | ||
| 565 | void (*func)(struct perf_pending_entry *); | ||
| 566 | }; | ||
| 567 | |||
| 568 | typedef void (*perf_callback_t)(struct perf_event *, void *); | ||
| 569 | |||
| 570 | struct perf_sample_data; | ||
| 571 | |||
| 572 | /** | ||
| 573 | * struct perf_event - performance event kernel representation: | ||
| 574 | */ | ||
| 575 | struct perf_event { | ||
| 576 | #ifdef CONFIG_PERF_EVENTS | ||
| 577 | struct list_head group_entry; | ||
| 578 | struct list_head event_entry; | ||
| 579 | struct list_head sibling_list; | ||
| 580 | int nr_siblings; | ||
| 581 | struct perf_event *group_leader; | ||
| 582 | struct perf_event *output; | ||
| 583 | const struct pmu *pmu; | ||
| 584 | |||
| 585 | enum perf_event_active_state state; | ||
| 586 | atomic64_t count; | ||
| 587 | |||
| 588 | /* | ||
| 589 | * These are the total time in nanoseconds that the event | ||
| 590 | * has been enabled (i.e. eligible to run, and the task has | ||
| 591 | * been scheduled in, if this is a per-task event) | ||
| 592 | * and running (scheduled onto the CPU), respectively. | ||
| 593 | * | ||
| 594 | * They are computed from tstamp_enabled, tstamp_running and | ||
| 595 | * tstamp_stopped when the event is in INACTIVE or ACTIVE state. | ||
| 596 | */ | ||
| 597 | u64 total_time_enabled; | ||
| 598 | u64 total_time_running; | ||
| 599 | |||
| 600 | /* | ||
| 601 | * These are timestamps used for computing total_time_enabled | ||
| 602 | * and total_time_running when the event is in INACTIVE or | ||
| 603 | * ACTIVE state, measured in nanoseconds from an arbitrary point | ||
| 604 | * in time. | ||
| 605 | * tstamp_enabled: the notional time when the event was enabled | ||
| 606 | * tstamp_running: the notional time when the event was scheduled on | ||
| 607 | * tstamp_stopped: in INACTIVE state, the notional time when the | ||
| 608 | * event was scheduled off. | ||
| 609 | */ | ||
| 610 | u64 tstamp_enabled; | ||
| 611 | u64 tstamp_running; | ||
| 612 | u64 tstamp_stopped; | ||
| 613 | |||
| 614 | struct perf_event_attr attr; | ||
| 615 | struct hw_perf_event hw; | ||
| 616 | |||
| 617 | struct perf_event_context *ctx; | ||
| 618 | struct file *filp; | ||
| 619 | |||
| 620 | /* | ||
| 621 | * These accumulate total time (in nanoseconds) that children | ||
| 622 | * events have been enabled and running, respectively. | ||
| 623 | */ | ||
| 624 | atomic64_t child_total_time_enabled; | ||
| 625 | atomic64_t child_total_time_running; | ||
| 626 | |||
| 627 | /* | ||
| 628 | * Protect attach/detach and child_list: | ||
| 629 | */ | ||
| 630 | struct mutex child_mutex; | ||
| 631 | struct list_head child_list; | ||
| 632 | struct perf_event *parent; | ||
| 633 | |||
| 634 | int oncpu; | ||
| 635 | int cpu; | ||
| 636 | |||
| 637 | struct list_head owner_entry; | ||
| 638 | struct task_struct *owner; | ||
| 639 | |||
| 640 | /* mmap bits */ | ||
| 641 | struct mutex mmap_mutex; | ||
| 642 | atomic_t mmap_count; | ||
| 643 | struct perf_mmap_data *data; | ||
| 644 | |||
| 645 | /* poll related */ | ||
| 646 | wait_queue_head_t waitq; | ||
| 647 | struct fasync_struct *fasync; | ||
| 648 | |||
| 649 | /* delayed work for NMIs and such */ | ||
| 650 | int pending_wakeup; | ||
| 651 | int pending_kill; | ||
| 652 | int pending_disable; | ||
| 653 | struct perf_pending_entry pending; | ||
| 654 | |||
| 655 | atomic_t event_limit; | ||
| 656 | |||
| 657 | void (*destroy)(struct perf_event *); | ||
| 658 | struct rcu_head rcu_head; | ||
| 659 | |||
| 660 | struct pid_namespace *ns; | ||
| 661 | u64 id; | ||
| 662 | |||
| 663 | void (*overflow_handler)(struct perf_event *event, | ||
| 664 | int nmi, struct perf_sample_data *data, | ||
| 665 | struct pt_regs *regs); | ||
| 666 | |||
| 667 | #ifdef CONFIG_EVENT_PROFILE | ||
| 668 | struct event_filter *filter; | ||
| 669 | #endif | ||
| 670 | |||
| 671 | perf_callback_t callback; | ||
| 672 | |||
| 673 | perf_callback_t event_callback; | ||
| 674 | |||
| 675 | #endif /* CONFIG_PERF_EVENTS */ | ||
| 676 | }; | ||
| 677 | |||
| 678 | /** | ||
| 679 | * struct perf_event_context - event context structure | ||
| 680 | * | ||
| 681 | * Used as a container for task events and CPU events as well: | ||
| 682 | */ | ||
| 683 | struct perf_event_context { | ||
| 684 | /* | ||
| 685 | * Protect the states of the events in the list, | ||
| 686 | * nr_active, and the list: | ||
| 687 | */ | ||
| 688 | spinlock_t lock; | ||
| 689 | /* | ||
| 690 | * Protect the list of events. Locking either mutex or lock | ||
| 691 | * is sufficient to ensure the list doesn't change; to change | ||
| 692 | * the list you need to lock both the mutex and the spinlock. | ||
| 693 | */ | ||
| 694 | struct mutex mutex; | ||
| 695 | |||
| 696 | struct list_head group_list; | ||
| 697 | struct list_head event_list; | ||
| 698 | int nr_events; | ||
| 699 | int nr_active; | ||
| 700 | int is_active; | ||
| 701 | int nr_stat; | ||
| 702 | atomic_t refcount; | ||
| 703 | struct task_struct *task; | ||
| 704 | |||
| 705 | /* | ||
| 706 | * Context clock, runs when context enabled. | ||
| 707 | */ | ||
| 708 | u64 time; | ||
| 709 | u64 timestamp; | ||
| 710 | |||
| 711 | /* | ||
| 712 | * These fields let us detect when two contexts have both | ||
| 713 | * been cloned (inherited) from a common ancestor. | ||
| 714 | */ | ||
| 715 | struct perf_event_context *parent_ctx; | ||
| 716 | u64 parent_gen; | ||
| 717 | u64 generation; | ||
| 718 | int pin_count; | ||
| 719 | struct rcu_head rcu_head; | ||
| 720 | }; | ||
| 721 | |||
| 722 | /** | ||
| 723 | * struct perf_event_cpu_context - per cpu event context structure | ||
| 724 | */ | ||
| 725 | struct perf_cpu_context { | ||
| 726 | struct perf_event_context ctx; | ||
| 727 | struct perf_event_context *task_ctx; | ||
| 728 | int active_oncpu; | ||
| 729 | int max_pertask; | ||
| 730 | int exclusive; | ||
| 731 | |||
| 732 | /* | ||
| 733 | * Recursion avoidance: | ||
| 734 | * | ||
| 735 | * task, softirq, irq, nmi context | ||
| 736 | */ | ||
| 737 | int recursion[4]; | ||
| 738 | }; | ||
| 739 | |||
| 740 | struct perf_output_handle { | ||
| 741 | struct perf_event *event; | ||
| 742 | struct perf_mmap_data *data; | ||
| 743 | unsigned long head; | ||
| 744 | unsigned long offset; | ||
| 745 | int nmi; | ||
| 746 | int sample; | ||
| 747 | int locked; | ||
| 748 | }; | ||
| 749 | |||
| 750 | #ifdef CONFIG_PERF_EVENTS | ||
| 751 | |||
| 752 | /* | ||
| 753 | * Set by architecture code: | ||
| 754 | */ | ||
| 755 | extern int perf_max_events; | ||
| 756 | |||
| 757 | extern const struct pmu *hw_perf_event_init(struct perf_event *event); | ||
| 758 | |||
| 759 | extern void perf_event_task_sched_in(struct task_struct *task, int cpu); | ||
| 760 | extern void perf_event_task_sched_out(struct task_struct *task, | ||
| 761 | struct task_struct *next, int cpu); | ||
| 762 | extern void perf_event_task_tick(struct task_struct *task, int cpu); | ||
| 763 | extern int perf_event_init_task(struct task_struct *child); | ||
| 764 | extern void perf_event_exit_task(struct task_struct *child); | ||
| 765 | extern void perf_event_free_task(struct task_struct *task); | ||
| 766 | extern void set_perf_event_pending(void); | ||
| 767 | extern void perf_event_do_pending(void); | ||
| 768 | extern void perf_event_print_debug(void); | ||
| 769 | extern void __perf_disable(void); | ||
| 770 | extern bool __perf_enable(void); | ||
| 771 | extern void perf_disable(void); | ||
| 772 | extern void perf_enable(void); | ||
| 773 | extern int perf_event_task_disable(void); | ||
| 774 | extern int perf_event_task_enable(void); | ||
| 775 | extern int hw_perf_group_sched_in(struct perf_event *group_leader, | ||
| 776 | struct perf_cpu_context *cpuctx, | ||
| 777 | struct perf_event_context *ctx, int cpu); | ||
| 778 | extern void perf_event_update_userpage(struct perf_event *event); | ||
| 779 | extern int perf_event_release_kernel(struct perf_event *event); | ||
| 780 | extern struct perf_event * | ||
| 781 | perf_event_create_kernel_counter(struct perf_event_attr *attr, | ||
| 782 | int cpu, | ||
| 783 | pid_t pid, | ||
| 784 | perf_callback_t callback); | ||
| 785 | extern u64 perf_event_read_value(struct perf_event *event, | ||
| 786 | u64 *enabled, u64 *running); | ||
| 787 | |||
| 788 | struct perf_sample_data { | ||
| 789 | u64 type; | ||
| 790 | |||
| 791 | u64 ip; | ||
| 792 | struct { | ||
| 793 | u32 pid; | ||
| 794 | u32 tid; | ||
| 795 | } tid_entry; | ||
| 796 | u64 time; | ||
| 797 | u64 addr; | ||
| 798 | u64 id; | ||
| 799 | u64 stream_id; | ||
| 800 | struct { | ||
| 801 | u32 cpu; | ||
| 802 | u32 reserved; | ||
| 803 | } cpu_entry; | ||
| 804 | u64 period; | ||
| 805 | struct perf_callchain_entry *callchain; | ||
| 806 | struct perf_raw_record *raw; | ||
| 807 | }; | ||
| 808 | |||
| 809 | extern void perf_output_sample(struct perf_output_handle *handle, | ||
| 810 | struct perf_event_header *header, | ||
| 811 | struct perf_sample_data *data, | ||
| 812 | struct perf_event *event); | ||
| 813 | extern void perf_prepare_sample(struct perf_event_header *header, | ||
| 814 | struct perf_sample_data *data, | ||
| 815 | struct perf_event *event, | ||
| 816 | struct pt_regs *regs); | ||
| 817 | |||
| 818 | extern int perf_event_overflow(struct perf_event *event, int nmi, | ||
| 819 | struct perf_sample_data *data, | ||
| 820 | struct pt_regs *regs); | ||
| 821 | |||
| 822 | /* | ||
| 823 | * Return 1 for a software event, 0 for a hardware event | ||
| 824 | */ | ||
| 825 | static inline int is_software_event(struct perf_event *event) | ||
| 826 | { | ||
| 827 | return (event->attr.type != PERF_TYPE_RAW) && | ||
| 828 | (event->attr.type != PERF_TYPE_HARDWARE) && | ||
| 829 | (event->attr.type != PERF_TYPE_HW_CACHE); | ||
| 830 | } | ||
| 831 | |||
| 832 | extern atomic_t perf_swevent_enabled[PERF_COUNT_SW_MAX]; | ||
| 833 | |||
| 834 | extern void __perf_sw_event(u32, u64, int, struct pt_regs *, u64); | ||
| 835 | |||
| 836 | static inline void | ||
| 837 | perf_sw_event(u32 event_id, u64 nr, int nmi, struct pt_regs *regs, u64 addr) | ||
| 838 | { | ||
| 839 | if (atomic_read(&perf_swevent_enabled[event_id])) | ||
| 840 | __perf_sw_event(event_id, nr, nmi, regs, addr); | ||
| 841 | } | ||
| 842 | |||
| 843 | extern void __perf_event_mmap(struct vm_area_struct *vma); | ||
| 844 | |||
| 845 | static inline void perf_event_mmap(struct vm_area_struct *vma) | ||
| 846 | { | ||
| 847 | if (vma->vm_flags & VM_EXEC) | ||
| 848 | __perf_event_mmap(vma); | ||
| 849 | } | ||
| 850 | |||
| 851 | extern void perf_event_comm(struct task_struct *tsk); | ||
| 852 | extern void perf_event_fork(struct task_struct *tsk); | ||
| 853 | |||
| 854 | extern struct perf_callchain_entry *perf_callchain(struct pt_regs *regs); | ||
| 855 | |||
| 856 | extern int sysctl_perf_event_paranoid; | ||
| 857 | extern int sysctl_perf_event_mlock; | ||
| 858 | extern int sysctl_perf_event_sample_rate; | ||
| 859 | |||
| 860 | extern void perf_event_init(void); | ||
| 861 | extern void perf_tp_event(int event_id, u64 addr, u64 count, | ||
| 862 | void *record, int entry_size); | ||
| 863 | extern void perf_bp_event(struct perf_event *event, void *data); | ||
| 864 | |||
| 865 | #ifndef perf_misc_flags | ||
| 866 | #define perf_misc_flags(regs) (user_mode(regs) ? PERF_RECORD_MISC_USER : \ | ||
| 867 | PERF_RECORD_MISC_KERNEL) | ||
| 868 | #define perf_instruction_pointer(regs) instruction_pointer(regs) | ||
| 869 | #endif | ||
| 870 | |||
| 871 | extern int perf_output_begin(struct perf_output_handle *handle, | ||
| 872 | struct perf_event *event, unsigned int size, | ||
| 873 | int nmi, int sample); | ||
| 874 | extern void perf_output_end(struct perf_output_handle *handle); | ||
| 875 | extern void perf_output_copy(struct perf_output_handle *handle, | ||
| 876 | const void *buf, unsigned int len); | ||
| 877 | extern int perf_swevent_get_recursion_context(void); | ||
| 878 | extern void perf_swevent_put_recursion_context(int rctx); | ||
| 879 | #else | ||
| 880 | static inline void | ||
| 881 | perf_event_task_sched_in(struct task_struct *task, int cpu) { } | ||
| 882 | static inline void | ||
| 883 | perf_event_task_sched_out(struct task_struct *task, | ||
| 884 | struct task_struct *next, int cpu) { } | ||
| 885 | static inline void | ||
| 886 | perf_event_task_tick(struct task_struct *task, int cpu) { } | ||
| 887 | static inline int perf_event_init_task(struct task_struct *child) { return 0; } | ||
| 888 | static inline void perf_event_exit_task(struct task_struct *child) { } | ||
| 889 | static inline void perf_event_free_task(struct task_struct *task) { } | ||
| 890 | static inline void perf_event_do_pending(void) { } | ||
| 891 | static inline void perf_event_print_debug(void) { } | ||
| 892 | static inline void perf_disable(void) { } | ||
| 893 | static inline void perf_enable(void) { } | ||
| 894 | static inline int perf_event_task_disable(void) { return -EINVAL; } | ||
| 895 | static inline int perf_event_task_enable(void) { return -EINVAL; } | ||
| 896 | |||
| 897 | static inline void | ||
| 898 | perf_sw_event(u32 event_id, u64 nr, int nmi, | ||
| 899 | struct pt_regs *regs, u64 addr) { } | ||
| 900 | static inline void | ||
| 901 | perf_bp_event(struct perf_event *event, void *data) { } | ||
| 902 | |||
| 903 | static inline void perf_event_mmap(struct vm_area_struct *vma) { } | ||
| 904 | static inline void perf_event_comm(struct task_struct *tsk) { } | ||
| 905 | static inline void perf_event_fork(struct task_struct *tsk) { } | ||
| 906 | static inline void perf_event_init(void) { } | ||
| 907 | static inline int perf_swevent_get_recursion_context(void) { return -1; } | ||
| 908 | static inline void perf_swevent_put_recursion_context(int rctx) { } | ||
| 909 | |||
| 910 | #endif | ||
| 911 | |||
| 912 | #define perf_output_put(handle, x) \ | ||
| 913 | perf_output_copy((handle), &(x), sizeof(x)) | ||
| 914 | |||
| 915 | #endif /* __KERNEL__ */ | ||
| 916 | #endif /* _LINUX_PERF_EVENT_H */ | ||
diff --git a/include/linux/phonet.h b/include/linux/phonet.h index ee5e3c9e2bca..e5126cff9b2a 100644 --- a/include/linux/phonet.h +++ b/include/linux/phonet.h | |||
| @@ -38,6 +38,7 @@ | |||
| 38 | #define PNPIPE_IFINDEX 2 | 38 | #define PNPIPE_IFINDEX 2 |
| 39 | 39 | ||
| 40 | #define PNADDR_ANY 0 | 40 | #define PNADDR_ANY 0 |
| 41 | #define PNADDR_BROADCAST 0xFC | ||
| 41 | #define PNPORT_RESOURCE_ROUTING 0 | 42 | #define PNPORT_RESOURCE_ROUTING 0 |
| 42 | 43 | ||
| 43 | /* Values for PNPIPE_ENCAP option */ | 44 | /* Values for PNPIPE_ENCAP option */ |
| @@ -99,6 +100,9 @@ struct sockaddr_pn { | |||
| 99 | __u8 spn_zero[sizeof(struct sockaddr) - sizeof(sa_family_t) - 3]; | 100 | __u8 spn_zero[sizeof(struct sockaddr) - sizeof(sa_family_t) - 3]; |
| 100 | } __attribute__ ((packed)); | 101 | } __attribute__ ((packed)); |
| 101 | 102 | ||
| 103 | /* Well known address */ | ||
| 104 | #define PN_DEV_PC 0x10 | ||
| 105 | |||
| 102 | static inline __u16 pn_object(__u8 addr, __u16 port) | 106 | static inline __u16 pn_object(__u8 addr, __u16 port) |
| 103 | { | 107 | { |
| 104 | return (addr << 8) | (port & 0x3ff); | 108 | return (addr << 8) | (port & 0x3ff); |
| @@ -170,4 +174,21 @@ static inline __u8 pn_sockaddr_get_resource(const struct sockaddr_pn *spn) | |||
| 170 | return spn->spn_resource; | 174 | return spn->spn_resource; |
| 171 | } | 175 | } |
| 172 | 176 | ||
| 177 | /* Phonet device ioctl requests */ | ||
| 178 | #ifdef __KERNEL__ | ||
| 179 | #define SIOCPNGAUTOCONF (SIOCDEVPRIVATE + 0) | ||
| 180 | |||
| 181 | struct if_phonet_autoconf { | ||
| 182 | uint8_t device; | ||
| 183 | }; | ||
| 184 | |||
| 185 | struct if_phonet_req { | ||
| 186 | char ifr_phonet_name[16]; | ||
| 187 | union { | ||
| 188 | struct if_phonet_autoconf ifru_phonet_autoconf; | ||
| 189 | } ifr_ifru; | ||
| 190 | }; | ||
| 191 | #define ifr_phonet_autoconf ifr_ifru.ifru_phonet_autoconf | ||
| 192 | #endif /* __KERNEL__ */ | ||
| 193 | |||
| 173 | #endif | 194 | #endif |
diff --git a/include/linux/pkt_cls.h b/include/linux/pkt_cls.h index 3c842edff388..7f6ba8658abe 100644 --- a/include/linux/pkt_cls.h +++ b/include/linux/pkt_cls.h | |||
| @@ -75,8 +75,7 @@ bits 9,10,11: redirect counter - redirect TTL. Loop avoidance | |||
| 75 | #define SET_TC_AT(v,n) ((V_TC_AT(n)) | (v & ~M_TC_AT)) | 75 | #define SET_TC_AT(v,n) ((V_TC_AT(n)) | (v & ~M_TC_AT)) |
| 76 | 76 | ||
| 77 | /* Action attributes */ | 77 | /* Action attributes */ |
| 78 | enum | 78 | enum { |
| 79 | { | ||
| 80 | TCA_ACT_UNSPEC, | 79 | TCA_ACT_UNSPEC, |
| 81 | TCA_ACT_KIND, | 80 | TCA_ACT_KIND, |
| 82 | TCA_ACT_OPTIONS, | 81 | TCA_ACT_OPTIONS, |
| @@ -108,8 +107,7 @@ enum | |||
| 108 | #define TC_ACT_JUMP 0x10000000 | 107 | #define TC_ACT_JUMP 0x10000000 |
| 109 | 108 | ||
| 110 | /* Action type identifiers*/ | 109 | /* Action type identifiers*/ |
| 111 | enum | 110 | enum { |
| 112 | { | ||
| 113 | TCA_ID_UNSPEC=0, | 111 | TCA_ID_UNSPEC=0, |
| 114 | TCA_ID_POLICE=1, | 112 | TCA_ID_POLICE=1, |
| 115 | /* other actions go here */ | 113 | /* other actions go here */ |
| @@ -118,8 +116,7 @@ enum | |||
| 118 | 116 | ||
| 119 | #define TCA_ID_MAX __TCA_ID_MAX | 117 | #define TCA_ID_MAX __TCA_ID_MAX |
| 120 | 118 | ||
| 121 | struct tc_police | 119 | struct tc_police { |
| 122 | { | ||
| 123 | __u32 index; | 120 | __u32 index; |
| 124 | int action; | 121 | int action; |
| 125 | #define TC_POLICE_UNSPEC TC_ACT_UNSPEC | 122 | #define TC_POLICE_UNSPEC TC_ACT_UNSPEC |
| @@ -138,15 +135,13 @@ struct tc_police | |||
| 138 | __u32 capab; | 135 | __u32 capab; |
| 139 | }; | 136 | }; |
| 140 | 137 | ||
| 141 | struct tcf_t | 138 | struct tcf_t { |
| 142 | { | ||
| 143 | __u64 install; | 139 | __u64 install; |
| 144 | __u64 lastuse; | 140 | __u64 lastuse; |
| 145 | __u64 expires; | 141 | __u64 expires; |
| 146 | }; | 142 | }; |
| 147 | 143 | ||
| 148 | struct tc_cnt | 144 | struct tc_cnt { |
| 149 | { | ||
| 150 | int refcnt; | 145 | int refcnt; |
| 151 | int bindcnt; | 146 | int bindcnt; |
| 152 | }; | 147 | }; |
| @@ -158,8 +153,7 @@ struct tc_cnt | |||
| 158 | int refcnt; \ | 153 | int refcnt; \ |
| 159 | int bindcnt | 154 | int bindcnt |
| 160 | 155 | ||
| 161 | enum | 156 | enum { |
| 162 | { | ||
| 163 | TCA_POLICE_UNSPEC, | 157 | TCA_POLICE_UNSPEC, |
| 164 | TCA_POLICE_TBF, | 158 | TCA_POLICE_TBF, |
| 165 | TCA_POLICE_RATE, | 159 | TCA_POLICE_RATE, |
| @@ -182,8 +176,7 @@ enum | |||
| 182 | #define TC_U32_UNSPEC 0 | 176 | #define TC_U32_UNSPEC 0 |
| 183 | #define TC_U32_ROOT (0xFFF00000) | 177 | #define TC_U32_ROOT (0xFFF00000) |
| 184 | 178 | ||
| 185 | enum | 179 | enum { |
| 186 | { | ||
| 187 | TCA_U32_UNSPEC, | 180 | TCA_U32_UNSPEC, |
| 188 | TCA_U32_CLASSID, | 181 | TCA_U32_CLASSID, |
| 189 | TCA_U32_HASH, | 182 | TCA_U32_HASH, |
| @@ -200,16 +193,14 @@ enum | |||
| 200 | 193 | ||
| 201 | #define TCA_U32_MAX (__TCA_U32_MAX - 1) | 194 | #define TCA_U32_MAX (__TCA_U32_MAX - 1) |
| 202 | 195 | ||
| 203 | struct tc_u32_key | 196 | struct tc_u32_key { |
| 204 | { | ||
| 205 | __be32 mask; | 197 | __be32 mask; |
| 206 | __be32 val; | 198 | __be32 val; |
| 207 | int off; | 199 | int off; |
| 208 | int offmask; | 200 | int offmask; |
| 209 | }; | 201 | }; |
| 210 | 202 | ||
| 211 | struct tc_u32_sel | 203 | struct tc_u32_sel { |
| 212 | { | ||
| 213 | unsigned char flags; | 204 | unsigned char flags; |
| 214 | unsigned char offshift; | 205 | unsigned char offshift; |
| 215 | unsigned char nkeys; | 206 | unsigned char nkeys; |
| @@ -223,15 +214,13 @@ struct tc_u32_sel | |||
| 223 | struct tc_u32_key keys[0]; | 214 | struct tc_u32_key keys[0]; |
| 224 | }; | 215 | }; |
| 225 | 216 | ||
| 226 | struct tc_u32_mark | 217 | struct tc_u32_mark { |
| 227 | { | ||
| 228 | __u32 val; | 218 | __u32 val; |
| 229 | __u32 mask; | 219 | __u32 mask; |
| 230 | __u32 success; | 220 | __u32 success; |
| 231 | }; | 221 | }; |
| 232 | 222 | ||
| 233 | struct tc_u32_pcnt | 223 | struct tc_u32_pcnt { |
| 234 | { | ||
| 235 | __u64 rcnt; | 224 | __u64 rcnt; |
| 236 | __u64 rhit; | 225 | __u64 rhit; |
| 237 | __u64 kcnts[0]; | 226 | __u64 kcnts[0]; |
| @@ -249,8 +238,7 @@ struct tc_u32_pcnt | |||
| 249 | 238 | ||
| 250 | /* RSVP filter */ | 239 | /* RSVP filter */ |
| 251 | 240 | ||
| 252 | enum | 241 | enum { |
| 253 | { | ||
| 254 | TCA_RSVP_UNSPEC, | 242 | TCA_RSVP_UNSPEC, |
| 255 | TCA_RSVP_CLASSID, | 243 | TCA_RSVP_CLASSID, |
| 256 | TCA_RSVP_DST, | 244 | TCA_RSVP_DST, |
| @@ -263,15 +251,13 @@ enum | |||
| 263 | 251 | ||
| 264 | #define TCA_RSVP_MAX (__TCA_RSVP_MAX - 1 ) | 252 | #define TCA_RSVP_MAX (__TCA_RSVP_MAX - 1 ) |
| 265 | 253 | ||
| 266 | struct tc_rsvp_gpi | 254 | struct tc_rsvp_gpi { |
| 267 | { | ||
| 268 | __u32 key; | 255 | __u32 key; |
| 269 | __u32 mask; | 256 | __u32 mask; |
| 270 | int offset; | 257 | int offset; |
| 271 | }; | 258 | }; |
| 272 | 259 | ||
| 273 | struct tc_rsvp_pinfo | 260 | struct tc_rsvp_pinfo { |
| 274 | { | ||
| 275 | struct tc_rsvp_gpi dpi; | 261 | struct tc_rsvp_gpi dpi; |
| 276 | struct tc_rsvp_gpi spi; | 262 | struct tc_rsvp_gpi spi; |
| 277 | __u8 protocol; | 263 | __u8 protocol; |
| @@ -282,8 +268,7 @@ struct tc_rsvp_pinfo | |||
| 282 | 268 | ||
| 283 | /* ROUTE filter */ | 269 | /* ROUTE filter */ |
| 284 | 270 | ||
| 285 | enum | 271 | enum { |
| 286 | { | ||
| 287 | TCA_ROUTE4_UNSPEC, | 272 | TCA_ROUTE4_UNSPEC, |
| 288 | TCA_ROUTE4_CLASSID, | 273 | TCA_ROUTE4_CLASSID, |
| 289 | TCA_ROUTE4_TO, | 274 | TCA_ROUTE4_TO, |
| @@ -299,8 +284,7 @@ enum | |||
| 299 | 284 | ||
| 300 | /* FW filter */ | 285 | /* FW filter */ |
| 301 | 286 | ||
| 302 | enum | 287 | enum { |
| 303 | { | ||
| 304 | TCA_FW_UNSPEC, | 288 | TCA_FW_UNSPEC, |
| 305 | TCA_FW_CLASSID, | 289 | TCA_FW_CLASSID, |
| 306 | TCA_FW_POLICE, | 290 | TCA_FW_POLICE, |
| @@ -314,8 +298,7 @@ enum | |||
| 314 | 298 | ||
| 315 | /* TC index filter */ | 299 | /* TC index filter */ |
| 316 | 300 | ||
| 317 | enum | 301 | enum { |
| 318 | { | ||
| 319 | TCA_TCINDEX_UNSPEC, | 302 | TCA_TCINDEX_UNSPEC, |
| 320 | TCA_TCINDEX_HASH, | 303 | TCA_TCINDEX_HASH, |
| 321 | TCA_TCINDEX_MASK, | 304 | TCA_TCINDEX_MASK, |
| @@ -331,8 +314,7 @@ enum | |||
| 331 | 314 | ||
| 332 | /* Flow filter */ | 315 | /* Flow filter */ |
| 333 | 316 | ||
| 334 | enum | 317 | enum { |
| 335 | { | ||
| 336 | FLOW_KEY_SRC, | 318 | FLOW_KEY_SRC, |
| 337 | FLOW_KEY_DST, | 319 | FLOW_KEY_DST, |
| 338 | FLOW_KEY_PROTO, | 320 | FLOW_KEY_PROTO, |
| @@ -355,14 +337,12 @@ enum | |||
| 355 | 337 | ||
| 356 | #define FLOW_KEY_MAX (__FLOW_KEY_MAX - 1) | 338 | #define FLOW_KEY_MAX (__FLOW_KEY_MAX - 1) |
| 357 | 339 | ||
| 358 | enum | 340 | enum { |
| 359 | { | ||
| 360 | FLOW_MODE_MAP, | 341 | FLOW_MODE_MAP, |
| 361 | FLOW_MODE_HASH, | 342 | FLOW_MODE_HASH, |
| 362 | }; | 343 | }; |
| 363 | 344 | ||
| 364 | enum | 345 | enum { |
| 365 | { | ||
| 366 | TCA_FLOW_UNSPEC, | 346 | TCA_FLOW_UNSPEC, |
| 367 | TCA_FLOW_KEYS, | 347 | TCA_FLOW_KEYS, |
| 368 | TCA_FLOW_MODE, | 348 | TCA_FLOW_MODE, |
| @@ -383,8 +363,7 @@ enum | |||
| 383 | 363 | ||
| 384 | /* Basic filter */ | 364 | /* Basic filter */ |
| 385 | 365 | ||
| 386 | enum | 366 | enum { |
| 387 | { | ||
| 388 | TCA_BASIC_UNSPEC, | 367 | TCA_BASIC_UNSPEC, |
| 389 | TCA_BASIC_CLASSID, | 368 | TCA_BASIC_CLASSID, |
| 390 | TCA_BASIC_EMATCHES, | 369 | TCA_BASIC_EMATCHES, |
| @@ -398,8 +377,7 @@ enum | |||
| 398 | 377 | ||
| 399 | /* Cgroup classifier */ | 378 | /* Cgroup classifier */ |
| 400 | 379 | ||
| 401 | enum | 380 | enum { |
| 402 | { | ||
| 403 | TCA_CGROUP_UNSPEC, | 381 | TCA_CGROUP_UNSPEC, |
| 404 | TCA_CGROUP_ACT, | 382 | TCA_CGROUP_ACT, |
| 405 | TCA_CGROUP_POLICE, | 383 | TCA_CGROUP_POLICE, |
| @@ -411,14 +389,12 @@ enum | |||
| 411 | 389 | ||
| 412 | /* Extended Matches */ | 390 | /* Extended Matches */ |
| 413 | 391 | ||
| 414 | struct tcf_ematch_tree_hdr | 392 | struct tcf_ematch_tree_hdr { |
| 415 | { | ||
| 416 | __u16 nmatches; | 393 | __u16 nmatches; |
| 417 | __u16 progid; | 394 | __u16 progid; |
| 418 | }; | 395 | }; |
| 419 | 396 | ||
| 420 | enum | 397 | enum { |
| 421 | { | ||
| 422 | TCA_EMATCH_TREE_UNSPEC, | 398 | TCA_EMATCH_TREE_UNSPEC, |
| 423 | TCA_EMATCH_TREE_HDR, | 399 | TCA_EMATCH_TREE_HDR, |
| 424 | TCA_EMATCH_TREE_LIST, | 400 | TCA_EMATCH_TREE_LIST, |
| @@ -426,8 +402,7 @@ enum | |||
| 426 | }; | 402 | }; |
| 427 | #define TCA_EMATCH_TREE_MAX (__TCA_EMATCH_TREE_MAX - 1) | 403 | #define TCA_EMATCH_TREE_MAX (__TCA_EMATCH_TREE_MAX - 1) |
| 428 | 404 | ||
| 429 | struct tcf_ematch_hdr | 405 | struct tcf_ematch_hdr { |
| 430 | { | ||
| 431 | __u16 matchid; | 406 | __u16 matchid; |
| 432 | __u16 kind; | 407 | __u16 kind; |
| 433 | __u16 flags; | 408 | __u16 flags; |
| @@ -457,8 +432,7 @@ struct tcf_ematch_hdr | |||
| 457 | #define TCF_EM_REL_MASK 3 | 432 | #define TCF_EM_REL_MASK 3 |
| 458 | #define TCF_EM_REL_VALID(v) (((v) & TCF_EM_REL_MASK) != TCF_EM_REL_MASK) | 433 | #define TCF_EM_REL_VALID(v) (((v) & TCF_EM_REL_MASK) != TCF_EM_REL_MASK) |
| 459 | 434 | ||
| 460 | enum | 435 | enum { |
| 461 | { | ||
| 462 | TCF_LAYER_LINK, | 436 | TCF_LAYER_LINK, |
| 463 | TCF_LAYER_NETWORK, | 437 | TCF_LAYER_NETWORK, |
| 464 | TCF_LAYER_TRANSPORT, | 438 | TCF_LAYER_TRANSPORT, |
| @@ -479,13 +453,11 @@ enum | |||
| 479 | #define TCF_EM_VLAN 6 | 453 | #define TCF_EM_VLAN 6 |
| 480 | #define TCF_EM_MAX 6 | 454 | #define TCF_EM_MAX 6 |
| 481 | 455 | ||
| 482 | enum | 456 | enum { |
| 483 | { | ||
| 484 | TCF_EM_PROG_TC | 457 | TCF_EM_PROG_TC |
| 485 | }; | 458 | }; |
| 486 | 459 | ||
| 487 | enum | 460 | enum { |
| 488 | { | ||
| 489 | TCF_EM_OPND_EQ, | 461 | TCF_EM_OPND_EQ, |
| 490 | TCF_EM_OPND_GT, | 462 | TCF_EM_OPND_GT, |
| 491 | TCF_EM_OPND_LT | 463 | TCF_EM_OPND_LT |
diff --git a/include/linux/pkt_sched.h b/include/linux/pkt_sched.h index d51a2b3e221e..2cfa4bc8dea6 100644 --- a/include/linux/pkt_sched.h +++ b/include/linux/pkt_sched.h | |||
| @@ -29,8 +29,7 @@ | |||
| 29 | Particular schedulers may have also their private records. | 29 | Particular schedulers may have also their private records. |
| 30 | */ | 30 | */ |
| 31 | 31 | ||
| 32 | struct tc_stats | 32 | struct tc_stats { |
| 33 | { | ||
| 34 | __u64 bytes; /* NUmber of enqueues bytes */ | 33 | __u64 bytes; /* NUmber of enqueues bytes */ |
| 35 | __u32 packets; /* Number of enqueued packets */ | 34 | __u32 packets; /* Number of enqueued packets */ |
| 36 | __u32 drops; /* Packets dropped because of lack of resources */ | 35 | __u32 drops; /* Packets dropped because of lack of resources */ |
| @@ -42,8 +41,7 @@ struct tc_stats | |||
| 42 | __u32 backlog; | 41 | __u32 backlog; |
| 43 | }; | 42 | }; |
| 44 | 43 | ||
| 45 | struct tc_estimator | 44 | struct tc_estimator { |
| 46 | { | ||
| 47 | signed char interval; | 45 | signed char interval; |
| 48 | unsigned char ewma_log; | 46 | unsigned char ewma_log; |
| 49 | }; | 47 | }; |
| @@ -75,8 +73,7 @@ struct tc_estimator | |||
| 75 | #define TC_H_ROOT (0xFFFFFFFFU) | 73 | #define TC_H_ROOT (0xFFFFFFFFU) |
| 76 | #define TC_H_INGRESS (0xFFFFFFF1U) | 74 | #define TC_H_INGRESS (0xFFFFFFF1U) |
| 77 | 75 | ||
| 78 | struct tc_ratespec | 76 | struct tc_ratespec { |
| 79 | { | ||
| 80 | unsigned char cell_log; | 77 | unsigned char cell_log; |
| 81 | unsigned char __reserved; | 78 | unsigned char __reserved; |
| 82 | unsigned short overhead; | 79 | unsigned short overhead; |
| @@ -109,8 +106,7 @@ enum { | |||
| 109 | 106 | ||
| 110 | /* FIFO section */ | 107 | /* FIFO section */ |
| 111 | 108 | ||
| 112 | struct tc_fifo_qopt | 109 | struct tc_fifo_qopt { |
| 113 | { | ||
| 114 | __u32 limit; /* Queue length: bytes for bfifo, packets for pfifo */ | 110 | __u32 limit; /* Queue length: bytes for bfifo, packets for pfifo */ |
| 115 | }; | 111 | }; |
| 116 | 112 | ||
| @@ -119,8 +115,7 @@ struct tc_fifo_qopt | |||
| 119 | #define TCQ_PRIO_BANDS 16 | 115 | #define TCQ_PRIO_BANDS 16 |
| 120 | #define TCQ_MIN_PRIO_BANDS 2 | 116 | #define TCQ_MIN_PRIO_BANDS 2 |
| 121 | 117 | ||
| 122 | struct tc_prio_qopt | 118 | struct tc_prio_qopt { |
| 123 | { | ||
| 124 | int bands; /* Number of bands */ | 119 | int bands; /* Number of bands */ |
| 125 | __u8 priomap[TC_PRIO_MAX+1]; /* Map: logical priority -> PRIO band */ | 120 | __u8 priomap[TC_PRIO_MAX+1]; /* Map: logical priority -> PRIO band */ |
| 126 | }; | 121 | }; |
| @@ -134,8 +129,7 @@ struct tc_multiq_qopt { | |||
| 134 | 129 | ||
| 135 | /* TBF section */ | 130 | /* TBF section */ |
| 136 | 131 | ||
| 137 | struct tc_tbf_qopt | 132 | struct tc_tbf_qopt { |
| 138 | { | ||
| 139 | struct tc_ratespec rate; | 133 | struct tc_ratespec rate; |
| 140 | struct tc_ratespec peakrate; | 134 | struct tc_ratespec peakrate; |
| 141 | __u32 limit; | 135 | __u32 limit; |
| @@ -143,8 +137,7 @@ struct tc_tbf_qopt | |||
| 143 | __u32 mtu; | 137 | __u32 mtu; |
| 144 | }; | 138 | }; |
| 145 | 139 | ||
| 146 | enum | 140 | enum { |
| 147 | { | ||
| 148 | TCA_TBF_UNSPEC, | 141 | TCA_TBF_UNSPEC, |
| 149 | TCA_TBF_PARMS, | 142 | TCA_TBF_PARMS, |
| 150 | TCA_TBF_RTAB, | 143 | TCA_TBF_RTAB, |
| @@ -161,8 +154,7 @@ enum | |||
| 161 | 154 | ||
| 162 | /* SFQ section */ | 155 | /* SFQ section */ |
| 163 | 156 | ||
| 164 | struct tc_sfq_qopt | 157 | struct tc_sfq_qopt { |
| 165 | { | ||
| 166 | unsigned quantum; /* Bytes per round allocated to flow */ | 158 | unsigned quantum; /* Bytes per round allocated to flow */ |
| 167 | int perturb_period; /* Period of hash perturbation */ | 159 | int perturb_period; /* Period of hash perturbation */ |
| 168 | __u32 limit; /* Maximal packets in queue */ | 160 | __u32 limit; /* Maximal packets in queue */ |
| @@ -170,8 +162,7 @@ struct tc_sfq_qopt | |||
| 170 | unsigned flows; /* Maximal number of flows */ | 162 | unsigned flows; /* Maximal number of flows */ |
| 171 | }; | 163 | }; |
| 172 | 164 | ||
| 173 | struct tc_sfq_xstats | 165 | struct tc_sfq_xstats { |
| 174 | { | ||
| 175 | __s32 allot; | 166 | __s32 allot; |
| 176 | }; | 167 | }; |
| 177 | 168 | ||
| @@ -186,8 +177,7 @@ struct tc_sfq_xstats | |||
| 186 | 177 | ||
| 187 | /* RED section */ | 178 | /* RED section */ |
| 188 | 179 | ||
| 189 | enum | 180 | enum { |
| 190 | { | ||
| 191 | TCA_RED_UNSPEC, | 181 | TCA_RED_UNSPEC, |
| 192 | TCA_RED_PARMS, | 182 | TCA_RED_PARMS, |
| 193 | TCA_RED_STAB, | 183 | TCA_RED_STAB, |
| @@ -196,8 +186,7 @@ enum | |||
| 196 | 186 | ||
| 197 | #define TCA_RED_MAX (__TCA_RED_MAX - 1) | 187 | #define TCA_RED_MAX (__TCA_RED_MAX - 1) |
| 198 | 188 | ||
| 199 | struct tc_red_qopt | 189 | struct tc_red_qopt { |
| 200 | { | ||
| 201 | __u32 limit; /* HARD maximal queue length (bytes) */ | 190 | __u32 limit; /* HARD maximal queue length (bytes) */ |
| 202 | __u32 qth_min; /* Min average length threshold (bytes) */ | 191 | __u32 qth_min; /* Min average length threshold (bytes) */ |
| 203 | __u32 qth_max; /* Max average length threshold (bytes) */ | 192 | __u32 qth_max; /* Max average length threshold (bytes) */ |
| @@ -209,8 +198,7 @@ struct tc_red_qopt | |||
| 209 | #define TC_RED_HARDDROP 2 | 198 | #define TC_RED_HARDDROP 2 |
| 210 | }; | 199 | }; |
| 211 | 200 | ||
| 212 | struct tc_red_xstats | 201 | struct tc_red_xstats { |
| 213 | { | ||
| 214 | __u32 early; /* Early drops */ | 202 | __u32 early; /* Early drops */ |
| 215 | __u32 pdrop; /* Drops due to queue limits */ | 203 | __u32 pdrop; /* Drops due to queue limits */ |
| 216 | __u32 other; /* Drops due to drop() calls */ | 204 | __u32 other; /* Drops due to drop() calls */ |
| @@ -221,8 +209,7 @@ struct tc_red_xstats | |||
| 221 | 209 | ||
| 222 | #define MAX_DPs 16 | 210 | #define MAX_DPs 16 |
| 223 | 211 | ||
| 224 | enum | 212 | enum { |
| 225 | { | ||
| 226 | TCA_GRED_UNSPEC, | 213 | TCA_GRED_UNSPEC, |
| 227 | TCA_GRED_PARMS, | 214 | TCA_GRED_PARMS, |
| 228 | TCA_GRED_STAB, | 215 | TCA_GRED_STAB, |
| @@ -232,8 +219,7 @@ enum | |||
| 232 | 219 | ||
| 233 | #define TCA_GRED_MAX (__TCA_GRED_MAX - 1) | 220 | #define TCA_GRED_MAX (__TCA_GRED_MAX - 1) |
| 234 | 221 | ||
| 235 | struct tc_gred_qopt | 222 | struct tc_gred_qopt { |
| 236 | { | ||
| 237 | __u32 limit; /* HARD maximal queue length (bytes) */ | 223 | __u32 limit; /* HARD maximal queue length (bytes) */ |
| 238 | __u32 qth_min; /* Min average length threshold (bytes) */ | 224 | __u32 qth_min; /* Min average length threshold (bytes) */ |
| 239 | __u32 qth_max; /* Max average length threshold (bytes) */ | 225 | __u32 qth_max; /* Max average length threshold (bytes) */ |
| @@ -253,8 +239,7 @@ struct tc_gred_qopt | |||
| 253 | }; | 239 | }; |
| 254 | 240 | ||
| 255 | /* gred setup */ | 241 | /* gred setup */ |
| 256 | struct tc_gred_sopt | 242 | struct tc_gred_sopt { |
| 257 | { | ||
| 258 | __u32 DPs; | 243 | __u32 DPs; |
| 259 | __u32 def_DP; | 244 | __u32 def_DP; |
| 260 | __u8 grio; | 245 | __u8 grio; |
| @@ -267,8 +252,7 @@ struct tc_gred_sopt | |||
| 267 | #define TC_HTB_MAXDEPTH 8 | 252 | #define TC_HTB_MAXDEPTH 8 |
| 268 | #define TC_HTB_PROTOVER 3 /* the same as HTB and TC's major */ | 253 | #define TC_HTB_PROTOVER 3 /* the same as HTB and TC's major */ |
| 269 | 254 | ||
| 270 | struct tc_htb_opt | 255 | struct tc_htb_opt { |
| 271 | { | ||
| 272 | struct tc_ratespec rate; | 256 | struct tc_ratespec rate; |
| 273 | struct tc_ratespec ceil; | 257 | struct tc_ratespec ceil; |
| 274 | __u32 buffer; | 258 | __u32 buffer; |
| @@ -277,8 +261,7 @@ struct tc_htb_opt | |||
| 277 | __u32 level; /* out only */ | 261 | __u32 level; /* out only */ |
| 278 | __u32 prio; | 262 | __u32 prio; |
| 279 | }; | 263 | }; |
| 280 | struct tc_htb_glob | 264 | struct tc_htb_glob { |
| 281 | { | ||
| 282 | __u32 version; /* to match HTB/TC */ | 265 | __u32 version; /* to match HTB/TC */ |
| 283 | __u32 rate2quantum; /* bps->quantum divisor */ | 266 | __u32 rate2quantum; /* bps->quantum divisor */ |
| 284 | __u32 defcls; /* default class number */ | 267 | __u32 defcls; /* default class number */ |
| @@ -287,8 +270,7 @@ struct tc_htb_glob | |||
| 287 | /* stats */ | 270 | /* stats */ |
| 288 | __u32 direct_pkts; /* count of non shapped packets */ | 271 | __u32 direct_pkts; /* count of non shapped packets */ |
| 289 | }; | 272 | }; |
| 290 | enum | 273 | enum { |
| 291 | { | ||
| 292 | TCA_HTB_UNSPEC, | 274 | TCA_HTB_UNSPEC, |
| 293 | TCA_HTB_PARMS, | 275 | TCA_HTB_PARMS, |
| 294 | TCA_HTB_INIT, | 276 | TCA_HTB_INIT, |
| @@ -299,8 +281,7 @@ enum | |||
| 299 | 281 | ||
| 300 | #define TCA_HTB_MAX (__TCA_HTB_MAX - 1) | 282 | #define TCA_HTB_MAX (__TCA_HTB_MAX - 1) |
| 301 | 283 | ||
| 302 | struct tc_htb_xstats | 284 | struct tc_htb_xstats { |
| 303 | { | ||
| 304 | __u32 lends; | 285 | __u32 lends; |
| 305 | __u32 borrows; | 286 | __u32 borrows; |
| 306 | __u32 giants; /* too big packets (rate will not be accurate) */ | 287 | __u32 giants; /* too big packets (rate will not be accurate) */ |
| @@ -310,28 +291,24 @@ struct tc_htb_xstats | |||
| 310 | 291 | ||
| 311 | /* HFSC section */ | 292 | /* HFSC section */ |
| 312 | 293 | ||
| 313 | struct tc_hfsc_qopt | 294 | struct tc_hfsc_qopt { |
| 314 | { | ||
| 315 | __u16 defcls; /* default class */ | 295 | __u16 defcls; /* default class */ |
| 316 | }; | 296 | }; |
| 317 | 297 | ||
| 318 | struct tc_service_curve | 298 | struct tc_service_curve { |
| 319 | { | ||
| 320 | __u32 m1; /* slope of the first segment in bps */ | 299 | __u32 m1; /* slope of the first segment in bps */ |
| 321 | __u32 d; /* x-projection of the first segment in us */ | 300 | __u32 d; /* x-projection of the first segment in us */ |
| 322 | __u32 m2; /* slope of the second segment in bps */ | 301 | __u32 m2; /* slope of the second segment in bps */ |
| 323 | }; | 302 | }; |
| 324 | 303 | ||
| 325 | struct tc_hfsc_stats | 304 | struct tc_hfsc_stats { |
| 326 | { | ||
| 327 | __u64 work; /* total work done */ | 305 | __u64 work; /* total work done */ |
| 328 | __u64 rtwork; /* work done by real-time criteria */ | 306 | __u64 rtwork; /* work done by real-time criteria */ |
| 329 | __u32 period; /* current period */ | 307 | __u32 period; /* current period */ |
| 330 | __u32 level; /* class level in hierarchy */ | 308 | __u32 level; /* class level in hierarchy */ |
| 331 | }; | 309 | }; |
| 332 | 310 | ||
| 333 | enum | 311 | enum { |
| 334 | { | ||
| 335 | TCA_HFSC_UNSPEC, | 312 | TCA_HFSC_UNSPEC, |
| 336 | TCA_HFSC_RSC, | 313 | TCA_HFSC_RSC, |
| 337 | TCA_HFSC_FSC, | 314 | TCA_HFSC_FSC, |
| @@ -348,8 +325,7 @@ enum | |||
| 348 | #define TC_CBQ_MAXLEVEL 8 | 325 | #define TC_CBQ_MAXLEVEL 8 |
| 349 | #define TC_CBQ_DEF_EWMA 5 | 326 | #define TC_CBQ_DEF_EWMA 5 |
| 350 | 327 | ||
| 351 | struct tc_cbq_lssopt | 328 | struct tc_cbq_lssopt { |
| 352 | { | ||
| 353 | unsigned char change; | 329 | unsigned char change; |
| 354 | unsigned char flags; | 330 | unsigned char flags; |
| 355 | #define TCF_CBQ_LSS_BOUNDED 1 | 331 | #define TCF_CBQ_LSS_BOUNDED 1 |
| @@ -368,8 +344,7 @@ struct tc_cbq_lssopt | |||
| 368 | __u32 avpkt; | 344 | __u32 avpkt; |
| 369 | }; | 345 | }; |
| 370 | 346 | ||
| 371 | struct tc_cbq_wrropt | 347 | struct tc_cbq_wrropt { |
| 372 | { | ||
| 373 | unsigned char flags; | 348 | unsigned char flags; |
| 374 | unsigned char priority; | 349 | unsigned char priority; |
| 375 | unsigned char cpriority; | 350 | unsigned char cpriority; |
| @@ -378,8 +353,7 @@ struct tc_cbq_wrropt | |||
| 378 | __u32 weight; | 353 | __u32 weight; |
| 379 | }; | 354 | }; |
| 380 | 355 | ||
| 381 | struct tc_cbq_ovl | 356 | struct tc_cbq_ovl { |
| 382 | { | ||
| 383 | unsigned char strategy; | 357 | unsigned char strategy; |
| 384 | #define TC_CBQ_OVL_CLASSIC 0 | 358 | #define TC_CBQ_OVL_CLASSIC 0 |
| 385 | #define TC_CBQ_OVL_DELAY 1 | 359 | #define TC_CBQ_OVL_DELAY 1 |
| @@ -391,30 +365,26 @@ struct tc_cbq_ovl | |||
| 391 | __u32 penalty; | 365 | __u32 penalty; |
| 392 | }; | 366 | }; |
| 393 | 367 | ||
| 394 | struct tc_cbq_police | 368 | struct tc_cbq_police { |
| 395 | { | ||
| 396 | unsigned char police; | 369 | unsigned char police; |
| 397 | unsigned char __res1; | 370 | unsigned char __res1; |
| 398 | unsigned short __res2; | 371 | unsigned short __res2; |
| 399 | }; | 372 | }; |
| 400 | 373 | ||
| 401 | struct tc_cbq_fopt | 374 | struct tc_cbq_fopt { |
| 402 | { | ||
| 403 | __u32 split; | 375 | __u32 split; |
| 404 | __u32 defmap; | 376 | __u32 defmap; |
| 405 | __u32 defchange; | 377 | __u32 defchange; |
| 406 | }; | 378 | }; |
| 407 | 379 | ||
| 408 | struct tc_cbq_xstats | 380 | struct tc_cbq_xstats { |
| 409 | { | ||
| 410 | __u32 borrows; | 381 | __u32 borrows; |
| 411 | __u32 overactions; | 382 | __u32 overactions; |
| 412 | __s32 avgidle; | 383 | __s32 avgidle; |
| 413 | __s32 undertime; | 384 | __s32 undertime; |
| 414 | }; | 385 | }; |
| 415 | 386 | ||
| 416 | enum | 387 | enum { |
| 417 | { | ||
| 418 | TCA_CBQ_UNSPEC, | 388 | TCA_CBQ_UNSPEC, |
| 419 | TCA_CBQ_LSSOPT, | 389 | TCA_CBQ_LSSOPT, |
| 420 | TCA_CBQ_WRROPT, | 390 | TCA_CBQ_WRROPT, |
| @@ -459,8 +429,7 @@ enum { | |||
| 459 | 429 | ||
| 460 | /* Network emulator */ | 430 | /* Network emulator */ |
| 461 | 431 | ||
| 462 | enum | 432 | enum { |
| 463 | { | ||
| 464 | TCA_NETEM_UNSPEC, | 433 | TCA_NETEM_UNSPEC, |
| 465 | TCA_NETEM_CORR, | 434 | TCA_NETEM_CORR, |
| 466 | TCA_NETEM_DELAY_DIST, | 435 | TCA_NETEM_DELAY_DIST, |
| @@ -471,8 +440,7 @@ enum | |||
| 471 | 440 | ||
| 472 | #define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1) | 441 | #define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1) |
| 473 | 442 | ||
| 474 | struct tc_netem_qopt | 443 | struct tc_netem_qopt { |
| 475 | { | ||
| 476 | __u32 latency; /* added delay (us) */ | 444 | __u32 latency; /* added delay (us) */ |
| 477 | __u32 limit; /* fifo limit (packets) */ | 445 | __u32 limit; /* fifo limit (packets) */ |
| 478 | __u32 loss; /* random packet loss (0=none ~0=100%) */ | 446 | __u32 loss; /* random packet loss (0=none ~0=100%) */ |
| @@ -481,21 +449,18 @@ struct tc_netem_qopt | |||
| 481 | __u32 jitter; /* random jitter in latency (us) */ | 449 | __u32 jitter; /* random jitter in latency (us) */ |
| 482 | }; | 450 | }; |
| 483 | 451 | ||
| 484 | struct tc_netem_corr | 452 | struct tc_netem_corr { |
| 485 | { | ||
| 486 | __u32 delay_corr; /* delay correlation */ | 453 | __u32 delay_corr; /* delay correlation */ |
| 487 | __u32 loss_corr; /* packet loss correlation */ | 454 | __u32 loss_corr; /* packet loss correlation */ |
| 488 | __u32 dup_corr; /* duplicate correlation */ | 455 | __u32 dup_corr; /* duplicate correlation */ |
| 489 | }; | 456 | }; |
| 490 | 457 | ||
| 491 | struct tc_netem_reorder | 458 | struct tc_netem_reorder { |
| 492 | { | ||
| 493 | __u32 probability; | 459 | __u32 probability; |
| 494 | __u32 correlation; | 460 | __u32 correlation; |
| 495 | }; | 461 | }; |
| 496 | 462 | ||
| 497 | struct tc_netem_corrupt | 463 | struct tc_netem_corrupt { |
| 498 | { | ||
| 499 | __u32 probability; | 464 | __u32 probability; |
| 500 | __u32 correlation; | 465 | __u32 correlation; |
| 501 | }; | 466 | }; |
| @@ -504,8 +469,7 @@ struct tc_netem_corrupt | |||
| 504 | 469 | ||
| 505 | /* DRR */ | 470 | /* DRR */ |
| 506 | 471 | ||
| 507 | enum | 472 | enum { |
| 508 | { | ||
| 509 | TCA_DRR_UNSPEC, | 473 | TCA_DRR_UNSPEC, |
| 510 | TCA_DRR_QUANTUM, | 474 | TCA_DRR_QUANTUM, |
| 511 | __TCA_DRR_MAX | 475 | __TCA_DRR_MAX |
| @@ -513,8 +477,7 @@ enum | |||
| 513 | 477 | ||
| 514 | #define TCA_DRR_MAX (__TCA_DRR_MAX - 1) | 478 | #define TCA_DRR_MAX (__TCA_DRR_MAX - 1) |
| 515 | 479 | ||
| 516 | struct tc_drr_stats | 480 | struct tc_drr_stats { |
| 517 | { | ||
| 518 | __u32 deficit; | 481 | __u32 deficit; |
| 519 | }; | 482 | }; |
| 520 | 483 | ||
diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h index 8dc5123b6305..3c6675c2444b 100644 --- a/include/linux/platform_device.h +++ b/include/linux/platform_device.h | |||
| @@ -22,6 +22,9 @@ struct platform_device { | |||
| 22 | struct resource * resource; | 22 | struct resource * resource; |
| 23 | 23 | ||
| 24 | struct platform_device_id *id_entry; | 24 | struct platform_device_id *id_entry; |
| 25 | |||
| 26 | /* arch specific additions */ | ||
| 27 | struct pdev_archdata archdata; | ||
| 25 | }; | 28 | }; |
| 26 | 29 | ||
| 27 | #define platform_get_device_id(pdev) ((pdev)->id_entry) | 30 | #define platform_get_device_id(pdev) ((pdev)->id_entry) |
| @@ -57,8 +60,6 @@ struct platform_driver { | |||
| 57 | int (*remove)(struct platform_device *); | 60 | int (*remove)(struct platform_device *); |
| 58 | void (*shutdown)(struct platform_device *); | 61 | void (*shutdown)(struct platform_device *); |
| 59 | int (*suspend)(struct platform_device *, pm_message_t state); | 62 | int (*suspend)(struct platform_device *, pm_message_t state); |
| 60 | int (*suspend_late)(struct platform_device *, pm_message_t state); | ||
| 61 | int (*resume_early)(struct platform_device *); | ||
| 62 | int (*resume)(struct platform_device *); | 63 | int (*resume)(struct platform_device *); |
| 63 | struct device_driver driver; | 64 | struct device_driver driver; |
| 64 | struct platform_device_id *id_table; | 65 | struct platform_device_id *id_table; |
diff --git a/include/linux/pm.h b/include/linux/pm.h index b3f74764a586..0d65934246af 100644 --- a/include/linux/pm.h +++ b/include/linux/pm.h | |||
| @@ -22,6 +22,10 @@ | |||
| 22 | #define _LINUX_PM_H | 22 | #define _LINUX_PM_H |
| 23 | 23 | ||
| 24 | #include <linux/list.h> | 24 | #include <linux/list.h> |
| 25 | #include <linux/workqueue.h> | ||
| 26 | #include <linux/spinlock.h> | ||
| 27 | #include <linux/wait.h> | ||
| 28 | #include <linux/timer.h> | ||
| 25 | 29 | ||
| 26 | /* | 30 | /* |
| 27 | * Callbacks for platform drivers to implement. | 31 | * Callbacks for platform drivers to implement. |
| @@ -165,6 +169,29 @@ typedef struct pm_message { | |||
| 165 | * It is allowed to unregister devices while the above callbacks are being | 169 | * It is allowed to unregister devices while the above callbacks are being |
| 166 | * executed. However, it is not allowed to unregister a device from within any | 170 | * executed. However, it is not allowed to unregister a device from within any |
| 167 | * of its own callbacks. | 171 | * of its own callbacks. |
| 172 | * | ||
| 173 | * There also are the following callbacks related to run-time power management | ||
| 174 | * of devices: | ||
| 175 | * | ||
| 176 | * @runtime_suspend: Prepare the device for a condition in which it won't be | ||
| 177 | * able to communicate with the CPU(s) and RAM due to power management. | ||
| 178 | * This need not mean that the device should be put into a low power state. | ||
| 179 | * For example, if the device is behind a link which is about to be turned | ||
| 180 | * off, the device may remain at full power. If the device does go to low | ||
| 181 | * power and is capable of generating run-time wake-up events, remote | ||
| 182 | * wake-up (i.e., a hardware mechanism allowing the device to request a | ||
| 183 | * change of its power state via a wake-up event, such as PCI PME) should | ||
| 184 | * be enabled for it. | ||
| 185 | * | ||
| 186 | * @runtime_resume: Put the device into the fully active state in response to a | ||
| 187 | * wake-up event generated by hardware or at the request of software. If | ||
| 188 | * necessary, put the device into the full power state and restore its | ||
| 189 | * registers, so that it is fully operational. | ||
| 190 | * | ||
| 191 | * @runtime_idle: Device appears to be inactive and it might be put into a low | ||
| 192 | * power state if all of the necessary conditions are satisfied. Check | ||
| 193 | * these conditions and handle the device as appropriate, possibly queueing | ||
| 194 | * a suspend request for it. The return value is ignored by the PM core. | ||
| 168 | */ | 195 | */ |
| 169 | 196 | ||
| 170 | struct dev_pm_ops { | 197 | struct dev_pm_ops { |
| @@ -182,8 +209,25 @@ struct dev_pm_ops { | |||
| 182 | int (*thaw_noirq)(struct device *dev); | 209 | int (*thaw_noirq)(struct device *dev); |
| 183 | int (*poweroff_noirq)(struct device *dev); | 210 | int (*poweroff_noirq)(struct device *dev); |
| 184 | int (*restore_noirq)(struct device *dev); | 211 | int (*restore_noirq)(struct device *dev); |
| 212 | int (*runtime_suspend)(struct device *dev); | ||
| 213 | int (*runtime_resume)(struct device *dev); | ||
| 214 | int (*runtime_idle)(struct device *dev); | ||
| 185 | }; | 215 | }; |
| 186 | 216 | ||
| 217 | /* | ||
| 218 | * Use this if you want to use the same suspend and resume callbacks for suspend | ||
| 219 | * to RAM and hibernation. | ||
| 220 | */ | ||
| 221 | #define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \ | ||
| 222 | struct dev_pm_ops name = { \ | ||
| 223 | .suspend = suspend_fn, \ | ||
| 224 | .resume = resume_fn, \ | ||
| 225 | .freeze = suspend_fn, \ | ||
| 226 | .thaw = resume_fn, \ | ||
| 227 | .poweroff = suspend_fn, \ | ||
| 228 | .restore = resume_fn, \ | ||
| 229 | } | ||
| 230 | |||
| 187 | /** | 231 | /** |
| 188 | * PM_EVENT_ messages | 232 | * PM_EVENT_ messages |
| 189 | * | 233 | * |
| @@ -315,14 +359,81 @@ enum dpm_state { | |||
| 315 | DPM_OFF_IRQ, | 359 | DPM_OFF_IRQ, |
| 316 | }; | 360 | }; |
| 317 | 361 | ||
| 362 | /** | ||
| 363 | * Device run-time power management status. | ||
| 364 | * | ||
| 365 | * These status labels are used internally by the PM core to indicate the | ||
| 366 | * current status of a device with respect to the PM core operations. They do | ||
| 367 | * not reflect the actual power state of the device or its status as seen by the | ||
| 368 | * driver. | ||
| 369 | * | ||
| 370 | * RPM_ACTIVE Device is fully operational. Indicates that the device | ||
| 371 | * bus type's ->runtime_resume() callback has completed | ||
| 372 | * successfully. | ||
| 373 | * | ||
| 374 | * RPM_SUSPENDED Device bus type's ->runtime_suspend() callback has | ||
| 375 | * completed successfully. The device is regarded as | ||
| 376 | * suspended. | ||
| 377 | * | ||
| 378 | * RPM_RESUMING Device bus type's ->runtime_resume() callback is being | ||
| 379 | * executed. | ||
| 380 | * | ||
| 381 | * RPM_SUSPENDING Device bus type's ->runtime_suspend() callback is being | ||
| 382 | * executed. | ||
| 383 | */ | ||
| 384 | |||
| 385 | enum rpm_status { | ||
| 386 | RPM_ACTIVE = 0, | ||
| 387 | RPM_RESUMING, | ||
| 388 | RPM_SUSPENDED, | ||
| 389 | RPM_SUSPENDING, | ||
| 390 | }; | ||
| 391 | |||
| 392 | /** | ||
| 393 | * Device run-time power management request types. | ||
| 394 | * | ||
| 395 | * RPM_REQ_NONE Do nothing. | ||
| 396 | * | ||
| 397 | * RPM_REQ_IDLE Run the device bus type's ->runtime_idle() callback | ||
| 398 | * | ||
| 399 | * RPM_REQ_SUSPEND Run the device bus type's ->runtime_suspend() callback | ||
| 400 | * | ||
| 401 | * RPM_REQ_RESUME Run the device bus type's ->runtime_resume() callback | ||
| 402 | */ | ||
| 403 | |||
| 404 | enum rpm_request { | ||
| 405 | RPM_REQ_NONE = 0, | ||
| 406 | RPM_REQ_IDLE, | ||
| 407 | RPM_REQ_SUSPEND, | ||
| 408 | RPM_REQ_RESUME, | ||
| 409 | }; | ||
| 410 | |||
| 318 | struct dev_pm_info { | 411 | struct dev_pm_info { |
| 319 | pm_message_t power_state; | 412 | pm_message_t power_state; |
| 320 | unsigned can_wakeup:1; | 413 | unsigned int can_wakeup:1; |
| 321 | unsigned should_wakeup:1; | 414 | unsigned int should_wakeup:1; |
| 322 | enum dpm_state status; /* Owned by the PM core */ | 415 | enum dpm_state status; /* Owned by the PM core */ |
| 323 | #ifdef CONFIG_PM_SLEEP | 416 | #ifdef CONFIG_PM_SLEEP |
| 324 | struct list_head entry; | 417 | struct list_head entry; |
| 325 | #endif | 418 | #endif |
| 419 | #ifdef CONFIG_PM_RUNTIME | ||
| 420 | struct timer_list suspend_timer; | ||
| 421 | unsigned long timer_expires; | ||
| 422 | struct work_struct work; | ||
| 423 | wait_queue_head_t wait_queue; | ||
| 424 | spinlock_t lock; | ||
| 425 | atomic_t usage_count; | ||
| 426 | atomic_t child_count; | ||
| 427 | unsigned int disable_depth:3; | ||
| 428 | unsigned int ignore_children:1; | ||
| 429 | unsigned int idle_notification:1; | ||
| 430 | unsigned int request_pending:1; | ||
| 431 | unsigned int deferred_resume:1; | ||
| 432 | unsigned int run_wake:1; | ||
| 433 | enum rpm_request request; | ||
| 434 | enum rpm_status runtime_status; | ||
| 435 | int runtime_error; | ||
| 436 | #endif | ||
| 326 | }; | 437 | }; |
| 327 | 438 | ||
| 328 | /* | 439 | /* |
diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h new file mode 100644 index 000000000000..370ce0a6fe4a --- /dev/null +++ b/include/linux/pm_runtime.h | |||
| @@ -0,0 +1,126 @@ | |||
| 1 | /* | ||
| 2 | * pm_runtime.h - Device run-time power management helper functions. | ||
| 3 | * | ||
| 4 | * Copyright (C) 2009 Rafael J. Wysocki <rjw@sisk.pl> | ||
| 5 | * | ||
| 6 | * This file is released under the GPLv2. | ||
| 7 | */ | ||
| 8 | |||
| 9 | #ifndef _LINUX_PM_RUNTIME_H | ||
| 10 | #define _LINUX_PM_RUNTIME_H | ||
| 11 | |||
| 12 | #include <linux/device.h> | ||
| 13 | #include <linux/pm.h> | ||
| 14 | |||
| 15 | #ifdef CONFIG_PM_RUNTIME | ||
| 16 | |||
| 17 | extern struct workqueue_struct *pm_wq; | ||
| 18 | |||
| 19 | extern int pm_runtime_idle(struct device *dev); | ||
| 20 | extern int pm_runtime_suspend(struct device *dev); | ||
| 21 | extern int pm_runtime_resume(struct device *dev); | ||
| 22 | extern int pm_request_idle(struct device *dev); | ||
| 23 | extern int pm_schedule_suspend(struct device *dev, unsigned int delay); | ||
| 24 | extern int pm_request_resume(struct device *dev); | ||
| 25 | extern int __pm_runtime_get(struct device *dev, bool sync); | ||
| 26 | extern int __pm_runtime_put(struct device *dev, bool sync); | ||
| 27 | extern int __pm_runtime_set_status(struct device *dev, unsigned int status); | ||
| 28 | extern int pm_runtime_barrier(struct device *dev); | ||
| 29 | extern void pm_runtime_enable(struct device *dev); | ||
| 30 | extern void __pm_runtime_disable(struct device *dev, bool check_resume); | ||
| 31 | |||
| 32 | static inline bool pm_children_suspended(struct device *dev) | ||
| 33 | { | ||
| 34 | return dev->power.ignore_children | ||
| 35 | || !atomic_read(&dev->power.child_count); | ||
| 36 | } | ||
| 37 | |||
| 38 | static inline void pm_suspend_ignore_children(struct device *dev, bool enable) | ||
| 39 | { | ||
| 40 | dev->power.ignore_children = enable; | ||
| 41 | } | ||
| 42 | |||
| 43 | static inline void pm_runtime_get_noresume(struct device *dev) | ||
| 44 | { | ||
| 45 | atomic_inc(&dev->power.usage_count); | ||
| 46 | } | ||
| 47 | |||
| 48 | static inline void pm_runtime_put_noidle(struct device *dev) | ||
| 49 | { | ||
| 50 | atomic_add_unless(&dev->power.usage_count, -1, 0); | ||
| 51 | } | ||
| 52 | |||
| 53 | static inline bool device_run_wake(struct device *dev) | ||
| 54 | { | ||
| 55 | return dev->power.run_wake; | ||
| 56 | } | ||
| 57 | |||
| 58 | static inline void device_set_run_wake(struct device *dev, bool enable) | ||
| 59 | { | ||
| 60 | dev->power.run_wake = enable; | ||
| 61 | } | ||
| 62 | |||
| 63 | #else /* !CONFIG_PM_RUNTIME */ | ||
| 64 | |||
| 65 | static inline int pm_runtime_idle(struct device *dev) { return -ENOSYS; } | ||
| 66 | static inline int pm_runtime_suspend(struct device *dev) { return -ENOSYS; } | ||
| 67 | static inline int pm_runtime_resume(struct device *dev) { return 0; } | ||
| 68 | static inline int pm_request_idle(struct device *dev) { return -ENOSYS; } | ||
| 69 | static inline int pm_schedule_suspend(struct device *dev, unsigned int delay) | ||
| 70 | { | ||
| 71 | return -ENOSYS; | ||
| 72 | } | ||
| 73 | static inline int pm_request_resume(struct device *dev) { return 0; } | ||
| 74 | static inline int __pm_runtime_get(struct device *dev, bool sync) { return 1; } | ||
| 75 | static inline int __pm_runtime_put(struct device *dev, bool sync) { return 0; } | ||
| 76 | static inline int __pm_runtime_set_status(struct device *dev, | ||
| 77 | unsigned int status) { return 0; } | ||
| 78 | static inline int pm_runtime_barrier(struct device *dev) { return 0; } | ||
| 79 | static inline void pm_runtime_enable(struct device *dev) {} | ||
| 80 | static inline void __pm_runtime_disable(struct device *dev, bool c) {} | ||
| 81 | |||
| 82 | static inline bool pm_children_suspended(struct device *dev) { return false; } | ||
| 83 | static inline void pm_suspend_ignore_children(struct device *dev, bool en) {} | ||
| 84 | static inline void pm_runtime_get_noresume(struct device *dev) {} | ||
| 85 | static inline void pm_runtime_put_noidle(struct device *dev) {} | ||
| 86 | static inline bool device_run_wake(struct device *dev) { return false; } | ||
| 87 | static inline void device_set_run_wake(struct device *dev, bool enable) {} | ||
| 88 | |||
| 89 | #endif /* !CONFIG_PM_RUNTIME */ | ||
| 90 | |||
| 91 | static inline int pm_runtime_get(struct device *dev) | ||
| 92 | { | ||
| 93 | return __pm_runtime_get(dev, false); | ||
| 94 | } | ||
| 95 | |||
| 96 | static inline int pm_runtime_get_sync(struct device *dev) | ||
| 97 | { | ||
| 98 | return __pm_runtime_get(dev, true); | ||
| 99 | } | ||
| 100 | |||
| 101 | static inline int pm_runtime_put(struct device *dev) | ||
| 102 | { | ||
| 103 | return __pm_runtime_put(dev, false); | ||
| 104 | } | ||
| 105 | |||
| 106 | static inline int pm_runtime_put_sync(struct device *dev) | ||
| 107 | { | ||
| 108 | return __pm_runtime_put(dev, true); | ||
| 109 | } | ||
| 110 | |||
| 111 | static inline int pm_runtime_set_active(struct device *dev) | ||
| 112 | { | ||
| 113 | return __pm_runtime_set_status(dev, RPM_ACTIVE); | ||
| 114 | } | ||
| 115 | |||
| 116 | static inline void pm_runtime_set_suspended(struct device *dev) | ||
| 117 | { | ||
| 118 | __pm_runtime_set_status(dev, RPM_SUSPENDED); | ||
| 119 | } | ||
| 120 | |||
| 121 | static inline void pm_runtime_disable(struct device *dev) | ||
| 122 | { | ||
| 123 | __pm_runtime_disable(dev, true); | ||
| 124 | } | ||
| 125 | |||
| 126 | #endif | ||
diff --git a/include/linux/pnp.h b/include/linux/pnp.h index b063c7328ba5..fddfafaed024 100644 --- a/include/linux/pnp.h +++ b/include/linux/pnp.h | |||
| @@ -360,6 +360,7 @@ struct pnp_driver { | |||
| 360 | unsigned int flags; | 360 | unsigned int flags; |
| 361 | int (*probe) (struct pnp_dev *dev, const struct pnp_device_id *dev_id); | 361 | int (*probe) (struct pnp_dev *dev, const struct pnp_device_id *dev_id); |
| 362 | void (*remove) (struct pnp_dev *dev); | 362 | void (*remove) (struct pnp_dev *dev); |
| 363 | void (*shutdown) (struct pnp_dev *dev); | ||
| 363 | int (*suspend) (struct pnp_dev *dev, pm_message_t state); | 364 | int (*suspend) (struct pnp_dev *dev, pm_message_t state); |
| 364 | int (*resume) (struct pnp_dev *dev); | 365 | int (*resume) (struct pnp_dev *dev); |
| 365 | struct device_driver driver; | 366 | struct device_driver driver; |
diff --git a/include/linux/poison.h b/include/linux/poison.h index 6729f7dcd60e..7fc194aef8c2 100644 --- a/include/linux/poison.h +++ b/include/linux/poison.h | |||
| @@ -65,6 +65,9 @@ | |||
| 65 | #define MUTEX_DEBUG_INIT 0x11 | 65 | #define MUTEX_DEBUG_INIT 0x11 |
| 66 | #define MUTEX_DEBUG_FREE 0x22 | 66 | #define MUTEX_DEBUG_FREE 0x22 |
| 67 | 67 | ||
| 68 | /********** lib/flex_array.c **********/ | ||
| 69 | #define FLEX_ARRAY_FREE 0x6c /* for use-after-free poisoning */ | ||
| 70 | |||
| 68 | /********** security/ **********/ | 71 | /********** security/ **********/ |
| 69 | #define KEY_DESTROY 0xbd | 72 | #define KEY_DESTROY 0xbd |
| 70 | 73 | ||
diff --git a/include/linux/poll.h b/include/linux/poll.h index fa287f25138d..6673743946f7 100644 --- a/include/linux/poll.h +++ b/include/linux/poll.h | |||
| @@ -6,10 +6,10 @@ | |||
| 6 | #ifdef __KERNEL__ | 6 | #ifdef __KERNEL__ |
| 7 | 7 | ||
| 8 | #include <linux/compiler.h> | 8 | #include <linux/compiler.h> |
| 9 | #include <linux/ktime.h> | ||
| 9 | #include <linux/wait.h> | 10 | #include <linux/wait.h> |
| 10 | #include <linux/string.h> | 11 | #include <linux/string.h> |
| 11 | #include <linux/fs.h> | 12 | #include <linux/fs.h> |
| 12 | #include <linux/sched.h> | ||
| 13 | #include <asm/uaccess.h> | 13 | #include <asm/uaccess.h> |
| 14 | 14 | ||
| 15 | /* ~832 bytes of stack space used max in sys_select/sys_poll before allocating | 15 | /* ~832 bytes of stack space used max in sys_select/sys_poll before allocating |
diff --git a/include/linux/posix_acl.h b/include/linux/posix_acl.h index 065a3652a3ea..67608161df6b 100644 --- a/include/linux/posix_acl.h +++ b/include/linux/posix_acl.h | |||
| @@ -147,6 +147,20 @@ static inline void forget_cached_acl(struct inode *inode, int type) | |||
| 147 | if (old != ACL_NOT_CACHED) | 147 | if (old != ACL_NOT_CACHED) |
| 148 | posix_acl_release(old); | 148 | posix_acl_release(old); |
| 149 | } | 149 | } |
| 150 | |||
| 151 | static inline void forget_all_cached_acls(struct inode *inode) | ||
| 152 | { | ||
| 153 | struct posix_acl *old_access, *old_default; | ||
| 154 | spin_lock(&inode->i_lock); | ||
| 155 | old_access = inode->i_acl; | ||
| 156 | old_default = inode->i_default_acl; | ||
| 157 | inode->i_acl = inode->i_default_acl = ACL_NOT_CACHED; | ||
| 158 | spin_unlock(&inode->i_lock); | ||
| 159 | if (old_access != ACL_NOT_CACHED) | ||
| 160 | posix_acl_release(old_access); | ||
| 161 | if (old_default != ACL_NOT_CACHED) | ||
| 162 | posix_acl_release(old_default); | ||
| 163 | } | ||
| 150 | #endif | 164 | #endif |
| 151 | 165 | ||
| 152 | static inline void cache_no_acl(struct inode *inode) | 166 | static inline void cache_no_acl(struct inode *inode) |
diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h index 594c494ac3f0..b5d096d3a9be 100644 --- a/include/linux/power_supply.h +++ b/include/linux/power_supply.h | |||
| @@ -39,6 +39,13 @@ enum { | |||
| 39 | }; | 39 | }; |
| 40 | 40 | ||
| 41 | enum { | 41 | enum { |
| 42 | POWER_SUPPLY_CHARGE_TYPE_UNKNOWN = 0, | ||
| 43 | POWER_SUPPLY_CHARGE_TYPE_NONE, | ||
| 44 | POWER_SUPPLY_CHARGE_TYPE_TRICKLE, | ||
| 45 | POWER_SUPPLY_CHARGE_TYPE_FAST, | ||
| 46 | }; | ||
| 47 | |||
| 48 | enum { | ||
| 42 | POWER_SUPPLY_HEALTH_UNKNOWN = 0, | 49 | POWER_SUPPLY_HEALTH_UNKNOWN = 0, |
| 43 | POWER_SUPPLY_HEALTH_GOOD, | 50 | POWER_SUPPLY_HEALTH_GOOD, |
| 44 | POWER_SUPPLY_HEALTH_OVERHEAT, | 51 | POWER_SUPPLY_HEALTH_OVERHEAT, |
| @@ -58,9 +65,19 @@ enum { | |||
| 58 | POWER_SUPPLY_TECHNOLOGY_LiMn, | 65 | POWER_SUPPLY_TECHNOLOGY_LiMn, |
| 59 | }; | 66 | }; |
| 60 | 67 | ||
| 68 | enum { | ||
| 69 | POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN = 0, | ||
| 70 | POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL, | ||
| 71 | POWER_SUPPLY_CAPACITY_LEVEL_LOW, | ||
| 72 | POWER_SUPPLY_CAPACITY_LEVEL_NORMAL, | ||
| 73 | POWER_SUPPLY_CAPACITY_LEVEL_HIGH, | ||
| 74 | POWER_SUPPLY_CAPACITY_LEVEL_FULL, | ||
| 75 | }; | ||
| 76 | |||
| 61 | enum power_supply_property { | 77 | enum power_supply_property { |
| 62 | /* Properties of type `int' */ | 78 | /* Properties of type `int' */ |
| 63 | POWER_SUPPLY_PROP_STATUS = 0, | 79 | POWER_SUPPLY_PROP_STATUS = 0, |
| 80 | POWER_SUPPLY_PROP_CHARGE_TYPE, | ||
| 64 | POWER_SUPPLY_PROP_HEALTH, | 81 | POWER_SUPPLY_PROP_HEALTH, |
| 65 | POWER_SUPPLY_PROP_PRESENT, | 82 | POWER_SUPPLY_PROP_PRESENT, |
| 66 | POWER_SUPPLY_PROP_ONLINE, | 83 | POWER_SUPPLY_PROP_ONLINE, |
| @@ -89,6 +106,7 @@ enum power_supply_property { | |||
| 89 | POWER_SUPPLY_PROP_ENERGY_NOW, | 106 | POWER_SUPPLY_PROP_ENERGY_NOW, |
| 90 | POWER_SUPPLY_PROP_ENERGY_AVG, | 107 | POWER_SUPPLY_PROP_ENERGY_AVG, |
| 91 | POWER_SUPPLY_PROP_CAPACITY, /* in percents! */ | 108 | POWER_SUPPLY_PROP_CAPACITY, /* in percents! */ |
| 109 | POWER_SUPPLY_PROP_CAPACITY_LEVEL, | ||
| 92 | POWER_SUPPLY_PROP_TEMP, | 110 | POWER_SUPPLY_PROP_TEMP, |
| 93 | POWER_SUPPLY_PROP_TEMP_AMBIENT, | 111 | POWER_SUPPLY_PROP_TEMP_AMBIENT, |
| 94 | POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW, | 112 | POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW, |
| @@ -126,6 +144,7 @@ struct power_supply { | |||
| 126 | enum power_supply_property psp, | 144 | enum power_supply_property psp, |
| 127 | union power_supply_propval *val); | 145 | union power_supply_propval *val); |
| 128 | void (*external_power_changed)(struct power_supply *psy); | 146 | void (*external_power_changed)(struct power_supply *psy); |
| 147 | void (*set_charged)(struct power_supply *psy); | ||
| 129 | 148 | ||
| 130 | /* For APM emulation, think legacy userspace. */ | 149 | /* For APM emulation, think legacy userspace. */ |
| 131 | int use_for_apm; | 150 | int use_for_apm; |
| @@ -165,8 +184,10 @@ struct power_supply_info { | |||
| 165 | int use_for_apm; | 184 | int use_for_apm; |
| 166 | }; | 185 | }; |
| 167 | 186 | ||
| 187 | extern struct power_supply *power_supply_get_by_name(char *name); | ||
| 168 | extern void power_supply_changed(struct power_supply *psy); | 188 | extern void power_supply_changed(struct power_supply *psy); |
| 169 | extern int power_supply_am_i_supplied(struct power_supply *psy); | 189 | extern int power_supply_am_i_supplied(struct power_supply *psy); |
| 190 | extern int power_supply_set_battery_charged(struct power_supply *psy); | ||
| 170 | 191 | ||
| 171 | #if defined(CONFIG_POWER_SUPPLY) || defined(CONFIG_POWER_SUPPLY_MODULE) | 192 | #if defined(CONFIG_POWER_SUPPLY) || defined(CONFIG_POWER_SUPPLY_MODULE) |
| 172 | extern int power_supply_is_system_supplied(void); | 193 | extern int power_supply_is_system_supplied(void); |
diff --git a/include/linux/prctl.h b/include/linux/prctl.h index b00df4c79c63..a3baeb2c2161 100644 --- a/include/linux/prctl.h +++ b/include/linux/prctl.h | |||
| @@ -85,7 +85,21 @@ | |||
| 85 | #define PR_SET_TIMERSLACK 29 | 85 | #define PR_SET_TIMERSLACK 29 |
| 86 | #define PR_GET_TIMERSLACK 30 | 86 | #define PR_GET_TIMERSLACK 30 |
| 87 | 87 | ||
| 88 | #define PR_TASK_PERF_COUNTERS_DISABLE 31 | 88 | #define PR_TASK_PERF_EVENTS_DISABLE 31 |
| 89 | #define PR_TASK_PERF_COUNTERS_ENABLE 32 | 89 | #define PR_TASK_PERF_EVENTS_ENABLE 32 |
| 90 | |||
| 91 | /* | ||
| 92 | * Set early/late kill mode for hwpoison memory corruption. | ||
| 93 | * This influences when the process gets killed on a memory corruption. | ||
| 94 | */ | ||
| 95 | #define PR_MCE_KILL 33 | ||
| 96 | # define PR_MCE_KILL_CLEAR 0 | ||
| 97 | # define PR_MCE_KILL_SET 1 | ||
| 98 | |||
| 99 | # define PR_MCE_KILL_LATE 0 | ||
| 100 | # define PR_MCE_KILL_EARLY 1 | ||
| 101 | # define PR_MCE_KILL_DEFAULT 2 | ||
| 102 | |||
| 103 | #define PR_MCE_KILL_GET 34 | ||
| 90 | 104 | ||
| 91 | #endif /* _LINUX_PRCTL_H */ | 105 | #endif /* _LINUX_PRCTL_H */ |
diff --git a/include/linux/preempt.h b/include/linux/preempt.h index 72b1a10a59b6..2e681d9555bd 100644 --- a/include/linux/preempt.h +++ b/include/linux/preempt.h | |||
| @@ -105,6 +105,11 @@ struct preempt_notifier; | |||
| 105 | * @sched_out: we've just been preempted | 105 | * @sched_out: we've just been preempted |
| 106 | * notifier: struct preempt_notifier for the task being preempted | 106 | * notifier: struct preempt_notifier for the task being preempted |
| 107 | * next: the task that's kicking us out | 107 | * next: the task that's kicking us out |
| 108 | * | ||
| 109 | * Please note that sched_in and out are called under different | ||
| 110 | * contexts. sched_out is called with rq lock held and irq disabled | ||
| 111 | * while sched_in is called without rq lock and irq enabled. This | ||
| 112 | * difference is intentional and depended upon by its users. | ||
| 108 | */ | 113 | */ |
| 109 | struct preempt_ops { | 114 | struct preempt_ops { |
| 110 | void (*sched_in)(struct preempt_notifier *notifier, int cpu); | 115 | void (*sched_in)(struct preempt_notifier *notifier, int cpu); |
diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h index e6e77d31c418..379eaed72d4b 100644 --- a/include/linux/proc_fs.h +++ b/include/linux/proc_fs.h | |||
| @@ -78,10 +78,19 @@ struct proc_dir_entry { | |||
| 78 | struct list_head pde_openers; /* who did ->open, but not ->release */ | 78 | struct list_head pde_openers; /* who did ->open, but not ->release */ |
| 79 | }; | 79 | }; |
| 80 | 80 | ||
| 81 | enum kcore_type { | ||
| 82 | KCORE_TEXT, | ||
| 83 | KCORE_VMALLOC, | ||
| 84 | KCORE_RAM, | ||
| 85 | KCORE_VMEMMAP, | ||
| 86 | KCORE_OTHER, | ||
| 87 | }; | ||
| 88 | |||
| 81 | struct kcore_list { | 89 | struct kcore_list { |
| 82 | struct kcore_list *next; | 90 | struct list_head list; |
| 83 | unsigned long addr; | 91 | unsigned long addr; |
| 84 | size_t size; | 92 | size_t size; |
| 93 | int type; | ||
| 85 | }; | 94 | }; |
| 86 | 95 | ||
| 87 | struct vmcore { | 96 | struct vmcore { |
| @@ -233,11 +242,12 @@ static inline void dup_mm_exe_file(struct mm_struct *oldmm, | |||
| 233 | #endif /* CONFIG_PROC_FS */ | 242 | #endif /* CONFIG_PROC_FS */ |
| 234 | 243 | ||
| 235 | #if !defined(CONFIG_PROC_KCORE) | 244 | #if !defined(CONFIG_PROC_KCORE) |
| 236 | static inline void kclist_add(struct kcore_list *new, void *addr, size_t size) | 245 | static inline void |
| 246 | kclist_add(struct kcore_list *new, void *addr, size_t size, int type) | ||
| 237 | { | 247 | { |
| 238 | } | 248 | } |
| 239 | #else | 249 | #else |
| 240 | extern void kclist_add(struct kcore_list *, void *, size_t); | 250 | extern void kclist_add(struct kcore_list *, void *, size_t, int type); |
| 241 | #endif | 251 | #endif |
| 242 | 252 | ||
| 243 | union proc_op { | 253 | union proc_op { |
diff --git a/include/linux/quota.h b/include/linux/quota.h index 78c48895b12a..ce9a9b2e5cd4 100644 --- a/include/linux/quota.h +++ b/include/linux/quota.h | |||
| @@ -376,6 +376,17 @@ static inline unsigned int dquot_generic_flag(unsigned int flags, int type) | |||
| 376 | return flags >> _DQUOT_STATE_FLAGS; | 376 | return flags >> _DQUOT_STATE_FLAGS; |
| 377 | } | 377 | } |
| 378 | 378 | ||
| 379 | #ifdef CONFIG_QUOTA_NETLINK_INTERFACE | ||
| 380 | extern void quota_send_warning(short type, unsigned int id, dev_t dev, | ||
| 381 | const char warntype); | ||
| 382 | #else | ||
| 383 | static inline void quota_send_warning(short type, unsigned int id, dev_t dev, | ||
| 384 | const char warntype) | ||
| 385 | { | ||
| 386 | return; | ||
| 387 | } | ||
| 388 | #endif /* CONFIG_QUOTA_NETLINK_INTERFACE */ | ||
| 389 | |||
| 379 | struct quota_info { | 390 | struct quota_info { |
| 380 | unsigned int flags; /* Flags for diskquotas on this device */ | 391 | unsigned int flags; /* Flags for diskquotas on this device */ |
| 381 | struct mutex dqio_mutex; /* lock device while I/O in progress */ | 392 | struct mutex dqio_mutex; /* lock device while I/O in progress */ |
diff --git a/include/linux/quotaops.h b/include/linux/quotaops.h index 26361c4c037a..3ebb23153640 100644 --- a/include/linux/quotaops.h +++ b/include/linux/quotaops.h | |||
| @@ -135,8 +135,8 @@ static inline int sb_any_quota_active(struct super_block *sb) | |||
| 135 | /* | 135 | /* |
| 136 | * Operations supported for diskquotas. | 136 | * Operations supported for diskquotas. |
| 137 | */ | 137 | */ |
| 138 | extern struct dquot_operations dquot_operations; | 138 | extern const struct dquot_operations dquot_operations; |
| 139 | extern struct quotactl_ops vfs_quotactl_ops; | 139 | extern const struct quotactl_ops vfs_quotactl_ops; |
| 140 | 140 | ||
| 141 | #define sb_dquot_ops (&dquot_operations) | 141 | #define sb_dquot_ops (&dquot_operations) |
| 142 | #define sb_quotactl_ops (&vfs_quotactl_ops) | 142 | #define sb_quotactl_ops (&vfs_quotactl_ops) |
diff --git a/include/linux/ramfs.h b/include/linux/ramfs.h index 37aaf2b39863..4e768dda87b0 100644 --- a/include/linux/ramfs.h +++ b/include/linux/ramfs.h | |||
| @@ -17,7 +17,7 @@ extern int ramfs_nommu_mmap(struct file *file, struct vm_area_struct *vma); | |||
| 17 | #endif | 17 | #endif |
| 18 | 18 | ||
| 19 | extern const struct file_operations ramfs_file_operations; | 19 | extern const struct file_operations ramfs_file_operations; |
| 20 | extern struct vm_operations_struct generic_file_vm_ops; | 20 | extern const struct vm_operations_struct generic_file_vm_ops; |
| 21 | extern int __init init_rootfs(void); | 21 | extern int __init init_rootfs(void); |
| 22 | 22 | ||
| 23 | #endif | 23 | #endif |
diff --git a/include/linux/ratelimit.h b/include/linux/ratelimit.h index 00044b856453..668cf1bef030 100644 --- a/include/linux/ratelimit.h +++ b/include/linux/ratelimit.h | |||
| @@ -1,20 +1,31 @@ | |||
| 1 | #ifndef _LINUX_RATELIMIT_H | 1 | #ifndef _LINUX_RATELIMIT_H |
| 2 | #define _LINUX_RATELIMIT_H | 2 | #define _LINUX_RATELIMIT_H |
| 3 | |||
| 3 | #include <linux/param.h> | 4 | #include <linux/param.h> |
| 5 | #include <linux/spinlock_types.h> | ||
| 4 | 6 | ||
| 5 | #define DEFAULT_RATELIMIT_INTERVAL (5 * HZ) | 7 | #define DEFAULT_RATELIMIT_INTERVAL (5 * HZ) |
| 6 | #define DEFAULT_RATELIMIT_BURST 10 | 8 | #define DEFAULT_RATELIMIT_BURST 10 |
| 7 | 9 | ||
| 8 | struct ratelimit_state { | 10 | struct ratelimit_state { |
| 9 | int interval; | 11 | spinlock_t lock; /* protect the state */ |
| 10 | int burst; | 12 | |
| 11 | int printed; | 13 | int interval; |
| 12 | int missed; | 14 | int burst; |
| 13 | unsigned long begin; | 15 | int printed; |
| 16 | int missed; | ||
| 17 | unsigned long begin; | ||
| 14 | }; | 18 | }; |
| 15 | 19 | ||
| 16 | #define DEFINE_RATELIMIT_STATE(name, interval, burst) \ | 20 | #define DEFINE_RATELIMIT_STATE(name, interval_init, burst_init) \ |
| 17 | struct ratelimit_state name = {interval, burst,} | 21 | \ |
| 22 | struct ratelimit_state name = { \ | ||
| 23 | .lock = __SPIN_LOCK_UNLOCKED(name.lock), \ | ||
| 24 | .interval = interval_init, \ | ||
| 25 | .burst = burst_init, \ | ||
| 26 | } | ||
| 27 | |||
| 28 | extern int ___ratelimit(struct ratelimit_state *rs, const char *func); | ||
| 29 | #define __ratelimit(state) ___ratelimit(state, __func__) | ||
| 18 | 30 | ||
| 19 | extern int __ratelimit(struct ratelimit_state *rs); | 31 | #endif /* _LINUX_RATELIMIT_H */ |
| 20 | #endif | ||
diff --git a/include/linux/rcuclassic.h b/include/linux/rcuclassic.h deleted file mode 100644 index bfd92e1e5d2c..000000000000 --- a/include/linux/rcuclassic.h +++ /dev/null | |||
| @@ -1,178 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Read-Copy Update mechanism for mutual exclusion (classic version) | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License as published by | ||
| 6 | * the Free Software Foundation; either version 2 of the License, or | ||
| 7 | * (at your option) any later version. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License | ||
| 15 | * along with this program; if not, write to the Free Software | ||
| 16 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
| 17 | * | ||
| 18 | * Copyright IBM Corporation, 2001 | ||
| 19 | * | ||
| 20 | * Author: Dipankar Sarma <dipankar@in.ibm.com> | ||
| 21 | * | ||
| 22 | * Based on the original work by Paul McKenney <paulmck@us.ibm.com> | ||
| 23 | * and inputs from Rusty Russell, Andrea Arcangeli and Andi Kleen. | ||
| 24 | * Papers: | ||
| 25 | * http://www.rdrop.com/users/paulmck/paper/rclockpdcsproof.pdf | ||
| 26 | * http://lse.sourceforge.net/locking/rclock_OLS.2001.05.01c.sc.pdf (OLS2001) | ||
| 27 | * | ||
| 28 | * For detailed explanation of Read-Copy Update mechanism see - | ||
| 29 | * Documentation/RCU | ||
| 30 | * | ||
| 31 | */ | ||
| 32 | |||
| 33 | #ifndef __LINUX_RCUCLASSIC_H | ||
| 34 | #define __LINUX_RCUCLASSIC_H | ||
| 35 | |||
| 36 | #include <linux/cache.h> | ||
| 37 | #include <linux/spinlock.h> | ||
| 38 | #include <linux/threads.h> | ||
| 39 | #include <linux/cpumask.h> | ||
| 40 | #include <linux/seqlock.h> | ||
| 41 | |||
| 42 | #ifdef CONFIG_RCU_CPU_STALL_DETECTOR | ||
| 43 | #define RCU_SECONDS_TILL_STALL_CHECK (10 * HZ) /* for rcp->jiffies_stall */ | ||
| 44 | #define RCU_SECONDS_TILL_STALL_RECHECK (30 * HZ) /* for rcp->jiffies_stall */ | ||
| 45 | #endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ | ||
| 46 | |||
| 47 | /* Global control variables for rcupdate callback mechanism. */ | ||
| 48 | struct rcu_ctrlblk { | ||
| 49 | long cur; /* Current batch number. */ | ||
| 50 | long completed; /* Number of the last completed batch */ | ||
| 51 | long pending; /* Number of the last pending batch */ | ||
| 52 | #ifdef CONFIG_RCU_CPU_STALL_DETECTOR | ||
| 53 | unsigned long gp_start; /* Time at which GP started in jiffies. */ | ||
| 54 | unsigned long jiffies_stall; | ||
| 55 | /* Time at which to check for CPU stalls. */ | ||
| 56 | #endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ | ||
| 57 | |||
| 58 | int signaled; | ||
| 59 | |||
| 60 | spinlock_t lock ____cacheline_internodealigned_in_smp; | ||
| 61 | DECLARE_BITMAP(cpumask, NR_CPUS); /* CPUs that need to switch for */ | ||
| 62 | /* current batch to proceed. */ | ||
| 63 | } ____cacheline_internodealigned_in_smp; | ||
| 64 | |||
| 65 | /* Is batch a before batch b ? */ | ||
| 66 | static inline int rcu_batch_before(long a, long b) | ||
| 67 | { | ||
| 68 | return (a - b) < 0; | ||
| 69 | } | ||
| 70 | |||
| 71 | /* Is batch a after batch b ? */ | ||
| 72 | static inline int rcu_batch_after(long a, long b) | ||
| 73 | { | ||
| 74 | return (a - b) > 0; | ||
| 75 | } | ||
| 76 | |||
| 77 | /* Per-CPU data for Read-Copy UPdate. */ | ||
| 78 | struct rcu_data { | ||
| 79 | /* 1) quiescent state handling : */ | ||
| 80 | long quiescbatch; /* Batch # for grace period */ | ||
| 81 | int passed_quiesc; /* User-mode/idle loop etc. */ | ||
| 82 | int qs_pending; /* core waits for quiesc state */ | ||
| 83 | |||
| 84 | /* 2) batch handling */ | ||
| 85 | /* | ||
| 86 | * if nxtlist is not NULL, then: | ||
| 87 | * batch: | ||
| 88 | * The batch # for the last entry of nxtlist | ||
| 89 | * [*nxttail[1], NULL = *nxttail[2]): | ||
| 90 | * Entries that batch # <= batch | ||
| 91 | * [*nxttail[0], *nxttail[1]): | ||
| 92 | * Entries that batch # <= batch - 1 | ||
| 93 | * [nxtlist, *nxttail[0]): | ||
| 94 | * Entries that batch # <= batch - 2 | ||
| 95 | * The grace period for these entries has completed, and | ||
| 96 | * the other grace-period-completed entries may be moved | ||
| 97 | * here temporarily in rcu_process_callbacks(). | ||
| 98 | */ | ||
| 99 | long batch; | ||
| 100 | struct rcu_head *nxtlist; | ||
| 101 | struct rcu_head **nxttail[3]; | ||
| 102 | long qlen; /* # of queued callbacks */ | ||
| 103 | struct rcu_head *donelist; | ||
| 104 | struct rcu_head **donetail; | ||
| 105 | long blimit; /* Upper limit on a processed batch */ | ||
| 106 | int cpu; | ||
| 107 | struct rcu_head barrier; | ||
| 108 | }; | ||
| 109 | |||
| 110 | /* | ||
| 111 | * Increment the quiescent state counter. | ||
| 112 | * The counter is a bit degenerated: We do not need to know | ||
| 113 | * how many quiescent states passed, just if there was at least | ||
| 114 | * one since the start of the grace period. Thus just a flag. | ||
| 115 | */ | ||
| 116 | extern void rcu_qsctr_inc(int cpu); | ||
| 117 | extern void rcu_bh_qsctr_inc(int cpu); | ||
| 118 | |||
| 119 | extern int rcu_pending(int cpu); | ||
| 120 | extern int rcu_needs_cpu(int cpu); | ||
| 121 | |||
| 122 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | ||
| 123 | extern struct lockdep_map rcu_lock_map; | ||
| 124 | # define rcu_read_acquire() \ | ||
| 125 | lock_acquire(&rcu_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_) | ||
| 126 | # define rcu_read_release() lock_release(&rcu_lock_map, 1, _THIS_IP_) | ||
| 127 | #else | ||
| 128 | # define rcu_read_acquire() do { } while (0) | ||
| 129 | # define rcu_read_release() do { } while (0) | ||
| 130 | #endif | ||
| 131 | |||
| 132 | #define __rcu_read_lock() \ | ||
| 133 | do { \ | ||
| 134 | preempt_disable(); \ | ||
| 135 | __acquire(RCU); \ | ||
| 136 | rcu_read_acquire(); \ | ||
| 137 | } while (0) | ||
| 138 | #define __rcu_read_unlock() \ | ||
| 139 | do { \ | ||
| 140 | rcu_read_release(); \ | ||
| 141 | __release(RCU); \ | ||
| 142 | preempt_enable(); \ | ||
| 143 | } while (0) | ||
| 144 | #define __rcu_read_lock_bh() \ | ||
| 145 | do { \ | ||
| 146 | local_bh_disable(); \ | ||
| 147 | __acquire(RCU_BH); \ | ||
| 148 | rcu_read_acquire(); \ | ||
| 149 | } while (0) | ||
| 150 | #define __rcu_read_unlock_bh() \ | ||
| 151 | do { \ | ||
| 152 | rcu_read_release(); \ | ||
| 153 | __release(RCU_BH); \ | ||
| 154 | local_bh_enable(); \ | ||
| 155 | } while (0) | ||
| 156 | |||
| 157 | #define __synchronize_sched() synchronize_rcu() | ||
| 158 | |||
| 159 | #define call_rcu_sched(head, func) call_rcu(head, func) | ||
| 160 | |||
| 161 | extern void __rcu_init(void); | ||
| 162 | #define rcu_init_sched() do { } while (0) | ||
| 163 | extern void rcu_check_callbacks(int cpu, int user); | ||
| 164 | extern void rcu_restart_cpu(int cpu); | ||
| 165 | |||
| 166 | extern long rcu_batches_completed(void); | ||
| 167 | extern long rcu_batches_completed_bh(void); | ||
| 168 | |||
| 169 | #define rcu_enter_nohz() do { } while (0) | ||
| 170 | #define rcu_exit_nohz() do { } while (0) | ||
| 171 | |||
| 172 | /* A context switch is a grace period for rcuclassic. */ | ||
| 173 | static inline int rcu_blocking_is_gp(void) | ||
| 174 | { | ||
| 175 | return num_online_cpus() == 1; | ||
| 176 | } | ||
| 177 | |||
| 178 | #endif /* __LINUX_RCUCLASSIC_H */ | ||
diff --git a/include/linux/rculist.h b/include/linux/rculist.h index 5710f43bbc9e..1bf0f708c4fc 100644 --- a/include/linux/rculist.h +++ b/include/linux/rculist.h | |||
| @@ -262,6 +262,20 @@ static inline void list_splice_init_rcu(struct list_head *list, | |||
| 262 | (pos) = rcu_dereference((pos)->next)) | 262 | (pos) = rcu_dereference((pos)->next)) |
| 263 | 263 | ||
| 264 | /** | 264 | /** |
| 265 | * list_for_each_entry_continue_rcu - continue iteration over list of given type | ||
| 266 | * @pos: the type * to use as a loop cursor. | ||
| 267 | * @head: the head for your list. | ||
| 268 | * @member: the name of the list_struct within the struct. | ||
| 269 | * | ||
| 270 | * Continue to iterate over list of given type, continuing after | ||
| 271 | * the current position. | ||
| 272 | */ | ||
| 273 | #define list_for_each_entry_continue_rcu(pos, head, member) \ | ||
| 274 | for (pos = list_entry_rcu(pos->member.next, typeof(*pos), member); \ | ||
| 275 | prefetch(pos->member.next), &pos->member != (head); \ | ||
| 276 | pos = list_entry_rcu(pos->member.next, typeof(*pos), member)) | ||
| 277 | |||
| 278 | /** | ||
| 265 | * hlist_del_rcu - deletes entry from hash list without re-initialization | 279 | * hlist_del_rcu - deletes entry from hash list without re-initialization |
| 266 | * @n: the element to delete from the hash list. | 280 | * @n: the element to delete from the hash list. |
| 267 | * | 281 | * |
diff --git a/include/linux/rculist_nulls.h b/include/linux/rculist_nulls.h index f9ddd03961a8..589a40919f01 100644 --- a/include/linux/rculist_nulls.h +++ b/include/linux/rculist_nulls.h | |||
| @@ -102,7 +102,7 @@ static inline void hlist_nulls_add_head_rcu(struct hlist_nulls_node *n, | |||
| 102 | */ | 102 | */ |
| 103 | #define hlist_nulls_for_each_entry_rcu(tpos, pos, head, member) \ | 103 | #define hlist_nulls_for_each_entry_rcu(tpos, pos, head, member) \ |
| 104 | for (pos = rcu_dereference((head)->first); \ | 104 | for (pos = rcu_dereference((head)->first); \ |
| 105 | (!is_a_nulls(pos)) && \ | 105 | (!is_a_nulls(pos)) && \ |
| 106 | ({ tpos = hlist_nulls_entry(pos, typeof(*tpos), member); 1; }); \ | 106 | ({ tpos = hlist_nulls_entry(pos, typeof(*tpos), member); 1; }); \ |
| 107 | pos = rcu_dereference(pos->next)) | 107 | pos = rcu_dereference(pos->next)) |
| 108 | 108 | ||
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index 15fbb3ca634d..24440f4bf476 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Read-Copy Update mechanism for mutual exclusion | 2 | * Read-Copy Update mechanism for mutual exclusion |
| 3 | * | 3 | * |
| 4 | * This program is free software; you can redistribute it and/or modify | 4 | * This program is free software; you can redistribute it and/or modify |
| 5 | * it under the terms of the GNU General Public License as published by | 5 | * it under the terms of the GNU General Public License as published by |
| @@ -18,7 +18,7 @@ | |||
| 18 | * Copyright IBM Corporation, 2001 | 18 | * Copyright IBM Corporation, 2001 |
| 19 | * | 19 | * |
| 20 | * Author: Dipankar Sarma <dipankar@in.ibm.com> | 20 | * Author: Dipankar Sarma <dipankar@in.ibm.com> |
| 21 | * | 21 | * |
| 22 | * Based on the original work by Paul McKenney <paulmck@us.ibm.com> | 22 | * Based on the original work by Paul McKenney <paulmck@us.ibm.com> |
| 23 | * and inputs from Rusty Russell, Andrea Arcangeli and Andi Kleen. | 23 | * and inputs from Rusty Russell, Andrea Arcangeli and Andi Kleen. |
| 24 | * Papers: | 24 | * Papers: |
| @@ -26,7 +26,7 @@ | |||
| 26 | * http://lse.sourceforge.net/locking/rclock_OLS.2001.05.01c.sc.pdf (OLS2001) | 26 | * http://lse.sourceforge.net/locking/rclock_OLS.2001.05.01c.sc.pdf (OLS2001) |
| 27 | * | 27 | * |
| 28 | * For detailed explanation of Read-Copy Update mechanism see - | 28 | * For detailed explanation of Read-Copy Update mechanism see - |
| 29 | * http://lse.sourceforge.net/locking/rcupdate.html | 29 | * http://lse.sourceforge.net/locking/rcupdate.html |
| 30 | * | 30 | * |
| 31 | */ | 31 | */ |
| 32 | 32 | ||
| @@ -51,25 +51,42 @@ struct rcu_head { | |||
| 51 | void (*func)(struct rcu_head *head); | 51 | void (*func)(struct rcu_head *head); |
| 52 | }; | 52 | }; |
| 53 | 53 | ||
| 54 | /* Internal to kernel, but needed by rcupreempt.h. */ | 54 | /* Exported common interfaces */ |
| 55 | extern int rcu_scheduler_active; | 55 | extern void synchronize_rcu_bh(void); |
| 56 | extern void synchronize_sched(void); | ||
| 57 | extern void rcu_barrier(void); | ||
| 58 | extern void rcu_barrier_bh(void); | ||
| 59 | extern void rcu_barrier_sched(void); | ||
| 60 | extern void synchronize_sched_expedited(void); | ||
| 61 | extern int sched_expedited_torture_stats(char *page); | ||
| 56 | 62 | ||
| 57 | #if defined(CONFIG_CLASSIC_RCU) | 63 | /* Internal to kernel */ |
| 58 | #include <linux/rcuclassic.h> | 64 | extern void rcu_init(void); |
| 59 | #elif defined(CONFIG_TREE_RCU) | 65 | |
| 66 | #if defined(CONFIG_TREE_RCU) || defined(CONFIG_TREE_PREEMPT_RCU) | ||
| 60 | #include <linux/rcutree.h> | 67 | #include <linux/rcutree.h> |
| 61 | #elif defined(CONFIG_PREEMPT_RCU) | 68 | #elif defined(CONFIG_TINY_RCU) |
| 62 | #include <linux/rcupreempt.h> | 69 | #include <linux/rcutiny.h> |
| 63 | #else | 70 | #else |
| 64 | #error "Unknown RCU implementation specified to kernel configuration" | 71 | #error "Unknown RCU implementation specified to kernel configuration" |
| 65 | #endif /* #else #if defined(CONFIG_CLASSIC_RCU) */ | 72 | #endif |
| 66 | 73 | ||
| 67 | #define RCU_HEAD_INIT { .next = NULL, .func = NULL } | 74 | #define RCU_HEAD_INIT { .next = NULL, .func = NULL } |
| 68 | #define RCU_HEAD(head) struct rcu_head head = RCU_HEAD_INIT | 75 | #define RCU_HEAD(head) struct rcu_head head = RCU_HEAD_INIT |
| 69 | #define INIT_RCU_HEAD(ptr) do { \ | 76 | #define INIT_RCU_HEAD(ptr) do { \ |
| 70 | (ptr)->next = NULL; (ptr)->func = NULL; \ | 77 | (ptr)->next = NULL; (ptr)->func = NULL; \ |
| 71 | } while (0) | 78 | } while (0) |
| 72 | 79 | ||
| 80 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | ||
| 81 | extern struct lockdep_map rcu_lock_map; | ||
| 82 | # define rcu_read_acquire() \ | ||
| 83 | lock_acquire(&rcu_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_) | ||
| 84 | # define rcu_read_release() lock_release(&rcu_lock_map, 1, _THIS_IP_) | ||
| 85 | #else | ||
| 86 | # define rcu_read_acquire() do { } while (0) | ||
| 87 | # define rcu_read_release() do { } while (0) | ||
| 88 | #endif | ||
| 89 | |||
| 73 | /** | 90 | /** |
| 74 | * rcu_read_lock - mark the beginning of an RCU read-side critical section. | 91 | * rcu_read_lock - mark the beginning of an RCU read-side critical section. |
| 75 | * | 92 | * |
| @@ -99,13 +116,12 @@ extern int rcu_scheduler_active; | |||
| 99 | * | 116 | * |
| 100 | * It is illegal to block while in an RCU read-side critical section. | 117 | * It is illegal to block while in an RCU read-side critical section. |
| 101 | */ | 118 | */ |
| 102 | #define rcu_read_lock() __rcu_read_lock() | 119 | static inline void rcu_read_lock(void) |
| 103 | 120 | { | |
| 104 | /** | 121 | __rcu_read_lock(); |
| 105 | * rcu_read_unlock - marks the end of an RCU read-side critical section. | 122 | __acquire(RCU); |
| 106 | * | 123 | rcu_read_acquire(); |
| 107 | * See rcu_read_lock() for more information. | 124 | } |
| 108 | */ | ||
| 109 | 125 | ||
| 110 | /* | 126 | /* |
| 111 | * So where is rcu_write_lock()? It does not exist, as there is no | 127 | * So where is rcu_write_lock()? It does not exist, as there is no |
| @@ -116,7 +132,18 @@ extern int rcu_scheduler_active; | |||
| 116 | * used as well. RCU does not care how the writers keep out of each | 132 | * used as well. RCU does not care how the writers keep out of each |
| 117 | * others' way, as long as they do so. | 133 | * others' way, as long as they do so. |
| 118 | */ | 134 | */ |
| 119 | #define rcu_read_unlock() __rcu_read_unlock() | 135 | |
| 136 | /** | ||
| 137 | * rcu_read_unlock - marks the end of an RCU read-side critical section. | ||
| 138 | * | ||
| 139 | * See rcu_read_lock() for more information. | ||
| 140 | */ | ||
| 141 | static inline void rcu_read_unlock(void) | ||
| 142 | { | ||
| 143 | rcu_read_release(); | ||
| 144 | __release(RCU); | ||
| 145 | __rcu_read_unlock(); | ||
| 146 | } | ||
| 120 | 147 | ||
| 121 | /** | 148 | /** |
| 122 | * rcu_read_lock_bh - mark the beginning of a softirq-only RCU critical section | 149 | * rcu_read_lock_bh - mark the beginning of a softirq-only RCU critical section |
| @@ -129,14 +156,24 @@ extern int rcu_scheduler_active; | |||
| 129 | * can use just rcu_read_lock(). | 156 | * can use just rcu_read_lock(). |
| 130 | * | 157 | * |
| 131 | */ | 158 | */ |
| 132 | #define rcu_read_lock_bh() __rcu_read_lock_bh() | 159 | static inline void rcu_read_lock_bh(void) |
| 160 | { | ||
| 161 | __rcu_read_lock_bh(); | ||
| 162 | __acquire(RCU_BH); | ||
| 163 | rcu_read_acquire(); | ||
| 164 | } | ||
| 133 | 165 | ||
| 134 | /* | 166 | /* |
| 135 | * rcu_read_unlock_bh - marks the end of a softirq-only RCU critical section | 167 | * rcu_read_unlock_bh - marks the end of a softirq-only RCU critical section |
| 136 | * | 168 | * |
| 137 | * See rcu_read_lock_bh() for more information. | 169 | * See rcu_read_lock_bh() for more information. |
| 138 | */ | 170 | */ |
| 139 | #define rcu_read_unlock_bh() __rcu_read_unlock_bh() | 171 | static inline void rcu_read_unlock_bh(void) |
| 172 | { | ||
| 173 | rcu_read_release(); | ||
| 174 | __release(RCU_BH); | ||
| 175 | __rcu_read_unlock_bh(); | ||
| 176 | } | ||
| 140 | 177 | ||
| 141 | /** | 178 | /** |
| 142 | * rcu_read_lock_sched - mark the beginning of a RCU-classic critical section | 179 | * rcu_read_lock_sched - mark the beginning of a RCU-classic critical section |
| @@ -147,17 +184,38 @@ extern int rcu_scheduler_active; | |||
| 147 | * - call_rcu_sched() and rcu_barrier_sched() | 184 | * - call_rcu_sched() and rcu_barrier_sched() |
| 148 | * on the write-side to insure proper synchronization. | 185 | * on the write-side to insure proper synchronization. |
| 149 | */ | 186 | */ |
| 150 | #define rcu_read_lock_sched() preempt_disable() | 187 | static inline void rcu_read_lock_sched(void) |
| 151 | #define rcu_read_lock_sched_notrace() preempt_disable_notrace() | 188 | { |
| 189 | preempt_disable(); | ||
| 190 | __acquire(RCU_SCHED); | ||
| 191 | rcu_read_acquire(); | ||
| 192 | } | ||
| 193 | |||
| 194 | /* Used by lockdep and tracing: cannot be traced, cannot call lockdep. */ | ||
| 195 | static inline notrace void rcu_read_lock_sched_notrace(void) | ||
| 196 | { | ||
| 197 | preempt_disable_notrace(); | ||
| 198 | __acquire(RCU_SCHED); | ||
| 199 | } | ||
| 152 | 200 | ||
| 153 | /* | 201 | /* |
| 154 | * rcu_read_unlock_sched - marks the end of a RCU-classic critical section | 202 | * rcu_read_unlock_sched - marks the end of a RCU-classic critical section |
| 155 | * | 203 | * |
| 156 | * See rcu_read_lock_sched for more information. | 204 | * See rcu_read_lock_sched for more information. |
| 157 | */ | 205 | */ |
| 158 | #define rcu_read_unlock_sched() preempt_enable() | 206 | static inline void rcu_read_unlock_sched(void) |
| 159 | #define rcu_read_unlock_sched_notrace() preempt_enable_notrace() | 207 | { |
| 208 | rcu_read_release(); | ||
| 209 | __release(RCU_SCHED); | ||
| 210 | preempt_enable(); | ||
| 211 | } | ||
| 160 | 212 | ||
| 213 | /* Used by lockdep and tracing: cannot be traced, cannot call lockdep. */ | ||
| 214 | static inline notrace void rcu_read_unlock_sched_notrace(void) | ||
| 215 | { | ||
| 216 | __release(RCU_SCHED); | ||
| 217 | preempt_enable_notrace(); | ||
| 218 | } | ||
| 161 | 219 | ||
| 162 | 220 | ||
| 163 | /** | 221 | /** |
| @@ -207,24 +265,6 @@ struct rcu_synchronize { | |||
| 207 | extern void wakeme_after_rcu(struct rcu_head *head); | 265 | extern void wakeme_after_rcu(struct rcu_head *head); |
| 208 | 266 | ||
| 209 | /** | 267 | /** |
| 210 | * synchronize_sched - block until all CPUs have exited any non-preemptive | ||
| 211 | * kernel code sequences. | ||
| 212 | * | ||
| 213 | * This means that all preempt_disable code sequences, including NMI and | ||
| 214 | * hardware-interrupt handlers, in progress on entry will have completed | ||
| 215 | * before this primitive returns. However, this does not guarantee that | ||
| 216 | * softirq handlers will have completed, since in some kernels, these | ||
| 217 | * handlers can run in process context, and can block. | ||
| 218 | * | ||
| 219 | * This primitive provides the guarantees made by the (now removed) | ||
| 220 | * synchronize_kernel() API. In contrast, synchronize_rcu() only | ||
| 221 | * guarantees that rcu_read_lock() sections will have completed. | ||
| 222 | * In "classic RCU", these two guarantees happen to be one and | ||
| 223 | * the same, but can differ in realtime RCU implementations. | ||
| 224 | */ | ||
| 225 | #define synchronize_sched() __synchronize_sched() | ||
| 226 | |||
| 227 | /** | ||
| 228 | * call_rcu - Queue an RCU callback for invocation after a grace period. | 268 | * call_rcu - Queue an RCU callback for invocation after a grace period. |
| 229 | * @head: structure to be used for queueing the RCU updates. | 269 | * @head: structure to be used for queueing the RCU updates. |
| 230 | * @func: actual update function to be invoked after the grace period | 270 | * @func: actual update function to be invoked after the grace period |
| @@ -259,15 +299,4 @@ extern void call_rcu(struct rcu_head *head, | |||
| 259 | extern void call_rcu_bh(struct rcu_head *head, | 299 | extern void call_rcu_bh(struct rcu_head *head, |
| 260 | void (*func)(struct rcu_head *head)); | 300 | void (*func)(struct rcu_head *head)); |
| 261 | 301 | ||
| 262 | /* Exported common interfaces */ | ||
| 263 | extern void synchronize_rcu(void); | ||
| 264 | extern void rcu_barrier(void); | ||
| 265 | extern void rcu_barrier_bh(void); | ||
| 266 | extern void rcu_barrier_sched(void); | ||
| 267 | |||
| 268 | /* Internal to kernel */ | ||
| 269 | extern void rcu_init(void); | ||
| 270 | extern void rcu_scheduler_starting(void); | ||
| 271 | extern int rcu_needs_cpu(int cpu); | ||
| 272 | |||
| 273 | #endif /* __LINUX_RCUPDATE_H */ | 302 | #endif /* __LINUX_RCUPDATE_H */ |
diff --git a/include/linux/rcupreempt.h b/include/linux/rcupreempt.h deleted file mode 100644 index fce522782ffa..000000000000 --- a/include/linux/rcupreempt.h +++ /dev/null | |||
| @@ -1,127 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Read-Copy Update mechanism for mutual exclusion (RT implementation) | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License as published by | ||
| 6 | * the Free Software Foundation; either version 2 of the License, or | ||
| 7 | * (at your option) any later version. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License | ||
| 15 | * along with this program; if not, write to the Free Software | ||
| 16 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
| 17 | * | ||
| 18 | * Copyright (C) IBM Corporation, 2006 | ||
| 19 | * | ||
| 20 | * Author: Paul McKenney <paulmck@us.ibm.com> | ||
| 21 | * | ||
| 22 | * Based on the original work by Paul McKenney <paul.mckenney@us.ibm.com> | ||
| 23 | * and inputs from Rusty Russell, Andrea Arcangeli and Andi Kleen. | ||
| 24 | * Papers: | ||
| 25 | * http://www.rdrop.com/users/paulmck/paper/rclockpdcsproof.pdf | ||
| 26 | * http://lse.sourceforge.net/locking/rclock_OLS.2001.05.01c.sc.pdf (OLS2001) | ||
| 27 | * | ||
| 28 | * For detailed explanation of Read-Copy Update mechanism see - | ||
| 29 | * Documentation/RCU | ||
| 30 | * | ||
| 31 | */ | ||
| 32 | |||
| 33 | #ifndef __LINUX_RCUPREEMPT_H | ||
| 34 | #define __LINUX_RCUPREEMPT_H | ||
| 35 | |||
| 36 | #include <linux/cache.h> | ||
| 37 | #include <linux/spinlock.h> | ||
| 38 | #include <linux/threads.h> | ||
| 39 | #include <linux/smp.h> | ||
| 40 | #include <linux/cpumask.h> | ||
| 41 | #include <linux/seqlock.h> | ||
| 42 | |||
| 43 | extern void rcu_qsctr_inc(int cpu); | ||
| 44 | static inline void rcu_bh_qsctr_inc(int cpu) { } | ||
| 45 | |||
| 46 | /* | ||
| 47 | * Someone might want to pass call_rcu_bh as a function pointer. | ||
| 48 | * So this needs to just be a rename and not a macro function. | ||
| 49 | * (no parentheses) | ||
| 50 | */ | ||
| 51 | #define call_rcu_bh call_rcu | ||
| 52 | |||
| 53 | /** | ||
| 54 | * call_rcu_sched - Queue RCU callback for invocation after sched grace period. | ||
| 55 | * @head: structure to be used for queueing the RCU updates. | ||
| 56 | * @func: actual update function to be invoked after the grace period | ||
| 57 | * | ||
| 58 | * The update function will be invoked some time after a full | ||
| 59 | * synchronize_sched()-style grace period elapses, in other words after | ||
| 60 | * all currently executing preempt-disabled sections of code (including | ||
| 61 | * hardirq handlers, NMI handlers, and local_irq_save() blocks) have | ||
| 62 | * completed. | ||
| 63 | */ | ||
| 64 | extern void call_rcu_sched(struct rcu_head *head, | ||
| 65 | void (*func)(struct rcu_head *head)); | ||
| 66 | |||
| 67 | extern void __rcu_read_lock(void) __acquires(RCU); | ||
| 68 | extern void __rcu_read_unlock(void) __releases(RCU); | ||
| 69 | extern int rcu_pending(int cpu); | ||
| 70 | extern int rcu_needs_cpu(int cpu); | ||
| 71 | |||
| 72 | #define __rcu_read_lock_bh() { rcu_read_lock(); local_bh_disable(); } | ||
| 73 | #define __rcu_read_unlock_bh() { local_bh_enable(); rcu_read_unlock(); } | ||
| 74 | |||
| 75 | extern void __synchronize_sched(void); | ||
| 76 | |||
| 77 | extern void __rcu_init(void); | ||
| 78 | extern void rcu_init_sched(void); | ||
| 79 | extern void rcu_check_callbacks(int cpu, int user); | ||
| 80 | extern void rcu_restart_cpu(int cpu); | ||
| 81 | extern long rcu_batches_completed(void); | ||
| 82 | |||
| 83 | /* | ||
| 84 | * Return the number of RCU batches processed thus far. Useful for debug | ||
| 85 | * and statistic. The _bh variant is identifcal to straight RCU | ||
| 86 | */ | ||
| 87 | static inline long rcu_batches_completed_bh(void) | ||
| 88 | { | ||
| 89 | return rcu_batches_completed(); | ||
| 90 | } | ||
| 91 | |||
| 92 | #ifdef CONFIG_RCU_TRACE | ||
| 93 | struct rcupreempt_trace; | ||
| 94 | extern long *rcupreempt_flipctr(int cpu); | ||
| 95 | extern long rcupreempt_data_completed(void); | ||
| 96 | extern int rcupreempt_flip_flag(int cpu); | ||
| 97 | extern int rcupreempt_mb_flag(int cpu); | ||
| 98 | extern char *rcupreempt_try_flip_state_name(void); | ||
| 99 | extern struct rcupreempt_trace *rcupreempt_trace_cpu(int cpu); | ||
| 100 | #endif | ||
| 101 | |||
| 102 | struct softirq_action; | ||
| 103 | |||
| 104 | #ifdef CONFIG_NO_HZ | ||
| 105 | extern void rcu_enter_nohz(void); | ||
| 106 | extern void rcu_exit_nohz(void); | ||
| 107 | #else | ||
| 108 | # define rcu_enter_nohz() do { } while (0) | ||
| 109 | # define rcu_exit_nohz() do { } while (0) | ||
| 110 | #endif | ||
| 111 | |||
| 112 | /* | ||
| 113 | * A context switch is a grace period for rcupreempt synchronize_rcu() | ||
| 114 | * only during early boot, before the scheduler has been initialized. | ||
| 115 | * So, how the heck do we get a context switch? Well, if the caller | ||
| 116 | * invokes synchronize_rcu(), they are willing to accept a context | ||
| 117 | * switch, so we simply pretend that one happened. | ||
| 118 | * | ||
| 119 | * After boot, there might be a blocked or preempted task in an RCU | ||
| 120 | * read-side critical section, so we cannot then take the fastpath. | ||
| 121 | */ | ||
| 122 | static inline int rcu_blocking_is_gp(void) | ||
| 123 | { | ||
| 124 | return num_online_cpus() == 1 && !rcu_scheduler_active; | ||
| 125 | } | ||
| 126 | |||
| 127 | #endif /* __LINUX_RCUPREEMPT_H */ | ||
diff --git a/include/linux/rcupreempt_trace.h b/include/linux/rcupreempt_trace.h deleted file mode 100644 index b99ae073192a..000000000000 --- a/include/linux/rcupreempt_trace.h +++ /dev/null | |||
| @@ -1,97 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Read-Copy Update mechanism for mutual exclusion (RT implementation) | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License as published by | ||
| 6 | * the Free Software Foundation; either version 2 of the License, or | ||
| 7 | * (at your option) any later version. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License | ||
| 15 | * along with this program; if not, write to the Free Software | ||
| 16 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
| 17 | * | ||
| 18 | * Copyright (C) IBM Corporation, 2006 | ||
| 19 | * | ||
| 20 | * Author: Paul McKenney <paulmck@us.ibm.com> | ||
| 21 | * | ||
| 22 | * Based on the original work by Paul McKenney <paul.mckenney@us.ibm.com> | ||
| 23 | * and inputs from Rusty Russell, Andrea Arcangeli and Andi Kleen. | ||
| 24 | * Papers: | ||
| 25 | * http://www.rdrop.com/users/paulmck/paper/rclockpdcsproof.pdf | ||
| 26 | * http://lse.sourceforge.net/locking/rclock_OLS.2001.05.01c.sc.pdf (OLS2001) | ||
| 27 | * | ||
| 28 | * For detailed explanation of the Preemptible Read-Copy Update mechanism see - | ||
| 29 | * http://lwn.net/Articles/253651/ | ||
| 30 | */ | ||
| 31 | |||
| 32 | #ifndef __LINUX_RCUPREEMPT_TRACE_H | ||
| 33 | #define __LINUX_RCUPREEMPT_TRACE_H | ||
| 34 | |||
| 35 | #include <linux/types.h> | ||
| 36 | #include <linux/kernel.h> | ||
| 37 | |||
| 38 | #include <asm/atomic.h> | ||
| 39 | |||
| 40 | /* | ||
| 41 | * PREEMPT_RCU data structures. | ||
| 42 | */ | ||
| 43 | |||
| 44 | struct rcupreempt_trace { | ||
| 45 | long next_length; | ||
| 46 | long next_add; | ||
| 47 | long wait_length; | ||
| 48 | long wait_add; | ||
| 49 | long done_length; | ||
| 50 | long done_add; | ||
| 51 | long done_remove; | ||
| 52 | atomic_t done_invoked; | ||
| 53 | long rcu_check_callbacks; | ||
| 54 | atomic_t rcu_try_flip_1; | ||
| 55 | atomic_t rcu_try_flip_e1; | ||
| 56 | long rcu_try_flip_i1; | ||
| 57 | long rcu_try_flip_ie1; | ||
| 58 | long rcu_try_flip_g1; | ||
| 59 | long rcu_try_flip_a1; | ||
| 60 | long rcu_try_flip_ae1; | ||
| 61 | long rcu_try_flip_a2; | ||
| 62 | long rcu_try_flip_z1; | ||
| 63 | long rcu_try_flip_ze1; | ||
| 64 | long rcu_try_flip_z2; | ||
| 65 | long rcu_try_flip_m1; | ||
| 66 | long rcu_try_flip_me1; | ||
| 67 | long rcu_try_flip_m2; | ||
| 68 | }; | ||
| 69 | |||
| 70 | #ifdef CONFIG_RCU_TRACE | ||
| 71 | #define RCU_TRACE(fn, arg) fn(arg); | ||
| 72 | #else | ||
| 73 | #define RCU_TRACE(fn, arg) | ||
| 74 | #endif | ||
| 75 | |||
| 76 | extern void rcupreempt_trace_move2done(struct rcupreempt_trace *trace); | ||
| 77 | extern void rcupreempt_trace_move2wait(struct rcupreempt_trace *trace); | ||
| 78 | extern void rcupreempt_trace_try_flip_1(struct rcupreempt_trace *trace); | ||
| 79 | extern void rcupreempt_trace_try_flip_e1(struct rcupreempt_trace *trace); | ||
| 80 | extern void rcupreempt_trace_try_flip_i1(struct rcupreempt_trace *trace); | ||
| 81 | extern void rcupreempt_trace_try_flip_ie1(struct rcupreempt_trace *trace); | ||
| 82 | extern void rcupreempt_trace_try_flip_g1(struct rcupreempt_trace *trace); | ||
| 83 | extern void rcupreempt_trace_try_flip_a1(struct rcupreempt_trace *trace); | ||
| 84 | extern void rcupreempt_trace_try_flip_ae1(struct rcupreempt_trace *trace); | ||
| 85 | extern void rcupreempt_trace_try_flip_a2(struct rcupreempt_trace *trace); | ||
| 86 | extern void rcupreempt_trace_try_flip_z1(struct rcupreempt_trace *trace); | ||
| 87 | extern void rcupreempt_trace_try_flip_ze1(struct rcupreempt_trace *trace); | ||
| 88 | extern void rcupreempt_trace_try_flip_z2(struct rcupreempt_trace *trace); | ||
| 89 | extern void rcupreempt_trace_try_flip_m1(struct rcupreempt_trace *trace); | ||
| 90 | extern void rcupreempt_trace_try_flip_me1(struct rcupreempt_trace *trace); | ||
| 91 | extern void rcupreempt_trace_try_flip_m2(struct rcupreempt_trace *trace); | ||
| 92 | extern void rcupreempt_trace_check_callbacks(struct rcupreempt_trace *trace); | ||
| 93 | extern void rcupreempt_trace_done_remove(struct rcupreempt_trace *trace); | ||
| 94 | extern void rcupreempt_trace_invoke(struct rcupreempt_trace *trace); | ||
| 95 | extern void rcupreempt_trace_next_add(struct rcupreempt_trace *trace); | ||
| 96 | |||
| 97 | #endif /* __LINUX_RCUPREEMPT_TRACE_H */ | ||
diff --git a/include/linux/rcutiny.h b/include/linux/rcutiny.h new file mode 100644 index 000000000000..c4ba9a78721e --- /dev/null +++ b/include/linux/rcutiny.h | |||
| @@ -0,0 +1,104 @@ | |||
| 1 | /* | ||
| 2 | * Read-Copy Update mechanism for mutual exclusion, the Bloatwatch edition. | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License as published by | ||
| 6 | * the Free Software Foundation; either version 2 of the License, or | ||
| 7 | * (at your option) any later version. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License | ||
| 15 | * along with this program; if not, write to the Free Software | ||
| 16 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
| 17 | * | ||
| 18 | * Copyright IBM Corporation, 2008 | ||
| 19 | * | ||
| 20 | * Author: Paul E. McKenney <paulmck@linux.vnet.ibm.com> | ||
| 21 | * | ||
| 22 | * For detailed explanation of Read-Copy Update mechanism see - | ||
| 23 | * Documentation/RCU | ||
| 24 | */ | ||
| 25 | #ifndef __LINUX_TINY_H | ||
| 26 | #define __LINUX_TINY_H | ||
| 27 | |||
| 28 | #include <linux/cache.h> | ||
| 29 | |||
| 30 | void rcu_sched_qs(int cpu); | ||
| 31 | void rcu_bh_qs(int cpu); | ||
| 32 | |||
| 33 | #define __rcu_read_lock() preempt_disable() | ||
| 34 | #define __rcu_read_unlock() preempt_enable() | ||
| 35 | #define __rcu_read_lock_bh() local_bh_disable() | ||
| 36 | #define __rcu_read_unlock_bh() local_bh_enable() | ||
| 37 | #define call_rcu_sched call_rcu | ||
| 38 | |||
| 39 | #define rcu_init_sched() do { } while (0) | ||
| 40 | extern void rcu_check_callbacks(int cpu, int user); | ||
| 41 | |||
| 42 | static inline int rcu_needs_cpu(int cpu) | ||
| 43 | { | ||
| 44 | return 0; | ||
| 45 | } | ||
| 46 | |||
| 47 | /* | ||
| 48 | * Return the number of grace periods. | ||
| 49 | */ | ||
| 50 | static inline long rcu_batches_completed(void) | ||
| 51 | { | ||
| 52 | return 0; | ||
| 53 | } | ||
| 54 | |||
| 55 | /* | ||
| 56 | * Return the number of bottom-half grace periods. | ||
| 57 | */ | ||
| 58 | static inline long rcu_batches_completed_bh(void) | ||
| 59 | { | ||
| 60 | return 0; | ||
| 61 | } | ||
| 62 | |||
| 63 | extern int rcu_expedited_torture_stats(char *page); | ||
| 64 | |||
| 65 | #define synchronize_rcu synchronize_sched | ||
| 66 | |||
| 67 | static inline void synchronize_rcu_expedited(void) | ||
| 68 | { | ||
| 69 | synchronize_sched(); | ||
| 70 | } | ||
| 71 | |||
| 72 | static inline void synchronize_rcu_bh_expedited(void) | ||
| 73 | { | ||
| 74 | synchronize_sched(); | ||
| 75 | } | ||
| 76 | |||
| 77 | struct notifier_block; | ||
| 78 | |||
| 79 | #ifdef CONFIG_NO_HZ | ||
| 80 | |||
| 81 | extern void rcu_enter_nohz(void); | ||
| 82 | extern void rcu_exit_nohz(void); | ||
| 83 | |||
| 84 | #else /* #ifdef CONFIG_NO_HZ */ | ||
| 85 | |||
| 86 | static inline void rcu_enter_nohz(void) | ||
| 87 | { | ||
| 88 | } | ||
| 89 | |||
| 90 | static inline void rcu_exit_nohz(void) | ||
| 91 | { | ||
| 92 | } | ||
| 93 | |||
| 94 | #endif /* #else #ifdef CONFIG_NO_HZ */ | ||
| 95 | |||
| 96 | static inline void rcu_scheduler_starting(void) | ||
| 97 | { | ||
| 98 | } | ||
| 99 | |||
| 100 | static inline void exit_rcu(void) | ||
| 101 | { | ||
| 102 | } | ||
| 103 | |||
| 104 | #endif /* __LINUX_RCUTINY_H */ | ||
diff --git a/include/linux/rcutree.h b/include/linux/rcutree.h index 5a5153806c42..c93eee5911b0 100644 --- a/include/linux/rcutree.h +++ b/include/linux/rcutree.h | |||
| @@ -24,278 +24,70 @@ | |||
| 24 | * and inputs from Rusty Russell, Andrea Arcangeli and Andi Kleen. | 24 | * and inputs from Rusty Russell, Andrea Arcangeli and Andi Kleen. |
| 25 | * | 25 | * |
| 26 | * For detailed explanation of Read-Copy Update mechanism see - | 26 | * For detailed explanation of Read-Copy Update mechanism see - |
| 27 | * Documentation/RCU | 27 | * Documentation/RCU |
| 28 | */ | 28 | */ |
| 29 | 29 | ||
| 30 | #ifndef __LINUX_RCUTREE_H | 30 | #ifndef __LINUX_RCUTREE_H |
| 31 | #define __LINUX_RCUTREE_H | 31 | #define __LINUX_RCUTREE_H |
| 32 | 32 | ||
| 33 | #include <linux/cache.h> | 33 | struct notifier_block; |
| 34 | #include <linux/spinlock.h> | ||
| 35 | #include <linux/threads.h> | ||
| 36 | #include <linux/cpumask.h> | ||
| 37 | #include <linux/seqlock.h> | ||
| 38 | 34 | ||
| 39 | /* | 35 | extern void rcu_sched_qs(int cpu); |
| 40 | * Define shape of hierarchy based on NR_CPUS and CONFIG_RCU_FANOUT. | 36 | extern void rcu_bh_qs(int cpu); |
| 41 | * In theory, it should be possible to add more levels straightforwardly. | 37 | extern int rcu_needs_cpu(int cpu); |
| 42 | * In practice, this has not been tested, so there is probably some | 38 | extern void rcu_scheduler_starting(void); |
| 43 | * bug somewhere. | 39 | extern int rcu_expedited_torture_stats(char *page); |
| 44 | */ | ||
| 45 | #define MAX_RCU_LVLS 3 | ||
| 46 | #define RCU_FANOUT (CONFIG_RCU_FANOUT) | ||
| 47 | #define RCU_FANOUT_SQ (RCU_FANOUT * RCU_FANOUT) | ||
| 48 | #define RCU_FANOUT_CUBE (RCU_FANOUT_SQ * RCU_FANOUT) | ||
| 49 | |||
| 50 | #if NR_CPUS <= RCU_FANOUT | ||
| 51 | # define NUM_RCU_LVLS 1 | ||
| 52 | # define NUM_RCU_LVL_0 1 | ||
| 53 | # define NUM_RCU_LVL_1 (NR_CPUS) | ||
| 54 | # define NUM_RCU_LVL_2 0 | ||
| 55 | # define NUM_RCU_LVL_3 0 | ||
| 56 | #elif NR_CPUS <= RCU_FANOUT_SQ | ||
| 57 | # define NUM_RCU_LVLS 2 | ||
| 58 | # define NUM_RCU_LVL_0 1 | ||
| 59 | # define NUM_RCU_LVL_1 (((NR_CPUS) + RCU_FANOUT - 1) / RCU_FANOUT) | ||
| 60 | # define NUM_RCU_LVL_2 (NR_CPUS) | ||
| 61 | # define NUM_RCU_LVL_3 0 | ||
| 62 | #elif NR_CPUS <= RCU_FANOUT_CUBE | ||
| 63 | # define NUM_RCU_LVLS 3 | ||
| 64 | # define NUM_RCU_LVL_0 1 | ||
| 65 | # define NUM_RCU_LVL_1 (((NR_CPUS) + RCU_FANOUT_SQ - 1) / RCU_FANOUT_SQ) | ||
| 66 | # define NUM_RCU_LVL_2 (((NR_CPUS) + (RCU_FANOUT) - 1) / (RCU_FANOUT)) | ||
| 67 | # define NUM_RCU_LVL_3 NR_CPUS | ||
| 68 | #else | ||
| 69 | # error "CONFIG_RCU_FANOUT insufficient for NR_CPUS" | ||
| 70 | #endif /* #if (NR_CPUS) <= RCU_FANOUT */ | ||
| 71 | |||
| 72 | #define RCU_SUM (NUM_RCU_LVL_0 + NUM_RCU_LVL_1 + NUM_RCU_LVL_2 + NUM_RCU_LVL_3) | ||
| 73 | #define NUM_RCU_NODES (RCU_SUM - NR_CPUS) | ||
| 74 | |||
| 75 | /* | ||
| 76 | * Dynticks per-CPU state. | ||
| 77 | */ | ||
| 78 | struct rcu_dynticks { | ||
| 79 | int dynticks_nesting; /* Track nesting level, sort of. */ | ||
| 80 | int dynticks; /* Even value for dynticks-idle, else odd. */ | ||
| 81 | int dynticks_nmi; /* Even value for either dynticks-idle or */ | ||
| 82 | /* not in nmi handler, else odd. So this */ | ||
| 83 | /* remains even for nmi from irq handler. */ | ||
| 84 | }; | ||
| 85 | |||
| 86 | /* | ||
| 87 | * Definition for node within the RCU grace-period-detection hierarchy. | ||
| 88 | */ | ||
| 89 | struct rcu_node { | ||
| 90 | spinlock_t lock; | ||
| 91 | unsigned long qsmask; /* CPUs or groups that need to switch in */ | ||
| 92 | /* order for current grace period to proceed.*/ | ||
| 93 | unsigned long qsmaskinit; | ||
| 94 | /* Per-GP initialization for qsmask. */ | ||
| 95 | unsigned long grpmask; /* Mask to apply to parent qsmask. */ | ||
| 96 | int grplo; /* lowest-numbered CPU or group here. */ | ||
| 97 | int grphi; /* highest-numbered CPU or group here. */ | ||
| 98 | u8 grpnum; /* CPU/group number for next level up. */ | ||
| 99 | u8 level; /* root is at level 0. */ | ||
| 100 | struct rcu_node *parent; | ||
| 101 | } ____cacheline_internodealigned_in_smp; | ||
| 102 | |||
| 103 | /* Index values for nxttail array in struct rcu_data. */ | ||
| 104 | #define RCU_DONE_TAIL 0 /* Also RCU_WAIT head. */ | ||
| 105 | #define RCU_WAIT_TAIL 1 /* Also RCU_NEXT_READY head. */ | ||
| 106 | #define RCU_NEXT_READY_TAIL 2 /* Also RCU_NEXT head. */ | ||
| 107 | #define RCU_NEXT_TAIL 3 | ||
| 108 | #define RCU_NEXT_SIZE 4 | ||
| 109 | |||
| 110 | /* Per-CPU data for read-copy update. */ | ||
| 111 | struct rcu_data { | ||
| 112 | /* 1) quiescent-state and grace-period handling : */ | ||
| 113 | long completed; /* Track rsp->completed gp number */ | ||
| 114 | /* in order to detect GP end. */ | ||
| 115 | long gpnum; /* Highest gp number that this CPU */ | ||
| 116 | /* is aware of having started. */ | ||
| 117 | long passed_quiesc_completed; | ||
| 118 | /* Value of completed at time of qs. */ | ||
| 119 | bool passed_quiesc; /* User-mode/idle loop etc. */ | ||
| 120 | bool qs_pending; /* Core waits for quiesc state. */ | ||
| 121 | bool beenonline; /* CPU online at least once. */ | ||
| 122 | struct rcu_node *mynode; /* This CPU's leaf of hierarchy */ | ||
| 123 | unsigned long grpmask; /* Mask to apply to leaf qsmask. */ | ||
| 124 | |||
| 125 | /* 2) batch handling */ | ||
| 126 | /* | ||
| 127 | * If nxtlist is not NULL, it is partitioned as follows. | ||
| 128 | * Any of the partitions might be empty, in which case the | ||
| 129 | * pointer to that partition will be equal to the pointer for | ||
| 130 | * the following partition. When the list is empty, all of | ||
| 131 | * the nxttail elements point to nxtlist, which is NULL. | ||
| 132 | * | ||
| 133 | * [*nxttail[RCU_NEXT_READY_TAIL], NULL = *nxttail[RCU_NEXT_TAIL]): | ||
| 134 | * Entries that might have arrived after current GP ended | ||
| 135 | * [*nxttail[RCU_WAIT_TAIL], *nxttail[RCU_NEXT_READY_TAIL]): | ||
| 136 | * Entries known to have arrived before current GP ended | ||
| 137 | * [*nxttail[RCU_DONE_TAIL], *nxttail[RCU_WAIT_TAIL]): | ||
| 138 | * Entries that batch # <= ->completed - 1: waiting for current GP | ||
| 139 | * [nxtlist, *nxttail[RCU_DONE_TAIL]): | ||
| 140 | * Entries that batch # <= ->completed | ||
| 141 | * The grace period for these entries has completed, and | ||
| 142 | * the other grace-period-completed entries may be moved | ||
| 143 | * here temporarily in rcu_process_callbacks(). | ||
| 144 | */ | ||
| 145 | struct rcu_head *nxtlist; | ||
| 146 | struct rcu_head **nxttail[RCU_NEXT_SIZE]; | ||
| 147 | long qlen; /* # of queued callbacks */ | ||
| 148 | long blimit; /* Upper limit on a processed batch */ | ||
| 149 | |||
| 150 | #ifdef CONFIG_NO_HZ | ||
| 151 | /* 3) dynticks interface. */ | ||
| 152 | struct rcu_dynticks *dynticks; /* Shared per-CPU dynticks state. */ | ||
| 153 | int dynticks_snap; /* Per-GP tracking for dynticks. */ | ||
| 154 | int dynticks_nmi_snap; /* Per-GP tracking for dynticks_nmi. */ | ||
| 155 | #endif /* #ifdef CONFIG_NO_HZ */ | ||
| 156 | |||
| 157 | /* 4) reasons this CPU needed to be kicked by force_quiescent_state */ | ||
| 158 | #ifdef CONFIG_NO_HZ | ||
| 159 | unsigned long dynticks_fqs; /* Kicked due to dynticks idle. */ | ||
| 160 | #endif /* #ifdef CONFIG_NO_HZ */ | ||
| 161 | unsigned long offline_fqs; /* Kicked due to being offline. */ | ||
| 162 | unsigned long resched_ipi; /* Sent a resched IPI. */ | ||
| 163 | |||
| 164 | /* 5) __rcu_pending() statistics. */ | ||
| 165 | long n_rcu_pending; /* rcu_pending() calls since boot. */ | ||
| 166 | long n_rp_qs_pending; | ||
| 167 | long n_rp_cb_ready; | ||
| 168 | long n_rp_cpu_needs_gp; | ||
| 169 | long n_rp_gp_completed; | ||
| 170 | long n_rp_gp_started; | ||
| 171 | long n_rp_need_fqs; | ||
| 172 | long n_rp_need_nothing; | ||
| 173 | |||
| 174 | int cpu; | ||
| 175 | }; | ||
| 176 | |||
| 177 | /* Values for signaled field in struct rcu_state. */ | ||
| 178 | #define RCU_GP_INIT 0 /* Grace period being initialized. */ | ||
| 179 | #define RCU_SAVE_DYNTICK 1 /* Need to scan dyntick state. */ | ||
| 180 | #define RCU_FORCE_QS 2 /* Need to force quiescent state. */ | ||
| 181 | #ifdef CONFIG_NO_HZ | ||
| 182 | #define RCU_SIGNAL_INIT RCU_SAVE_DYNTICK | ||
| 183 | #else /* #ifdef CONFIG_NO_HZ */ | ||
| 184 | #define RCU_SIGNAL_INIT RCU_FORCE_QS | ||
| 185 | #endif /* #else #ifdef CONFIG_NO_HZ */ | ||
| 186 | |||
| 187 | #define RCU_JIFFIES_TILL_FORCE_QS 3 /* for rsp->jiffies_force_qs */ | ||
| 188 | #ifdef CONFIG_RCU_CPU_STALL_DETECTOR | ||
| 189 | #define RCU_SECONDS_TILL_STALL_CHECK (10 * HZ) /* for rsp->jiffies_stall */ | ||
| 190 | #define RCU_SECONDS_TILL_STALL_RECHECK (30 * HZ) /* for rsp->jiffies_stall */ | ||
| 191 | #define RCU_STALL_RAT_DELAY 2 /* Allow other CPUs time */ | ||
| 192 | /* to take at least one */ | ||
| 193 | /* scheduling clock irq */ | ||
| 194 | /* before ratting on them. */ | ||
| 195 | |||
| 196 | #endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ | ||
| 197 | |||
| 198 | /* | ||
| 199 | * RCU global state, including node hierarchy. This hierarchy is | ||
| 200 | * represented in "heap" form in a dense array. The root (first level) | ||
| 201 | * of the hierarchy is in ->node[0] (referenced by ->level[0]), the second | ||
| 202 | * level in ->node[1] through ->node[m] (->node[1] referenced by ->level[1]), | ||
| 203 | * and the third level in ->node[m+1] and following (->node[m+1] referenced | ||
| 204 | * by ->level[2]). The number of levels is determined by the number of | ||
| 205 | * CPUs and by CONFIG_RCU_FANOUT. Small systems will have a "hierarchy" | ||
| 206 | * consisting of a single rcu_node. | ||
| 207 | */ | ||
| 208 | struct rcu_state { | ||
| 209 | struct rcu_node node[NUM_RCU_NODES]; /* Hierarchy. */ | ||
| 210 | struct rcu_node *level[NUM_RCU_LVLS]; /* Hierarchy levels. */ | ||
| 211 | u32 levelcnt[MAX_RCU_LVLS + 1]; /* # nodes in each level. */ | ||
| 212 | u8 levelspread[NUM_RCU_LVLS]; /* kids/node in each level. */ | ||
| 213 | struct rcu_data *rda[NR_CPUS]; /* array of rdp pointers. */ | ||
| 214 | 40 | ||
| 215 | /* The following fields are guarded by the root rcu_node's lock. */ | 41 | #ifdef CONFIG_TREE_PREEMPT_RCU |
| 216 | 42 | ||
| 217 | u8 signaled ____cacheline_internodealigned_in_smp; | 43 | extern void __rcu_read_lock(void); |
| 218 | /* Force QS state. */ | 44 | extern void __rcu_read_unlock(void); |
| 219 | long gpnum; /* Current gp number. */ | 45 | extern void synchronize_rcu(void); |
| 220 | long completed; /* # of last completed gp. */ | 46 | extern void exit_rcu(void); |
| 221 | spinlock_t onofflock; /* exclude on/offline and */ | ||
| 222 | /* starting new GP. */ | ||
| 223 | spinlock_t fqslock; /* Only one task forcing */ | ||
| 224 | /* quiescent states. */ | ||
| 225 | unsigned long jiffies_force_qs; /* Time at which to invoke */ | ||
| 226 | /* force_quiescent_state(). */ | ||
| 227 | unsigned long n_force_qs; /* Number of calls to */ | ||
| 228 | /* force_quiescent_state(). */ | ||
| 229 | unsigned long n_force_qs_lh; /* ~Number of calls leaving */ | ||
| 230 | /* due to lock unavailable. */ | ||
| 231 | unsigned long n_force_qs_ngp; /* Number of calls leaving */ | ||
| 232 | /* due to no GP active. */ | ||
| 233 | #ifdef CONFIG_RCU_CPU_STALL_DETECTOR | ||
| 234 | unsigned long gp_start; /* Time at which GP started, */ | ||
| 235 | /* but in jiffies. */ | ||
| 236 | unsigned long jiffies_stall; /* Time at which to check */ | ||
| 237 | /* for CPU stalls. */ | ||
| 238 | #endif /* #ifdef CONFIG_RCU_CPU_STALL_DETECTOR */ | ||
| 239 | #ifdef CONFIG_NO_HZ | ||
| 240 | long dynticks_completed; /* Value of completed @ snap. */ | ||
| 241 | #endif /* #ifdef CONFIG_NO_HZ */ | ||
| 242 | }; | ||
| 243 | 47 | ||
| 244 | extern void rcu_qsctr_inc(int cpu); | 48 | #else /* #ifdef CONFIG_TREE_PREEMPT_RCU */ |
| 245 | extern void rcu_bh_qsctr_inc(int cpu); | ||
| 246 | |||
| 247 | extern int rcu_pending(int cpu); | ||
| 248 | extern int rcu_needs_cpu(int cpu); | ||
| 249 | |||
| 250 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | ||
| 251 | extern struct lockdep_map rcu_lock_map; | ||
| 252 | # define rcu_read_acquire() \ | ||
| 253 | lock_acquire(&rcu_lock_map, 0, 0, 2, 1, NULL, _THIS_IP_) | ||
| 254 | # define rcu_read_release() lock_release(&rcu_lock_map, 1, _THIS_IP_) | ||
| 255 | #else | ||
| 256 | # define rcu_read_acquire() do { } while (0) | ||
| 257 | # define rcu_read_release() do { } while (0) | ||
| 258 | #endif | ||
| 259 | 49 | ||
| 260 | static inline void __rcu_read_lock(void) | 50 | static inline void __rcu_read_lock(void) |
| 261 | { | 51 | { |
| 262 | preempt_disable(); | 52 | preempt_disable(); |
| 263 | __acquire(RCU); | ||
| 264 | rcu_read_acquire(); | ||
| 265 | } | 53 | } |
| 54 | |||
| 266 | static inline void __rcu_read_unlock(void) | 55 | static inline void __rcu_read_unlock(void) |
| 267 | { | 56 | { |
| 268 | rcu_read_release(); | ||
| 269 | __release(RCU); | ||
| 270 | preempt_enable(); | 57 | preempt_enable(); |
| 271 | } | 58 | } |
| 59 | |||
| 60 | #define synchronize_rcu synchronize_sched | ||
| 61 | |||
| 62 | static inline void exit_rcu(void) | ||
| 63 | { | ||
| 64 | } | ||
| 65 | |||
| 66 | #endif /* #else #ifdef CONFIG_TREE_PREEMPT_RCU */ | ||
| 67 | |||
| 272 | static inline void __rcu_read_lock_bh(void) | 68 | static inline void __rcu_read_lock_bh(void) |
| 273 | { | 69 | { |
| 274 | local_bh_disable(); | 70 | local_bh_disable(); |
| 275 | __acquire(RCU_BH); | ||
| 276 | rcu_read_acquire(); | ||
| 277 | } | 71 | } |
| 278 | static inline void __rcu_read_unlock_bh(void) | 72 | static inline void __rcu_read_unlock_bh(void) |
| 279 | { | 73 | { |
| 280 | rcu_read_release(); | ||
| 281 | __release(RCU_BH); | ||
| 282 | local_bh_enable(); | 74 | local_bh_enable(); |
| 283 | } | 75 | } |
| 284 | 76 | ||
| 285 | #define __synchronize_sched() synchronize_rcu() | 77 | extern void call_rcu_sched(struct rcu_head *head, |
| 286 | 78 | void (*func)(struct rcu_head *rcu)); | |
| 287 | #define call_rcu_sched(head, func) call_rcu(head, func) | 79 | extern void synchronize_rcu_expedited(void); |
| 288 | 80 | ||
| 289 | static inline void rcu_init_sched(void) | 81 | static inline void synchronize_rcu_bh_expedited(void) |
| 290 | { | 82 | { |
| 83 | synchronize_sched_expedited(); | ||
| 291 | } | 84 | } |
| 292 | 85 | ||
| 293 | extern void __rcu_init(void); | ||
| 294 | extern void rcu_check_callbacks(int cpu, int user); | 86 | extern void rcu_check_callbacks(int cpu, int user); |
| 295 | extern void rcu_restart_cpu(int cpu); | ||
| 296 | 87 | ||
| 297 | extern long rcu_batches_completed(void); | 88 | extern long rcu_batches_completed(void); |
| 298 | extern long rcu_batches_completed_bh(void); | 89 | extern long rcu_batches_completed_bh(void); |
| 90 | extern long rcu_batches_completed_sched(void); | ||
| 299 | 91 | ||
| 300 | #ifdef CONFIG_NO_HZ | 92 | #ifdef CONFIG_NO_HZ |
| 301 | void rcu_enter_nohz(void); | 93 | void rcu_enter_nohz(void); |
| @@ -309,7 +101,7 @@ static inline void rcu_exit_nohz(void) | |||
| 309 | } | 101 | } |
| 310 | #endif /* CONFIG_NO_HZ */ | 102 | #endif /* CONFIG_NO_HZ */ |
| 311 | 103 | ||
| 312 | /* A context switch is a grace period for rcutree. */ | 104 | /* A context switch is a grace period for RCU-sched and RCU-bh. */ |
| 313 | static inline int rcu_blocking_is_gp(void) | 105 | static inline int rcu_blocking_is_gp(void) |
| 314 | { | 106 | { |
| 315 | return num_online_cpus() == 1; | 107 | return num_online_cpus() == 1; |
diff --git a/include/linux/rds.h b/include/linux/rds.h index d91dc91f5443..cab4994c2f63 100644 --- a/include/linux/rds.h +++ b/include/linux/rds.h | |||
| @@ -56,6 +56,7 @@ | |||
| 56 | /* deprecated: RDS_BARRIER 4 */ | 56 | /* deprecated: RDS_BARRIER 4 */ |
| 57 | #define RDS_RECVERR 5 | 57 | #define RDS_RECVERR 5 |
| 58 | #define RDS_CONG_MONITOR 6 | 58 | #define RDS_CONG_MONITOR 6 |
| 59 | #define RDS_GET_MR_FOR_DEST 7 | ||
| 59 | 60 | ||
| 60 | /* | 61 | /* |
| 61 | * Control message types for SOL_RDS. | 62 | * Control message types for SOL_RDS. |
| @@ -147,6 +148,18 @@ struct rds_info_socket { | |||
| 147 | u_int64_t inum; | 148 | u_int64_t inum; |
| 148 | } __attribute__((packed)); | 149 | } __attribute__((packed)); |
| 149 | 150 | ||
| 151 | struct rds_info_tcp_socket { | ||
| 152 | __be32 local_addr; | ||
| 153 | __be16 local_port; | ||
| 154 | __be32 peer_addr; | ||
| 155 | __be16 peer_port; | ||
| 156 | u_int64_t hdr_rem; | ||
| 157 | u_int64_t data_rem; | ||
| 158 | u_int32_t last_sent_nxt; | ||
| 159 | u_int32_t last_expected_una; | ||
| 160 | u_int32_t last_seen_una; | ||
| 161 | } __attribute__((packed)); | ||
| 162 | |||
| 150 | #define RDS_IB_GID_LEN 16 | 163 | #define RDS_IB_GID_LEN 16 |
| 151 | struct rds_info_rdma_connection { | 164 | struct rds_info_rdma_connection { |
| 152 | __be32 src_addr; | 165 | __be32 src_addr; |
| @@ -212,6 +225,13 @@ struct rds_get_mr_args { | |||
| 212 | uint64_t flags; | 225 | uint64_t flags; |
| 213 | }; | 226 | }; |
| 214 | 227 | ||
| 228 | struct rds_get_mr_for_dest_args { | ||
| 229 | struct sockaddr_storage dest_addr; | ||
| 230 | struct rds_iovec vec; | ||
| 231 | u_int64_t cookie_addr; | ||
| 232 | uint64_t flags; | ||
| 233 | }; | ||
| 234 | |||
| 215 | struct rds_free_mr_args { | 235 | struct rds_free_mr_args { |
| 216 | rds_rdma_cookie_t cookie; | 236 | rds_rdma_cookie_t cookie; |
| 217 | u_int64_t flags; | 237 | u_int64_t flags; |
diff --git a/include/linux/regulator/consumer.h b/include/linux/regulator/consumer.h index 277f4b964df5..490c5b37b6d7 100644 --- a/include/linux/regulator/consumer.h +++ b/include/linux/regulator/consumer.h | |||
| @@ -125,6 +125,8 @@ struct regulator_bulk_data { | |||
| 125 | /* regulator get and put */ | 125 | /* regulator get and put */ |
| 126 | struct regulator *__must_check regulator_get(struct device *dev, | 126 | struct regulator *__must_check regulator_get(struct device *dev, |
| 127 | const char *id); | 127 | const char *id); |
| 128 | struct regulator *__must_check regulator_get_exclusive(struct device *dev, | ||
| 129 | const char *id); | ||
| 128 | void regulator_put(struct regulator *regulator); | 130 | void regulator_put(struct regulator *regulator); |
| 129 | 131 | ||
| 130 | /* regulator output control and status */ | 132 | /* regulator output control and status */ |
| @@ -144,6 +146,8 @@ void regulator_bulk_free(int num_consumers, | |||
| 144 | 146 | ||
| 145 | int regulator_count_voltages(struct regulator *regulator); | 147 | int regulator_count_voltages(struct regulator *regulator); |
| 146 | int regulator_list_voltage(struct regulator *regulator, unsigned selector); | 148 | int regulator_list_voltage(struct regulator *regulator, unsigned selector); |
| 149 | int regulator_is_supported_voltage(struct regulator *regulator, | ||
| 150 | int min_uV, int max_uV); | ||
| 147 | int regulator_set_voltage(struct regulator *regulator, int min_uV, int max_uV); | 151 | int regulator_set_voltage(struct regulator *regulator, int min_uV, int max_uV); |
| 148 | int regulator_get_voltage(struct regulator *regulator); | 152 | int regulator_get_voltage(struct regulator *regulator); |
| 149 | int regulator_set_current_limit(struct regulator *regulator, | 153 | int regulator_set_current_limit(struct regulator *regulator, |
diff --git a/include/linux/regulator/driver.h b/include/linux/regulator/driver.h index 225f733e7533..31f2055eae28 100644 --- a/include/linux/regulator/driver.h +++ b/include/linux/regulator/driver.h | |||
| @@ -37,7 +37,8 @@ enum regulator_status { | |||
| 37 | * | 37 | * |
| 38 | * @enable: Configure the regulator as enabled. | 38 | * @enable: Configure the regulator as enabled. |
| 39 | * @disable: Configure the regulator as disabled. | 39 | * @disable: Configure the regulator as disabled. |
| 40 | * @is_enabled: Return 1 if the regulator is enabled, 0 otherwise. | 40 | * @is_enabled: Return 1 if the regulator is enabled, 0 if not. |
| 41 | * May also return negative errno. | ||
| 41 | * | 42 | * |
| 42 | * @set_voltage: Set the voltage for the regulator within the range specified. | 43 | * @set_voltage: Set the voltage for the regulator within the range specified. |
| 43 | * The driver should select the voltage closest to min_uV. | 44 | * The driver should select the voltage closest to min_uV. |
| @@ -162,6 +163,8 @@ struct regulator_desc { | |||
| 162 | struct regulator_dev { | 163 | struct regulator_dev { |
| 163 | struct regulator_desc *desc; | 164 | struct regulator_desc *desc; |
| 164 | int use_count; | 165 | int use_count; |
| 166 | int open_count; | ||
| 167 | int exclusive; | ||
| 165 | 168 | ||
| 166 | /* lists we belong to */ | 169 | /* lists we belong to */ |
| 167 | struct list_head list; /* list of all regulators */ | 170 | struct list_head list; /* list of all regulators */ |
| @@ -193,6 +196,8 @@ void *rdev_get_drvdata(struct regulator_dev *rdev); | |||
| 193 | struct device *rdev_get_dev(struct regulator_dev *rdev); | 196 | struct device *rdev_get_dev(struct regulator_dev *rdev); |
| 194 | int rdev_get_id(struct regulator_dev *rdev); | 197 | int rdev_get_id(struct regulator_dev *rdev); |
| 195 | 198 | ||
| 199 | int regulator_mode_to_status(unsigned int); | ||
| 200 | |||
| 196 | void *regulator_get_init_drvdata(struct regulator_init_data *reg_init_data); | 201 | void *regulator_get_init_drvdata(struct regulator_init_data *reg_init_data); |
| 197 | 202 | ||
| 198 | #endif | 203 | #endif |
diff --git a/include/linux/regulator/fixed.h b/include/linux/regulator/fixed.h index 91b4da31f1b5..e94a4a1c7c8a 100644 --- a/include/linux/regulator/fixed.h +++ b/include/linux/regulator/fixed.h | |||
| @@ -5,6 +5,9 @@ | |||
| 5 | * | 5 | * |
| 6 | * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> | 6 | * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> |
| 7 | * | 7 | * |
| 8 | * Copyright (c) 2009 Nokia Corporation | ||
| 9 | * Roger Quadros <ext-roger.quadros@nokia.com> | ||
| 10 | * | ||
| 8 | * This program is free software; you can redistribute it and/or | 11 | * This program is free software; you can redistribute it and/or |
| 9 | * modify it under the terms of the GNU General Public License as | 12 | * modify it under the terms of the GNU General Public License as |
| 10 | * published by the Free Software Foundation; either version 2 of the | 13 | * published by the Free Software Foundation; either version 2 of the |
| @@ -16,9 +19,30 @@ | |||
| 16 | 19 | ||
| 17 | struct regulator_init_data; | 20 | struct regulator_init_data; |
| 18 | 21 | ||
| 22 | /** | ||
| 23 | * struct fixed_voltage_config - fixed_voltage_config structure | ||
| 24 | * @supply_name: Name of the regulator supply | ||
| 25 | * @microvolts: Output voltage of regulator | ||
| 26 | * @gpio: GPIO to use for enable control | ||
| 27 | * set to -EINVAL if not used | ||
| 28 | * @enable_high: Polarity of enable GPIO | ||
| 29 | * 1 = Active high, 0 = Active low | ||
| 30 | * @enabled_at_boot: Whether regulator has been enabled at | ||
| 31 | * boot or not. 1 = Yes, 0 = No | ||
| 32 | * This is used to keep the regulator at | ||
| 33 | * the default state | ||
| 34 | * @init_data: regulator_init_data | ||
| 35 | * | ||
| 36 | * This structure contains fixed voltage regulator configuration | ||
| 37 | * information that must be passed by platform code to the fixed | ||
| 38 | * voltage regulator driver. | ||
| 39 | */ | ||
| 19 | struct fixed_voltage_config { | 40 | struct fixed_voltage_config { |
| 20 | const char *supply_name; | 41 | const char *supply_name; |
| 21 | int microvolts; | 42 | int microvolts; |
| 43 | int gpio; | ||
| 44 | unsigned enable_high:1; | ||
| 45 | unsigned enabled_at_boot:1; | ||
| 22 | struct regulator_init_data *init_data; | 46 | struct regulator_init_data *init_data; |
| 23 | }; | 47 | }; |
| 24 | 48 | ||
diff --git a/include/linux/regulator/machine.h b/include/linux/regulator/machine.h index bac64fa390f2..87f5f176d4ef 100644 --- a/include/linux/regulator/machine.h +++ b/include/linux/regulator/machine.h | |||
| @@ -41,7 +41,7 @@ struct regulator; | |||
| 41 | #define REGULATOR_CHANGE_DRMS 0x10 | 41 | #define REGULATOR_CHANGE_DRMS 0x10 |
| 42 | 42 | ||
| 43 | /** | 43 | /** |
| 44 | * struct regulator_state - regulator state during low power syatem states | 44 | * struct regulator_state - regulator state during low power system states |
| 45 | * | 45 | * |
| 46 | * This describes a regulators state during a system wide low power state. | 46 | * This describes a regulators state during a system wide low power state. |
| 47 | * | 47 | * |
| @@ -117,25 +117,37 @@ struct regulation_constraints { | |||
| 117 | /* mode to set on startup */ | 117 | /* mode to set on startup */ |
| 118 | unsigned int initial_mode; | 118 | unsigned int initial_mode; |
| 119 | 119 | ||
| 120 | /* constriant flags */ | 120 | /* constraint flags */ |
| 121 | unsigned always_on:1; /* regulator never off when system is on */ | 121 | unsigned always_on:1; /* regulator never off when system is on */ |
| 122 | unsigned boot_on:1; /* bootloader/firmware enabled regulator */ | 122 | unsigned boot_on:1; /* bootloader/firmware enabled regulator */ |
| 123 | unsigned apply_uV:1; /* apply uV constraint iff min == max */ | 123 | unsigned apply_uV:1; /* apply uV constraint if min == max */ |
| 124 | }; | 124 | }; |
| 125 | 125 | ||
| 126 | /** | 126 | /** |
| 127 | * struct regulator_consumer_supply - supply -> device mapping | 127 | * struct regulator_consumer_supply - supply -> device mapping |
| 128 | * | 128 | * |
| 129 | * This maps a supply name to a device. | 129 | * This maps a supply name to a device. Only one of dev or dev_name |
| 130 | * can be specified. Use of dev_name allows support for buses which | ||
| 131 | * make struct device available late such as I2C and is the preferred | ||
| 132 | * form. | ||
| 130 | * | 133 | * |
| 131 | * @dev: Device structure for the consumer. | 134 | * @dev: Device structure for the consumer. |
| 135 | * @dev_name: Result of dev_name() for the consumer. | ||
| 132 | * @supply: Name for the supply. | 136 | * @supply: Name for the supply. |
| 133 | */ | 137 | */ |
| 134 | struct regulator_consumer_supply { | 138 | struct regulator_consumer_supply { |
| 135 | struct device *dev; /* consumer */ | 139 | struct device *dev; /* consumer */ |
| 140 | const char *dev_name; /* dev_name() for consumer */ | ||
| 136 | const char *supply; /* consumer supply - e.g. "vcc" */ | 141 | const char *supply; /* consumer supply - e.g. "vcc" */ |
| 137 | }; | 142 | }; |
| 138 | 143 | ||
| 144 | /* Initialize struct regulator_consumer_supply */ | ||
| 145 | #define REGULATOR_SUPPLY(_name, _dev_name) \ | ||
| 146 | { \ | ||
| 147 | .supply = _name, \ | ||
| 148 | .dev_name = _dev_name, \ | ||
| 149 | } | ||
| 150 | |||
| 139 | /** | 151 | /** |
| 140 | * struct regulator_init_data - regulator platform initialisation data. | 152 | * struct regulator_init_data - regulator platform initialisation data. |
| 141 | * | 153 | * |
| @@ -166,6 +178,12 @@ struct regulator_init_data { | |||
| 166 | 178 | ||
| 167 | int regulator_suspend_prepare(suspend_state_t state); | 179 | int regulator_suspend_prepare(suspend_state_t state); |
| 168 | 180 | ||
| 181 | #ifdef CONFIG_REGULATOR | ||
| 169 | void regulator_has_full_constraints(void); | 182 | void regulator_has_full_constraints(void); |
| 183 | #else | ||
| 184 | static inline void regulator_has_full_constraints(void) | ||
| 185 | { | ||
| 186 | } | ||
| 187 | #endif | ||
| 170 | 188 | ||
| 171 | #endif | 189 | #endif |
diff --git a/include/linux/regulator/max1586.h b/include/linux/regulator/max1586.h index 44563192bf16..de9a7fae20be 100644 --- a/include/linux/regulator/max1586.h +++ b/include/linux/regulator/max1586.h | |||
| @@ -36,7 +36,7 @@ | |||
| 36 | * max1586_subdev_data - regulator data | 36 | * max1586_subdev_data - regulator data |
| 37 | * @id: regulator Id (either MAX1586_V3 or MAX1586_V6) | 37 | * @id: regulator Id (either MAX1586_V3 or MAX1586_V6) |
| 38 | * @name: regulator cute name (example for V3: "vcc_core") | 38 | * @name: regulator cute name (example for V3: "vcc_core") |
| 39 | * @platform_data: regulator init data (contraints, supplies, ...) | 39 | * @platform_data: regulator init data (constraints, supplies, ...) |
| 40 | */ | 40 | */ |
| 41 | struct max1586_subdev_data { | 41 | struct max1586_subdev_data { |
| 42 | int id; | 42 | int id; |
| @@ -46,7 +46,7 @@ struct max1586_subdev_data { | |||
| 46 | 46 | ||
| 47 | /** | 47 | /** |
| 48 | * max1586_platform_data - platform data for max1586 | 48 | * max1586_platform_data - platform data for max1586 |
| 49 | * @num_subdevs: number of regultors used (may be 1 or 2) | 49 | * @num_subdevs: number of regulators used (may be 1 or 2) |
| 50 | * @subdevs: regulator used | 50 | * @subdevs: regulator used |
| 51 | * At most, there will be a regulator for V3 and one for V6 voltages. | 51 | * At most, there will be a regulator for V3 and one for V6 voltages. |
| 52 | * @v3_gain: gain on the V3 voltage output multiplied by 1e6. | 52 | * @v3_gain: gain on the V3 voltage output multiplied by 1e6. |
diff --git a/include/linux/relay.h b/include/linux/relay.h index 953fc055e875..14a86bc7102b 100644 --- a/include/linux/relay.h +++ b/include/linux/relay.h | |||
| @@ -140,7 +140,7 @@ struct rchan_callbacks | |||
| 140 | * cause relay_open() to create a single global buffer rather | 140 | * cause relay_open() to create a single global buffer rather |
| 141 | * than the default set of per-cpu buffers. | 141 | * than the default set of per-cpu buffers. |
| 142 | * | 142 | * |
| 143 | * See Documentation/filesystems/relayfs.txt for more info. | 143 | * See Documentation/filesystems/relay.txt for more info. |
| 144 | */ | 144 | */ |
| 145 | struct dentry *(*create_buf_file)(const char *filename, | 145 | struct dentry *(*create_buf_file)(const char *filename, |
| 146 | struct dentry *parent, | 146 | struct dentry *parent, |
diff --git a/include/linux/res_counter.h b/include/linux/res_counter.h index 511f42fc6816..fcb9884df618 100644 --- a/include/linux/res_counter.h +++ b/include/linux/res_counter.h | |||
| @@ -35,6 +35,10 @@ struct res_counter { | |||
| 35 | */ | 35 | */ |
| 36 | unsigned long long limit; | 36 | unsigned long long limit; |
| 37 | /* | 37 | /* |
| 38 | * the limit that usage can be exceed | ||
| 39 | */ | ||
| 40 | unsigned long long soft_limit; | ||
| 41 | /* | ||
| 38 | * the number of unsuccessful attempts to consume the resource | 42 | * the number of unsuccessful attempts to consume the resource |
| 39 | */ | 43 | */ |
| 40 | unsigned long long failcnt; | 44 | unsigned long long failcnt; |
| @@ -87,6 +91,7 @@ enum { | |||
| 87 | RES_MAX_USAGE, | 91 | RES_MAX_USAGE, |
| 88 | RES_LIMIT, | 92 | RES_LIMIT, |
| 89 | RES_FAILCNT, | 93 | RES_FAILCNT, |
| 94 | RES_SOFT_LIMIT, | ||
| 90 | }; | 95 | }; |
| 91 | 96 | ||
| 92 | /* | 97 | /* |
| @@ -132,6 +137,36 @@ static inline bool res_counter_limit_check_locked(struct res_counter *cnt) | |||
| 132 | return false; | 137 | return false; |
| 133 | } | 138 | } |
| 134 | 139 | ||
| 140 | static inline bool res_counter_soft_limit_check_locked(struct res_counter *cnt) | ||
| 141 | { | ||
| 142 | if (cnt->usage < cnt->soft_limit) | ||
| 143 | return true; | ||
| 144 | |||
| 145 | return false; | ||
| 146 | } | ||
| 147 | |||
| 148 | /** | ||
| 149 | * Get the difference between the usage and the soft limit | ||
| 150 | * @cnt: The counter | ||
| 151 | * | ||
| 152 | * Returns 0 if usage is less than or equal to soft limit | ||
| 153 | * The difference between usage and soft limit, otherwise. | ||
| 154 | */ | ||
| 155 | static inline unsigned long long | ||
| 156 | res_counter_soft_limit_excess(struct res_counter *cnt) | ||
| 157 | { | ||
| 158 | unsigned long long excess; | ||
| 159 | unsigned long flags; | ||
| 160 | |||
| 161 | spin_lock_irqsave(&cnt->lock, flags); | ||
| 162 | if (cnt->usage <= cnt->soft_limit) | ||
| 163 | excess = 0; | ||
| 164 | else | ||
| 165 | excess = cnt->usage - cnt->soft_limit; | ||
| 166 | spin_unlock_irqrestore(&cnt->lock, flags); | ||
| 167 | return excess; | ||
| 168 | } | ||
| 169 | |||
| 135 | /* | 170 | /* |
| 136 | * Helper function to detect if the cgroup is within it's limit or | 171 | * Helper function to detect if the cgroup is within it's limit or |
| 137 | * not. It's currently called from cgroup_rss_prepare() | 172 | * not. It's currently called from cgroup_rss_prepare() |
| @@ -147,6 +182,17 @@ static inline bool res_counter_check_under_limit(struct res_counter *cnt) | |||
| 147 | return ret; | 182 | return ret; |
| 148 | } | 183 | } |
| 149 | 184 | ||
| 185 | static inline bool res_counter_check_under_soft_limit(struct res_counter *cnt) | ||
| 186 | { | ||
| 187 | bool ret; | ||
| 188 | unsigned long flags; | ||
| 189 | |||
| 190 | spin_lock_irqsave(&cnt->lock, flags); | ||
| 191 | ret = res_counter_soft_limit_check_locked(cnt); | ||
| 192 | spin_unlock_irqrestore(&cnt->lock, flags); | ||
| 193 | return ret; | ||
| 194 | } | ||
| 195 | |||
| 150 | static inline void res_counter_reset_max(struct res_counter *cnt) | 196 | static inline void res_counter_reset_max(struct res_counter *cnt) |
| 151 | { | 197 | { |
| 152 | unsigned long flags; | 198 | unsigned long flags; |
| @@ -180,4 +226,16 @@ static inline int res_counter_set_limit(struct res_counter *cnt, | |||
| 180 | return ret; | 226 | return ret; |
| 181 | } | 227 | } |
| 182 | 228 | ||
| 229 | static inline int | ||
| 230 | res_counter_set_soft_limit(struct res_counter *cnt, | ||
| 231 | unsigned long long soft_limit) | ||
| 232 | { | ||
| 233 | unsigned long flags; | ||
| 234 | |||
| 235 | spin_lock_irqsave(&cnt->lock, flags); | ||
| 236 | cnt->soft_limit = soft_limit; | ||
| 237 | spin_unlock_irqrestore(&cnt->lock, flags); | ||
| 238 | return 0; | ||
| 239 | } | ||
| 240 | |||
| 183 | #endif | 241 | #endif |
diff --git a/include/linux/rfkill.h b/include/linux/rfkill.h index 278777fa8a3a..97059d08a626 100644 --- a/include/linux/rfkill.h +++ b/include/linux/rfkill.h | |||
| @@ -6,20 +6,17 @@ | |||
| 6 | * Copyright (C) 2007 Dmitry Torokhov | 6 | * Copyright (C) 2007 Dmitry Torokhov |
| 7 | * Copyright 2009 Johannes Berg <johannes@sipsolutions.net> | 7 | * Copyright 2009 Johannes Berg <johannes@sipsolutions.net> |
| 8 | * | 8 | * |
| 9 | * This program is free software; you can redistribute it and/or modify | 9 | * Permission to use, copy, modify, and/or distribute this software for any |
| 10 | * it under the terms of the GNU General Public License as published by | 10 | * purpose with or without fee is hereby granted, provided that the above |
| 11 | * the Free Software Foundation; either version 2 of the License, or | 11 | * copyright notice and this permission notice appear in all copies. |
| 12 | * (at your option) any later version. | ||
| 13 | * | 12 | * |
| 14 | * This program is distributed in the hope that it will be useful, | 13 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
| 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 14 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
| 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 15 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
| 17 | * GNU General Public License for more details. | 16 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
| 18 | * | 17 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
| 19 | * You should have received a copy of the GNU General Public License | 18 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
| 20 | * along with this program; if not, write to the | 19 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
| 21 | * Free Software Foundation, Inc., | ||
| 22 | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
| 23 | */ | 20 | */ |
| 24 | 21 | ||
| 25 | #include <linux/types.h> | 22 | #include <linux/types.h> |
| @@ -38,6 +35,8 @@ | |||
| 38 | * @RFKILL_TYPE_UWB: switch is on a ultra wideband device. | 35 | * @RFKILL_TYPE_UWB: switch is on a ultra wideband device. |
| 39 | * @RFKILL_TYPE_WIMAX: switch is on a WiMAX device. | 36 | * @RFKILL_TYPE_WIMAX: switch is on a WiMAX device. |
| 40 | * @RFKILL_TYPE_WWAN: switch is on a wireless WAN device. | 37 | * @RFKILL_TYPE_WWAN: switch is on a wireless WAN device. |
| 38 | * @RFKILL_TYPE_GPS: switch is on a GPS device. | ||
| 39 | * @RFKILL_TYPE_FM: switch is on a FM radio device. | ||
| 41 | * @NUM_RFKILL_TYPES: number of defined rfkill types | 40 | * @NUM_RFKILL_TYPES: number of defined rfkill types |
| 42 | */ | 41 | */ |
| 43 | enum rfkill_type { | 42 | enum rfkill_type { |
| @@ -47,6 +46,8 @@ enum rfkill_type { | |||
| 47 | RFKILL_TYPE_UWB, | 46 | RFKILL_TYPE_UWB, |
| 48 | RFKILL_TYPE_WIMAX, | 47 | RFKILL_TYPE_WIMAX, |
| 49 | RFKILL_TYPE_WWAN, | 48 | RFKILL_TYPE_WWAN, |
| 49 | RFKILL_TYPE_GPS, | ||
| 50 | RFKILL_TYPE_FM, | ||
| 50 | NUM_RFKILL_TYPES, | 51 | NUM_RFKILL_TYPES, |
| 51 | }; | 52 | }; |
| 52 | 53 | ||
| @@ -82,6 +83,20 @@ struct rfkill_event { | |||
| 82 | __u8 soft, hard; | 83 | __u8 soft, hard; |
| 83 | } __packed; | 84 | } __packed; |
| 84 | 85 | ||
| 86 | /* | ||
| 87 | * We are planning to be backward and forward compatible with changes | ||
| 88 | * to the event struct, by adding new, optional, members at the end. | ||
| 89 | * When reading an event (whether the kernel from userspace or vice | ||
| 90 | * versa) we need to accept anything that's at least as large as the | ||
| 91 | * version 1 event size, but might be able to accept other sizes in | ||
| 92 | * the future. | ||
| 93 | * | ||
| 94 | * One exception is the kernel -- we already have two event sizes in | ||
| 95 | * that we've made the 'hard' member optional since our only option | ||
| 96 | * is to ignore it anyway. | ||
| 97 | */ | ||
| 98 | #define RFKILL_EVENT_SIZE_V1 8 | ||
| 99 | |||
| 85 | /* ioctl for turning off rfkill-input (if present) */ | 100 | /* ioctl for turning off rfkill-input (if present) */ |
| 86 | #define RFKILL_IOC_MAGIC 'R' | 101 | #define RFKILL_IOC_MAGIC 'R' |
| 87 | #define RFKILL_IOC_NOINPUT 1 | 102 | #define RFKILL_IOC_NOINPUT 1 |
diff --git a/include/linux/ring_buffer.h b/include/linux/ring_buffer.h index 29f8599e6bea..5fcc31ed5771 100644 --- a/include/linux/ring_buffer.h +++ b/include/linux/ring_buffer.h | |||
| @@ -75,20 +75,6 @@ ring_buffer_event_time_delta(struct ring_buffer_event *event) | |||
| 75 | } | 75 | } |
| 76 | 76 | ||
| 77 | /* | 77 | /* |
| 78 | * ring_buffer_event_discard can discard any event in the ring buffer. | ||
| 79 | * it is up to the caller to protect against a reader from | ||
| 80 | * consuming it or a writer from wrapping and replacing it. | ||
| 81 | * | ||
| 82 | * No external protection is needed if this is called before | ||
| 83 | * the event is commited. But in that case it would be better to | ||
| 84 | * use ring_buffer_discard_commit. | ||
| 85 | * | ||
| 86 | * Note, if an event that has not been committed is discarded | ||
| 87 | * with ring_buffer_event_discard, it must still be committed. | ||
| 88 | */ | ||
| 89 | void ring_buffer_event_discard(struct ring_buffer_event *event); | ||
| 90 | |||
| 91 | /* | ||
| 92 | * ring_buffer_discard_commit will remove an event that has not | 78 | * ring_buffer_discard_commit will remove an event that has not |
| 93 | * ben committed yet. If this is used, then ring_buffer_unlock_commit | 79 | * ben committed yet. If this is used, then ring_buffer_unlock_commit |
| 94 | * must not be called on the discarded event. This function | 80 | * must not be called on the discarded event. This function |
| @@ -154,8 +140,17 @@ unsigned long ring_buffer_size(struct ring_buffer *buffer); | |||
| 154 | void ring_buffer_reset_cpu(struct ring_buffer *buffer, int cpu); | 140 | void ring_buffer_reset_cpu(struct ring_buffer *buffer, int cpu); |
| 155 | void ring_buffer_reset(struct ring_buffer *buffer); | 141 | void ring_buffer_reset(struct ring_buffer *buffer); |
| 156 | 142 | ||
| 143 | #ifdef CONFIG_RING_BUFFER_ALLOW_SWAP | ||
| 157 | int ring_buffer_swap_cpu(struct ring_buffer *buffer_a, | 144 | int ring_buffer_swap_cpu(struct ring_buffer *buffer_a, |
| 158 | struct ring_buffer *buffer_b, int cpu); | 145 | struct ring_buffer *buffer_b, int cpu); |
| 146 | #else | ||
| 147 | static inline int | ||
| 148 | ring_buffer_swap_cpu(struct ring_buffer *buffer_a, | ||
| 149 | struct ring_buffer *buffer_b, int cpu) | ||
| 150 | { | ||
| 151 | return -ENODEV; | ||
| 152 | } | ||
| 153 | #endif | ||
| 159 | 154 | ||
| 160 | int ring_buffer_empty(struct ring_buffer *buffer); | 155 | int ring_buffer_empty(struct ring_buffer *buffer); |
| 161 | int ring_buffer_empty_cpu(struct ring_buffer *buffer, int cpu); | 156 | int ring_buffer_empty_cpu(struct ring_buffer *buffer, int cpu); |
| @@ -170,7 +165,6 @@ unsigned long ring_buffer_overruns(struct ring_buffer *buffer); | |||
| 170 | unsigned long ring_buffer_entries_cpu(struct ring_buffer *buffer, int cpu); | 165 | unsigned long ring_buffer_entries_cpu(struct ring_buffer *buffer, int cpu); |
| 171 | unsigned long ring_buffer_overrun_cpu(struct ring_buffer *buffer, int cpu); | 166 | unsigned long ring_buffer_overrun_cpu(struct ring_buffer *buffer, int cpu); |
| 172 | unsigned long ring_buffer_commit_overrun_cpu(struct ring_buffer *buffer, int cpu); | 167 | unsigned long ring_buffer_commit_overrun_cpu(struct ring_buffer *buffer, int cpu); |
| 173 | unsigned long ring_buffer_nmi_dropped_cpu(struct ring_buffer *buffer, int cpu); | ||
| 174 | 168 | ||
| 175 | u64 ring_buffer_time_stamp(struct ring_buffer *buffer, int cpu); | 169 | u64 ring_buffer_time_stamp(struct ring_buffer *buffer, int cpu); |
| 176 | void ring_buffer_normalize_time_stamp(struct ring_buffer *buffer, | 170 | void ring_buffer_normalize_time_stamp(struct ring_buffer *buffer, |
diff --git a/include/linux/rmap.h b/include/linux/rmap.h index bf116d0dbf23..cb0ba7032609 100644 --- a/include/linux/rmap.h +++ b/include/linux/rmap.h | |||
| @@ -71,21 +71,29 @@ void page_add_new_anon_rmap(struct page *, struct vm_area_struct *, unsigned lon | |||
| 71 | void page_add_file_rmap(struct page *); | 71 | void page_add_file_rmap(struct page *); |
| 72 | void page_remove_rmap(struct page *); | 72 | void page_remove_rmap(struct page *); |
| 73 | 73 | ||
| 74 | #ifdef CONFIG_DEBUG_VM | 74 | static inline void page_dup_rmap(struct page *page) |
| 75 | void page_dup_rmap(struct page *page, struct vm_area_struct *vma, unsigned long address); | ||
| 76 | #else | ||
| 77 | static inline void page_dup_rmap(struct page *page, struct vm_area_struct *vma, unsigned long address) | ||
| 78 | { | 75 | { |
| 79 | atomic_inc(&page->_mapcount); | 76 | atomic_inc(&page->_mapcount); |
| 80 | } | 77 | } |
| 81 | #endif | ||
| 82 | 78 | ||
| 83 | /* | 79 | /* |
| 84 | * Called from mm/vmscan.c to handle paging out | 80 | * Called from mm/vmscan.c to handle paging out |
| 85 | */ | 81 | */ |
| 86 | int page_referenced(struct page *, int is_locked, | 82 | int page_referenced(struct page *, int is_locked, |
| 87 | struct mem_cgroup *cnt, unsigned long *vm_flags); | 83 | struct mem_cgroup *cnt, unsigned long *vm_flags); |
| 88 | int try_to_unmap(struct page *, int ignore_refs); | 84 | enum ttu_flags { |
| 85 | TTU_UNMAP = 0, /* unmap mode */ | ||
| 86 | TTU_MIGRATION = 1, /* migration mode */ | ||
| 87 | TTU_MUNLOCK = 2, /* munlock mode */ | ||
| 88 | TTU_ACTION_MASK = 0xff, | ||
| 89 | |||
| 90 | TTU_IGNORE_MLOCK = (1 << 8), /* ignore mlock */ | ||
| 91 | TTU_IGNORE_ACCESS = (1 << 9), /* don't age */ | ||
| 92 | TTU_IGNORE_HWPOISON = (1 << 10),/* corrupted page is recoverable */ | ||
| 93 | }; | ||
| 94 | #define TTU_ACTION(x) ((x) & TTU_ACTION_MASK) | ||
| 95 | |||
| 96 | int try_to_unmap(struct page *, enum ttu_flags flags); | ||
| 89 | 97 | ||
| 90 | /* | 98 | /* |
| 91 | * Called from mm/filemap_xip.c to unmap empty zero page | 99 | * Called from mm/filemap_xip.c to unmap empty zero page |
| @@ -112,6 +120,13 @@ int page_mkclean(struct page *); | |||
| 112 | */ | 120 | */ |
| 113 | int try_to_munlock(struct page *); | 121 | int try_to_munlock(struct page *); |
| 114 | 122 | ||
| 123 | /* | ||
| 124 | * Called by memory-failure.c to kill processes. | ||
| 125 | */ | ||
| 126 | struct anon_vma *page_lock_anon_vma(struct page *page); | ||
| 127 | void page_unlock_anon_vma(struct anon_vma *anon_vma); | ||
| 128 | int page_mapped_in_vma(struct page *page, struct vm_area_struct *vma); | ||
| 129 | |||
| 115 | #else /* !CONFIG_MMU */ | 130 | #else /* !CONFIG_MMU */ |
| 116 | 131 | ||
| 117 | #define anon_vma_init() do {} while (0) | 132 | #define anon_vma_init() do {} while (0) |
diff --git a/include/linux/route.h b/include/linux/route.h index f7ed35d5e653..6600708311c8 100644 --- a/include/linux/route.h +++ b/include/linux/route.h | |||
| @@ -27,8 +27,7 @@ | |||
| 27 | #include <linux/compiler.h> | 27 | #include <linux/compiler.h> |
| 28 | 28 | ||
| 29 | /* This structure gets passed by the SIOCADDRT and SIOCDELRT calls. */ | 29 | /* This structure gets passed by the SIOCADDRT and SIOCDELRT calls. */ |
| 30 | struct rtentry | 30 | struct rtentry { |
| 31 | { | ||
| 32 | unsigned long rt_pad1; | 31 | unsigned long rt_pad1; |
| 33 | struct sockaddr rt_dst; /* target address */ | 32 | struct sockaddr rt_dst; /* target address */ |
| 34 | struct sockaddr rt_gateway; /* gateway addr (RTF_GATEWAY) */ | 33 | struct sockaddr rt_gateway; /* gateway addr (RTF_GATEWAY) */ |
diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h index ba3254ecf7fb..14fc906ed602 100644 --- a/include/linux/rtnetlink.h +++ b/include/linux/rtnetlink.h | |||
| @@ -104,7 +104,7 @@ enum { | |||
| 104 | RTM_NEWADDRLABEL = 72, | 104 | RTM_NEWADDRLABEL = 72, |
| 105 | #define RTM_NEWADDRLABEL RTM_NEWADDRLABEL | 105 | #define RTM_NEWADDRLABEL RTM_NEWADDRLABEL |
| 106 | RTM_DELADDRLABEL, | 106 | RTM_DELADDRLABEL, |
| 107 | #define RTM_NEWADDRLABEL RTM_NEWADDRLABEL | 107 | #define RTM_DELADDRLABEL RTM_DELADDRLABEL |
| 108 | RTM_GETADDRLABEL, | 108 | RTM_GETADDRLABEL, |
| 109 | #define RTM_GETADDRLABEL RTM_GETADDRLABEL | 109 | #define RTM_GETADDRLABEL RTM_GETADDRLABEL |
| 110 | 110 | ||
| @@ -127,8 +127,7 @@ enum { | |||
| 127 | with attribute type. | 127 | with attribute type. |
| 128 | */ | 128 | */ |
| 129 | 129 | ||
| 130 | struct rtattr | 130 | struct rtattr { |
| 131 | { | ||
| 132 | unsigned short rta_len; | 131 | unsigned short rta_len; |
| 133 | unsigned short rta_type; | 132 | unsigned short rta_type; |
| 134 | }; | 133 | }; |
| @@ -154,8 +153,7 @@ struct rtattr | |||
| 154 | * Definitions used in routing table administration. | 153 | * Definitions used in routing table administration. |
| 155 | ****/ | 154 | ****/ |
| 156 | 155 | ||
| 157 | struct rtmsg | 156 | struct rtmsg { |
| 158 | { | ||
| 159 | unsigned char rtm_family; | 157 | unsigned char rtm_family; |
| 160 | unsigned char rtm_dst_len; | 158 | unsigned char rtm_dst_len; |
| 161 | unsigned char rtm_src_len; | 159 | unsigned char rtm_src_len; |
| @@ -171,8 +169,7 @@ struct rtmsg | |||
| 171 | 169 | ||
| 172 | /* rtm_type */ | 170 | /* rtm_type */ |
| 173 | 171 | ||
| 174 | enum | 172 | enum { |
| 175 | { | ||
| 176 | RTN_UNSPEC, | 173 | RTN_UNSPEC, |
| 177 | RTN_UNICAST, /* Gateway or direct route */ | 174 | RTN_UNICAST, /* Gateway or direct route */ |
| 178 | RTN_LOCAL, /* Accept locally */ | 175 | RTN_LOCAL, /* Accept locally */ |
| @@ -230,8 +227,7 @@ enum | |||
| 230 | could be assigned a value between UNIVERSE and LINK. | 227 | could be assigned a value between UNIVERSE and LINK. |
| 231 | */ | 228 | */ |
| 232 | 229 | ||
| 233 | enum rt_scope_t | 230 | enum rt_scope_t { |
| 234 | { | ||
| 235 | RT_SCOPE_UNIVERSE=0, | 231 | RT_SCOPE_UNIVERSE=0, |
| 236 | /* User defined values */ | 232 | /* User defined values */ |
| 237 | RT_SCOPE_SITE=200, | 233 | RT_SCOPE_SITE=200, |
| @@ -249,8 +245,7 @@ enum rt_scope_t | |||
| 249 | 245 | ||
| 250 | /* Reserved table identifiers */ | 246 | /* Reserved table identifiers */ |
| 251 | 247 | ||
| 252 | enum rt_class_t | 248 | enum rt_class_t { |
| 253 | { | ||
| 254 | RT_TABLE_UNSPEC=0, | 249 | RT_TABLE_UNSPEC=0, |
| 255 | /* User defined values */ | 250 | /* User defined values */ |
| 256 | RT_TABLE_COMPAT=252, | 251 | RT_TABLE_COMPAT=252, |
| @@ -263,8 +258,7 @@ enum rt_class_t | |||
| 263 | 258 | ||
| 264 | /* Routing message attributes */ | 259 | /* Routing message attributes */ |
| 265 | 260 | ||
| 266 | enum rtattr_type_t | 261 | enum rtattr_type_t { |
| 267 | { | ||
| 268 | RTA_UNSPEC, | 262 | RTA_UNSPEC, |
| 269 | RTA_DST, | 263 | RTA_DST, |
| 270 | RTA_SRC, | 264 | RTA_SRC, |
| @@ -298,8 +292,7 @@ enum rtattr_type_t | |||
| 298 | * and rtt for different paths from multipath. | 292 | * and rtt for different paths from multipath. |
| 299 | */ | 293 | */ |
| 300 | 294 | ||
| 301 | struct rtnexthop | 295 | struct rtnexthop { |
| 302 | { | ||
| 303 | unsigned short rtnh_len; | 296 | unsigned short rtnh_len; |
| 304 | unsigned char rtnh_flags; | 297 | unsigned char rtnh_flags; |
| 305 | unsigned char rtnh_hops; | 298 | unsigned char rtnh_hops; |
| @@ -325,8 +318,7 @@ struct rtnexthop | |||
| 325 | 318 | ||
| 326 | /* RTM_CACHEINFO */ | 319 | /* RTM_CACHEINFO */ |
| 327 | 320 | ||
| 328 | struct rta_cacheinfo | 321 | struct rta_cacheinfo { |
| 329 | { | ||
| 330 | __u32 rta_clntref; | 322 | __u32 rta_clntref; |
| 331 | __u32 rta_lastuse; | 323 | __u32 rta_lastuse; |
| 332 | __s32 rta_expires; | 324 | __s32 rta_expires; |
| @@ -341,8 +333,7 @@ struct rta_cacheinfo | |||
| 341 | 333 | ||
| 342 | /* RTM_METRICS --- array of struct rtattr with types of RTAX_* */ | 334 | /* RTM_METRICS --- array of struct rtattr with types of RTAX_* */ |
| 343 | 335 | ||
| 344 | enum | 336 | enum { |
| 345 | { | ||
| 346 | RTAX_UNSPEC, | 337 | RTAX_UNSPEC, |
| 347 | #define RTAX_UNSPEC RTAX_UNSPEC | 338 | #define RTAX_UNSPEC RTAX_UNSPEC |
| 348 | RTAX_LOCK, | 339 | RTAX_LOCK, |
| @@ -377,12 +368,13 @@ enum | |||
| 377 | #define RTAX_MAX (__RTAX_MAX - 1) | 368 | #define RTAX_MAX (__RTAX_MAX - 1) |
| 378 | 369 | ||
| 379 | #define RTAX_FEATURE_ECN 0x00000001 | 370 | #define RTAX_FEATURE_ECN 0x00000001 |
| 380 | #define RTAX_FEATURE_SACK 0x00000002 | 371 | #define RTAX_FEATURE_NO_SACK 0x00000002 |
| 381 | #define RTAX_FEATURE_TIMESTAMP 0x00000004 | 372 | #define RTAX_FEATURE_NO_TSTAMP 0x00000004 |
| 382 | #define RTAX_FEATURE_ALLFRAG 0x00000008 | 373 | #define RTAX_FEATURE_ALLFRAG 0x00000008 |
| 374 | #define RTAX_FEATURE_NO_WSCALE 0x00000010 | ||
| 375 | #define RTAX_FEATURE_NO_DSACK 0x00000020 | ||
| 383 | 376 | ||
| 384 | struct rta_session | 377 | struct rta_session { |
| 385 | { | ||
| 386 | __u8 proto; | 378 | __u8 proto; |
| 387 | __u8 pad1; | 379 | __u8 pad1; |
| 388 | __u16 pad2; | 380 | __u16 pad2; |
| @@ -407,8 +399,7 @@ struct rta_session | |||
| 407 | * General form of address family dependent message. | 399 | * General form of address family dependent message. |
| 408 | ****/ | 400 | ****/ |
| 409 | 401 | ||
| 410 | struct rtgenmsg | 402 | struct rtgenmsg { |
| 411 | { | ||
| 412 | unsigned char rtgen_family; | 403 | unsigned char rtgen_family; |
| 413 | }; | 404 | }; |
| 414 | 405 | ||
| @@ -421,8 +412,7 @@ struct rtgenmsg | |||
| 421 | * on network protocol. | 412 | * on network protocol. |
| 422 | */ | 413 | */ |
| 423 | 414 | ||
| 424 | struct ifinfomsg | 415 | struct ifinfomsg { |
| 425 | { | ||
| 426 | unsigned char ifi_family; | 416 | unsigned char ifi_family; |
| 427 | unsigned char __ifi_pad; | 417 | unsigned char __ifi_pad; |
| 428 | unsigned short ifi_type; /* ARPHRD_* */ | 418 | unsigned short ifi_type; /* ARPHRD_* */ |
| @@ -435,8 +425,7 @@ struct ifinfomsg | |||
| 435 | * prefix information | 425 | * prefix information |
| 436 | ****/ | 426 | ****/ |
| 437 | 427 | ||
| 438 | struct prefixmsg | 428 | struct prefixmsg { |
| 439 | { | ||
| 440 | unsigned char prefix_family; | 429 | unsigned char prefix_family; |
| 441 | unsigned char prefix_pad1; | 430 | unsigned char prefix_pad1; |
| 442 | unsigned short prefix_pad2; | 431 | unsigned short prefix_pad2; |
| @@ -457,8 +446,7 @@ enum | |||
| 457 | 446 | ||
| 458 | #define PREFIX_MAX (__PREFIX_MAX - 1) | 447 | #define PREFIX_MAX (__PREFIX_MAX - 1) |
| 459 | 448 | ||
| 460 | struct prefix_cacheinfo | 449 | struct prefix_cacheinfo { |
| 461 | { | ||
| 462 | __u32 preferred_time; | 450 | __u32 preferred_time; |
| 463 | __u32 valid_time; | 451 | __u32 valid_time; |
| 464 | }; | 452 | }; |
| @@ -468,8 +456,7 @@ struct prefix_cacheinfo | |||
| 468 | * Traffic control messages. | 456 | * Traffic control messages. |
| 469 | ****/ | 457 | ****/ |
| 470 | 458 | ||
| 471 | struct tcmsg | 459 | struct tcmsg { |
| 472 | { | ||
| 473 | unsigned char tcm_family; | 460 | unsigned char tcm_family; |
| 474 | unsigned char tcm__pad1; | 461 | unsigned char tcm__pad1; |
| 475 | unsigned short tcm__pad2; | 462 | unsigned short tcm__pad2; |
| @@ -479,8 +466,7 @@ struct tcmsg | |||
| 479 | __u32 tcm_info; | 466 | __u32 tcm_info; |
| 480 | }; | 467 | }; |
| 481 | 468 | ||
| 482 | enum | 469 | enum { |
| 483 | { | ||
| 484 | TCA_UNSPEC, | 470 | TCA_UNSPEC, |
| 485 | TCA_KIND, | 471 | TCA_KIND, |
| 486 | TCA_OPTIONS, | 472 | TCA_OPTIONS, |
| @@ -502,8 +488,7 @@ enum | |||
| 502 | * Neighbor Discovery userland options | 488 | * Neighbor Discovery userland options |
| 503 | ****/ | 489 | ****/ |
| 504 | 490 | ||
| 505 | struct nduseroptmsg | 491 | struct nduseroptmsg { |
| 506 | { | ||
| 507 | unsigned char nduseropt_family; | 492 | unsigned char nduseropt_family; |
| 508 | unsigned char nduseropt_pad1; | 493 | unsigned char nduseropt_pad1; |
| 509 | unsigned short nduseropt_opts_len; /* Total length of options */ | 494 | unsigned short nduseropt_opts_len; /* Total length of options */ |
| @@ -515,8 +500,7 @@ struct nduseroptmsg | |||
| 515 | /* Followed by one or more ND options */ | 500 | /* Followed by one or more ND options */ |
| 516 | }; | 501 | }; |
| 517 | 502 | ||
| 518 | enum | 503 | enum { |
| 519 | { | ||
| 520 | NDUSEROPT_UNSPEC, | 504 | NDUSEROPT_UNSPEC, |
| 521 | NDUSEROPT_SRCADDR, | 505 | NDUSEROPT_SRCADDR, |
| 522 | __NDUSEROPT_MAX | 506 | __NDUSEROPT_MAX |
| @@ -598,8 +582,7 @@ enum rtnetlink_groups { | |||
| 598 | #define RTNLGRP_MAX (__RTNLGRP_MAX - 1) | 582 | #define RTNLGRP_MAX (__RTNLGRP_MAX - 1) |
| 599 | 583 | ||
| 600 | /* TC action piece */ | 584 | /* TC action piece */ |
| 601 | struct tcamsg | 585 | struct tcamsg { |
| 602 | { | ||
| 603 | unsigned char tca_family; | 586 | unsigned char tca_family; |
| 604 | unsigned char tca__pad1; | 587 | unsigned char tca__pad1; |
| 605 | unsigned short tca__pad2; | 588 | unsigned short tca__pad2; |
diff --git a/include/linux/rxrpc.h b/include/linux/rxrpc.h index f7b826b565c7..a53915cd5581 100644 --- a/include/linux/rxrpc.h +++ b/include/linux/rxrpc.h | |||
| @@ -58,5 +58,12 @@ struct sockaddr_rxrpc { | |||
| 58 | #define RXRPC_SECURITY_AUTH 1 /* authenticated packets */ | 58 | #define RXRPC_SECURITY_AUTH 1 /* authenticated packets */ |
| 59 | #define RXRPC_SECURITY_ENCRYPT 2 /* encrypted packets */ | 59 | #define RXRPC_SECURITY_ENCRYPT 2 /* encrypted packets */ |
| 60 | 60 | ||
| 61 | /* | ||
| 62 | * RxRPC security indices | ||
| 63 | */ | ||
| 64 | #define RXRPC_SECURITY_NONE 0 /* no security protocol */ | ||
| 65 | #define RXRPC_SECURITY_RXKAD 2 /* kaserver or kerberos 4 */ | ||
| 66 | #define RXRPC_SECURITY_RXGK 4 /* gssapi-based */ | ||
| 67 | #define RXRPC_SECURITY_RXK5 5 /* kerberos 5 */ | ||
| 61 | 68 | ||
| 62 | #endif /* _LINUX_RXRPC_H */ | 69 | #endif /* _LINUX_RXRPC_H */ |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 0f1ea4a66957..89115ec7d43f 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -38,6 +38,8 @@ | |||
| 38 | #define SCHED_BATCH 3 | 38 | #define SCHED_BATCH 3 |
| 39 | /* SCHED_ISO: reserved but not implemented yet */ | 39 | /* SCHED_ISO: reserved but not implemented yet */ |
| 40 | #define SCHED_IDLE 5 | 40 | #define SCHED_IDLE 5 |
| 41 | /* Can be ORed in to make sure the process is reverted back to SCHED_NORMAL on fork */ | ||
| 42 | #define SCHED_RESET_ON_FORK 0x40000000 | ||
| 41 | 43 | ||
| 42 | #ifdef __KERNEL__ | 44 | #ifdef __KERNEL__ |
| 43 | 45 | ||
| @@ -98,7 +100,7 @@ struct robust_list_head; | |||
| 98 | struct bio; | 100 | struct bio; |
| 99 | struct fs_struct; | 101 | struct fs_struct; |
| 100 | struct bts_context; | 102 | struct bts_context; |
| 101 | struct perf_counter_context; | 103 | struct perf_event_context; |
| 102 | 104 | ||
| 103 | /* | 105 | /* |
| 104 | * List of flags we want to share for kernel threads, | 106 | * List of flags we want to share for kernel threads, |
| @@ -138,8 +140,11 @@ extern int nr_processes(void); | |||
| 138 | extern unsigned long nr_running(void); | 140 | extern unsigned long nr_running(void); |
| 139 | extern unsigned long nr_uninterruptible(void); | 141 | extern unsigned long nr_uninterruptible(void); |
| 140 | extern unsigned long nr_iowait(void); | 142 | extern unsigned long nr_iowait(void); |
| 143 | extern unsigned long nr_iowait_cpu(void); | ||
| 144 | extern unsigned long this_cpu_load(void); | ||
| 145 | |||
| 146 | |||
| 141 | extern void calc_global_load(void); | 147 | extern void calc_global_load(void); |
| 142 | extern u64 cpu_nr_migrations(int cpu); | ||
| 143 | 148 | ||
| 144 | extern unsigned long get_parent_ip(unsigned long addr); | 149 | extern unsigned long get_parent_ip(unsigned long addr); |
| 145 | 150 | ||
| @@ -165,8 +170,6 @@ print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq) | |||
| 165 | } | 170 | } |
| 166 | #endif | 171 | #endif |
| 167 | 172 | ||
| 168 | extern unsigned long long time_sync_thresh; | ||
| 169 | |||
| 170 | /* | 173 | /* |
| 171 | * Task state bitmask. NOTE! These bits are also | 174 | * Task state bitmask. NOTE! These bits are also |
| 172 | * encoded in fs/proc/array.c: get_task_state(). | 175 | * encoded in fs/proc/array.c: get_task_state(). |
| @@ -188,6 +191,7 @@ extern unsigned long long time_sync_thresh; | |||
| 188 | /* in tsk->state again */ | 191 | /* in tsk->state again */ |
| 189 | #define TASK_DEAD 64 | 192 | #define TASK_DEAD 64 |
| 190 | #define TASK_WAKEKILL 128 | 193 | #define TASK_WAKEKILL 128 |
| 194 | #define TASK_WAKING 256 | ||
| 191 | 195 | ||
| 192 | /* Convenience macros for the sake of set_task_state */ | 196 | /* Convenience macros for the sake of set_task_state */ |
| 193 | #define TASK_KILLABLE (TASK_WAKEKILL | TASK_UNINTERRUPTIBLE) | 197 | #define TASK_KILLABLE (TASK_WAKEKILL | TASK_UNINTERRUPTIBLE) |
| @@ -254,7 +258,7 @@ extern asmlinkage void schedule_tail(struct task_struct *prev); | |||
| 254 | extern void init_idle(struct task_struct *idle, int cpu); | 258 | extern void init_idle(struct task_struct *idle, int cpu); |
| 255 | extern void init_idle_bootup_task(struct task_struct *idle); | 259 | extern void init_idle_bootup_task(struct task_struct *idle); |
| 256 | 260 | ||
| 257 | extern int runqueue_is_locked(void); | 261 | extern int runqueue_is_locked(int cpu); |
| 258 | extern void task_rq_unlock_wait(struct task_struct *p); | 262 | extern void task_rq_unlock_wait(struct task_struct *p); |
| 259 | 263 | ||
| 260 | extern cpumask_var_t nohz_cpu_mask; | 264 | extern cpumask_var_t nohz_cpu_mask; |
| @@ -302,7 +306,7 @@ extern void softlockup_tick(void); | |||
| 302 | extern void touch_softlockup_watchdog(void); | 306 | extern void touch_softlockup_watchdog(void); |
| 303 | extern void touch_all_softlockup_watchdogs(void); | 307 | extern void touch_all_softlockup_watchdogs(void); |
| 304 | extern int proc_dosoftlockup_thresh(struct ctl_table *table, int write, | 308 | extern int proc_dosoftlockup_thresh(struct ctl_table *table, int write, |
| 305 | struct file *filp, void __user *buffer, | 309 | void __user *buffer, |
| 306 | size_t *lenp, loff_t *ppos); | 310 | size_t *lenp, loff_t *ppos); |
| 307 | extern unsigned int softlockup_panic; | 311 | extern unsigned int softlockup_panic; |
| 308 | extern int softlockup_thresh; | 312 | extern int softlockup_thresh; |
| @@ -324,7 +328,7 @@ extern unsigned long sysctl_hung_task_check_count; | |||
| 324 | extern unsigned long sysctl_hung_task_timeout_secs; | 328 | extern unsigned long sysctl_hung_task_timeout_secs; |
| 325 | extern unsigned long sysctl_hung_task_warnings; | 329 | extern unsigned long sysctl_hung_task_warnings; |
| 326 | extern int proc_dohung_task_timeout_secs(struct ctl_table *table, int write, | 330 | extern int proc_dohung_task_timeout_secs(struct ctl_table *table, int write, |
| 327 | struct file *filp, void __user *buffer, | 331 | void __user *buffer, |
| 328 | size_t *lenp, loff_t *ppos); | 332 | size_t *lenp, loff_t *ppos); |
| 329 | #endif | 333 | #endif |
| 330 | 334 | ||
| @@ -342,7 +346,6 @@ extern signed long schedule_timeout(signed long timeout); | |||
| 342 | extern signed long schedule_timeout_interruptible(signed long timeout); | 346 | extern signed long schedule_timeout_interruptible(signed long timeout); |
| 343 | extern signed long schedule_timeout_killable(signed long timeout); | 347 | extern signed long schedule_timeout_killable(signed long timeout); |
| 344 | extern signed long schedule_timeout_uninterruptible(signed long timeout); | 348 | extern signed long schedule_timeout_uninterruptible(signed long timeout); |
| 345 | asmlinkage void __schedule(void); | ||
| 346 | asmlinkage void schedule(void); | 349 | asmlinkage void schedule(void); |
| 347 | extern int mutex_spin_on_owner(struct mutex *lock, struct thread_info *owner); | 350 | extern int mutex_spin_on_owner(struct mutex *lock, struct thread_info *owner); |
| 348 | 351 | ||
| @@ -419,6 +422,15 @@ static inline unsigned long get_mm_hiwater_rss(struct mm_struct *mm) | |||
| 419 | return max(mm->hiwater_rss, get_mm_rss(mm)); | 422 | return max(mm->hiwater_rss, get_mm_rss(mm)); |
| 420 | } | 423 | } |
| 421 | 424 | ||
| 425 | static inline void setmax_mm_hiwater_rss(unsigned long *maxrss, | ||
| 426 | struct mm_struct *mm) | ||
| 427 | { | ||
| 428 | unsigned long hiwater_rss = get_mm_hiwater_rss(mm); | ||
| 429 | |||
| 430 | if (*maxrss < hiwater_rss) | ||
| 431 | *maxrss = hiwater_rss; | ||
| 432 | } | ||
| 433 | |||
| 422 | static inline unsigned long get_mm_hiwater_vm(struct mm_struct *mm) | 434 | static inline unsigned long get_mm_hiwater_vm(struct mm_struct *mm) |
| 423 | { | 435 | { |
| 424 | return max(mm->hiwater_vm, mm->total_vm); | 436 | return max(mm->hiwater_vm, mm->total_vm); |
| @@ -431,7 +443,9 @@ extern int get_dumpable(struct mm_struct *mm); | |||
| 431 | /* dumpable bits */ | 443 | /* dumpable bits */ |
| 432 | #define MMF_DUMPABLE 0 /* core dump is permitted */ | 444 | #define MMF_DUMPABLE 0 /* core dump is permitted */ |
| 433 | #define MMF_DUMP_SECURELY 1 /* core file is readable only by root */ | 445 | #define MMF_DUMP_SECURELY 1 /* core file is readable only by root */ |
| 446 | |||
| 434 | #define MMF_DUMPABLE_BITS 2 | 447 | #define MMF_DUMPABLE_BITS 2 |
| 448 | #define MMF_DUMPABLE_MASK ((1 << MMF_DUMPABLE_BITS) - 1) | ||
| 435 | 449 | ||
| 436 | /* coredump filter bits */ | 450 | /* coredump filter bits */ |
| 437 | #define MMF_DUMP_ANON_PRIVATE 2 | 451 | #define MMF_DUMP_ANON_PRIVATE 2 |
| @@ -441,6 +455,7 @@ extern int get_dumpable(struct mm_struct *mm); | |||
| 441 | #define MMF_DUMP_ELF_HEADERS 6 | 455 | #define MMF_DUMP_ELF_HEADERS 6 |
| 442 | #define MMF_DUMP_HUGETLB_PRIVATE 7 | 456 | #define MMF_DUMP_HUGETLB_PRIVATE 7 |
| 443 | #define MMF_DUMP_HUGETLB_SHARED 8 | 457 | #define MMF_DUMP_HUGETLB_SHARED 8 |
| 458 | |||
| 444 | #define MMF_DUMP_FILTER_SHIFT MMF_DUMPABLE_BITS | 459 | #define MMF_DUMP_FILTER_SHIFT MMF_DUMPABLE_BITS |
| 445 | #define MMF_DUMP_FILTER_BITS 7 | 460 | #define MMF_DUMP_FILTER_BITS 7 |
| 446 | #define MMF_DUMP_FILTER_MASK \ | 461 | #define MMF_DUMP_FILTER_MASK \ |
| @@ -454,6 +469,10 @@ extern int get_dumpable(struct mm_struct *mm); | |||
| 454 | #else | 469 | #else |
| 455 | # define MMF_DUMP_MASK_DEFAULT_ELF 0 | 470 | # define MMF_DUMP_MASK_DEFAULT_ELF 0 |
| 456 | #endif | 471 | #endif |
| 472 | /* leave room for more dump flags */ | ||
| 473 | #define MMF_VM_MERGEABLE 16 /* KSM may merge identical pages */ | ||
| 474 | |||
| 475 | #define MMF_INIT_MASK (MMF_DUMPABLE_MASK | MMF_DUMP_FILTER_MASK) | ||
| 457 | 476 | ||
| 458 | struct sighand_struct { | 477 | struct sighand_struct { |
| 459 | atomic_t count; | 478 | atomic_t count; |
| @@ -470,6 +489,13 @@ struct pacct_struct { | |||
| 470 | unsigned long ac_minflt, ac_majflt; | 489 | unsigned long ac_minflt, ac_majflt; |
| 471 | }; | 490 | }; |
| 472 | 491 | ||
| 492 | struct cpu_itimer { | ||
| 493 | cputime_t expires; | ||
| 494 | cputime_t incr; | ||
| 495 | u32 error; | ||
| 496 | u32 incr_error; | ||
| 497 | }; | ||
| 498 | |||
| 473 | /** | 499 | /** |
| 474 | * struct task_cputime - collected CPU time counts | 500 | * struct task_cputime - collected CPU time counts |
| 475 | * @utime: time spent in user mode, in &cputime_t units | 501 | * @utime: time spent in user mode, in &cputime_t units |
| @@ -564,9 +590,12 @@ struct signal_struct { | |||
| 564 | struct pid *leader_pid; | 590 | struct pid *leader_pid; |
| 565 | ktime_t it_real_incr; | 591 | ktime_t it_real_incr; |
| 566 | 592 | ||
| 567 | /* ITIMER_PROF and ITIMER_VIRTUAL timers for the process */ | 593 | /* |
| 568 | cputime_t it_prof_expires, it_virt_expires; | 594 | * ITIMER_PROF and ITIMER_VIRTUAL timers for the process, we use |
| 569 | cputime_t it_prof_incr, it_virt_incr; | 595 | * CPUCLOCK_PROF and CPUCLOCK_VIRT for indexing array as these |
| 596 | * values are defined to 0 and 1 respectively | ||
| 597 | */ | ||
| 598 | struct cpu_itimer it[2]; | ||
| 570 | 599 | ||
| 571 | /* | 600 | /* |
| 572 | * Thread group totals for process CPU timers. | 601 | * Thread group totals for process CPU timers. |
| @@ -595,9 +624,13 @@ struct signal_struct { | |||
| 595 | cputime_t utime, stime, cutime, cstime; | 624 | cputime_t utime, stime, cutime, cstime; |
| 596 | cputime_t gtime; | 625 | cputime_t gtime; |
| 597 | cputime_t cgtime; | 626 | cputime_t cgtime; |
| 627 | #ifndef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 628 | cputime_t prev_utime, prev_stime; | ||
| 629 | #endif | ||
| 598 | unsigned long nvcsw, nivcsw, cnvcsw, cnivcsw; | 630 | unsigned long nvcsw, nivcsw, cnvcsw, cnivcsw; |
| 599 | unsigned long min_flt, maj_flt, cmin_flt, cmaj_flt; | 631 | unsigned long min_flt, maj_flt, cmin_flt, cmaj_flt; |
| 600 | unsigned long inblock, oublock, cinblock, coublock; | 632 | unsigned long inblock, oublock, cinblock, coublock; |
| 633 | unsigned long maxrss, cmaxrss; | ||
| 601 | struct task_io_accounting ioac; | 634 | struct task_io_accounting ioac; |
| 602 | 635 | ||
| 603 | /* | 636 | /* |
| @@ -629,6 +662,8 @@ struct signal_struct { | |||
| 629 | unsigned audit_tty; | 662 | unsigned audit_tty; |
| 630 | struct tty_audit_buf *tty_audit_buf; | 663 | struct tty_audit_buf *tty_audit_buf; |
| 631 | #endif | 664 | #endif |
| 665 | |||
| 666 | int oom_adj; /* OOM kill score adjustment (bit shift) */ | ||
| 632 | }; | 667 | }; |
| 633 | 668 | ||
| 634 | /* Context switch must be unlocked if interrupts are to be enabled */ | 669 | /* Context switch must be unlocked if interrupts are to be enabled */ |
| @@ -698,7 +733,7 @@ struct user_struct { | |||
| 698 | #endif | 733 | #endif |
| 699 | #endif | 734 | #endif |
| 700 | 735 | ||
| 701 | #ifdef CONFIG_PERF_COUNTERS | 736 | #ifdef CONFIG_PERF_EVENTS |
| 702 | atomic_long_t locked_vm; | 737 | atomic_long_t locked_vm; |
| 703 | #endif | 738 | #endif |
| 704 | }; | 739 | }; |
| @@ -796,18 +831,19 @@ enum cpu_idle_type { | |||
| 796 | #define SCHED_LOAD_SCALE_FUZZ SCHED_LOAD_SCALE | 831 | #define SCHED_LOAD_SCALE_FUZZ SCHED_LOAD_SCALE |
| 797 | 832 | ||
| 798 | #ifdef CONFIG_SMP | 833 | #ifdef CONFIG_SMP |
| 799 | #define SD_LOAD_BALANCE 1 /* Do load balancing on this domain. */ | 834 | #define SD_LOAD_BALANCE 0x0001 /* Do load balancing on this domain. */ |
| 800 | #define SD_BALANCE_NEWIDLE 2 /* Balance when about to become idle */ | 835 | #define SD_BALANCE_NEWIDLE 0x0002 /* Balance when about to become idle */ |
| 801 | #define SD_BALANCE_EXEC 4 /* Balance on exec */ | 836 | #define SD_BALANCE_EXEC 0x0004 /* Balance on exec */ |
| 802 | #define SD_BALANCE_FORK 8 /* Balance on fork, clone */ | 837 | #define SD_BALANCE_FORK 0x0008 /* Balance on fork, clone */ |
| 803 | #define SD_WAKE_IDLE 16 /* Wake to idle CPU on task wakeup */ | 838 | #define SD_BALANCE_WAKE 0x0010 /* Balance on wakeup */ |
| 804 | #define SD_WAKE_AFFINE 32 /* Wake task to waking CPU */ | 839 | #define SD_WAKE_AFFINE 0x0020 /* Wake task to waking CPU */ |
| 805 | #define SD_WAKE_BALANCE 64 /* Perform balancing at task wakeup */ | 840 | #define SD_PREFER_LOCAL 0x0040 /* Prefer to keep tasks local to this domain */ |
| 806 | #define SD_SHARE_CPUPOWER 128 /* Domain members share cpu power */ | 841 | #define SD_SHARE_CPUPOWER 0x0080 /* Domain members share cpu power */ |
| 807 | #define SD_POWERSAVINGS_BALANCE 256 /* Balance for power savings */ | 842 | #define SD_POWERSAVINGS_BALANCE 0x0100 /* Balance for power savings */ |
| 808 | #define SD_SHARE_PKG_RESOURCES 512 /* Domain members share cpu pkg resources */ | 843 | #define SD_SHARE_PKG_RESOURCES 0x0200 /* Domain members share cpu pkg resources */ |
| 809 | #define SD_SERIALIZE 1024 /* Only a single load balancing instance */ | 844 | #define SD_SERIALIZE 0x0400 /* Only a single load balancing instance */ |
| 810 | #define SD_WAKE_IDLE_FAR 2048 /* Gain latency sacrificing cache hit */ | 845 | |
| 846 | #define SD_PREFER_SIBLING 0x1000 /* Prefer to place tasks in a sibling domain */ | ||
| 811 | 847 | ||
| 812 | enum powersavings_balance_level { | 848 | enum powersavings_balance_level { |
| 813 | POWERSAVINGS_BALANCE_NONE = 0, /* No power saving load balance */ | 849 | POWERSAVINGS_BALANCE_NONE = 0, /* No power saving load balance */ |
| @@ -827,7 +863,7 @@ static inline int sd_balance_for_mc_power(void) | |||
| 827 | if (sched_smt_power_savings) | 863 | if (sched_smt_power_savings) |
| 828 | return SD_POWERSAVINGS_BALANCE; | 864 | return SD_POWERSAVINGS_BALANCE; |
| 829 | 865 | ||
| 830 | return 0; | 866 | return SD_PREFER_SIBLING; |
| 831 | } | 867 | } |
| 832 | 868 | ||
| 833 | static inline int sd_balance_for_package_power(void) | 869 | static inline int sd_balance_for_package_power(void) |
| @@ -835,7 +871,7 @@ static inline int sd_balance_for_package_power(void) | |||
| 835 | if (sched_mc_power_savings | sched_smt_power_savings) | 871 | if (sched_mc_power_savings | sched_smt_power_savings) |
| 836 | return SD_POWERSAVINGS_BALANCE; | 872 | return SD_POWERSAVINGS_BALANCE; |
| 837 | 873 | ||
| 838 | return 0; | 874 | return SD_PREFER_SIBLING; |
| 839 | } | 875 | } |
| 840 | 876 | ||
| 841 | /* | 877 | /* |
| @@ -857,15 +893,9 @@ struct sched_group { | |||
| 857 | 893 | ||
| 858 | /* | 894 | /* |
| 859 | * CPU power of this group, SCHED_LOAD_SCALE being max power for a | 895 | * CPU power of this group, SCHED_LOAD_SCALE being max power for a |
| 860 | * single CPU. This is read only (except for setup, hotplug CPU). | 896 | * single CPU. |
| 861 | * Note : Never change cpu_power without recompute its reciprocal | ||
| 862 | */ | ||
| 863 | unsigned int __cpu_power; | ||
| 864 | /* | ||
| 865 | * reciprocal value of cpu_power to avoid expensive divides | ||
| 866 | * (see include/linux/reciprocal_div.h) | ||
| 867 | */ | 897 | */ |
| 868 | u32 reciprocal_cpu_power; | 898 | unsigned int cpu_power; |
| 869 | 899 | ||
| 870 | /* | 900 | /* |
| 871 | * The CPUs this group covers. | 901 | * The CPUs this group covers. |
| @@ -918,6 +948,7 @@ struct sched_domain { | |||
| 918 | unsigned int newidle_idx; | 948 | unsigned int newidle_idx; |
| 919 | unsigned int wake_idx; | 949 | unsigned int wake_idx; |
| 920 | unsigned int forkexec_idx; | 950 | unsigned int forkexec_idx; |
| 951 | unsigned int smt_gain; | ||
| 921 | int flags; /* See SD_* */ | 952 | int flags; /* See SD_* */ |
| 922 | enum sched_domain_level level; | 953 | enum sched_domain_level level; |
| 923 | 954 | ||
| @@ -981,9 +1012,13 @@ static inline struct cpumask *sched_domain_span(struct sched_domain *sd) | |||
| 981 | return to_cpumask(sd->span); | 1012 | return to_cpumask(sd->span); |
| 982 | } | 1013 | } |
| 983 | 1014 | ||
| 984 | extern void partition_sched_domains(int ndoms_new, struct cpumask *doms_new, | 1015 | extern void partition_sched_domains(int ndoms_new, cpumask_var_t doms_new[], |
| 985 | struct sched_domain_attr *dattr_new); | 1016 | struct sched_domain_attr *dattr_new); |
| 986 | 1017 | ||
| 1018 | /* Allocate an array of sched domains, for partition_sched_domains(). */ | ||
| 1019 | cpumask_var_t *alloc_sched_domains(unsigned int ndoms); | ||
| 1020 | void free_sched_domains(cpumask_var_t doms[], unsigned int ndoms); | ||
| 1021 | |||
| 987 | /* Test a flag in parent sched domain */ | 1022 | /* Test a flag in parent sched domain */ |
| 988 | static inline int test_sd_parent(struct sched_domain *sd, int flag) | 1023 | static inline int test_sd_parent(struct sched_domain *sd, int flag) |
| 989 | { | 1024 | { |
| @@ -993,17 +1028,21 @@ static inline int test_sd_parent(struct sched_domain *sd, int flag) | |||
| 993 | return 0; | 1028 | return 0; |
| 994 | } | 1029 | } |
| 995 | 1030 | ||
| 1031 | unsigned long default_scale_freq_power(struct sched_domain *sd, int cpu); | ||
| 1032 | unsigned long default_scale_smt_power(struct sched_domain *sd, int cpu); | ||
| 1033 | |||
| 996 | #else /* CONFIG_SMP */ | 1034 | #else /* CONFIG_SMP */ |
| 997 | 1035 | ||
| 998 | struct sched_domain_attr; | 1036 | struct sched_domain_attr; |
| 999 | 1037 | ||
| 1000 | static inline void | 1038 | static inline void |
| 1001 | partition_sched_domains(int ndoms_new, struct cpumask *doms_new, | 1039 | partition_sched_domains(int ndoms_new, cpumask_var_t doms_new[], |
| 1002 | struct sched_domain_attr *dattr_new) | 1040 | struct sched_domain_attr *dattr_new) |
| 1003 | { | 1041 | { |
| 1004 | } | 1042 | } |
| 1005 | #endif /* !CONFIG_SMP */ | 1043 | #endif /* !CONFIG_SMP */ |
| 1006 | 1044 | ||
| 1045 | |||
| 1007 | struct io_context; /* See blkdev.h */ | 1046 | struct io_context; /* See blkdev.h */ |
| 1008 | 1047 | ||
| 1009 | 1048 | ||
| @@ -1021,6 +1060,12 @@ struct uts_namespace; | |||
| 1021 | struct rq; | 1060 | struct rq; |
| 1022 | struct sched_domain; | 1061 | struct sched_domain; |
| 1023 | 1062 | ||
| 1063 | /* | ||
| 1064 | * wake flags | ||
| 1065 | */ | ||
| 1066 | #define WF_SYNC 0x01 /* waker goes to sleep after wakup */ | ||
| 1067 | #define WF_FORK 0x02 /* child wakeup after fork */ | ||
| 1068 | |||
| 1024 | struct sched_class { | 1069 | struct sched_class { |
| 1025 | const struct sched_class *next; | 1070 | const struct sched_class *next; |
| 1026 | 1071 | ||
| @@ -1028,13 +1073,13 @@ struct sched_class { | |||
| 1028 | void (*dequeue_task) (struct rq *rq, struct task_struct *p, int sleep); | 1073 | void (*dequeue_task) (struct rq *rq, struct task_struct *p, int sleep); |
| 1029 | void (*yield_task) (struct rq *rq); | 1074 | void (*yield_task) (struct rq *rq); |
| 1030 | 1075 | ||
| 1031 | void (*check_preempt_curr) (struct rq *rq, struct task_struct *p, int sync); | 1076 | void (*check_preempt_curr) (struct rq *rq, struct task_struct *p, int flags); |
| 1032 | 1077 | ||
| 1033 | struct task_struct * (*pick_next_task) (struct rq *rq); | 1078 | struct task_struct * (*pick_next_task) (struct rq *rq); |
| 1034 | void (*put_prev_task) (struct rq *rq, struct task_struct *p); | 1079 | void (*put_prev_task) (struct rq *rq, struct task_struct *p); |
| 1035 | 1080 | ||
| 1036 | #ifdef CONFIG_SMP | 1081 | #ifdef CONFIG_SMP |
| 1037 | int (*select_task_rq)(struct task_struct *p, int sync); | 1082 | int (*select_task_rq)(struct task_struct *p, int sd_flag, int flags); |
| 1038 | 1083 | ||
| 1039 | unsigned long (*load_balance) (struct rq *this_rq, int this_cpu, | 1084 | unsigned long (*load_balance) (struct rq *this_rq, int this_cpu, |
| 1040 | struct rq *busiest, unsigned long max_load_move, | 1085 | struct rq *busiest, unsigned long max_load_move, |
| @@ -1045,7 +1090,6 @@ struct sched_class { | |||
| 1045 | struct rq *busiest, struct sched_domain *sd, | 1090 | struct rq *busiest, struct sched_domain *sd, |
| 1046 | enum cpu_idle_type idle); | 1091 | enum cpu_idle_type idle); |
| 1047 | void (*pre_schedule) (struct rq *this_rq, struct task_struct *task); | 1092 | void (*pre_schedule) (struct rq *this_rq, struct task_struct *task); |
| 1048 | int (*needs_post_schedule) (struct rq *this_rq); | ||
| 1049 | void (*post_schedule) (struct rq *this_rq); | 1093 | void (*post_schedule) (struct rq *this_rq); |
| 1050 | void (*task_wake_up) (struct rq *this_rq, struct task_struct *task); | 1094 | void (*task_wake_up) (struct rq *this_rq, struct task_struct *task); |
| 1051 | 1095 | ||
| @@ -1067,6 +1111,8 @@ struct sched_class { | |||
| 1067 | void (*prio_changed) (struct rq *this_rq, struct task_struct *task, | 1111 | void (*prio_changed) (struct rq *this_rq, struct task_struct *task, |
| 1068 | int oldprio, int running); | 1112 | int oldprio, int running); |
| 1069 | 1113 | ||
| 1114 | unsigned int (*get_rr_interval) (struct task_struct *task); | ||
| 1115 | |||
| 1070 | #ifdef CONFIG_FAIR_GROUP_SCHED | 1116 | #ifdef CONFIG_FAIR_GROUP_SCHED |
| 1071 | void (*moved_group) (struct task_struct *p); | 1117 | void (*moved_group) (struct task_struct *p); |
| 1072 | #endif | 1118 | #endif |
| @@ -1105,11 +1151,15 @@ struct sched_entity { | |||
| 1105 | u64 start_runtime; | 1151 | u64 start_runtime; |
| 1106 | u64 avg_wakeup; | 1152 | u64 avg_wakeup; |
| 1107 | 1153 | ||
| 1154 | u64 avg_running; | ||
| 1155 | |||
| 1108 | #ifdef CONFIG_SCHEDSTATS | 1156 | #ifdef CONFIG_SCHEDSTATS |
| 1109 | u64 wait_start; | 1157 | u64 wait_start; |
| 1110 | u64 wait_max; | 1158 | u64 wait_max; |
| 1111 | u64 wait_count; | 1159 | u64 wait_count; |
| 1112 | u64 wait_sum; | 1160 | u64 wait_sum; |
| 1161 | u64 iowait_count; | ||
| 1162 | u64 iowait_sum; | ||
| 1113 | 1163 | ||
| 1114 | u64 sleep_start; | 1164 | u64 sleep_start; |
| 1115 | u64 sleep_max; | 1165 | u64 sleep_max; |
| @@ -1163,6 +1213,8 @@ struct sched_rt_entity { | |||
| 1163 | #endif | 1213 | #endif |
| 1164 | }; | 1214 | }; |
| 1165 | 1215 | ||
| 1216 | struct rcu_node; | ||
| 1217 | |||
| 1166 | struct task_struct { | 1218 | struct task_struct { |
| 1167 | volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ | 1219 | volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ |
| 1168 | void *stack; | 1220 | void *stack; |
| @@ -1198,7 +1250,6 @@ struct task_struct { | |||
| 1198 | * a short time | 1250 | * a short time |
| 1199 | */ | 1251 | */ |
| 1200 | unsigned char fpu_counter; | 1252 | unsigned char fpu_counter; |
| 1201 | s8 oomkilladj; /* OOM kill score adjustment (bit shift). */ | ||
| 1202 | #ifdef CONFIG_BLK_DEV_IO_TRACE | 1253 | #ifdef CONFIG_BLK_DEV_IO_TRACE |
| 1203 | unsigned int btrace_seq; | 1254 | unsigned int btrace_seq; |
| 1204 | #endif | 1255 | #endif |
| @@ -1206,10 +1257,12 @@ struct task_struct { | |||
| 1206 | unsigned int policy; | 1257 | unsigned int policy; |
| 1207 | cpumask_t cpus_allowed; | 1258 | cpumask_t cpus_allowed; |
| 1208 | 1259 | ||
| 1209 | #ifdef CONFIG_PREEMPT_RCU | 1260 | #ifdef CONFIG_TREE_PREEMPT_RCU |
| 1210 | int rcu_read_lock_nesting; | 1261 | int rcu_read_lock_nesting; |
| 1211 | int rcu_flipctr_idx; | 1262 | char rcu_read_unlock_special; |
| 1212 | #endif /* #ifdef CONFIG_PREEMPT_RCU */ | 1263 | struct rcu_node *rcu_blocked_node; |
| 1264 | struct list_head rcu_node_entry; | ||
| 1265 | #endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ | ||
| 1213 | 1266 | ||
| 1214 | #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) | 1267 | #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) |
| 1215 | struct sched_info sched_info; | 1268 | struct sched_info sched_info; |
| @@ -1221,7 +1274,6 @@ struct task_struct { | |||
| 1221 | struct mm_struct *mm, *active_mm; | 1274 | struct mm_struct *mm, *active_mm; |
| 1222 | 1275 | ||
| 1223 | /* task state */ | 1276 | /* task state */ |
| 1224 | struct linux_binfmt *binfmt; | ||
| 1225 | int exit_state; | 1277 | int exit_state; |
| 1226 | int exit_code, exit_signal; | 1278 | int exit_code, exit_signal; |
| 1227 | int pdeath_signal; /* The signal sent when the parent dies */ | 1279 | int pdeath_signal; /* The signal sent when the parent dies */ |
| @@ -1230,11 +1282,19 @@ struct task_struct { | |||
| 1230 | unsigned did_exec:1; | 1282 | unsigned did_exec:1; |
| 1231 | unsigned in_execve:1; /* Tell the LSMs that the process is doing an | 1283 | unsigned in_execve:1; /* Tell the LSMs that the process is doing an |
| 1232 | * execve */ | 1284 | * execve */ |
| 1285 | unsigned in_iowait:1; | ||
| 1286 | |||
| 1287 | |||
| 1288 | /* Revert to default priority/policy when forking */ | ||
| 1289 | unsigned sched_reset_on_fork:1; | ||
| 1290 | |||
| 1233 | pid_t pid; | 1291 | pid_t pid; |
| 1234 | pid_t tgid; | 1292 | pid_t tgid; |
| 1235 | 1293 | ||
| 1294 | #ifdef CONFIG_CC_STACKPROTECTOR | ||
| 1236 | /* Canary value for the -fstack-protector gcc feature */ | 1295 | /* Canary value for the -fstack-protector gcc feature */ |
| 1237 | unsigned long stack_canary; | 1296 | unsigned long stack_canary; |
| 1297 | #endif | ||
| 1238 | 1298 | ||
| 1239 | /* | 1299 | /* |
| 1240 | * pointers to (original) parent process, youngest child, younger sibling, | 1300 | * pointers to (original) parent process, youngest child, younger sibling, |
| @@ -1274,7 +1334,9 @@ struct task_struct { | |||
| 1274 | 1334 | ||
| 1275 | cputime_t utime, stime, utimescaled, stimescaled; | 1335 | cputime_t utime, stime, utimescaled, stimescaled; |
| 1276 | cputime_t gtime; | 1336 | cputime_t gtime; |
| 1337 | #ifndef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 1277 | cputime_t prev_utime, prev_stime; | 1338 | cputime_t prev_utime, prev_stime; |
| 1339 | #endif | ||
| 1278 | unsigned long nvcsw, nivcsw; /* context switch counts */ | 1340 | unsigned long nvcsw, nivcsw; /* context switch counts */ |
| 1279 | struct timespec start_time; /* monotonic time */ | 1341 | struct timespec start_time; /* monotonic time */ |
| 1280 | struct timespec real_start_time; /* boot based time */ | 1342 | struct timespec real_start_time; /* boot based time */ |
| @@ -1292,6 +1354,7 @@ struct task_struct { | |||
| 1292 | struct mutex cred_guard_mutex; /* guard against foreign influences on | 1354 | struct mutex cred_guard_mutex; /* guard against foreign influences on |
| 1293 | * credential calculations | 1355 | * credential calculations |
| 1294 | * (notably. ptrace) */ | 1356 | * (notably. ptrace) */ |
| 1357 | struct cred *replacement_session_keyring; /* for KEYCTL_SESSION_TO_PARENT */ | ||
| 1295 | 1358 | ||
| 1296 | char comm[TASK_COMM_LEN]; /* executable name excluding path | 1359 | char comm[TASK_COMM_LEN]; /* executable name excluding path |
| 1297 | - access with [gs]et_task_comm (which lock | 1360 | - access with [gs]et_task_comm (which lock |
| @@ -1363,17 +1426,17 @@ struct task_struct { | |||
| 1363 | #endif | 1426 | #endif |
| 1364 | #ifdef CONFIG_TRACE_IRQFLAGS | 1427 | #ifdef CONFIG_TRACE_IRQFLAGS |
| 1365 | unsigned int irq_events; | 1428 | unsigned int irq_events; |
| 1366 | int hardirqs_enabled; | ||
| 1367 | unsigned long hardirq_enable_ip; | 1429 | unsigned long hardirq_enable_ip; |
| 1368 | unsigned int hardirq_enable_event; | ||
| 1369 | unsigned long hardirq_disable_ip; | 1430 | unsigned long hardirq_disable_ip; |
| 1431 | unsigned int hardirq_enable_event; | ||
| 1370 | unsigned int hardirq_disable_event; | 1432 | unsigned int hardirq_disable_event; |
| 1371 | int softirqs_enabled; | 1433 | int hardirqs_enabled; |
| 1434 | int hardirq_context; | ||
| 1372 | unsigned long softirq_disable_ip; | 1435 | unsigned long softirq_disable_ip; |
| 1373 | unsigned int softirq_disable_event; | ||
| 1374 | unsigned long softirq_enable_ip; | 1436 | unsigned long softirq_enable_ip; |
| 1437 | unsigned int softirq_disable_event; | ||
| 1375 | unsigned int softirq_enable_event; | 1438 | unsigned int softirq_enable_event; |
| 1376 | int hardirq_context; | 1439 | int softirqs_enabled; |
| 1377 | int softirq_context; | 1440 | int softirq_context; |
| 1378 | #endif | 1441 | #endif |
| 1379 | #ifdef CONFIG_LOCKDEP | 1442 | #ifdef CONFIG_LOCKDEP |
| @@ -1424,10 +1487,10 @@ struct task_struct { | |||
| 1424 | struct list_head pi_state_list; | 1487 | struct list_head pi_state_list; |
| 1425 | struct futex_pi_state *pi_state_cache; | 1488 | struct futex_pi_state *pi_state_cache; |
| 1426 | #endif | 1489 | #endif |
| 1427 | #ifdef CONFIG_PERF_COUNTERS | 1490 | #ifdef CONFIG_PERF_EVENTS |
| 1428 | struct perf_counter_context *perf_counter_ctxp; | 1491 | struct perf_event_context *perf_event_ctxp; |
| 1429 | struct mutex perf_counter_mutex; | 1492 | struct mutex perf_event_mutex; |
| 1430 | struct list_head perf_counter_list; | 1493 | struct list_head perf_event_list; |
| 1431 | #endif | 1494 | #endif |
| 1432 | #ifdef CONFIG_NUMA | 1495 | #ifdef CONFIG_NUMA |
| 1433 | struct mempolicy *mempolicy; /* Protected by alloc_lock */ | 1496 | struct mempolicy *mempolicy; /* Protected by alloc_lock */ |
| @@ -1480,6 +1543,7 @@ struct task_struct { | |||
| 1480 | /* bitmask of trace recursion */ | 1543 | /* bitmask of trace recursion */ |
| 1481 | unsigned long trace_recursion; | 1544 | unsigned long trace_recursion; |
| 1482 | #endif /* CONFIG_TRACING */ | 1545 | #endif /* CONFIG_TRACING */ |
| 1546 | unsigned long stack_start; | ||
| 1483 | }; | 1547 | }; |
| 1484 | 1548 | ||
| 1485 | /* Future-safe accessor for struct task_struct's cpus_allowed. */ | 1549 | /* Future-safe accessor for struct task_struct's cpus_allowed. */ |
| @@ -1661,9 +1725,8 @@ static inline void put_task_struct(struct task_struct *t) | |||
| 1661 | __put_task_struct(t); | 1725 | __put_task_struct(t); |
| 1662 | } | 1726 | } |
| 1663 | 1727 | ||
| 1664 | extern cputime_t task_utime(struct task_struct *p); | 1728 | extern void task_times(struct task_struct *p, cputime_t *ut, cputime_t *st); |
| 1665 | extern cputime_t task_stime(struct task_struct *p); | 1729 | extern void thread_group_times(struct task_struct *p, cputime_t *ut, cputime_t *st); |
| 1666 | extern cputime_t task_gtime(struct task_struct *p); | ||
| 1667 | 1730 | ||
| 1668 | /* | 1731 | /* |
| 1669 | * Per process flags | 1732 | * Per process flags |
| @@ -1675,6 +1738,7 @@ extern cputime_t task_gtime(struct task_struct *p); | |||
| 1675 | #define PF_EXITPIDONE 0x00000008 /* pi exit done on shut down */ | 1738 | #define PF_EXITPIDONE 0x00000008 /* pi exit done on shut down */ |
| 1676 | #define PF_VCPU 0x00000010 /* I'm a virtual CPU */ | 1739 | #define PF_VCPU 0x00000010 /* I'm a virtual CPU */ |
| 1677 | #define PF_FORKNOEXEC 0x00000040 /* forked but didn't exec */ | 1740 | #define PF_FORKNOEXEC 0x00000040 /* forked but didn't exec */ |
| 1741 | #define PF_MCE_PROCESS 0x00000080 /* process policy on mce errors */ | ||
| 1678 | #define PF_SUPERPRIV 0x00000100 /* used super-user privileges */ | 1742 | #define PF_SUPERPRIV 0x00000100 /* used super-user privileges */ |
| 1679 | #define PF_DUMPCORE 0x00000200 /* dumped core */ | 1743 | #define PF_DUMPCORE 0x00000200 /* dumped core */ |
| 1680 | #define PF_SIGNALED 0x00000400 /* killed by a signal */ | 1744 | #define PF_SIGNALED 0x00000400 /* killed by a signal */ |
| @@ -1686,7 +1750,7 @@ extern cputime_t task_gtime(struct task_struct *p); | |||
| 1686 | #define PF_FROZEN 0x00010000 /* frozen for system suspend */ | 1750 | #define PF_FROZEN 0x00010000 /* frozen for system suspend */ |
| 1687 | #define PF_FSTRANS 0x00020000 /* inside a filesystem transaction */ | 1751 | #define PF_FSTRANS 0x00020000 /* inside a filesystem transaction */ |
| 1688 | #define PF_KSWAPD 0x00040000 /* I am kswapd */ | 1752 | #define PF_KSWAPD 0x00040000 /* I am kswapd */ |
| 1689 | #define PF_SWAPOFF 0x00080000 /* I am in swapoff */ | 1753 | #define PF_OOM_ORIGIN 0x00080000 /* Allocating much memory to others */ |
| 1690 | #define PF_LESS_THROTTLE 0x00100000 /* Throttle me less: I clean memory */ | 1754 | #define PF_LESS_THROTTLE 0x00100000 /* Throttle me less: I clean memory */ |
| 1691 | #define PF_KTHREAD 0x00200000 /* I am a kernel thread */ | 1755 | #define PF_KTHREAD 0x00200000 /* I am a kernel thread */ |
| 1692 | #define PF_RANDOMIZE 0x00400000 /* randomize virtual address space */ | 1756 | #define PF_RANDOMIZE 0x00400000 /* randomize virtual address space */ |
| @@ -1694,6 +1758,7 @@ extern cputime_t task_gtime(struct task_struct *p); | |||
| 1694 | #define PF_SPREAD_PAGE 0x01000000 /* Spread page cache over cpuset */ | 1758 | #define PF_SPREAD_PAGE 0x01000000 /* Spread page cache over cpuset */ |
| 1695 | #define PF_SPREAD_SLAB 0x02000000 /* Spread some slab caches over cpuset */ | 1759 | #define PF_SPREAD_SLAB 0x02000000 /* Spread some slab caches over cpuset */ |
| 1696 | #define PF_THREAD_BOUND 0x04000000 /* Thread bound to specific cpu */ | 1760 | #define PF_THREAD_BOUND 0x04000000 /* Thread bound to specific cpu */ |
| 1761 | #define PF_MCE_EARLY 0x08000000 /* Early kill for mce process policy */ | ||
| 1697 | #define PF_MEMPOLICY 0x10000000 /* Non-default NUMA mempolicy */ | 1762 | #define PF_MEMPOLICY 0x10000000 /* Non-default NUMA mempolicy */ |
| 1698 | #define PF_MUTEX_TESTER 0x20000000 /* Thread belongs to the rt mutex tester */ | 1763 | #define PF_MUTEX_TESTER 0x20000000 /* Thread belongs to the rt mutex tester */ |
| 1699 | #define PF_FREEZER_SKIP 0x40000000 /* Freezer should not count it as freezeable */ | 1764 | #define PF_FREEZER_SKIP 0x40000000 /* Freezer should not count it as freezeable */ |
| @@ -1724,6 +1789,27 @@ extern cputime_t task_gtime(struct task_struct *p); | |||
| 1724 | #define tsk_used_math(p) ((p)->flags & PF_USED_MATH) | 1789 | #define tsk_used_math(p) ((p)->flags & PF_USED_MATH) |
| 1725 | #define used_math() tsk_used_math(current) | 1790 | #define used_math() tsk_used_math(current) |
| 1726 | 1791 | ||
| 1792 | #ifdef CONFIG_TREE_PREEMPT_RCU | ||
| 1793 | |||
| 1794 | #define RCU_READ_UNLOCK_BLOCKED (1 << 0) /* blocked while in RCU read-side. */ | ||
| 1795 | #define RCU_READ_UNLOCK_NEED_QS (1 << 1) /* RCU core needs CPU response. */ | ||
| 1796 | |||
| 1797 | static inline void rcu_copy_process(struct task_struct *p) | ||
| 1798 | { | ||
| 1799 | p->rcu_read_lock_nesting = 0; | ||
| 1800 | p->rcu_read_unlock_special = 0; | ||
| 1801 | p->rcu_blocked_node = NULL; | ||
| 1802 | INIT_LIST_HEAD(&p->rcu_node_entry); | ||
| 1803 | } | ||
| 1804 | |||
| 1805 | #else | ||
| 1806 | |||
| 1807 | static inline void rcu_copy_process(struct task_struct *p) | ||
| 1808 | { | ||
| 1809 | } | ||
| 1810 | |||
| 1811 | #endif | ||
| 1812 | |||
| 1727 | #ifdef CONFIG_SMP | 1813 | #ifdef CONFIG_SMP |
| 1728 | extern int set_cpus_allowed_ptr(struct task_struct *p, | 1814 | extern int set_cpus_allowed_ptr(struct task_struct *p, |
| 1729 | const struct cpumask *new_mask); | 1815 | const struct cpumask *new_mask); |
| @@ -1736,10 +1822,13 @@ static inline int set_cpus_allowed_ptr(struct task_struct *p, | |||
| 1736 | return 0; | 1822 | return 0; |
| 1737 | } | 1823 | } |
| 1738 | #endif | 1824 | #endif |
| 1825 | |||
| 1826 | #ifndef CONFIG_CPUMASK_OFFSTACK | ||
| 1739 | static inline int set_cpus_allowed(struct task_struct *p, cpumask_t new_mask) | 1827 | static inline int set_cpus_allowed(struct task_struct *p, cpumask_t new_mask) |
| 1740 | { | 1828 | { |
| 1741 | return set_cpus_allowed_ptr(p, &new_mask); | 1829 | return set_cpus_allowed_ptr(p, &new_mask); |
| 1742 | } | 1830 | } |
| 1831 | #endif | ||
| 1743 | 1832 | ||
| 1744 | /* | 1833 | /* |
| 1745 | * Architectures can set this to 1 if they have specified | 1834 | * Architectures can set this to 1 if they have specified |
| @@ -1813,15 +1902,16 @@ extern unsigned int sysctl_sched_min_granularity; | |||
| 1813 | extern unsigned int sysctl_sched_wakeup_granularity; | 1902 | extern unsigned int sysctl_sched_wakeup_granularity; |
| 1814 | extern unsigned int sysctl_sched_shares_ratelimit; | 1903 | extern unsigned int sysctl_sched_shares_ratelimit; |
| 1815 | extern unsigned int sysctl_sched_shares_thresh; | 1904 | extern unsigned int sysctl_sched_shares_thresh; |
| 1816 | #ifdef CONFIG_SCHED_DEBUG | ||
| 1817 | extern unsigned int sysctl_sched_child_runs_first; | 1905 | extern unsigned int sysctl_sched_child_runs_first; |
| 1906 | #ifdef CONFIG_SCHED_DEBUG | ||
| 1818 | extern unsigned int sysctl_sched_features; | 1907 | extern unsigned int sysctl_sched_features; |
| 1819 | extern unsigned int sysctl_sched_migration_cost; | 1908 | extern unsigned int sysctl_sched_migration_cost; |
| 1820 | extern unsigned int sysctl_sched_nr_migrate; | 1909 | extern unsigned int sysctl_sched_nr_migrate; |
| 1910 | extern unsigned int sysctl_sched_time_avg; | ||
| 1821 | extern unsigned int sysctl_timer_migration; | 1911 | extern unsigned int sysctl_timer_migration; |
| 1822 | 1912 | ||
| 1823 | int sched_nr_latency_handler(struct ctl_table *table, int write, | 1913 | int sched_nr_latency_handler(struct ctl_table *table, int write, |
| 1824 | struct file *file, void __user *buffer, size_t *length, | 1914 | void __user *buffer, size_t *length, |
| 1825 | loff_t *ppos); | 1915 | loff_t *ppos); |
| 1826 | #endif | 1916 | #endif |
| 1827 | #ifdef CONFIG_SCHED_DEBUG | 1917 | #ifdef CONFIG_SCHED_DEBUG |
| @@ -1839,7 +1929,7 @@ extern unsigned int sysctl_sched_rt_period; | |||
| 1839 | extern int sysctl_sched_rt_runtime; | 1929 | extern int sysctl_sched_rt_runtime; |
| 1840 | 1930 | ||
| 1841 | int sched_rt_handler(struct ctl_table *table, int write, | 1931 | int sched_rt_handler(struct ctl_table *table, int write, |
| 1842 | struct file *filp, void __user *buffer, size_t *lenp, | 1932 | void __user *buffer, size_t *lenp, |
| 1843 | loff_t *ppos); | 1933 | loff_t *ppos); |
| 1844 | 1934 | ||
| 1845 | extern unsigned int sysctl_sched_compat_yield; | 1935 | extern unsigned int sysctl_sched_compat_yield; |
| @@ -1974,6 +2064,7 @@ extern int kill_pgrp(struct pid *pid, int sig, int priv); | |||
| 1974 | extern int kill_pid(struct pid *pid, int sig, int priv); | 2064 | extern int kill_pid(struct pid *pid, int sig, int priv); |
| 1975 | extern int kill_proc_info(int, struct siginfo *, pid_t); | 2065 | extern int kill_proc_info(int, struct siginfo *, pid_t); |
| 1976 | extern int do_notify_parent(struct task_struct *, int); | 2066 | extern int do_notify_parent(struct task_struct *, int); |
| 2067 | extern void __wake_up_parent(struct task_struct *p, struct task_struct *parent); | ||
| 1977 | extern void force_sig(int, struct task_struct *); | 2068 | extern void force_sig(int, struct task_struct *); |
| 1978 | extern void force_sig_specific(int, struct task_struct *); | 2069 | extern void force_sig_specific(int, struct task_struct *); |
| 1979 | extern int send_sig(int, struct task_struct *, int); | 2070 | extern int send_sig(int, struct task_struct *, int); |
| @@ -1999,11 +2090,18 @@ static inline int is_si_special(const struct siginfo *info) | |||
| 1999 | return info <= SEND_SIG_FORCED; | 2090 | return info <= SEND_SIG_FORCED; |
| 2000 | } | 2091 | } |
| 2001 | 2092 | ||
| 2002 | /* True if we are on the alternate signal stack. */ | 2093 | /* |
| 2003 | 2094 | * True if we are on the alternate signal stack. | |
| 2095 | */ | ||
| 2004 | static inline int on_sig_stack(unsigned long sp) | 2096 | static inline int on_sig_stack(unsigned long sp) |
| 2005 | { | 2097 | { |
| 2006 | return (sp - current->sas_ss_sp < current->sas_ss_size); | 2098 | #ifdef CONFIG_STACK_GROWSUP |
| 2099 | return sp >= current->sas_ss_sp && | ||
| 2100 | sp - current->sas_ss_sp < current->sas_ss_size; | ||
| 2101 | #else | ||
| 2102 | return sp > current->sas_ss_sp && | ||
| 2103 | sp - current->sas_ss_sp <= current->sas_ss_size; | ||
| 2104 | #endif | ||
| 2007 | } | 2105 | } |
| 2008 | 2106 | ||
| 2009 | static inline int sas_ss_flags(unsigned long sp) | 2107 | static inline int sas_ss_flags(unsigned long sp) |
| @@ -2077,7 +2175,7 @@ static inline unsigned long wait_task_inactive(struct task_struct *p, | |||
| 2077 | #define for_each_process(p) \ | 2175 | #define for_each_process(p) \ |
| 2078 | for (p = &init_task ; (p = next_task(p)) != &init_task ; ) | 2176 | for (p = &init_task ; (p = next_task(p)) != &init_task ; ) |
| 2079 | 2177 | ||
| 2080 | extern bool is_single_threaded(struct task_struct *); | 2178 | extern bool current_is_single_threaded(void); |
| 2081 | 2179 | ||
| 2082 | /* | 2180 | /* |
| 2083 | * Careful: do_each_thread/while_each_thread is a double loop so | 2181 | * Careful: do_each_thread/while_each_thread is a double loop so |
| @@ -2251,7 +2349,10 @@ static inline int signal_pending(struct task_struct *p) | |||
| 2251 | return unlikely(test_tsk_thread_flag(p,TIF_SIGPENDING)); | 2349 | return unlikely(test_tsk_thread_flag(p,TIF_SIGPENDING)); |
| 2252 | } | 2350 | } |
| 2253 | 2351 | ||
| 2254 | extern int __fatal_signal_pending(struct task_struct *p); | 2352 | static inline int __fatal_signal_pending(struct task_struct *p) |
| 2353 | { | ||
| 2354 | return unlikely(sigismember(&p->pending.signal, SIGKILL)); | ||
| 2355 | } | ||
| 2255 | 2356 | ||
| 2256 | static inline int fatal_signal_pending(struct task_struct *p) | 2357 | static inline int fatal_signal_pending(struct task_struct *p) |
| 2257 | { | 2358 | { |
| @@ -2281,23 +2382,31 @@ static inline int need_resched(void) | |||
| 2281 | * cond_resched_softirq() will enable bhs before scheduling. | 2382 | * cond_resched_softirq() will enable bhs before scheduling. |
| 2282 | */ | 2383 | */ |
| 2283 | extern int _cond_resched(void); | 2384 | extern int _cond_resched(void); |
| 2284 | #ifdef CONFIG_PREEMPT_BKL | 2385 | |
| 2285 | static inline int cond_resched(void) | 2386 | #define cond_resched() ({ \ |
| 2286 | { | 2387 | __might_sleep(__FILE__, __LINE__, 0); \ |
| 2287 | return 0; | 2388 | _cond_resched(); \ |
| 2288 | } | 2389 | }) |
| 2390 | |||
| 2391 | extern int __cond_resched_lock(spinlock_t *lock); | ||
| 2392 | |||
| 2393 | #ifdef CONFIG_PREEMPT | ||
| 2394 | #define PREEMPT_LOCK_OFFSET PREEMPT_OFFSET | ||
| 2289 | #else | 2395 | #else |
| 2290 | static inline int cond_resched(void) | 2396 | #define PREEMPT_LOCK_OFFSET 0 |
| 2291 | { | ||
| 2292 | return _cond_resched(); | ||
| 2293 | } | ||
| 2294 | #endif | 2397 | #endif |
| 2295 | extern int cond_resched_lock(spinlock_t * lock); | 2398 | |
| 2296 | extern int cond_resched_softirq(void); | 2399 | #define cond_resched_lock(lock) ({ \ |
| 2297 | static inline int cond_resched_bkl(void) | 2400 | __might_sleep(__FILE__, __LINE__, PREEMPT_LOCK_OFFSET); \ |
| 2298 | { | 2401 | __cond_resched_lock(lock); \ |
| 2299 | return _cond_resched(); | 2402 | }) |
| 2300 | } | 2403 | |
| 2404 | extern int __cond_resched_softirq(void); | ||
| 2405 | |||
| 2406 | #define cond_resched_softirq() ({ \ | ||
| 2407 | __might_sleep(__FILE__, __LINE__, SOFTIRQ_OFFSET); \ | ||
| 2408 | __cond_resched_softirq(); \ | ||
| 2409 | }) | ||
| 2301 | 2410 | ||
| 2302 | /* | 2411 | /* |
| 2303 | * Does a critical section need to be broken due to another | 2412 | * Does a critical section need to be broken due to another |
diff --git a/include/linux/sctp.h b/include/linux/sctp.h index b464b9d3d242..c20d3ce673c0 100644 --- a/include/linux/sctp.h +++ b/include/linux/sctp.h | |||
| @@ -242,6 +242,7 @@ enum { | |||
| 242 | SCTP_DATA_FIRST_FRAG = 0x02, | 242 | SCTP_DATA_FIRST_FRAG = 0x02, |
| 243 | SCTP_DATA_NOT_FRAG = 0x03, | 243 | SCTP_DATA_NOT_FRAG = 0x03, |
| 244 | SCTP_DATA_UNORDERED = 0x04, | 244 | SCTP_DATA_UNORDERED = 0x04, |
| 245 | SCTP_DATA_SACK_IMM = 0x08, | ||
| 245 | }; | 246 | }; |
| 246 | enum { SCTP_DATA_FRAG_MASK = 0x03, }; | 247 | enum { SCTP_DATA_FRAG_MASK = 0x03, }; |
| 247 | 248 | ||
diff --git a/include/linux/securebits.h b/include/linux/securebits.h index d2c5ed845bcc..33406174cbe8 100644 --- a/include/linux/securebits.h +++ b/include/linux/securebits.h | |||
| @@ -1,6 +1,15 @@ | |||
| 1 | #ifndef _LINUX_SECUREBITS_H | 1 | #ifndef _LINUX_SECUREBITS_H |
| 2 | #define _LINUX_SECUREBITS_H 1 | 2 | #define _LINUX_SECUREBITS_H 1 |
| 3 | 3 | ||
| 4 | /* Each securesetting is implemented using two bits. One bit specifies | ||
| 5 | whether the setting is on or off. The other bit specify whether the | ||
| 6 | setting is locked or not. A setting which is locked cannot be | ||
| 7 | changed from user-level. */ | ||
| 8 | #define issecure_mask(X) (1 << (X)) | ||
| 9 | #ifdef __KERNEL__ | ||
| 10 | #define issecure(X) (issecure_mask(X) & current_cred_xxx(securebits)) | ||
| 11 | #endif | ||
| 12 | |||
| 4 | #define SECUREBITS_DEFAULT 0x00000000 | 13 | #define SECUREBITS_DEFAULT 0x00000000 |
| 5 | 14 | ||
| 6 | /* When set UID 0 has no special privileges. When unset, we support | 15 | /* When set UID 0 has no special privileges. When unset, we support |
| @@ -12,6 +21,9 @@ | |||
| 12 | #define SECURE_NOROOT 0 | 21 | #define SECURE_NOROOT 0 |
| 13 | #define SECURE_NOROOT_LOCKED 1 /* make bit-0 immutable */ | 22 | #define SECURE_NOROOT_LOCKED 1 /* make bit-0 immutable */ |
| 14 | 23 | ||
| 24 | #define SECBIT_NOROOT (issecure_mask(SECURE_NOROOT)) | ||
| 25 | #define SECBIT_NOROOT_LOCKED (issecure_mask(SECURE_NOROOT_LOCKED)) | ||
| 26 | |||
| 15 | /* When set, setuid to/from uid 0 does not trigger capability-"fixup". | 27 | /* When set, setuid to/from uid 0 does not trigger capability-"fixup". |
| 16 | When unset, to provide compatiblility with old programs relying on | 28 | When unset, to provide compatiblility with old programs relying on |
| 17 | set*uid to gain/lose privilege, transitions to/from uid 0 cause | 29 | set*uid to gain/lose privilege, transitions to/from uid 0 cause |
| @@ -19,6 +31,10 @@ | |||
| 19 | #define SECURE_NO_SETUID_FIXUP 2 | 31 | #define SECURE_NO_SETUID_FIXUP 2 |
| 20 | #define SECURE_NO_SETUID_FIXUP_LOCKED 3 /* make bit-2 immutable */ | 32 | #define SECURE_NO_SETUID_FIXUP_LOCKED 3 /* make bit-2 immutable */ |
| 21 | 33 | ||
| 34 | #define SECBIT_NO_SETUID_FIXUP (issecure_mask(SECURE_NO_SETUID_FIXUP)) | ||
| 35 | #define SECBIT_NO_SETUID_FIXUP_LOCKED \ | ||
| 36 | (issecure_mask(SECURE_NO_SETUID_FIXUP_LOCKED)) | ||
| 37 | |||
| 22 | /* When set, a process can retain its capabilities even after | 38 | /* When set, a process can retain its capabilities even after |
| 23 | transitioning to a non-root user (the set-uid fixup suppressed by | 39 | transitioning to a non-root user (the set-uid fixup suppressed by |
| 24 | bit 2). Bit-4 is cleared when a process calls exec(); setting both | 40 | bit 2). Bit-4 is cleared when a process calls exec(); setting both |
| @@ -27,12 +43,8 @@ | |||
| 27 | #define SECURE_KEEP_CAPS 4 | 43 | #define SECURE_KEEP_CAPS 4 |
| 28 | #define SECURE_KEEP_CAPS_LOCKED 5 /* make bit-4 immutable */ | 44 | #define SECURE_KEEP_CAPS_LOCKED 5 /* make bit-4 immutable */ |
| 29 | 45 | ||
| 30 | /* Each securesetting is implemented using two bits. One bit specifies | 46 | #define SECBIT_KEEP_CAPS (issecure_mask(SECURE_KEEP_CAPS)) |
| 31 | whether the setting is on or off. The other bit specify whether the | 47 | #define SECBIT_KEEP_CAPS_LOCKED (issecure_mask(SECURE_KEEP_CAPS_LOCKED)) |
| 32 | setting is locked or not. A setting which is locked cannot be | ||
| 33 | changed from user-level. */ | ||
| 34 | #define issecure_mask(X) (1 << (X)) | ||
| 35 | #define issecure(X) (issecure_mask(X) & current_cred_xxx(securebits)) | ||
| 36 | 48 | ||
| 37 | #define SECURE_ALL_BITS (issecure_mask(SECURE_NOROOT) | \ | 49 | #define SECURE_ALL_BITS (issecure_mask(SECURE_NOROOT) | \ |
| 38 | issecure_mask(SECURE_NO_SETUID_FIXUP) | \ | 50 | issecure_mask(SECURE_NO_SETUID_FIXUP) | \ |
diff --git a/include/linux/security.h b/include/linux/security.h index 1f16eea2017b..466cbadbd1ef 100644 --- a/include/linux/security.h +++ b/include/linux/security.h | |||
| @@ -53,7 +53,7 @@ struct audit_krule; | |||
| 53 | extern int cap_capable(struct task_struct *tsk, const struct cred *cred, | 53 | extern int cap_capable(struct task_struct *tsk, const struct cred *cred, |
| 54 | int cap, int audit); | 54 | int cap, int audit); |
| 55 | extern int cap_settime(struct timespec *ts, struct timezone *tz); | 55 | extern int cap_settime(struct timespec *ts, struct timezone *tz); |
| 56 | extern int cap_ptrace_may_access(struct task_struct *child, unsigned int mode); | 56 | extern int cap_ptrace_access_check(struct task_struct *child, unsigned int mode); |
| 57 | extern int cap_ptrace_traceme(struct task_struct *parent); | 57 | extern int cap_ptrace_traceme(struct task_struct *parent); |
| 58 | extern int cap_capget(struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted); | 58 | extern int cap_capget(struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted); |
| 59 | extern int cap_capset(struct cred *new, const struct cred *old, | 59 | extern int cap_capset(struct cred *new, const struct cred *old, |
| @@ -133,7 +133,7 @@ static inline unsigned long round_hint_to_min(unsigned long hint) | |||
| 133 | return PAGE_ALIGN(mmap_min_addr); | 133 | return PAGE_ALIGN(mmap_min_addr); |
| 134 | return hint; | 134 | return hint; |
| 135 | } | 135 | } |
| 136 | extern int mmap_min_addr_handler(struct ctl_table *table, int write, struct file *filp, | 136 | extern int mmap_min_addr_handler(struct ctl_table *table, int write, |
| 137 | void __user *buffer, size_t *lenp, loff_t *ppos); | 137 | void __user *buffer, size_t *lenp, loff_t *ppos); |
| 138 | 138 | ||
| 139 | #ifdef CONFIG_SECURITY | 139 | #ifdef CONFIG_SECURITY |
| @@ -447,6 +447,22 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
| 447 | * @new_dir contains the path structure for parent of the new link. | 447 | * @new_dir contains the path structure for parent of the new link. |
| 448 | * @new_dentry contains the dentry structure of the new link. | 448 | * @new_dentry contains the dentry structure of the new link. |
| 449 | * Return 0 if permission is granted. | 449 | * Return 0 if permission is granted. |
| 450 | * @path_chmod: | ||
| 451 | * Check for permission to change DAC's permission of a file or directory. | ||
| 452 | * @dentry contains the dentry structure. | ||
| 453 | * @mnt contains the vfsmnt structure. | ||
| 454 | * @mode contains DAC's mode. | ||
| 455 | * Return 0 if permission is granted. | ||
| 456 | * @path_chown: | ||
| 457 | * Check for permission to change owner/group of a file or directory. | ||
| 458 | * @path contains the path structure. | ||
| 459 | * @uid contains new owner's ID. | ||
| 460 | * @gid contains new group's ID. | ||
| 461 | * Return 0 if permission is granted. | ||
| 462 | * @path_chroot: | ||
| 463 | * Check for permission to change root directory. | ||
| 464 | * @path contains the path structure. | ||
| 465 | * Return 0 if permission is granted. | ||
| 450 | * @inode_readlink: | 466 | * @inode_readlink: |
| 451 | * Check the permission to read the symbolic link. | 467 | * Check the permission to read the symbolic link. |
| 452 | * @dentry contains the dentry structure for the file link. | 468 | * @dentry contains the dentry structure for the file link. |
| @@ -653,6 +669,11 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
| 653 | * manual page for definitions of the @clone_flags. | 669 | * manual page for definitions of the @clone_flags. |
| 654 | * @clone_flags contains the flags indicating what should be shared. | 670 | * @clone_flags contains the flags indicating what should be shared. |
| 655 | * Return 0 if permission is granted. | 671 | * Return 0 if permission is granted. |
| 672 | * @cred_alloc_blank: | ||
| 673 | * @cred points to the credentials. | ||
| 674 | * @gfp indicates the atomicity of any memory allocations. | ||
| 675 | * Only allocate sufficient memory and attach to @cred such that | ||
| 676 | * cred_transfer() will not get ENOMEM. | ||
| 656 | * @cred_free: | 677 | * @cred_free: |
| 657 | * @cred points to the credentials. | 678 | * @cred points to the credentials. |
| 658 | * Deallocate and clear the cred->security field in a set of credentials. | 679 | * Deallocate and clear the cred->security field in a set of credentials. |
| @@ -665,6 +686,10 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
| 665 | * @new points to the new credentials. | 686 | * @new points to the new credentials. |
| 666 | * @old points to the original credentials. | 687 | * @old points to the original credentials. |
| 667 | * Install a new set of credentials. | 688 | * Install a new set of credentials. |
| 689 | * @cred_transfer: | ||
| 690 | * @new points to the new credentials. | ||
| 691 | * @old points to the original credentials. | ||
| 692 | * Transfer data from original creds to new creds | ||
| 668 | * @kernel_act_as: | 693 | * @kernel_act_as: |
| 669 | * Set the credentials for a kernel service to act as (subjective context). | 694 | * Set the credentials for a kernel service to act as (subjective context). |
| 670 | * @new points to the credentials to be modified. | 695 | * @new points to the credentials to be modified. |
| @@ -678,6 +703,11 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
| 678 | * @inode points to the inode to use as a reference. | 703 | * @inode points to the inode to use as a reference. |
| 679 | * The current task must be the one that nominated @inode. | 704 | * The current task must be the one that nominated @inode. |
| 680 | * Return 0 if successful. | 705 | * Return 0 if successful. |
| 706 | * @kernel_module_request: | ||
| 707 | * Ability to trigger the kernel to automatically upcall to userspace for | ||
| 708 | * userspace to load a kernel module with the given name. | ||
| 709 | * @kmod_name name of the module requested by the kernel | ||
| 710 | * Return 0 if successful. | ||
| 681 | * @task_setuid: | 711 | * @task_setuid: |
| 682 | * Check permission before setting one or more of the user identity | 712 | * Check permission before setting one or more of the user identity |
| 683 | * attributes of the current process. The @flags parameter indicates | 713 | * attributes of the current process. The @flags parameter indicates |
| @@ -994,6 +1024,17 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
| 994 | * Sets the connection's peersid to the secmark on skb. | 1024 | * Sets the connection's peersid to the secmark on skb. |
| 995 | * @req_classify_flow: | 1025 | * @req_classify_flow: |
| 996 | * Sets the flow's sid to the openreq sid. | 1026 | * Sets the flow's sid to the openreq sid. |
| 1027 | * @tun_dev_create: | ||
| 1028 | * Check permissions prior to creating a new TUN device. | ||
| 1029 | * @tun_dev_post_create: | ||
| 1030 | * This hook allows a module to update or allocate a per-socket security | ||
| 1031 | * structure. | ||
| 1032 | * @sk contains the newly created sock structure. | ||
| 1033 | * @tun_dev_attach: | ||
| 1034 | * Check permissions prior to attaching to a persistent TUN device. This | ||
| 1035 | * hook can also be used by the module to update any security state | ||
| 1036 | * associated with the TUN device's sock structure. | ||
| 1037 | * @sk contains the existing sock structure. | ||
| 997 | * | 1038 | * |
| 998 | * Security hooks for XFRM operations. | 1039 | * Security hooks for XFRM operations. |
| 999 | * | 1040 | * |
| @@ -1088,6 +1129,13 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
| 1088 | * Return the length of the string (including terminating NUL) or -ve if | 1129 | * Return the length of the string (including terminating NUL) or -ve if |
| 1089 | * an error. | 1130 | * an error. |
| 1090 | * May also return 0 (and a NULL buffer pointer) if there is no label. | 1131 | * May also return 0 (and a NULL buffer pointer) if there is no label. |
| 1132 | * @key_session_to_parent: | ||
| 1133 | * Forcibly assign the session keyring from a process to its parent | ||
| 1134 | * process. | ||
| 1135 | * @cred: Pointer to process's credentials | ||
| 1136 | * @parent_cred: Pointer to parent process's credentials | ||
| 1137 | * @keyring: Proposed new session keyring | ||
| 1138 | * Return 0 if permission is granted, -ve error otherwise. | ||
| 1091 | * | 1139 | * |
| 1092 | * Security hooks affecting all System V IPC operations. | 1140 | * Security hooks affecting all System V IPC operations. |
| 1093 | * | 1141 | * |
| @@ -1229,7 +1277,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
| 1229 | * @alter contains the flag indicating whether changes are to be made. | 1277 | * @alter contains the flag indicating whether changes are to be made. |
| 1230 | * Return 0 if permission is granted. | 1278 | * Return 0 if permission is granted. |
| 1231 | * | 1279 | * |
| 1232 | * @ptrace_may_access: | 1280 | * @ptrace_access_check: |
| 1233 | * Check permission before allowing the current process to trace the | 1281 | * Check permission before allowing the current process to trace the |
| 1234 | * @child process. | 1282 | * @child process. |
| 1235 | * Security modules may also want to perform a process tracing check | 1283 | * Security modules may also want to perform a process tracing check |
| @@ -1244,7 +1292,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
| 1244 | * Check that the @parent process has sufficient permission to trace the | 1292 | * Check that the @parent process has sufficient permission to trace the |
| 1245 | * current process before allowing the current process to present itself | 1293 | * current process before allowing the current process to present itself |
| 1246 | * to the @parent process for tracing. | 1294 | * to the @parent process for tracing. |
| 1247 | * The parent process will still have to undergo the ptrace_may_access | 1295 | * The parent process will still have to undergo the ptrace_access_check |
| 1248 | * checks before it is allowed to trace this one. | 1296 | * checks before it is allowed to trace this one. |
| 1249 | * @parent contains the task_struct structure for debugger process. | 1297 | * @parent contains the task_struct structure for debugger process. |
| 1250 | * Return 0 if permission is granted. | 1298 | * Return 0 if permission is granted. |
| @@ -1351,12 +1399,47 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
| 1351 | * audit_rule_init. | 1399 | * audit_rule_init. |
| 1352 | * @rule contains the allocated rule | 1400 | * @rule contains the allocated rule |
| 1353 | * | 1401 | * |
| 1402 | * @inode_notifysecctx: | ||
| 1403 | * Notify the security module of what the security context of an inode | ||
| 1404 | * should be. Initializes the incore security context managed by the | ||
| 1405 | * security module for this inode. Example usage: NFS client invokes | ||
| 1406 | * this hook to initialize the security context in its incore inode to the | ||
| 1407 | * value provided by the server for the file when the server returned the | ||
| 1408 | * file's attributes to the client. | ||
| 1409 | * | ||
| 1410 | * Must be called with inode->i_mutex locked. | ||
| 1411 | * | ||
| 1412 | * @inode we wish to set the security context of. | ||
| 1413 | * @ctx contains the string which we wish to set in the inode. | ||
| 1414 | * @ctxlen contains the length of @ctx. | ||
| 1415 | * | ||
| 1416 | * @inode_setsecctx: | ||
| 1417 | * Change the security context of an inode. Updates the | ||
| 1418 | * incore security context managed by the security module and invokes the | ||
| 1419 | * fs code as needed (via __vfs_setxattr_noperm) to update any backing | ||
| 1420 | * xattrs that represent the context. Example usage: NFS server invokes | ||
| 1421 | * this hook to change the security context in its incore inode and on the | ||
| 1422 | * backing filesystem to a value provided by the client on a SETATTR | ||
| 1423 | * operation. | ||
| 1424 | * | ||
| 1425 | * Must be called with inode->i_mutex locked. | ||
| 1426 | * | ||
| 1427 | * @dentry contains the inode we wish to set the security context of. | ||
| 1428 | * @ctx contains the string which we wish to set in the inode. | ||
| 1429 | * @ctxlen contains the length of @ctx. | ||
| 1430 | * | ||
| 1431 | * @inode_getsecctx: | ||
| 1432 | * Returns a string containing all relavent security context information | ||
| 1433 | * | ||
| 1434 | * @inode we wish to set the security context of. | ||
| 1435 | * @ctx is a pointer in which to place the allocated security context. | ||
| 1436 | * @ctxlen points to the place to put the length of @ctx. | ||
| 1354 | * This is the main security structure. | 1437 | * This is the main security structure. |
| 1355 | */ | 1438 | */ |
| 1356 | struct security_operations { | 1439 | struct security_operations { |
| 1357 | char name[SECURITY_NAME_MAX + 1]; | 1440 | char name[SECURITY_NAME_MAX + 1]; |
| 1358 | 1441 | ||
| 1359 | int (*ptrace_may_access) (struct task_struct *child, unsigned int mode); | 1442 | int (*ptrace_access_check) (struct task_struct *child, unsigned int mode); |
| 1360 | int (*ptrace_traceme) (struct task_struct *parent); | 1443 | int (*ptrace_traceme) (struct task_struct *parent); |
| 1361 | int (*capget) (struct task_struct *target, | 1444 | int (*capget) (struct task_struct *target, |
| 1362 | kernel_cap_t *effective, | 1445 | kernel_cap_t *effective, |
| @@ -1422,6 +1505,10 @@ struct security_operations { | |||
| 1422 | struct dentry *new_dentry); | 1505 | struct dentry *new_dentry); |
| 1423 | int (*path_rename) (struct path *old_dir, struct dentry *old_dentry, | 1506 | int (*path_rename) (struct path *old_dir, struct dentry *old_dentry, |
| 1424 | struct path *new_dir, struct dentry *new_dentry); | 1507 | struct path *new_dir, struct dentry *new_dentry); |
| 1508 | int (*path_chmod) (struct dentry *dentry, struct vfsmount *mnt, | ||
| 1509 | mode_t mode); | ||
| 1510 | int (*path_chown) (struct path *path, uid_t uid, gid_t gid); | ||
| 1511 | int (*path_chroot) (struct path *path); | ||
| 1425 | #endif | 1512 | #endif |
| 1426 | 1513 | ||
| 1427 | int (*inode_alloc_security) (struct inode *inode); | 1514 | int (*inode_alloc_security) (struct inode *inode); |
| @@ -1483,12 +1570,15 @@ struct security_operations { | |||
| 1483 | int (*dentry_open) (struct file *file, const struct cred *cred); | 1570 | int (*dentry_open) (struct file *file, const struct cred *cred); |
| 1484 | 1571 | ||
| 1485 | int (*task_create) (unsigned long clone_flags); | 1572 | int (*task_create) (unsigned long clone_flags); |
| 1573 | int (*cred_alloc_blank) (struct cred *cred, gfp_t gfp); | ||
| 1486 | void (*cred_free) (struct cred *cred); | 1574 | void (*cred_free) (struct cred *cred); |
| 1487 | int (*cred_prepare)(struct cred *new, const struct cred *old, | 1575 | int (*cred_prepare)(struct cred *new, const struct cred *old, |
| 1488 | gfp_t gfp); | 1576 | gfp_t gfp); |
| 1489 | void (*cred_commit)(struct cred *new, const struct cred *old); | 1577 | void (*cred_commit)(struct cred *new, const struct cred *old); |
| 1578 | void (*cred_transfer)(struct cred *new, const struct cred *old); | ||
| 1490 | int (*kernel_act_as)(struct cred *new, u32 secid); | 1579 | int (*kernel_act_as)(struct cred *new, u32 secid); |
| 1491 | int (*kernel_create_files_as)(struct cred *new, struct inode *inode); | 1580 | int (*kernel_create_files_as)(struct cred *new, struct inode *inode); |
| 1581 | int (*kernel_module_request)(char *kmod_name); | ||
| 1492 | int (*task_setuid) (uid_t id0, uid_t id1, uid_t id2, int flags); | 1582 | int (*task_setuid) (uid_t id0, uid_t id1, uid_t id2, int flags); |
| 1493 | int (*task_fix_setuid) (struct cred *new, const struct cred *old, | 1583 | int (*task_fix_setuid) (struct cred *new, const struct cred *old, |
| 1494 | int flags); | 1584 | int flags); |
| @@ -1556,6 +1646,10 @@ struct security_operations { | |||
| 1556 | int (*secctx_to_secid) (const char *secdata, u32 seclen, u32 *secid); | 1646 | int (*secctx_to_secid) (const char *secdata, u32 seclen, u32 *secid); |
| 1557 | void (*release_secctx) (char *secdata, u32 seclen); | 1647 | void (*release_secctx) (char *secdata, u32 seclen); |
| 1558 | 1648 | ||
| 1649 | int (*inode_notifysecctx)(struct inode *inode, void *ctx, u32 ctxlen); | ||
| 1650 | int (*inode_setsecctx)(struct dentry *dentry, void *ctx, u32 ctxlen); | ||
| 1651 | int (*inode_getsecctx)(struct inode *inode, void **ctx, u32 *ctxlen); | ||
| 1652 | |||
| 1559 | #ifdef CONFIG_SECURITY_NETWORK | 1653 | #ifdef CONFIG_SECURITY_NETWORK |
| 1560 | int (*unix_stream_connect) (struct socket *sock, | 1654 | int (*unix_stream_connect) (struct socket *sock, |
| 1561 | struct socket *other, struct sock *newsk); | 1655 | struct socket *other, struct sock *newsk); |
| @@ -1592,6 +1686,9 @@ struct security_operations { | |||
| 1592 | void (*inet_csk_clone) (struct sock *newsk, const struct request_sock *req); | 1686 | void (*inet_csk_clone) (struct sock *newsk, const struct request_sock *req); |
| 1593 | void (*inet_conn_established) (struct sock *sk, struct sk_buff *skb); | 1687 | void (*inet_conn_established) (struct sock *sk, struct sk_buff *skb); |
| 1594 | void (*req_classify_flow) (const struct request_sock *req, struct flowi *fl); | 1688 | void (*req_classify_flow) (const struct request_sock *req, struct flowi *fl); |
| 1689 | int (*tun_dev_create)(void); | ||
| 1690 | void (*tun_dev_post_create)(struct sock *sk); | ||
| 1691 | int (*tun_dev_attach)(struct sock *sk); | ||
| 1595 | #endif /* CONFIG_SECURITY_NETWORK */ | 1692 | #endif /* CONFIG_SECURITY_NETWORK */ |
| 1596 | 1693 | ||
| 1597 | #ifdef CONFIG_SECURITY_NETWORK_XFRM | 1694 | #ifdef CONFIG_SECURITY_NETWORK_XFRM |
| @@ -1620,6 +1717,9 @@ struct security_operations { | |||
| 1620 | const struct cred *cred, | 1717 | const struct cred *cred, |
| 1621 | key_perm_t perm); | 1718 | key_perm_t perm); |
| 1622 | int (*key_getsecurity)(struct key *key, char **_buffer); | 1719 | int (*key_getsecurity)(struct key *key, char **_buffer); |
| 1720 | int (*key_session_to_parent)(const struct cred *cred, | ||
| 1721 | const struct cred *parent_cred, | ||
| 1722 | struct key *key); | ||
| 1623 | #endif /* CONFIG_KEYS */ | 1723 | #endif /* CONFIG_KEYS */ |
| 1624 | 1724 | ||
| 1625 | #ifdef CONFIG_AUDIT | 1725 | #ifdef CONFIG_AUDIT |
| @@ -1637,7 +1737,7 @@ extern int security_module_enable(struct security_operations *ops); | |||
| 1637 | extern int register_security(struct security_operations *ops); | 1737 | extern int register_security(struct security_operations *ops); |
| 1638 | 1738 | ||
| 1639 | /* Security operations */ | 1739 | /* Security operations */ |
| 1640 | int security_ptrace_may_access(struct task_struct *child, unsigned int mode); | 1740 | int security_ptrace_access_check(struct task_struct *child, unsigned int mode); |
| 1641 | int security_ptrace_traceme(struct task_struct *parent); | 1741 | int security_ptrace_traceme(struct task_struct *parent); |
| 1642 | int security_capget(struct task_struct *target, | 1742 | int security_capget(struct task_struct *target, |
| 1643 | kernel_cap_t *effective, | 1743 | kernel_cap_t *effective, |
| @@ -1736,11 +1836,14 @@ int security_file_send_sigiotask(struct task_struct *tsk, | |||
| 1736 | int security_file_receive(struct file *file); | 1836 | int security_file_receive(struct file *file); |
| 1737 | int security_dentry_open(struct file *file, const struct cred *cred); | 1837 | int security_dentry_open(struct file *file, const struct cred *cred); |
| 1738 | int security_task_create(unsigned long clone_flags); | 1838 | int security_task_create(unsigned long clone_flags); |
| 1839 | int security_cred_alloc_blank(struct cred *cred, gfp_t gfp); | ||
| 1739 | void security_cred_free(struct cred *cred); | 1840 | void security_cred_free(struct cred *cred); |
| 1740 | int security_prepare_creds(struct cred *new, const struct cred *old, gfp_t gfp); | 1841 | int security_prepare_creds(struct cred *new, const struct cred *old, gfp_t gfp); |
| 1741 | void security_commit_creds(struct cred *new, const struct cred *old); | 1842 | void security_commit_creds(struct cred *new, const struct cred *old); |
| 1843 | void security_transfer_creds(struct cred *new, const struct cred *old); | ||
| 1742 | int security_kernel_act_as(struct cred *new, u32 secid); | 1844 | int security_kernel_act_as(struct cred *new, u32 secid); |
| 1743 | int security_kernel_create_files_as(struct cred *new, struct inode *inode); | 1845 | int security_kernel_create_files_as(struct cred *new, struct inode *inode); |
| 1846 | int security_kernel_module_request(char *kmod_name); | ||
| 1744 | int security_task_setuid(uid_t id0, uid_t id1, uid_t id2, int flags); | 1847 | int security_task_setuid(uid_t id0, uid_t id1, uid_t id2, int flags); |
| 1745 | int security_task_fix_setuid(struct cred *new, const struct cred *old, | 1848 | int security_task_fix_setuid(struct cred *new, const struct cred *old, |
| 1746 | int flags); | 1849 | int flags); |
| @@ -1796,6 +1899,9 @@ int security_secid_to_secctx(u32 secid, char **secdata, u32 *seclen); | |||
| 1796 | int security_secctx_to_secid(const char *secdata, u32 seclen, u32 *secid); | 1899 | int security_secctx_to_secid(const char *secdata, u32 seclen, u32 *secid); |
| 1797 | void security_release_secctx(char *secdata, u32 seclen); | 1900 | void security_release_secctx(char *secdata, u32 seclen); |
| 1798 | 1901 | ||
| 1902 | int security_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen); | ||
| 1903 | int security_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen); | ||
| 1904 | int security_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen); | ||
| 1799 | #else /* CONFIG_SECURITY */ | 1905 | #else /* CONFIG_SECURITY */ |
| 1800 | struct security_mnt_opts { | 1906 | struct security_mnt_opts { |
| 1801 | }; | 1907 | }; |
| @@ -1818,10 +1924,10 @@ static inline int security_init(void) | |||
| 1818 | return 0; | 1924 | return 0; |
| 1819 | } | 1925 | } |
| 1820 | 1926 | ||
| 1821 | static inline int security_ptrace_may_access(struct task_struct *child, | 1927 | static inline int security_ptrace_access_check(struct task_struct *child, |
| 1822 | unsigned int mode) | 1928 | unsigned int mode) |
| 1823 | { | 1929 | { |
| 1824 | return cap_ptrace_may_access(child, mode); | 1930 | return cap_ptrace_access_check(child, mode); |
| 1825 | } | 1931 | } |
| 1826 | 1932 | ||
| 1827 | static inline int security_ptrace_traceme(struct task_struct *parent) | 1933 | static inline int security_ptrace_traceme(struct task_struct *parent) |
| @@ -2266,6 +2372,11 @@ static inline int security_task_create(unsigned long clone_flags) | |||
| 2266 | return 0; | 2372 | return 0; |
| 2267 | } | 2373 | } |
| 2268 | 2374 | ||
| 2375 | static inline int security_cred_alloc_blank(struct cred *cred, gfp_t gfp) | ||
| 2376 | { | ||
| 2377 | return 0; | ||
| 2378 | } | ||
| 2379 | |||
| 2269 | static inline void security_cred_free(struct cred *cred) | 2380 | static inline void security_cred_free(struct cred *cred) |
| 2270 | { } | 2381 | { } |
| 2271 | 2382 | ||
| @@ -2281,6 +2392,11 @@ static inline void security_commit_creds(struct cred *new, | |||
| 2281 | { | 2392 | { |
| 2282 | } | 2393 | } |
| 2283 | 2394 | ||
| 2395 | static inline void security_transfer_creds(struct cred *new, | ||
| 2396 | const struct cred *old) | ||
| 2397 | { | ||
| 2398 | } | ||
| 2399 | |||
| 2284 | static inline int security_kernel_act_as(struct cred *cred, u32 secid) | 2400 | static inline int security_kernel_act_as(struct cred *cred, u32 secid) |
| 2285 | { | 2401 | { |
| 2286 | return 0; | 2402 | return 0; |
| @@ -2292,6 +2408,11 @@ static inline int security_kernel_create_files_as(struct cred *cred, | |||
| 2292 | return 0; | 2408 | return 0; |
| 2293 | } | 2409 | } |
| 2294 | 2410 | ||
| 2411 | static inline int security_kernel_module_request(char *kmod_name) | ||
| 2412 | { | ||
| 2413 | return 0; | ||
| 2414 | } | ||
| 2415 | |||
| 2295 | static inline int security_task_setuid(uid_t id0, uid_t id1, uid_t id2, | 2416 | static inline int security_task_setuid(uid_t id0, uid_t id1, uid_t id2, |
| 2296 | int flags) | 2417 | int flags) |
| 2297 | { | 2418 | { |
| @@ -2537,6 +2658,19 @@ static inline int security_secctx_to_secid(const char *secdata, | |||
| 2537 | static inline void security_release_secctx(char *secdata, u32 seclen) | 2658 | static inline void security_release_secctx(char *secdata, u32 seclen) |
| 2538 | { | 2659 | { |
| 2539 | } | 2660 | } |
| 2661 | |||
| 2662 | static inline int security_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen) | ||
| 2663 | { | ||
| 2664 | return -EOPNOTSUPP; | ||
| 2665 | } | ||
| 2666 | static inline int security_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen) | ||
| 2667 | { | ||
| 2668 | return -EOPNOTSUPP; | ||
| 2669 | } | ||
| 2670 | static inline int security_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen) | ||
| 2671 | { | ||
| 2672 | return -EOPNOTSUPP; | ||
| 2673 | } | ||
| 2540 | #endif /* CONFIG_SECURITY */ | 2674 | #endif /* CONFIG_SECURITY */ |
| 2541 | 2675 | ||
| 2542 | #ifdef CONFIG_SECURITY_NETWORK | 2676 | #ifdef CONFIG_SECURITY_NETWORK |
| @@ -2575,6 +2709,9 @@ void security_inet_csk_clone(struct sock *newsk, | |||
| 2575 | const struct request_sock *req); | 2709 | const struct request_sock *req); |
| 2576 | void security_inet_conn_established(struct sock *sk, | 2710 | void security_inet_conn_established(struct sock *sk, |
| 2577 | struct sk_buff *skb); | 2711 | struct sk_buff *skb); |
| 2712 | int security_tun_dev_create(void); | ||
| 2713 | void security_tun_dev_post_create(struct sock *sk); | ||
| 2714 | int security_tun_dev_attach(struct sock *sk); | ||
| 2578 | 2715 | ||
| 2579 | #else /* CONFIG_SECURITY_NETWORK */ | 2716 | #else /* CONFIG_SECURITY_NETWORK */ |
| 2580 | static inline int security_unix_stream_connect(struct socket *sock, | 2717 | static inline int security_unix_stream_connect(struct socket *sock, |
| @@ -2725,6 +2862,20 @@ static inline void security_inet_conn_established(struct sock *sk, | |||
| 2725 | struct sk_buff *skb) | 2862 | struct sk_buff *skb) |
| 2726 | { | 2863 | { |
| 2727 | } | 2864 | } |
| 2865 | |||
| 2866 | static inline int security_tun_dev_create(void) | ||
| 2867 | { | ||
| 2868 | return 0; | ||
| 2869 | } | ||
| 2870 | |||
| 2871 | static inline void security_tun_dev_post_create(struct sock *sk) | ||
| 2872 | { | ||
| 2873 | } | ||
| 2874 | |||
| 2875 | static inline int security_tun_dev_attach(struct sock *sk) | ||
| 2876 | { | ||
| 2877 | return 0; | ||
| 2878 | } | ||
| 2728 | #endif /* CONFIG_SECURITY_NETWORK */ | 2879 | #endif /* CONFIG_SECURITY_NETWORK */ |
| 2729 | 2880 | ||
| 2730 | #ifdef CONFIG_SECURITY_NETWORK_XFRM | 2881 | #ifdef CONFIG_SECURITY_NETWORK_XFRM |
| @@ -2822,6 +2973,10 @@ int security_path_link(struct dentry *old_dentry, struct path *new_dir, | |||
| 2822 | struct dentry *new_dentry); | 2973 | struct dentry *new_dentry); |
| 2823 | int security_path_rename(struct path *old_dir, struct dentry *old_dentry, | 2974 | int security_path_rename(struct path *old_dir, struct dentry *old_dentry, |
| 2824 | struct path *new_dir, struct dentry *new_dentry); | 2975 | struct path *new_dir, struct dentry *new_dentry); |
| 2976 | int security_path_chmod(struct dentry *dentry, struct vfsmount *mnt, | ||
| 2977 | mode_t mode); | ||
| 2978 | int security_path_chown(struct path *path, uid_t uid, gid_t gid); | ||
| 2979 | int security_path_chroot(struct path *path); | ||
| 2825 | #else /* CONFIG_SECURITY_PATH */ | 2980 | #else /* CONFIG_SECURITY_PATH */ |
| 2826 | static inline int security_path_unlink(struct path *dir, struct dentry *dentry) | 2981 | static inline int security_path_unlink(struct path *dir, struct dentry *dentry) |
| 2827 | { | 2982 | { |
| @@ -2871,6 +3026,23 @@ static inline int security_path_rename(struct path *old_dir, | |||
| 2871 | { | 3026 | { |
| 2872 | return 0; | 3027 | return 0; |
| 2873 | } | 3028 | } |
| 3029 | |||
| 3030 | static inline int security_path_chmod(struct dentry *dentry, | ||
| 3031 | struct vfsmount *mnt, | ||
| 3032 | mode_t mode) | ||
| 3033 | { | ||
| 3034 | return 0; | ||
| 3035 | } | ||
| 3036 | |||
| 3037 | static inline int security_path_chown(struct path *path, uid_t uid, gid_t gid) | ||
| 3038 | { | ||
| 3039 | return 0; | ||
| 3040 | } | ||
| 3041 | |||
| 3042 | static inline int security_path_chroot(struct path *path) | ||
| 3043 | { | ||
| 3044 | return 0; | ||
| 3045 | } | ||
| 2874 | #endif /* CONFIG_SECURITY_PATH */ | 3046 | #endif /* CONFIG_SECURITY_PATH */ |
| 2875 | 3047 | ||
| 2876 | #ifdef CONFIG_KEYS | 3048 | #ifdef CONFIG_KEYS |
| @@ -2881,6 +3053,9 @@ void security_key_free(struct key *key); | |||
| 2881 | int security_key_permission(key_ref_t key_ref, | 3053 | int security_key_permission(key_ref_t key_ref, |
| 2882 | const struct cred *cred, key_perm_t perm); | 3054 | const struct cred *cred, key_perm_t perm); |
| 2883 | int security_key_getsecurity(struct key *key, char **_buffer); | 3055 | int security_key_getsecurity(struct key *key, char **_buffer); |
| 3056 | int security_key_session_to_parent(const struct cred *cred, | ||
| 3057 | const struct cred *parent_cred, | ||
| 3058 | struct key *key); | ||
| 2884 | 3059 | ||
| 2885 | #else | 3060 | #else |
| 2886 | 3061 | ||
| @@ -2908,6 +3083,13 @@ static inline int security_key_getsecurity(struct key *key, char **_buffer) | |||
| 2908 | return 0; | 3083 | return 0; |
| 2909 | } | 3084 | } |
| 2910 | 3085 | ||
| 3086 | static inline int security_key_session_to_parent(const struct cred *cred, | ||
| 3087 | const struct cred *parent_cred, | ||
| 3088 | struct key *key) | ||
| 3089 | { | ||
| 3090 | return 0; | ||
| 3091 | } | ||
| 3092 | |||
| 2911 | #endif | 3093 | #endif |
| 2912 | #endif /* CONFIG_KEYS */ | 3094 | #endif /* CONFIG_KEYS */ |
| 2913 | 3095 | ||
diff --git a/include/linux/selinux.h b/include/linux/selinux.h index 20f965d4b041..82e0f26a1299 100644 --- a/include/linux/selinux.h +++ b/include/linux/selinux.h | |||
| @@ -61,6 +61,11 @@ void selinux_secmark_refcount_inc(void); | |||
| 61 | * existing SECMARK targets has been removed/flushed. | 61 | * existing SECMARK targets has been removed/flushed. |
| 62 | */ | 62 | */ |
| 63 | void selinux_secmark_refcount_dec(void); | 63 | void selinux_secmark_refcount_dec(void); |
| 64 | |||
| 65 | /** | ||
| 66 | * selinux_is_enabled - is SELinux enabled? | ||
| 67 | */ | ||
| 68 | bool selinux_is_enabled(void); | ||
| 64 | #else | 69 | #else |
| 65 | 70 | ||
| 66 | static inline int selinux_string_to_sid(const char *str, u32 *sid) | 71 | static inline int selinux_string_to_sid(const char *str, u32 *sid) |
| @@ -84,6 +89,10 @@ static inline void selinux_secmark_refcount_dec(void) | |||
| 84 | return; | 89 | return; |
| 85 | } | 90 | } |
| 86 | 91 | ||
| 92 | static inline bool selinux_is_enabled(void) | ||
| 93 | { | ||
| 94 | return false; | ||
| 95 | } | ||
| 87 | #endif /* CONFIG_SECURITY_SELINUX */ | 96 | #endif /* CONFIG_SECURITY_SELINUX */ |
| 88 | 97 | ||
| 89 | #endif /* _LINUX_SELINUX_H */ | 98 | #endif /* _LINUX_SELINUX_H */ |
diff --git a/include/linux/seq_file.h b/include/linux/seq_file.h index 0c6a86b79596..8366d8f12e53 100644 --- a/include/linux/seq_file.h +++ b/include/linux/seq_file.h | |||
| @@ -35,6 +35,44 @@ struct seq_operations { | |||
| 35 | 35 | ||
| 36 | #define SEQ_SKIP 1 | 36 | #define SEQ_SKIP 1 |
| 37 | 37 | ||
| 38 | /** | ||
| 39 | * seq_get_buf - get buffer to write arbitrary data to | ||
| 40 | * @m: the seq_file handle | ||
| 41 | * @bufp: the beginning of the buffer is stored here | ||
| 42 | * | ||
| 43 | * Return the number of bytes available in the buffer, or zero if | ||
| 44 | * there's no space. | ||
| 45 | */ | ||
| 46 | static inline size_t seq_get_buf(struct seq_file *m, char **bufp) | ||
| 47 | { | ||
| 48 | BUG_ON(m->count > m->size); | ||
| 49 | if (m->count < m->size) | ||
| 50 | *bufp = m->buf + m->count; | ||
| 51 | else | ||
| 52 | *bufp = NULL; | ||
| 53 | |||
| 54 | return m->size - m->count; | ||
| 55 | } | ||
| 56 | |||
| 57 | /** | ||
| 58 | * seq_commit - commit data to the buffer | ||
| 59 | * @m: the seq_file handle | ||
| 60 | * @num: the number of bytes to commit | ||
| 61 | * | ||
| 62 | * Commit @num bytes of data written to a buffer previously acquired | ||
| 63 | * by seq_buf_get. To signal an error condition, or that the data | ||
| 64 | * didn't fit in the available space, pass a negative @num value. | ||
| 65 | */ | ||
| 66 | static inline void seq_commit(struct seq_file *m, int num) | ||
| 67 | { | ||
| 68 | if (num < 0) { | ||
| 69 | m->count = m->size; | ||
| 70 | } else { | ||
| 71 | BUG_ON(m->count + num > m->size); | ||
| 72 | m->count += num; | ||
| 73 | } | ||
| 74 | } | ||
| 75 | |||
| 38 | char *mangle_path(char *s, char *p, char *esc); | 76 | char *mangle_path(char *s, char *p, char *esc); |
| 39 | int seq_open(struct file *, const struct seq_operations *); | 77 | int seq_open(struct file *, const struct seq_operations *); |
| 40 | ssize_t seq_read(struct file *, char __user *, size_t, loff_t *); | 78 | ssize_t seq_read(struct file *, char __user *, size_t, loff_t *); |
diff --git a/include/linux/serial.h b/include/linux/serial.h index e5bb75a63802..c8613c3ff9d3 100644 --- a/include/linux/serial.h +++ b/include/linux/serial.h | |||
| @@ -122,6 +122,7 @@ struct serial_uart_config { | |||
| 122 | 122 | ||
| 123 | /* Internal flags used only by kernel */ | 123 | /* Internal flags used only by kernel */ |
| 124 | #define ASYNCB_INITIALIZED 31 /* Serial port was initialized */ | 124 | #define ASYNCB_INITIALIZED 31 /* Serial port was initialized */ |
| 125 | #define ASYNCB_SUSPENDED 30 /* Serial port is suspended */ | ||
| 125 | #define ASYNCB_NORMAL_ACTIVE 29 /* Normal device is active */ | 126 | #define ASYNCB_NORMAL_ACTIVE 29 /* Normal device is active */ |
| 126 | #define ASYNCB_BOOT_AUTOCONF 28 /* Autoconfigure port on bootup */ | 127 | #define ASYNCB_BOOT_AUTOCONF 28 /* Autoconfigure port on bootup */ |
| 127 | #define ASYNCB_CLOSING 27 /* Serial port is closing */ | 128 | #define ASYNCB_CLOSING 27 /* Serial port is closing */ |
| @@ -133,6 +134,7 @@ struct serial_uart_config { | |||
| 133 | #define ASYNCB_FIRST_KERNEL 22 | 134 | #define ASYNCB_FIRST_KERNEL 22 |
| 134 | 135 | ||
| 135 | #define ASYNC_HUP_NOTIFY (1U << ASYNCB_HUP_NOTIFY) | 136 | #define ASYNC_HUP_NOTIFY (1U << ASYNCB_HUP_NOTIFY) |
| 137 | #define ASYNC_SUSPENDED (1U << ASYNCB_SUSPENDED) | ||
| 136 | #define ASYNC_FOURPORT (1U << ASYNCB_FOURPORT) | 138 | #define ASYNC_FOURPORT (1U << ASYNCB_FOURPORT) |
| 137 | #define ASYNC_SAK (1U << ASYNCB_SAK) | 139 | #define ASYNC_SAK (1U << ASYNCB_SAK) |
| 138 | #define ASYNC_SPLIT_TERMIOS (1U << ASYNCB_SPLIT_TERMIOS) | 140 | #define ASYNC_SPLIT_TERMIOS (1U << ASYNCB_SPLIT_TERMIOS) |
diff --git a/include/linux/serial_8250.h b/include/linux/serial_8250.h index d4d2a78ad43e..fb46aba11fb5 100644 --- a/include/linux/serial_8250.h +++ b/include/linux/serial_8250.h | |||
| @@ -22,6 +22,7 @@ struct plat_serial8250_port { | |||
| 22 | void __iomem *membase; /* ioremap cookie or NULL */ | 22 | void __iomem *membase; /* ioremap cookie or NULL */ |
| 23 | resource_size_t mapbase; /* resource base */ | 23 | resource_size_t mapbase; /* resource base */ |
| 24 | unsigned int irq; /* interrupt number */ | 24 | unsigned int irq; /* interrupt number */ |
| 25 | unsigned long irqflags; /* request_irq flags */ | ||
| 25 | unsigned int uartclk; /* UART clock rate */ | 26 | unsigned int uartclk; /* UART clock rate */ |
| 26 | void *private_data; | 27 | void *private_data; |
| 27 | unsigned char regshift; /* register shift */ | 28 | unsigned char regshift; /* register shift */ |
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index 23d2fb051f97..8c3dd36fe91a 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h | |||
| @@ -20,6 +20,8 @@ | |||
| 20 | #ifndef LINUX_SERIAL_CORE_H | 20 | #ifndef LINUX_SERIAL_CORE_H |
| 21 | #define LINUX_SERIAL_CORE_H | 21 | #define LINUX_SERIAL_CORE_H |
| 22 | 22 | ||
| 23 | #include <linux/serial.h> | ||
| 24 | |||
| 23 | /* | 25 | /* |
| 24 | * The type definitions. These are from Ted Ts'o's serial.h | 26 | * The type definitions. These are from Ted Ts'o's serial.h |
| 25 | */ | 27 | */ |
| @@ -174,6 +176,12 @@ | |||
| 174 | /* Qualcomm MSM SoCs */ | 176 | /* Qualcomm MSM SoCs */ |
| 175 | #define PORT_MSM 88 | 177 | #define PORT_MSM 88 |
| 176 | 178 | ||
| 179 | /* BCM63xx family SoCs */ | ||
| 180 | #define PORT_BCM63XX 89 | ||
| 181 | |||
| 182 | /* Aeroflex Gaisler GRLIB APBUART */ | ||
| 183 | #define PORT_APBUART 90 | ||
| 184 | |||
| 177 | #ifdef __KERNEL__ | 185 | #ifdef __KERNEL__ |
| 178 | 186 | ||
| 179 | #include <linux/compiler.h> | 187 | #include <linux/compiler.h> |
| @@ -186,7 +194,6 @@ | |||
| 186 | #include <linux/sysrq.h> | 194 | #include <linux/sysrq.h> |
| 187 | 195 | ||
| 188 | struct uart_port; | 196 | struct uart_port; |
| 189 | struct uart_info; | ||
| 190 | struct serial_struct; | 197 | struct serial_struct; |
| 191 | struct device; | 198 | struct device; |
| 192 | 199 | ||
| @@ -265,6 +272,7 @@ struct uart_port { | |||
| 265 | unsigned int (*serial_in)(struct uart_port *, int); | 272 | unsigned int (*serial_in)(struct uart_port *, int); |
| 266 | void (*serial_out)(struct uart_port *, int, int); | 273 | void (*serial_out)(struct uart_port *, int, int); |
| 267 | unsigned int irq; /* irq number */ | 274 | unsigned int irq; /* irq number */ |
| 275 | unsigned long irqflags; /* irq flags */ | ||
| 268 | unsigned int uartclk; /* base uart clock */ | 276 | unsigned int uartclk; /* base uart clock */ |
| 269 | unsigned int fifosize; /* tx fifo size */ | 277 | unsigned int fifosize; /* tx fifo size */ |
| 270 | unsigned char x_char; /* xon/xoff char */ | 278 | unsigned char x_char; /* xon/xoff char */ |
| @@ -283,7 +291,7 @@ struct uart_port { | |||
| 283 | 291 | ||
| 284 | unsigned int read_status_mask; /* driver specific */ | 292 | unsigned int read_status_mask; /* driver specific */ |
| 285 | unsigned int ignore_status_mask; /* driver specific */ | 293 | unsigned int ignore_status_mask; /* driver specific */ |
| 286 | struct uart_info *info; /* pointer to parent info */ | 294 | struct uart_state *state; /* pointer to parent state */ |
| 287 | struct uart_icount icount; /* statistics */ | 295 | struct uart_icount icount; /* statistics */ |
| 288 | 296 | ||
| 289 | struct console *cons; /* struct console, if any */ | 297 | struct console *cons; /* struct console, if any */ |
| @@ -335,52 +343,16 @@ struct uart_port { | |||
| 335 | }; | 343 | }; |
| 336 | 344 | ||
| 337 | /* | 345 | /* |
| 338 | * This is the state information which is only valid when the port | ||
| 339 | * is open; it may be cleared the core driver once the device has | ||
| 340 | * been closed. Either the low level driver or the core can modify | ||
| 341 | * stuff here. | ||
| 342 | */ | ||
| 343 | typedef unsigned int __bitwise__ uif_t; | ||
| 344 | |||
| 345 | struct uart_info { | ||
| 346 | struct tty_port port; | ||
| 347 | struct circ_buf xmit; | ||
| 348 | uif_t flags; | ||
| 349 | |||
| 350 | /* | ||
| 351 | * Definitions for info->flags. These are _private_ to serial_core, and | ||
| 352 | * are specific to this structure. They may be queried by low level drivers. | ||
| 353 | * | ||
| 354 | * FIXME: use the ASY_ definitions | ||
| 355 | */ | ||
| 356 | #define UIF_CHECK_CD ((__force uif_t) (1 << 25)) | ||
| 357 | #define UIF_CTS_FLOW ((__force uif_t) (1 << 26)) | ||
| 358 | #define UIF_NORMAL_ACTIVE ((__force uif_t) (1 << 29)) | ||
| 359 | #define UIF_INITIALIZED ((__force uif_t) (1 << 31)) | ||
| 360 | #define UIF_SUSPENDED ((__force uif_t) (1 << 30)) | ||
| 361 | |||
| 362 | struct tasklet_struct tlet; | ||
| 363 | wait_queue_head_t delta_msr_wait; | ||
| 364 | }; | ||
| 365 | |||
| 366 | /* | ||
| 367 | * This is the state information which is persistent across opens. | 346 | * This is the state information which is persistent across opens. |
| 368 | * The low level driver must not to touch any elements contained | ||
| 369 | * within. | ||
| 370 | */ | 347 | */ |
| 371 | struct uart_state { | 348 | struct uart_state { |
| 372 | unsigned int close_delay; /* msec */ | 349 | struct tty_port port; |
| 373 | unsigned int closing_wait; /* msec */ | ||
| 374 | |||
| 375 | #define USF_CLOSING_WAIT_INF (0) | ||
| 376 | #define USF_CLOSING_WAIT_NONE (~0U) | ||
| 377 | 350 | ||
| 378 | int count; | ||
| 379 | int pm_state; | 351 | int pm_state; |
| 380 | struct uart_info info; | 352 | struct circ_buf xmit; |
| 381 | struct uart_port *port; | ||
| 382 | 353 | ||
| 383 | struct mutex mutex; | 354 | struct tasklet_struct tlet; |
| 355 | struct uart_port *uart_port; | ||
| 384 | }; | 356 | }; |
| 385 | 357 | ||
| 386 | #define UART_XMIT_SIZE PAGE_SIZE | 358 | #define UART_XMIT_SIZE PAGE_SIZE |
| @@ -461,7 +433,7 @@ int uart_resume_port(struct uart_driver *reg, struct uart_port *port); | |||
| 461 | 433 | ||
| 462 | static inline int uart_tx_stopped(struct uart_port *port) | 434 | static inline int uart_tx_stopped(struct uart_port *port) |
| 463 | { | 435 | { |
| 464 | struct tty_struct *tty = port->info->port.tty; | 436 | struct tty_struct *tty = port->state->port.tty; |
| 465 | if(tty->stopped || tty->hw_stopped) | 437 | if(tty->stopped || tty->hw_stopped) |
| 466 | return 1; | 438 | return 1; |
| 467 | return 0; | 439 | return 0; |
| @@ -476,7 +448,7 @@ uart_handle_sysrq_char(struct uart_port *port, unsigned int ch) | |||
| 476 | #ifdef SUPPORT_SYSRQ | 448 | #ifdef SUPPORT_SYSRQ |
| 477 | if (port->sysrq) { | 449 | if (port->sysrq) { |
| 478 | if (ch && time_before(jiffies, port->sysrq)) { | 450 | if (ch && time_before(jiffies, port->sysrq)) { |
| 479 | handle_sysrq(ch, port->info->port.tty); | 451 | handle_sysrq(ch, port->state->port.tty); |
| 480 | port->sysrq = 0; | 452 | port->sysrq = 0; |
| 481 | return 1; | 453 | return 1; |
| 482 | } | 454 | } |
| @@ -494,7 +466,7 @@ uart_handle_sysrq_char(struct uart_port *port, unsigned int ch) | |||
| 494 | */ | 466 | */ |
| 495 | static inline int uart_handle_break(struct uart_port *port) | 467 | static inline int uart_handle_break(struct uart_port *port) |
| 496 | { | 468 | { |
| 497 | struct uart_info *info = port->info; | 469 | struct uart_state *state = port->state; |
| 498 | #ifdef SUPPORT_SYSRQ | 470 | #ifdef SUPPORT_SYSRQ |
| 499 | if (port->cons && port->cons->index == port->line) { | 471 | if (port->cons && port->cons->index == port->line) { |
| 500 | if (!port->sysrq) { | 472 | if (!port->sysrq) { |
| @@ -505,59 +477,60 @@ static inline int uart_handle_break(struct uart_port *port) | |||
| 505 | } | 477 | } |
| 506 | #endif | 478 | #endif |
| 507 | if (port->flags & UPF_SAK) | 479 | if (port->flags & UPF_SAK) |
| 508 | do_SAK(info->port.tty); | 480 | do_SAK(state->port.tty); |
| 509 | return 0; | 481 | return 0; |
| 510 | } | 482 | } |
| 511 | 483 | ||
| 512 | /** | 484 | /** |
| 513 | * uart_handle_dcd_change - handle a change of carrier detect state | 485 | * uart_handle_dcd_change - handle a change of carrier detect state |
| 514 | * @port: uart_port structure for the open port | 486 | * @uport: uart_port structure for the open port |
| 515 | * @status: new carrier detect status, nonzero if active | 487 | * @status: new carrier detect status, nonzero if active |
| 516 | */ | 488 | */ |
| 517 | static inline void | 489 | static inline void |
| 518 | uart_handle_dcd_change(struct uart_port *port, unsigned int status) | 490 | uart_handle_dcd_change(struct uart_port *uport, unsigned int status) |
| 519 | { | 491 | { |
| 520 | struct uart_info *info = port->info; | 492 | struct uart_state *state = uport->state; |
| 493 | struct tty_port *port = &state->port; | ||
| 521 | 494 | ||
| 522 | port->icount.dcd++; | 495 | uport->icount.dcd++; |
| 523 | 496 | ||
| 524 | #ifdef CONFIG_HARD_PPS | 497 | #ifdef CONFIG_HARD_PPS |
| 525 | if ((port->flags & UPF_HARDPPS_CD) && status) | 498 | if ((uport->flags & UPF_HARDPPS_CD) && status) |
| 526 | hardpps(); | 499 | hardpps(); |
| 527 | #endif | 500 | #endif |
| 528 | 501 | ||
| 529 | if (info->flags & UIF_CHECK_CD) { | 502 | if (port->flags & ASYNC_CHECK_CD) { |
| 530 | if (status) | 503 | if (status) |
| 531 | wake_up_interruptible(&info->port.open_wait); | 504 | wake_up_interruptible(&port->open_wait); |
| 532 | else if (info->port.tty) | 505 | else if (port->tty) |
| 533 | tty_hangup(info->port.tty); | 506 | tty_hangup(port->tty); |
| 534 | } | 507 | } |
| 535 | } | 508 | } |
| 536 | 509 | ||
| 537 | /** | 510 | /** |
| 538 | * uart_handle_cts_change - handle a change of clear-to-send state | 511 | * uart_handle_cts_change - handle a change of clear-to-send state |
| 539 | * @port: uart_port structure for the open port | 512 | * @uport: uart_port structure for the open port |
| 540 | * @status: new clear to send status, nonzero if active | 513 | * @status: new clear to send status, nonzero if active |
| 541 | */ | 514 | */ |
| 542 | static inline void | 515 | static inline void |
| 543 | uart_handle_cts_change(struct uart_port *port, unsigned int status) | 516 | uart_handle_cts_change(struct uart_port *uport, unsigned int status) |
| 544 | { | 517 | { |
| 545 | struct uart_info *info = port->info; | 518 | struct tty_port *port = &uport->state->port; |
| 546 | struct tty_struct *tty = info->port.tty; | 519 | struct tty_struct *tty = port->tty; |
| 547 | 520 | ||
| 548 | port->icount.cts++; | 521 | uport->icount.cts++; |
| 549 | 522 | ||
| 550 | if (info->flags & UIF_CTS_FLOW) { | 523 | if (port->flags & ASYNC_CTS_FLOW) { |
| 551 | if (tty->hw_stopped) { | 524 | if (tty->hw_stopped) { |
| 552 | if (status) { | 525 | if (status) { |
| 553 | tty->hw_stopped = 0; | 526 | tty->hw_stopped = 0; |
| 554 | port->ops->start_tx(port); | 527 | uport->ops->start_tx(uport); |
| 555 | uart_write_wakeup(port); | 528 | uart_write_wakeup(uport); |
| 556 | } | 529 | } |
| 557 | } else { | 530 | } else { |
| 558 | if (!status) { | 531 | if (!status) { |
| 559 | tty->hw_stopped = 1; | 532 | tty->hw_stopped = 1; |
| 560 | port->ops->stop_tx(port); | 533 | uport->ops->stop_tx(uport); |
| 561 | } | 534 | } |
| 562 | } | 535 | } |
| 563 | } | 536 | } |
| @@ -569,7 +542,7 @@ static inline void | |||
| 569 | uart_insert_char(struct uart_port *port, unsigned int status, | 542 | uart_insert_char(struct uart_port *port, unsigned int status, |
| 570 | unsigned int overrun, unsigned int ch, unsigned int flag) | 543 | unsigned int overrun, unsigned int ch, unsigned int flag) |
| 571 | { | 544 | { |
| 572 | struct tty_struct *tty = port->info->port.tty; | 545 | struct tty_struct *tty = port->state->port.tty; |
| 573 | 546 | ||
| 574 | if ((status & port->ignore_status_mask & ~overrun) == 0) | 547 | if ((status & port->ignore_status_mask & ~overrun) == 0) |
| 575 | tty_insert_flip_char(tty, ch, flag); | 548 | tty_insert_flip_char(tty, ch, flag); |
diff --git a/include/linux/serio.h b/include/linux/serio.h index 126d24c9eaa8..a640bc2afe76 100644 --- a/include/linux/serio.h +++ b/include/linux/serio.h | |||
| @@ -31,8 +31,6 @@ struct serio { | |||
| 31 | 31 | ||
| 32 | bool manual_bind; | 32 | bool manual_bind; |
| 33 | bool registered; /* port has been fully registered with driver core */ | 33 | bool registered; /* port has been fully registered with driver core */ |
| 34 | bool suspended; /* port is suspended */ | ||
| 35 | |||
| 36 | 34 | ||
| 37 | struct serio_device_id id; | 35 | struct serio_device_id id; |
| 38 | 36 | ||
diff --git a/include/linux/sfi.h b/include/linux/sfi.h new file mode 100644 index 000000000000..9a6f7607174e --- /dev/null +++ b/include/linux/sfi.h | |||
| @@ -0,0 +1,206 @@ | |||
| 1 | /* sfi.h Simple Firmware Interface */ | ||
| 2 | |||
| 3 | /* | ||
| 4 | |||
| 5 | This file is provided under a dual BSD/GPLv2 license. When using or | ||
| 6 | redistributing this file, you may do so under either license. | ||
| 7 | |||
| 8 | GPL LICENSE SUMMARY | ||
| 9 | |||
| 10 | Copyright(c) 2009 Intel Corporation. All rights reserved. | ||
| 11 | |||
| 12 | This program is free software; you can redistribute it and/or modify | ||
| 13 | it under the terms of version 2 of the GNU General Public License as | ||
| 14 | published by the Free Software Foundation. | ||
| 15 | |||
| 16 | This program is distributed in the hope that it will be useful, but | ||
| 17 | WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 18 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
| 19 | General Public License for more details. | ||
| 20 | |||
| 21 | You should have received a copy of the GNU General Public License | ||
| 22 | along with this program; if not, write to the Free Software | ||
| 23 | Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 24 | The full GNU General Public License is included in this distribution | ||
| 25 | in the file called LICENSE.GPL. | ||
| 26 | |||
| 27 | BSD LICENSE | ||
| 28 | |||
| 29 | Copyright(c) 2009 Intel Corporation. All rights reserved. | ||
| 30 | |||
| 31 | Redistribution and use in source and binary forms, with or without | ||
| 32 | modification, are permitted provided that the following conditions | ||
| 33 | are met: | ||
| 34 | |||
| 35 | * Redistributions of source code must retain the above copyright | ||
| 36 | notice, this list of conditions and the following disclaimer. | ||
| 37 | * Redistributions in binary form must reproduce the above copyright | ||
| 38 | notice, this list of conditions and the following disclaimer in | ||
| 39 | the documentation and/or other materials provided with the | ||
| 40 | distribution. | ||
| 41 | * Neither the name of Intel Corporation nor the names of its | ||
| 42 | contributors may be used to endorse or promote products derived | ||
| 43 | from this software without specific prior written permission. | ||
| 44 | |||
| 45 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
| 46 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
| 47 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
| 48 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||
| 49 | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
| 50 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||
| 51 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||
| 52 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||
| 53 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
| 54 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
| 55 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| 56 | |||
| 57 | */ | ||
| 58 | |||
| 59 | #ifndef _LINUX_SFI_H | ||
| 60 | #define _LINUX_SFI_H | ||
| 61 | |||
| 62 | /* Table signatures reserved by the SFI specification */ | ||
| 63 | #define SFI_SIG_SYST "SYST" | ||
| 64 | #define SFI_SIG_FREQ "FREQ" | ||
| 65 | #define SFI_SIG_IDLE "IDLE" | ||
| 66 | #define SFI_SIG_CPUS "CPUS" | ||
| 67 | #define SFI_SIG_MTMR "MTMR" | ||
| 68 | #define SFI_SIG_MRTC "MRTC" | ||
| 69 | #define SFI_SIG_MMAP "MMAP" | ||
| 70 | #define SFI_SIG_APIC "APIC" | ||
| 71 | #define SFI_SIG_XSDT "XSDT" | ||
| 72 | #define SFI_SIG_WAKE "WAKE" | ||
| 73 | #define SFI_SIG_SPIB "SPIB" | ||
| 74 | #define SFI_SIG_I2CB "I2CB" | ||
| 75 | #define SFI_SIG_GPEM "GPEM" | ||
| 76 | |||
| 77 | #define SFI_SIGNATURE_SIZE 4 | ||
| 78 | #define SFI_OEM_ID_SIZE 6 | ||
| 79 | #define SFI_OEM_TABLE_ID_SIZE 8 | ||
| 80 | |||
| 81 | #define SFI_SYST_SEARCH_BEGIN 0x000E0000 | ||
| 82 | #define SFI_SYST_SEARCH_END 0x000FFFFF | ||
| 83 | |||
| 84 | #define SFI_GET_NUM_ENTRIES(ptable, entry_type) \ | ||
| 85 | ((ptable->header.len - sizeof(struct sfi_table_header)) / \ | ||
| 86 | (sizeof(entry_type))) | ||
| 87 | /* | ||
| 88 | * Table structures must be byte-packed to match the SFI specification, | ||
| 89 | * as they are provided by the BIOS. | ||
| 90 | */ | ||
| 91 | struct sfi_table_header { | ||
| 92 | char sig[SFI_SIGNATURE_SIZE]; | ||
| 93 | u32 len; | ||
| 94 | u8 rev; | ||
| 95 | u8 csum; | ||
| 96 | char oem_id[SFI_OEM_ID_SIZE]; | ||
| 97 | char oem_table_id[SFI_OEM_TABLE_ID_SIZE]; | ||
| 98 | } __packed; | ||
| 99 | |||
| 100 | struct sfi_table_simple { | ||
| 101 | struct sfi_table_header header; | ||
| 102 | u64 pentry[1]; | ||
| 103 | } __packed; | ||
| 104 | |||
| 105 | /* Comply with UEFI spec 2.1 */ | ||
| 106 | struct sfi_mem_entry { | ||
| 107 | u32 type; | ||
| 108 | u64 phys_start; | ||
| 109 | u64 virt_start; | ||
| 110 | u64 pages; | ||
| 111 | u64 attrib; | ||
| 112 | } __packed; | ||
| 113 | |||
| 114 | struct sfi_cpu_table_entry { | ||
| 115 | u32 apic_id; | ||
| 116 | } __packed; | ||
| 117 | |||
| 118 | struct sfi_cstate_table_entry { | ||
| 119 | u32 hint; /* MWAIT hint */ | ||
| 120 | u32 latency; /* latency in ms */ | ||
| 121 | } __packed; | ||
| 122 | |||
| 123 | struct sfi_apic_table_entry { | ||
| 124 | u64 phys_addr; /* phy base addr for APIC reg */ | ||
| 125 | } __packed; | ||
| 126 | |||
| 127 | struct sfi_freq_table_entry { | ||
| 128 | u32 freq_mhz; /* in MHZ */ | ||
| 129 | u32 latency; /* transition latency in ms */ | ||
| 130 | u32 ctrl_val; /* value to write to PERF_CTL */ | ||
| 131 | } __packed; | ||
| 132 | |||
| 133 | struct sfi_wake_table_entry { | ||
| 134 | u64 phys_addr; /* pointer to where the wake vector locates */ | ||
| 135 | } __packed; | ||
| 136 | |||
| 137 | struct sfi_timer_table_entry { | ||
| 138 | u64 phys_addr; /* phy base addr for the timer */ | ||
| 139 | u32 freq_hz; /* in HZ */ | ||
| 140 | u32 irq; | ||
| 141 | } __packed; | ||
| 142 | |||
| 143 | struct sfi_rtc_table_entry { | ||
| 144 | u64 phys_addr; /* phy base addr for the RTC */ | ||
| 145 | u32 irq; | ||
| 146 | } __packed; | ||
| 147 | |||
| 148 | struct sfi_spi_table_entry { | ||
| 149 | u16 host_num; /* attached to host 0, 1...*/ | ||
| 150 | u16 cs; /* chip select */ | ||
| 151 | u16 irq_info; | ||
| 152 | char name[16]; | ||
| 153 | u8 dev_info[10]; | ||
| 154 | } __packed; | ||
| 155 | |||
| 156 | struct sfi_i2c_table_entry { | ||
| 157 | u16 host_num; | ||
| 158 | u16 addr; /* slave addr */ | ||
| 159 | u16 irq_info; | ||
| 160 | char name[16]; | ||
| 161 | u8 dev_info[10]; | ||
| 162 | } __packed; | ||
| 163 | |||
| 164 | struct sfi_gpe_table_entry { | ||
| 165 | u16 logical_id; /* logical id */ | ||
| 166 | u16 phys_id; /* physical GPE id */ | ||
| 167 | } __packed; | ||
| 168 | |||
| 169 | |||
| 170 | typedef int (*sfi_table_handler) (struct sfi_table_header *table); | ||
| 171 | |||
| 172 | #ifdef CONFIG_SFI | ||
| 173 | extern void __init sfi_init(void); | ||
| 174 | extern int __init sfi_platform_init(void); | ||
| 175 | extern void __init sfi_init_late(void); | ||
| 176 | extern int sfi_table_parse(char *signature, char *oem_id, char *oem_table_id, | ||
| 177 | sfi_table_handler handler); | ||
| 178 | |||
| 179 | extern int sfi_disabled; | ||
| 180 | static inline void disable_sfi(void) | ||
| 181 | { | ||
| 182 | sfi_disabled = 1; | ||
| 183 | } | ||
| 184 | |||
| 185 | #else /* !CONFIG_SFI */ | ||
| 186 | |||
| 187 | static inline void sfi_init(void) | ||
| 188 | { | ||
| 189 | } | ||
| 190 | |||
| 191 | static inline void sfi_init_late(void) | ||
| 192 | { | ||
| 193 | } | ||
| 194 | |||
| 195 | #define sfi_disabled 0 | ||
| 196 | |||
| 197 | static inline int sfi_table_parse(char *signature, char *oem_id, | ||
| 198 | char *oem_table_id, | ||
| 199 | sfi_table_handler handler) | ||
| 200 | { | ||
| 201 | return -1; | ||
| 202 | } | ||
| 203 | |||
| 204 | #endif /* !CONFIG_SFI */ | ||
| 205 | |||
| 206 | #endif /*_LINUX_SFI_H*/ | ||
diff --git a/include/linux/sfi_acpi.h b/include/linux/sfi_acpi.h new file mode 100644 index 000000000000..c4a5a8cd4469 --- /dev/null +++ b/include/linux/sfi_acpi.h | |||
| @@ -0,0 +1,93 @@ | |||
| 1 | /* sfi.h Simple Firmware Interface */ | ||
| 2 | |||
| 3 | /* | ||
| 4 | |||
| 5 | This file is provided under a dual BSD/GPLv2 license. When using or | ||
| 6 | redistributing this file, you may do so under either license. | ||
| 7 | |||
| 8 | GPL LICENSE SUMMARY | ||
| 9 | |||
| 10 | Copyright(c) 2009 Intel Corporation. All rights reserved. | ||
| 11 | |||
| 12 | This program is free software; you can redistribute it and/or modify | ||
| 13 | it under the terms of version 2 of the GNU General Public License as | ||
| 14 | published by the Free Software Foundation. | ||
| 15 | |||
| 16 | This program is distributed in the hope that it will be useful, but | ||
| 17 | WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 18 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
| 19 | General Public License for more details. | ||
| 20 | |||
| 21 | You should have received a copy of the GNU General Public License | ||
| 22 | along with this program; if not, write to the Free Software | ||
| 23 | Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 24 | The full GNU General Public License is included in this distribution | ||
| 25 | in the file called LICENSE.GPL. | ||
| 26 | |||
| 27 | BSD LICENSE | ||
| 28 | |||
| 29 | Copyright(c) 2009 Intel Corporation. All rights reserved. | ||
| 30 | |||
| 31 | Redistribution and use in source and binary forms, with or without | ||
| 32 | modification, are permitted provided that the following conditions | ||
| 33 | are met: | ||
| 34 | |||
| 35 | * Redistributions of source code must retain the above copyright | ||
| 36 | notice, this list of conditions and the following disclaimer. | ||
| 37 | * Redistributions in binary form must reproduce the above copyright | ||
| 38 | notice, this list of conditions and the following disclaimer in | ||
| 39 | the documentation and/or other materials provided with the | ||
| 40 | distribution. | ||
| 41 | * Neither the name of Intel Corporation nor the names of its | ||
| 42 | contributors may be used to endorse or promote products derived | ||
| 43 | from this software without specific prior written permission. | ||
| 44 | |||
| 45 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
| 46 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
| 47 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
| 48 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||
| 49 | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
| 50 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||
| 51 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||
| 52 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||
| 53 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
| 54 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
| 55 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| 56 | |||
| 57 | */ | ||
| 58 | |||
| 59 | #ifndef _LINUX_SFI_ACPI_H | ||
| 60 | #define _LINUX_SFI_ACPI_H | ||
| 61 | |||
| 62 | #ifdef CONFIG_SFI | ||
| 63 | #include <acpi/acpi.h> /* struct acpi_table_header */ | ||
| 64 | |||
| 65 | extern int sfi_acpi_table_parse(char *signature, char *oem_id, | ||
| 66 | char *oem_table_id, | ||
| 67 | int (*handler)(struct acpi_table_header *)); | ||
| 68 | |||
| 69 | static inline int acpi_sfi_table_parse(char *signature, | ||
| 70 | int (*handler)(struct acpi_table_header *)) | ||
| 71 | { | ||
| 72 | if (!acpi_table_parse(signature, handler)) | ||
| 73 | return 0; | ||
| 74 | |||
| 75 | return sfi_acpi_table_parse(signature, NULL, NULL, handler); | ||
| 76 | } | ||
| 77 | #else /* !CONFIG_SFI */ | ||
| 78 | |||
| 79 | static inline int sfi_acpi_table_parse(char *signature, char *oem_id, | ||
| 80 | char *oem_table_id, | ||
| 81 | int (*handler)(struct acpi_table_header *)) | ||
| 82 | { | ||
| 83 | return -1; | ||
| 84 | } | ||
| 85 | |||
| 86 | static inline int acpi_sfi_table_parse(char *signature, | ||
| 87 | int (*handler)(struct acpi_table_header *)) | ||
| 88 | { | ||
| 89 | return acpi_table_parse(signature, handler); | ||
| 90 | } | ||
| 91 | #endif /* !CONFIG_SFI */ | ||
| 92 | |||
| 93 | #endif /*_LINUX_SFI_ACPI_H*/ | ||
diff --git a/include/linux/sh_intc.h b/include/linux/sh_intc.h index eb1423a0078d..68e212ff9dde 100644 --- a/include/linux/sh_intc.h +++ b/include/linux/sh_intc.h | |||
| @@ -85,7 +85,6 @@ struct intc_desc symbol __initdata = { \ | |||
| 85 | } | 85 | } |
| 86 | #endif | 86 | #endif |
| 87 | 87 | ||
| 88 | unsigned int intc_evt2irq(unsigned int vector); | ||
| 89 | void __init register_intc_controller(struct intc_desc *desc); | 88 | void __init register_intc_controller(struct intc_desc *desc); |
| 90 | int intc_set_priority(unsigned int irq, unsigned int prio); | 89 | int intc_set_priority(unsigned int irq, unsigned int prio); |
| 91 | 90 | ||
diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h index abff6c9b413c..deee7afd8d66 100644 --- a/include/linux/shmem_fs.h +++ b/include/linux/shmem_fs.h | |||
| @@ -38,8 +38,11 @@ static inline struct shmem_inode_info *SHMEM_I(struct inode *inode) | |||
| 38 | return container_of(inode, struct shmem_inode_info, vfs_inode); | 38 | return container_of(inode, struct shmem_inode_info, vfs_inode); |
| 39 | } | 39 | } |
| 40 | 40 | ||
| 41 | extern int init_tmpfs(void); | ||
| 42 | extern int shmem_fill_super(struct super_block *sb, void *data, int silent); | ||
| 43 | |||
| 41 | #ifdef CONFIG_TMPFS_POSIX_ACL | 44 | #ifdef CONFIG_TMPFS_POSIX_ACL |
| 42 | int shmem_permission(struct inode *, int); | 45 | int shmem_check_acl(struct inode *, int); |
| 43 | int shmem_acl_init(struct inode *, struct inode *); | 46 | int shmem_acl_init(struct inode *, struct inode *); |
| 44 | 47 | ||
| 45 | extern struct xattr_handler shmem_xattr_acl_access_handler; | 48 | extern struct xattr_handler shmem_xattr_acl_access_handler; |
diff --git a/include/linux/signal.h b/include/linux/signal.h index c7552836bd95..ab9272cc270c 100644 --- a/include/linux/signal.h +++ b/include/linux/signal.h | |||
| @@ -233,6 +233,8 @@ static inline int valid_signal(unsigned long sig) | |||
| 233 | } | 233 | } |
| 234 | 234 | ||
| 235 | extern int next_signal(struct sigpending *pending, sigset_t *mask); | 235 | extern int next_signal(struct sigpending *pending, sigset_t *mask); |
| 236 | extern int do_send_sig_info(int sig, struct siginfo *info, | ||
| 237 | struct task_struct *p, bool group); | ||
| 236 | extern int group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p); | 238 | extern int group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p); |
| 237 | extern int __group_send_sig_info(int, struct siginfo *, struct task_struct *); | 239 | extern int __group_send_sig_info(int, struct siginfo *, struct task_struct *); |
| 238 | extern long do_rt_tgsigqueueinfo(pid_t tgid, pid_t pid, int sig, | 240 | extern long do_rt_tgsigqueueinfo(pid_t tgid, pid_t pid, int sig, |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index f2c69a2cca17..ae836fded530 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
| @@ -299,12 +299,11 @@ typedef unsigned char *sk_buff_data_t; | |||
| 299 | * @nfctinfo: Relationship of this skb to the connection | 299 | * @nfctinfo: Relationship of this skb to the connection |
| 300 | * @nfct_reasm: netfilter conntrack re-assembly pointer | 300 | * @nfct_reasm: netfilter conntrack re-assembly pointer |
| 301 | * @nf_bridge: Saved data about a bridged frame - see br_netfilter.c | 301 | * @nf_bridge: Saved data about a bridged frame - see br_netfilter.c |
| 302 | * @iif: ifindex of device we arrived on | 302 | * @skb_iif: ifindex of device we arrived on |
| 303 | * @queue_mapping: Queue mapping for multiqueue devices | 303 | * @queue_mapping: Queue mapping for multiqueue devices |
| 304 | * @tc_index: Traffic control index | 304 | * @tc_index: Traffic control index |
| 305 | * @tc_verd: traffic control verdict | 305 | * @tc_verd: traffic control verdict |
| 306 | * @ndisc_nodetype: router type (from link layer) | 306 | * @ndisc_nodetype: router type (from link layer) |
| 307 | * @do_not_encrypt: set to prevent encryption of this frame | ||
| 308 | * @dma_cookie: a cookie to one of several possible DMA operations | 307 | * @dma_cookie: a cookie to one of several possible DMA operations |
| 309 | * done by skb DMA functions | 308 | * done by skb DMA functions |
| 310 | * @secmark: security marking | 309 | * @secmark: security marking |
| @@ -355,8 +354,8 @@ struct sk_buff { | |||
| 355 | ipvs_property:1, | 354 | ipvs_property:1, |
| 356 | peeked:1, | 355 | peeked:1, |
| 357 | nf_trace:1; | 356 | nf_trace:1; |
| 357 | __be16 protocol:16; | ||
| 358 | kmemcheck_bitfield_end(flags1); | 358 | kmemcheck_bitfield_end(flags1); |
| 359 | __be16 protocol; | ||
| 360 | 359 | ||
| 361 | void (*destructor)(struct sk_buff *skb); | 360 | void (*destructor)(struct sk_buff *skb); |
| 362 | #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) | 361 | #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) |
| @@ -367,8 +366,7 @@ struct sk_buff { | |||
| 367 | struct nf_bridge_info *nf_bridge; | 366 | struct nf_bridge_info *nf_bridge; |
| 368 | #endif | 367 | #endif |
| 369 | 368 | ||
| 370 | int iif; | 369 | int skb_iif; |
| 371 | __u16 queue_mapping; | ||
| 372 | #ifdef CONFIG_NET_SCHED | 370 | #ifdef CONFIG_NET_SCHED |
| 373 | __u16 tc_index; /* traffic control index */ | 371 | __u16 tc_index; /* traffic control index */ |
| 374 | #ifdef CONFIG_NET_CLS_ACT | 372 | #ifdef CONFIG_NET_CLS_ACT |
| @@ -377,15 +375,13 @@ struct sk_buff { | |||
| 377 | #endif | 375 | #endif |
| 378 | 376 | ||
| 379 | kmemcheck_bitfield_begin(flags2); | 377 | kmemcheck_bitfield_begin(flags2); |
| 378 | __u16 queue_mapping:16; | ||
| 380 | #ifdef CONFIG_IPV6_NDISC_NODETYPE | 379 | #ifdef CONFIG_IPV6_NDISC_NODETYPE |
| 381 | __u8 ndisc_nodetype:2; | 380 | __u8 ndisc_nodetype:2; |
| 382 | #endif | 381 | #endif |
| 383 | #if defined(CONFIG_MAC80211) || defined(CONFIG_MAC80211_MODULE) | ||
| 384 | __u8 do_not_encrypt:1; | ||
| 385 | #endif | ||
| 386 | kmemcheck_bitfield_end(flags2); | 382 | kmemcheck_bitfield_end(flags2); |
| 387 | 383 | ||
| 388 | /* 0/13/14 bit hole */ | 384 | /* 0/14 bit hole */ |
| 389 | 385 | ||
| 390 | #ifdef CONFIG_NET_DMA | 386 | #ifdef CONFIG_NET_DMA |
| 391 | dma_cookie_t dma_cookie; | 387 | dma_cookie_t dma_cookie; |
| @@ -393,8 +389,10 @@ struct sk_buff { | |||
| 393 | #ifdef CONFIG_NETWORK_SECMARK | 389 | #ifdef CONFIG_NETWORK_SECMARK |
| 394 | __u32 secmark; | 390 | __u32 secmark; |
| 395 | #endif | 391 | #endif |
| 396 | 392 | union { | |
| 397 | __u32 mark; | 393 | __u32 mark; |
| 394 | __u32 dropcount; | ||
| 395 | }; | ||
| 398 | 396 | ||
| 399 | __u16 vlan_tci; | 397 | __u16 vlan_tci; |
| 400 | 398 | ||
| @@ -418,14 +416,6 @@ struct sk_buff { | |||
| 418 | 416 | ||
| 419 | #include <asm/system.h> | 417 | #include <asm/system.h> |
| 420 | 418 | ||
| 421 | #ifdef CONFIG_HAS_DMA | ||
| 422 | #include <linux/dma-mapping.h> | ||
| 423 | extern int skb_dma_map(struct device *dev, struct sk_buff *skb, | ||
| 424 | enum dma_data_direction dir); | ||
| 425 | extern void skb_dma_unmap(struct device *dev, struct sk_buff *skb, | ||
| 426 | enum dma_data_direction dir); | ||
| 427 | #endif | ||
| 428 | |||
| 429 | static inline struct dst_entry *skb_dst(const struct sk_buff *skb) | 419 | static inline struct dst_entry *skb_dst(const struct sk_buff *skb) |
| 430 | { | 420 | { |
| 431 | return (struct dst_entry *)skb->_skb_dst; | 421 | return (struct dst_entry *)skb->_skb_dst; |
| @@ -493,8 +483,7 @@ extern int skb_append_datato_frags(struct sock *sk, struct sk_buff *skb, | |||
| 493 | int len,int odd, struct sk_buff *skb), | 483 | int len,int odd, struct sk_buff *skb), |
| 494 | void *from, int length); | 484 | void *from, int length); |
| 495 | 485 | ||
| 496 | struct skb_seq_state | 486 | struct skb_seq_state { |
| 497 | { | ||
| 498 | __u32 lower_offset; | 487 | __u32 lower_offset; |
| 499 | __u32 upper_offset; | 488 | __u32 upper_offset; |
| 500 | __u32 frag_idx; | 489 | __u32 frag_idx; |
| @@ -1493,6 +1482,16 @@ static inline struct sk_buff *netdev_alloc_skb(struct net_device *dev, | |||
| 1493 | return __netdev_alloc_skb(dev, length, GFP_ATOMIC); | 1482 | return __netdev_alloc_skb(dev, length, GFP_ATOMIC); |
| 1494 | } | 1483 | } |
| 1495 | 1484 | ||
| 1485 | static inline struct sk_buff *netdev_alloc_skb_ip_align(struct net_device *dev, | ||
| 1486 | unsigned int length) | ||
| 1487 | { | ||
| 1488 | struct sk_buff *skb = netdev_alloc_skb(dev, length + NET_IP_ALIGN); | ||
| 1489 | |||
| 1490 | if (NET_IP_ALIGN && skb) | ||
| 1491 | skb_reserve(skb, NET_IP_ALIGN); | ||
| 1492 | return skb; | ||
| 1493 | } | ||
| 1494 | |||
| 1496 | extern struct page *__netdev_alloc_page(struct net_device *dev, gfp_t gfp_mask); | 1495 | extern struct page *__netdev_alloc_page(struct net_device *dev, gfp_t gfp_mask); |
| 1497 | 1496 | ||
| 1498 | /** | 1497 | /** |
| @@ -1761,6 +1760,8 @@ extern int skb_copy_datagram_const_iovec(const struct sk_buff *from, | |||
| 1761 | int to_offset, | 1760 | int to_offset, |
| 1762 | int size); | 1761 | int size); |
| 1763 | extern void skb_free_datagram(struct sock *sk, struct sk_buff *skb); | 1762 | extern void skb_free_datagram(struct sock *sk, struct sk_buff *skb); |
| 1763 | extern void skb_free_datagram_locked(struct sock *sk, | ||
| 1764 | struct sk_buff *skb); | ||
| 1764 | extern int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, | 1765 | extern int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, |
| 1765 | unsigned int flags); | 1766 | unsigned int flags); |
| 1766 | extern __wsum skb_checksum(const struct sk_buff *skb, int offset, | 1767 | extern __wsum skb_checksum(const struct sk_buff *skb, int offset, |
diff --git a/include/linux/slob_def.h b/include/linux/slob_def.h index bb5368df4be8..0ec00b39d006 100644 --- a/include/linux/slob_def.h +++ b/include/linux/slob_def.h | |||
| @@ -34,9 +34,4 @@ static __always_inline void *__kmalloc(size_t size, gfp_t flags) | |||
| 34 | return kmalloc(size, flags); | 34 | return kmalloc(size, flags); |
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | static inline void kmem_cache_init_late(void) | ||
| 38 | { | ||
| 39 | /* Nothing to do */ | ||
| 40 | } | ||
| 41 | |||
| 42 | #endif /* __LINUX_SLOB_DEF_H */ | 37 | #endif /* __LINUX_SLOB_DEF_H */ |
diff --git a/include/linux/slow-work.h b/include/linux/slow-work.h index b65c8881f07a..13337bf6c3f5 100644 --- a/include/linux/slow-work.h +++ b/include/linux/slow-work.h | |||
| @@ -17,13 +17,20 @@ | |||
| 17 | #ifdef CONFIG_SLOW_WORK | 17 | #ifdef CONFIG_SLOW_WORK |
| 18 | 18 | ||
| 19 | #include <linux/sysctl.h> | 19 | #include <linux/sysctl.h> |
| 20 | #include <linux/timer.h> | ||
| 20 | 21 | ||
| 21 | struct slow_work; | 22 | struct slow_work; |
| 23 | #ifdef CONFIG_SLOW_WORK_DEBUG | ||
| 24 | struct seq_file; | ||
| 25 | #endif | ||
| 22 | 26 | ||
| 23 | /* | 27 | /* |
| 24 | * The operations used to support slow work items | 28 | * The operations used to support slow work items |
| 25 | */ | 29 | */ |
| 26 | struct slow_work_ops { | 30 | struct slow_work_ops { |
| 31 | /* owner */ | ||
| 32 | struct module *owner; | ||
| 33 | |||
| 27 | /* get a ref on a work item | 34 | /* get a ref on a work item |
| 28 | * - return 0 if successful, -ve if not | 35 | * - return 0 if successful, -ve if not |
| 29 | */ | 36 | */ |
| @@ -34,6 +41,11 @@ struct slow_work_ops { | |||
| 34 | 41 | ||
| 35 | /* execute a work item */ | 42 | /* execute a work item */ |
| 36 | void (*execute)(struct slow_work *work); | 43 | void (*execute)(struct slow_work *work); |
| 44 | |||
| 45 | #ifdef CONFIG_SLOW_WORK_DEBUG | ||
| 46 | /* describe a work item for debugfs */ | ||
| 47 | void (*desc)(struct slow_work *work, struct seq_file *m); | ||
| 48 | #endif | ||
| 37 | }; | 49 | }; |
| 38 | 50 | ||
| 39 | /* | 51 | /* |
| @@ -42,13 +54,24 @@ struct slow_work_ops { | |||
| 42 | * queued | 54 | * queued |
| 43 | */ | 55 | */ |
| 44 | struct slow_work { | 56 | struct slow_work { |
| 57 | struct module *owner; /* the owning module */ | ||
| 45 | unsigned long flags; | 58 | unsigned long flags; |
| 46 | #define SLOW_WORK_PENDING 0 /* item pending (further) execution */ | 59 | #define SLOW_WORK_PENDING 0 /* item pending (further) execution */ |
| 47 | #define SLOW_WORK_EXECUTING 1 /* item currently executing */ | 60 | #define SLOW_WORK_EXECUTING 1 /* item currently executing */ |
| 48 | #define SLOW_WORK_ENQ_DEFERRED 2 /* item enqueue deferred */ | 61 | #define SLOW_WORK_ENQ_DEFERRED 2 /* item enqueue deferred */ |
| 49 | #define SLOW_WORK_VERY_SLOW 3 /* item is very slow */ | 62 | #define SLOW_WORK_VERY_SLOW 3 /* item is very slow */ |
| 63 | #define SLOW_WORK_CANCELLING 4 /* item is being cancelled, don't enqueue */ | ||
| 64 | #define SLOW_WORK_DELAYED 5 /* item is struct delayed_slow_work with active timer */ | ||
| 50 | const struct slow_work_ops *ops; /* operations table for this item */ | 65 | const struct slow_work_ops *ops; /* operations table for this item */ |
| 51 | struct list_head link; /* link in queue */ | 66 | struct list_head link; /* link in queue */ |
| 67 | #ifdef CONFIG_SLOW_WORK_DEBUG | ||
| 68 | struct timespec mark; /* jiffies at which queued or exec begun */ | ||
| 69 | #endif | ||
| 70 | }; | ||
| 71 | |||
| 72 | struct delayed_slow_work { | ||
| 73 | struct slow_work work; | ||
| 74 | struct timer_list timer; | ||
| 52 | }; | 75 | }; |
| 53 | 76 | ||
| 54 | /** | 77 | /** |
| @@ -67,6 +90,20 @@ static inline void slow_work_init(struct slow_work *work, | |||
| 67 | } | 90 | } |
| 68 | 91 | ||
| 69 | /** | 92 | /** |
| 93 | * slow_work_init - Initialise a delayed slow work item | ||
| 94 | * @work: The work item to initialise | ||
| 95 | * @ops: The operations to use to handle the slow work item | ||
| 96 | * | ||
| 97 | * Initialise a delayed slow work item. | ||
| 98 | */ | ||
| 99 | static inline void delayed_slow_work_init(struct delayed_slow_work *dwork, | ||
| 100 | const struct slow_work_ops *ops) | ||
| 101 | { | ||
| 102 | init_timer(&dwork->timer); | ||
| 103 | slow_work_init(&dwork->work, ops); | ||
| 104 | } | ||
| 105 | |||
| 106 | /** | ||
| 70 | * vslow_work_init - Initialise a very slow work item | 107 | * vslow_work_init - Initialise a very slow work item |
| 71 | * @work: The work item to initialise | 108 | * @work: The work item to initialise |
| 72 | * @ops: The operations to use to handle the slow work item | 109 | * @ops: The operations to use to handle the slow work item |
| @@ -83,9 +120,40 @@ static inline void vslow_work_init(struct slow_work *work, | |||
| 83 | INIT_LIST_HEAD(&work->link); | 120 | INIT_LIST_HEAD(&work->link); |
| 84 | } | 121 | } |
| 85 | 122 | ||
| 123 | /** | ||
| 124 | * slow_work_is_queued - Determine if a slow work item is on the work queue | ||
| 125 | * work: The work item to test | ||
| 126 | * | ||
| 127 | * Determine if the specified slow-work item is on the work queue. This | ||
| 128 | * returns true if it is actually on the queue. | ||
| 129 | * | ||
| 130 | * If the item is executing and has been marked for requeue when execution | ||
| 131 | * finishes, then false will be returned. | ||
| 132 | * | ||
| 133 | * Anyone wishing to wait for completion of execution can wait on the | ||
| 134 | * SLOW_WORK_EXECUTING bit. | ||
| 135 | */ | ||
| 136 | static inline bool slow_work_is_queued(struct slow_work *work) | ||
| 137 | { | ||
| 138 | unsigned long flags = work->flags; | ||
| 139 | return flags & SLOW_WORK_PENDING && !(flags & SLOW_WORK_EXECUTING); | ||
| 140 | } | ||
| 141 | |||
| 86 | extern int slow_work_enqueue(struct slow_work *work); | 142 | extern int slow_work_enqueue(struct slow_work *work); |
| 87 | extern int slow_work_register_user(void); | 143 | extern void slow_work_cancel(struct slow_work *work); |
| 88 | extern void slow_work_unregister_user(void); | 144 | extern int slow_work_register_user(struct module *owner); |
| 145 | extern void slow_work_unregister_user(struct module *owner); | ||
| 146 | |||
| 147 | extern int delayed_slow_work_enqueue(struct delayed_slow_work *dwork, | ||
| 148 | unsigned long delay); | ||
| 149 | |||
| 150 | static inline void delayed_slow_work_cancel(struct delayed_slow_work *dwork) | ||
| 151 | { | ||
| 152 | slow_work_cancel(&dwork->work); | ||
| 153 | } | ||
| 154 | |||
| 155 | extern bool slow_work_sleep_till_thread_needed(struct slow_work *work, | ||
| 156 | signed long *_timeout); | ||
| 89 | 157 | ||
| 90 | #ifdef CONFIG_SYSCTL | 158 | #ifdef CONFIG_SYSCTL |
| 91 | extern ctl_table slow_work_sysctls[]; | 159 | extern ctl_table slow_work_sysctls[]; |
diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h index c1c862b1d01a..5ad70a60fd74 100644 --- a/include/linux/slub_def.h +++ b/include/linux/slub_def.h | |||
| @@ -153,12 +153,10 @@ static __always_inline int kmalloc_index(size_t size) | |||
| 153 | if (size <= KMALLOC_MIN_SIZE) | 153 | if (size <= KMALLOC_MIN_SIZE) |
| 154 | return KMALLOC_SHIFT_LOW; | 154 | return KMALLOC_SHIFT_LOW; |
| 155 | 155 | ||
| 156 | #if KMALLOC_MIN_SIZE <= 64 | 156 | if (KMALLOC_MIN_SIZE <= 32 && size > 64 && size <= 96) |
| 157 | if (size > 64 && size <= 96) | ||
| 158 | return 1; | 157 | return 1; |
| 159 | if (size > 128 && size <= 192) | 158 | if (KMALLOC_MIN_SIZE <= 64 && size > 128 && size <= 192) |
| 160 | return 2; | 159 | return 2; |
| 161 | #endif | ||
| 162 | if (size <= 8) return 3; | 160 | if (size <= 8) return 3; |
| 163 | if (size <= 16) return 4; | 161 | if (size <= 16) return 4; |
| 164 | if (size <= 32) return 5; | 162 | if (size <= 32) return 5; |
| @@ -304,6 +302,4 @@ static __always_inline void *kmalloc_node(size_t size, gfp_t flags, int node) | |||
| 304 | } | 302 | } |
| 305 | #endif | 303 | #endif |
| 306 | 304 | ||
| 307 | void __init kmem_cache_init_late(void); | ||
| 308 | |||
| 309 | #endif /* _LINUX_SLUB_DEF_H */ | 305 | #endif /* _LINUX_SLUB_DEF_H */ |
diff --git a/include/linux/smp.h b/include/linux/smp.h index 9e3d8af09207..7a0570e6a596 100644 --- a/include/linux/smp.h +++ b/include/linux/smp.h | |||
| @@ -73,18 +73,12 @@ int smp_call_function(void(*func)(void *info), void *info, int wait); | |||
| 73 | void smp_call_function_many(const struct cpumask *mask, | 73 | void smp_call_function_many(const struct cpumask *mask, |
| 74 | void (*func)(void *info), void *info, bool wait); | 74 | void (*func)(void *info), void *info, bool wait); |
| 75 | 75 | ||
| 76 | /* Deprecated: Use smp_call_function_many which takes a pointer to the mask. */ | ||
| 77 | static inline int | ||
| 78 | smp_call_function_mask(cpumask_t mask, void(*func)(void *info), void *info, | ||
| 79 | int wait) | ||
| 80 | { | ||
| 81 | smp_call_function_many(&mask, func, info, wait); | ||
| 82 | return 0; | ||
| 83 | } | ||
| 84 | |||
| 85 | void __smp_call_function_single(int cpuid, struct call_single_data *data, | 76 | void __smp_call_function_single(int cpuid, struct call_single_data *data, |
| 86 | int wait); | 77 | int wait); |
| 87 | 78 | ||
| 79 | int smp_call_function_any(const struct cpumask *mask, | ||
| 80 | void (*func)(void *info), void *info, int wait); | ||
| 81 | |||
| 88 | /* | 82 | /* |
| 89 | * Generic and arch helpers | 83 | * Generic and arch helpers |
| 90 | */ | 84 | */ |
| @@ -144,13 +138,17 @@ static inline int up_smp_call_function(void (*func)(void *), void *info) | |||
| 144 | static inline void smp_send_reschedule(int cpu) { } | 138 | static inline void smp_send_reschedule(int cpu) { } |
| 145 | #define num_booting_cpus() 1 | 139 | #define num_booting_cpus() 1 |
| 146 | #define smp_prepare_boot_cpu() do {} while (0) | 140 | #define smp_prepare_boot_cpu() do {} while (0) |
| 147 | #define smp_call_function_mask(mask, func, info, wait) \ | ||
| 148 | (up_smp_call_function(func, info)) | ||
| 149 | #define smp_call_function_many(mask, func, info, wait) \ | 141 | #define smp_call_function_many(mask, func, info, wait) \ |
| 150 | (up_smp_call_function(func, info)) | 142 | (up_smp_call_function(func, info)) |
| 151 | static inline void init_call_single_data(void) | 143 | static inline void init_call_single_data(void) { } |
| 144 | |||
| 145 | static inline int | ||
| 146 | smp_call_function_any(const struct cpumask *mask, void (*func)(void *info), | ||
| 147 | void *info, int wait) | ||
| 152 | { | 148 | { |
| 149 | return smp_call_function_single(0, func, info, wait); | ||
| 153 | } | 150 | } |
| 151 | |||
| 154 | #endif /* !SMP */ | 152 | #endif /* !SMP */ |
| 155 | 153 | ||
| 156 | /* | 154 | /* |
diff --git a/include/linux/smp_lock.h b/include/linux/smp_lock.h index 813be59bf345..2ea1dd1ba21c 100644 --- a/include/linux/smp_lock.h +++ b/include/linux/smp_lock.h | |||
| @@ -24,8 +24,21 @@ static inline int reacquire_kernel_lock(struct task_struct *task) | |||
| 24 | return 0; | 24 | return 0; |
| 25 | } | 25 | } |
| 26 | 26 | ||
| 27 | extern void __lockfunc lock_kernel(void) __acquires(kernel_lock); | 27 | extern void __lockfunc |
| 28 | extern void __lockfunc unlock_kernel(void) __releases(kernel_lock); | 28 | _lock_kernel(const char *func, const char *file, int line) |
| 29 | __acquires(kernel_lock); | ||
| 30 | |||
| 31 | extern void __lockfunc | ||
| 32 | _unlock_kernel(const char *func, const char *file, int line) | ||
| 33 | __releases(kernel_lock); | ||
| 34 | |||
| 35 | #define lock_kernel() do { \ | ||
| 36 | _lock_kernel(__func__, __FILE__, __LINE__); \ | ||
| 37 | } while (0) | ||
| 38 | |||
| 39 | #define unlock_kernel() do { \ | ||
| 40 | _unlock_kernel(__func__, __FILE__, __LINE__); \ | ||
| 41 | } while (0) | ||
| 29 | 42 | ||
| 30 | /* | 43 | /* |
| 31 | * Various legacy drivers don't really need the BKL in a specific | 44 | * Various legacy drivers don't really need the BKL in a specific |
| @@ -41,8 +54,8 @@ static inline void cycle_kernel_lock(void) | |||
| 41 | 54 | ||
| 42 | #else | 55 | #else |
| 43 | 56 | ||
| 44 | #define lock_kernel() do { } while(0) | 57 | #define lock_kernel() |
| 45 | #define unlock_kernel() do { } while(0) | 58 | #define unlock_kernel() |
| 46 | #define release_kernel_lock(task) do { } while(0) | 59 | #define release_kernel_lock(task) do { } while(0) |
| 47 | #define cycle_kernel_lock() do { } while(0) | 60 | #define cycle_kernel_lock() do { } while(0) |
| 48 | #define reacquire_kernel_lock(task) 0 | 61 | #define reacquire_kernel_lock(task) 0 |
diff --git a/include/linux/smsc911x.h b/include/linux/smsc911x.h index 5241e4fb4eca..7144e8aa1e41 100644 --- a/include/linux/smsc911x.h +++ b/include/linux/smsc911x.h | |||
| @@ -30,6 +30,7 @@ struct smsc911x_platform_config { | |||
| 30 | unsigned int irq_type; | 30 | unsigned int irq_type; |
| 31 | unsigned int flags; | 31 | unsigned int flags; |
| 32 | phy_interface_t phy_interface; | 32 | phy_interface_t phy_interface; |
| 33 | unsigned char mac[6]; | ||
| 33 | }; | 34 | }; |
| 34 | 35 | ||
| 35 | /* Constants for platform_device irq polarity configuration */ | 36 | /* Constants for platform_device irq polarity configuration */ |
diff --git a/include/linux/socket.h b/include/linux/socket.h index 3b461dffe244..7b3aae2052a6 100644 --- a/include/linux/socket.h +++ b/include/linux/socket.h | |||
| @@ -16,7 +16,7 @@ struct __kernel_sockaddr_storage { | |||
| 16 | /* _SS_MAXSIZE value minus size of ss_family */ | 16 | /* _SS_MAXSIZE value minus size of ss_family */ |
| 17 | } __attribute__ ((aligned(_K_SS_ALIGNSIZE))); /* force desired alignment */ | 17 | } __attribute__ ((aligned(_K_SS_ALIGNSIZE))); /* force desired alignment */ |
| 18 | 18 | ||
| 19 | #if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) | 19 | #ifdef __KERNEL__ |
| 20 | 20 | ||
| 21 | #include <asm/socket.h> /* arch-dependent defines */ | 21 | #include <asm/socket.h> /* arch-dependent defines */ |
| 22 | #include <linux/sockios.h> /* the SIOCxxx I/O controls */ | 22 | #include <linux/sockios.h> /* the SIOCxxx I/O controls */ |
| @@ -24,6 +24,9 @@ struct __kernel_sockaddr_storage { | |||
| 24 | #include <linux/types.h> /* pid_t */ | 24 | #include <linux/types.h> /* pid_t */ |
| 25 | #include <linux/compiler.h> /* __user */ | 25 | #include <linux/compiler.h> /* __user */ |
| 26 | 26 | ||
| 27 | #define __sockaddr_check_size(size) \ | ||
| 28 | BUILD_BUG_ON(((size) > sizeof(struct __kernel_sockaddr_storage))) | ||
| 29 | |||
| 27 | #ifdef __KERNEL__ | 30 | #ifdef __KERNEL__ |
| 28 | # ifdef CONFIG_PROC_FS | 31 | # ifdef CONFIG_PROC_FS |
| 29 | struct seq_file; | 32 | struct seq_file; |
| @@ -65,6 +68,12 @@ struct msghdr { | |||
| 65 | unsigned msg_flags; | 68 | unsigned msg_flags; |
| 66 | }; | 69 | }; |
| 67 | 70 | ||
| 71 | /* For recvmmsg/sendmmsg */ | ||
| 72 | struct mmsghdr { | ||
| 73 | struct msghdr msg_hdr; | ||
| 74 | unsigned msg_len; | ||
| 75 | }; | ||
| 76 | |||
| 68 | /* | 77 | /* |
| 69 | * POSIX 1003.1g - ancillary data object information | 78 | * POSIX 1003.1g - ancillary data object information |
| 70 | * Ancillary data consits of a sequence of pairs of | 79 | * Ancillary data consits of a sequence of pairs of |
| @@ -101,21 +110,6 @@ struct cmsghdr { | |||
| 101 | ((char *)(cmsg) - (char *)(mhdr)->msg_control))) | 110 | ((char *)(cmsg) - (char *)(mhdr)->msg_control))) |
| 102 | 111 | ||
| 103 | /* | 112 | /* |
| 104 | * This mess will go away with glibc | ||
| 105 | */ | ||
| 106 | |||
| 107 | #ifdef __KERNEL__ | ||
| 108 | #define __KINLINE static inline | ||
| 109 | #elif defined(__GNUC__) | ||
| 110 | #define __KINLINE static __inline__ | ||
| 111 | #elif defined(__cplusplus) | ||
| 112 | #define __KINLINE static inline | ||
| 113 | #else | ||
| 114 | #define __KINLINE static | ||
| 115 | #endif | ||
| 116 | |||
| 117 | |||
| 118 | /* | ||
| 119 | * Get the next cmsg header | 113 | * Get the next cmsg header |
| 120 | * | 114 | * |
| 121 | * PLEASE, do not touch this function. If you think, that it is | 115 | * PLEASE, do not touch this function. If you think, that it is |
| @@ -128,7 +122,7 @@ struct cmsghdr { | |||
| 128 | * ancillary object DATA. --ANK (980731) | 122 | * ancillary object DATA. --ANK (980731) |
| 129 | */ | 123 | */ |
| 130 | 124 | ||
| 131 | __KINLINE struct cmsghdr * __cmsg_nxthdr(void *__ctl, __kernel_size_t __size, | 125 | static inline struct cmsghdr * __cmsg_nxthdr(void *__ctl, __kernel_size_t __size, |
| 132 | struct cmsghdr *__cmsg) | 126 | struct cmsghdr *__cmsg) |
| 133 | { | 127 | { |
| 134 | struct cmsghdr * __ptr; | 128 | struct cmsghdr * __ptr; |
| @@ -140,7 +134,7 @@ __KINLINE struct cmsghdr * __cmsg_nxthdr(void *__ctl, __kernel_size_t __size, | |||
| 140 | return __ptr; | 134 | return __ptr; |
| 141 | } | 135 | } |
| 142 | 136 | ||
| 143 | __KINLINE struct cmsghdr * cmsg_nxthdr (struct msghdr *__msg, struct cmsghdr *__cmsg) | 137 | static inline struct cmsghdr * cmsg_nxthdr (struct msghdr *__msg, struct cmsghdr *__cmsg) |
| 144 | { | 138 | { |
| 145 | return __cmsg_nxthdr(__msg->msg_control, __msg->msg_controllen, __cmsg); | 139 | return __cmsg_nxthdr(__msg->msg_control, __msg->msg_controllen, __cmsg); |
| 146 | } | 140 | } |
| @@ -327,6 +321,10 @@ extern int move_addr_to_user(struct sockaddr *kaddr, int klen, void __user *uadd | |||
| 327 | extern int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr *kaddr); | 321 | extern int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr *kaddr); |
| 328 | extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data); | 322 | extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data); |
| 329 | 323 | ||
| 324 | struct timespec; | ||
| 325 | |||
| 326 | extern int __sys_recvmmsg(int fd, struct mmsghdr __user *mmsg, unsigned int vlen, | ||
| 327 | unsigned int flags, struct timespec *timeout); | ||
| 330 | #endif | 328 | #endif |
| 331 | #endif /* not kernel and not glibc */ | 329 | #endif /* not kernel and not glibc */ |
| 332 | #endif /* _LINUX_SOCKET_H */ | 330 | #endif /* _LINUX_SOCKET_H */ |
diff --git a/include/linux/spi/lms283gf05.h b/include/linux/spi/lms283gf05.h new file mode 100644 index 000000000000..555d254e6606 --- /dev/null +++ b/include/linux/spi/lms283gf05.h | |||
| @@ -0,0 +1,28 @@ | |||
| 1 | /* | ||
| 2 | * lms283gf05.h - Platform glue for Samsung LMS283GF05 LCD | ||
| 3 | * | ||
| 4 | * Copyright (C) 2009 Marek Vasut <marek.vasut@gmail.com> | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 as | ||
| 8 | * published by the Free Software Foundation. | ||
| 9 | * | ||
| 10 | * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 18 | */ | ||
| 19 | |||
| 20 | #ifndef _INCLUDE_LINUX_SPI_LMS283GF05_H_ | ||
| 21 | #define _INCLUDE_LINUX_SPI_LMS283GF05_H_ | ||
| 22 | |||
| 23 | struct lms283gf05_pdata { | ||
| 24 | unsigned long reset_gpio; | ||
| 25 | bool reset_inverted; | ||
| 26 | }; | ||
| 27 | |||
| 28 | #endif /* _INCLUDE_LINUX_SPI_LMS283GF05_H_ */ | ||
diff --git a/include/linux/spi/mc33880.h b/include/linux/spi/mc33880.h new file mode 100644 index 000000000000..82ffccd6fbe5 --- /dev/null +++ b/include/linux/spi/mc33880.h | |||
| @@ -0,0 +1,10 @@ | |||
| 1 | #ifndef LINUX_SPI_MC33880_H | ||
| 2 | #define LINUX_SPI_MC33880_H | ||
| 3 | |||
| 4 | struct mc33880_platform_data { | ||
| 5 | /* number assigned to the first GPIO */ | ||
| 6 | unsigned base; | ||
| 7 | }; | ||
| 8 | |||
| 9 | #endif | ||
| 10 | |||
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h index c47c4b4da97e..97b60b37f445 100644 --- a/include/linux/spi/spi.h +++ b/include/linux/spi/spi.h | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | #define __LINUX_SPI_H | 20 | #define __LINUX_SPI_H |
| 21 | 21 | ||
| 22 | #include <linux/device.h> | 22 | #include <linux/device.h> |
| 23 | #include <linux/mod_devicetable.h> | ||
| 23 | 24 | ||
| 24 | /* | 25 | /* |
| 25 | * INTERFACES between SPI master-side drivers and SPI infrastructure. | 26 | * INTERFACES between SPI master-side drivers and SPI infrastructure. |
| @@ -86,7 +87,7 @@ struct spi_device { | |||
| 86 | int irq; | 87 | int irq; |
| 87 | void *controller_state; | 88 | void *controller_state; |
| 88 | void *controller_data; | 89 | void *controller_data; |
| 89 | char modalias[32]; | 90 | char modalias[SPI_NAME_SIZE]; |
| 90 | 91 | ||
| 91 | /* | 92 | /* |
| 92 | * likely need more hooks for more protocol options affecting how | 93 | * likely need more hooks for more protocol options affecting how |
| @@ -145,6 +146,7 @@ struct spi_message; | |||
| 145 | 146 | ||
| 146 | /** | 147 | /** |
| 147 | * struct spi_driver - Host side "protocol" driver | 148 | * struct spi_driver - Host side "protocol" driver |
| 149 | * @id_table: List of SPI devices supported by this driver | ||
| 148 | * @probe: Binds this driver to the spi device. Drivers can verify | 150 | * @probe: Binds this driver to the spi device. Drivers can verify |
| 149 | * that the device is actually present, and may need to configure | 151 | * that the device is actually present, and may need to configure |
| 150 | * characteristics (such as bits_per_word) which weren't needed for | 152 | * characteristics (such as bits_per_word) which weren't needed for |
| @@ -170,6 +172,7 @@ struct spi_message; | |||
| 170 | * MMC, RTC, filesystem character device nodes, and hardware monitoring. | 172 | * MMC, RTC, filesystem character device nodes, and hardware monitoring. |
| 171 | */ | 173 | */ |
| 172 | struct spi_driver { | 174 | struct spi_driver { |
| 175 | const struct spi_device_id *id_table; | ||
| 173 | int (*probe)(struct spi_device *spi); | 176 | int (*probe)(struct spi_device *spi); |
| 174 | int (*remove)(struct spi_device *spi); | 177 | int (*remove)(struct spi_device *spi); |
| 175 | void (*shutdown)(struct spi_device *spi); | 178 | void (*shutdown)(struct spi_device *spi); |
| @@ -207,6 +210,8 @@ static inline void spi_unregister_driver(struct spi_driver *sdrv) | |||
| 207 | * each slave has a chipselect signal, but it's common that not | 210 | * each slave has a chipselect signal, but it's common that not |
| 208 | * every chipselect is connected to a slave. | 211 | * every chipselect is connected to a slave. |
| 209 | * @dma_alignment: SPI controller constraint on DMA buffers alignment. | 212 | * @dma_alignment: SPI controller constraint on DMA buffers alignment. |
| 213 | * @mode_bits: flags understood by this controller driver | ||
| 214 | * @flags: other constraints relevant to this driver | ||
| 210 | * @setup: updates the device mode and clocking records used by a | 215 | * @setup: updates the device mode and clocking records used by a |
| 211 | * device's SPI controller; protocol code may call this. This | 216 | * device's SPI controller; protocol code may call this. This |
| 212 | * must fail if an unrecognized or unsupported mode is requested. | 217 | * must fail if an unrecognized or unsupported mode is requested. |
| @@ -253,6 +258,8 @@ struct spi_master { | |||
| 253 | /* other constraints relevant to this driver */ | 258 | /* other constraints relevant to this driver */ |
| 254 | u16 flags; | 259 | u16 flags; |
| 255 | #define SPI_MASTER_HALF_DUPLEX BIT(0) /* can't do full duplex */ | 260 | #define SPI_MASTER_HALF_DUPLEX BIT(0) /* can't do full duplex */ |
| 261 | #define SPI_MASTER_NO_RX BIT(1) /* can't do buffer read */ | ||
| 262 | #define SPI_MASTER_NO_TX BIT(2) /* can't do buffer write */ | ||
| 256 | 263 | ||
| 257 | /* Setup mode and clock, etc (spi driver may call many times). | 264 | /* Setup mode and clock, etc (spi driver may call many times). |
| 258 | * | 265 | * |
| @@ -533,42 +540,7 @@ static inline void spi_message_free(struct spi_message *m) | |||
| 533 | } | 540 | } |
| 534 | 541 | ||
| 535 | extern int spi_setup(struct spi_device *spi); | 542 | extern int spi_setup(struct spi_device *spi); |
| 536 | 543 | extern int spi_async(struct spi_device *spi, struct spi_message *message); | |
| 537 | /** | ||
| 538 | * spi_async - asynchronous SPI transfer | ||
| 539 | * @spi: device with which data will be exchanged | ||
| 540 | * @message: describes the data transfers, including completion callback | ||
| 541 | * Context: any (irqs may be blocked, etc) | ||
| 542 | * | ||
| 543 | * This call may be used in_irq and other contexts which can't sleep, | ||
| 544 | * as well as from task contexts which can sleep. | ||
| 545 | * | ||
| 546 | * The completion callback is invoked in a context which can't sleep. | ||
| 547 | * Before that invocation, the value of message->status is undefined. | ||
| 548 | * When the callback is issued, message->status holds either zero (to | ||
| 549 | * indicate complete success) or a negative error code. After that | ||
| 550 | * callback returns, the driver which issued the transfer request may | ||
| 551 | * deallocate the associated memory; it's no longer in use by any SPI | ||
| 552 | * core or controller driver code. | ||
| 553 | * | ||
| 554 | * Note that although all messages to a spi_device are handled in | ||
| 555 | * FIFO order, messages may go to different devices in other orders. | ||
| 556 | * Some device might be higher priority, or have various "hard" access | ||
| 557 | * time requirements, for example. | ||
| 558 | * | ||
| 559 | * On detection of any fault during the transfer, processing of | ||
| 560 | * the entire message is aborted, and the device is deselected. | ||
| 561 | * Until returning from the associated message completion callback, | ||
| 562 | * no other spi_message queued to that device will be processed. | ||
| 563 | * (This rule applies equally to all the synchronous transfer calls, | ||
| 564 | * which are wrappers around this core asynchronous primitive.) | ||
| 565 | */ | ||
| 566 | static inline int | ||
| 567 | spi_async(struct spi_device *spi, struct spi_message *message) | ||
| 568 | { | ||
| 569 | message->spi = spi; | ||
| 570 | return spi->master->transfer(spi, message); | ||
| 571 | } | ||
| 572 | 544 | ||
| 573 | /*---------------------------------------------------------------------------*/ | 545 | /*---------------------------------------------------------------------------*/ |
| 574 | 546 | ||
| @@ -732,7 +704,7 @@ struct spi_board_info { | |||
| 732 | * controller_data goes to spi_device.controller_data, | 704 | * controller_data goes to spi_device.controller_data, |
| 733 | * irq is copied too | 705 | * irq is copied too |
| 734 | */ | 706 | */ |
| 735 | char modalias[32]; | 707 | char modalias[SPI_NAME_SIZE]; |
| 736 | const void *platform_data; | 708 | const void *platform_data; |
| 737 | void *controller_data; | 709 | void *controller_data; |
| 738 | int irq; | 710 | int irq; |
| @@ -800,4 +772,7 @@ spi_unregister_device(struct spi_device *spi) | |||
| 800 | device_unregister(&spi->dev); | 772 | device_unregister(&spi->dev); |
| 801 | } | 773 | } |
| 802 | 774 | ||
| 775 | extern const struct spi_device_id * | ||
| 776 | spi_get_device_id(const struct spi_device *sdev); | ||
| 777 | |||
| 803 | #endif /* __LINUX_SPI_H */ | 778 | #endif /* __LINUX_SPI_H */ |
diff --git a/include/linux/spi/wl12xx.h b/include/linux/spi/wl12xx.h index 11430cab2aad..aed64ed3dc8a 100644 --- a/include/linux/spi/wl12xx.h +++ b/include/linux/spi/wl12xx.h | |||
| @@ -26,6 +26,7 @@ | |||
| 26 | 26 | ||
| 27 | struct wl12xx_platform_data { | 27 | struct wl12xx_platform_data { |
| 28 | void (*set_power)(bool enable); | 28 | void (*set_power)(bool enable); |
| 29 | bool use_eeprom; | ||
| 29 | }; | 30 | }; |
| 30 | 31 | ||
| 31 | #endif | 32 | #endif |
diff --git a/include/linux/spinlock.h b/include/linux/spinlock.h index 4be57ab03478..71dccfeb0d88 100644 --- a/include/linux/spinlock.h +++ b/include/linux/spinlock.h | |||
| @@ -79,8 +79,6 @@ | |||
| 79 | */ | 79 | */ |
| 80 | #include <linux/spinlock_types.h> | 80 | #include <linux/spinlock_types.h> |
| 81 | 81 | ||
| 82 | extern int __lockfunc generic__raw_read_trylock(raw_rwlock_t *lock); | ||
| 83 | |||
| 84 | /* | 82 | /* |
| 85 | * Pull the __raw*() functions/declarations (UP-nondebug doesnt need them): | 83 | * Pull the __raw*() functions/declarations (UP-nondebug doesnt need them): |
| 86 | */ | 84 | */ |
| @@ -102,7 +100,7 @@ do { \ | |||
| 102 | 100 | ||
| 103 | #else | 101 | #else |
| 104 | # define spin_lock_init(lock) \ | 102 | # define spin_lock_init(lock) \ |
| 105 | do { *(lock) = SPIN_LOCK_UNLOCKED; } while (0) | 103 | do { *(lock) = __SPIN_LOCK_UNLOCKED(lock); } while (0) |
| 106 | #endif | 104 | #endif |
| 107 | 105 | ||
| 108 | #ifdef CONFIG_DEBUG_SPINLOCK | 106 | #ifdef CONFIG_DEBUG_SPINLOCK |
| @@ -116,7 +114,7 @@ do { \ | |||
| 116 | } while (0) | 114 | } while (0) |
| 117 | #else | 115 | #else |
| 118 | # define rwlock_init(lock) \ | 116 | # define rwlock_init(lock) \ |
| 119 | do { *(lock) = RW_LOCK_UNLOCKED; } while (0) | 117 | do { *(lock) = __RW_LOCK_UNLOCKED(lock); } while (0) |
| 120 | #endif | 118 | #endif |
| 121 | 119 | ||
| 122 | #define spin_is_locked(lock) __raw_spin_is_locked(&(lock)->raw_lock) | 120 | #define spin_is_locked(lock) __raw_spin_is_locked(&(lock)->raw_lock) |
| @@ -143,15 +141,6 @@ static inline void smp_mb__after_lock(void) { smp_mb(); } | |||
| 143 | */ | 141 | */ |
| 144 | #define spin_unlock_wait(lock) __raw_spin_unlock_wait(&(lock)->raw_lock) | 142 | #define spin_unlock_wait(lock) __raw_spin_unlock_wait(&(lock)->raw_lock) |
| 145 | 143 | ||
| 146 | /* | ||
| 147 | * Pull the _spin_*()/_read_*()/_write_*() functions/declarations: | ||
| 148 | */ | ||
| 149 | #if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) | ||
| 150 | # include <linux/spinlock_api_smp.h> | ||
| 151 | #else | ||
| 152 | # include <linux/spinlock_api_up.h> | ||
| 153 | #endif | ||
| 154 | |||
| 155 | #ifdef CONFIG_DEBUG_SPINLOCK | 144 | #ifdef CONFIG_DEBUG_SPINLOCK |
| 156 | extern void _raw_spin_lock(spinlock_t *lock); | 145 | extern void _raw_spin_lock(spinlock_t *lock); |
| 157 | #define _raw_spin_lock_flags(lock, flags) _raw_spin_lock(lock) | 146 | #define _raw_spin_lock_flags(lock, flags) _raw_spin_lock(lock) |
| @@ -268,50 +257,16 @@ static inline void smp_mb__after_lock(void) { smp_mb(); } | |||
| 268 | 257 | ||
| 269 | #define spin_lock_irq(lock) _spin_lock_irq(lock) | 258 | #define spin_lock_irq(lock) _spin_lock_irq(lock) |
| 270 | #define spin_lock_bh(lock) _spin_lock_bh(lock) | 259 | #define spin_lock_bh(lock) _spin_lock_bh(lock) |
| 271 | |||
| 272 | #define read_lock_irq(lock) _read_lock_irq(lock) | 260 | #define read_lock_irq(lock) _read_lock_irq(lock) |
| 273 | #define read_lock_bh(lock) _read_lock_bh(lock) | 261 | #define read_lock_bh(lock) _read_lock_bh(lock) |
| 274 | |||
| 275 | #define write_lock_irq(lock) _write_lock_irq(lock) | 262 | #define write_lock_irq(lock) _write_lock_irq(lock) |
| 276 | #define write_lock_bh(lock) _write_lock_bh(lock) | 263 | #define write_lock_bh(lock) _write_lock_bh(lock) |
| 277 | 264 | #define spin_unlock(lock) _spin_unlock(lock) | |
| 278 | /* | 265 | #define read_unlock(lock) _read_unlock(lock) |
| 279 | * We inline the unlock functions in the nondebug case: | 266 | #define write_unlock(lock) _write_unlock(lock) |
| 280 | */ | 267 | #define spin_unlock_irq(lock) _spin_unlock_irq(lock) |
| 281 | #if defined(CONFIG_DEBUG_SPINLOCK) || defined(CONFIG_PREEMPT) || \ | 268 | #define read_unlock_irq(lock) _read_unlock_irq(lock) |
| 282 | !defined(CONFIG_SMP) | 269 | #define write_unlock_irq(lock) _write_unlock_irq(lock) |
| 283 | # define spin_unlock(lock) _spin_unlock(lock) | ||
| 284 | # define read_unlock(lock) _read_unlock(lock) | ||
| 285 | # define write_unlock(lock) _write_unlock(lock) | ||
| 286 | # define spin_unlock_irq(lock) _spin_unlock_irq(lock) | ||
| 287 | # define read_unlock_irq(lock) _read_unlock_irq(lock) | ||
| 288 | # define write_unlock_irq(lock) _write_unlock_irq(lock) | ||
| 289 | #else | ||
| 290 | # define spin_unlock(lock) \ | ||
| 291 | do {__raw_spin_unlock(&(lock)->raw_lock); __release(lock); } while (0) | ||
| 292 | # define read_unlock(lock) \ | ||
| 293 | do {__raw_read_unlock(&(lock)->raw_lock); __release(lock); } while (0) | ||
| 294 | # define write_unlock(lock) \ | ||
| 295 | do {__raw_write_unlock(&(lock)->raw_lock); __release(lock); } while (0) | ||
| 296 | # define spin_unlock_irq(lock) \ | ||
| 297 | do { \ | ||
| 298 | __raw_spin_unlock(&(lock)->raw_lock); \ | ||
| 299 | __release(lock); \ | ||
| 300 | local_irq_enable(); \ | ||
| 301 | } while (0) | ||
| 302 | # define read_unlock_irq(lock) \ | ||
| 303 | do { \ | ||
| 304 | __raw_read_unlock(&(lock)->raw_lock); \ | ||
| 305 | __release(lock); \ | ||
| 306 | local_irq_enable(); \ | ||
| 307 | } while (0) | ||
| 308 | # define write_unlock_irq(lock) \ | ||
| 309 | do { \ | ||
| 310 | __raw_write_unlock(&(lock)->raw_lock); \ | ||
| 311 | __release(lock); \ | ||
| 312 | local_irq_enable(); \ | ||
| 313 | } while (0) | ||
| 314 | #endif | ||
| 315 | 270 | ||
| 316 | #define spin_unlock_irqrestore(lock, flags) \ | 271 | #define spin_unlock_irqrestore(lock, flags) \ |
| 317 | do { \ | 272 | do { \ |
| @@ -380,4 +335,13 @@ extern int _atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock); | |||
| 380 | */ | 335 | */ |
| 381 | #define spin_can_lock(lock) (!spin_is_locked(lock)) | 336 | #define spin_can_lock(lock) (!spin_is_locked(lock)) |
| 382 | 337 | ||
| 338 | /* | ||
| 339 | * Pull the _spin_*()/_read_*()/_write_*() functions/declarations: | ||
| 340 | */ | ||
| 341 | #if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) | ||
| 342 | # include <linux/spinlock_api_smp.h> | ||
| 343 | #else | ||
| 344 | # include <linux/spinlock_api_up.h> | ||
| 345 | #endif | ||
| 346 | |||
| 383 | #endif /* __LINUX_SPINLOCK_H */ | 347 | #endif /* __LINUX_SPINLOCK_H */ |
diff --git a/include/linux/spinlock_api_smp.h b/include/linux/spinlock_api_smp.h index d79845d034b5..8264a7f459bc 100644 --- a/include/linux/spinlock_api_smp.h +++ b/include/linux/spinlock_api_smp.h | |||
| @@ -60,4 +60,379 @@ void __lockfunc _read_unlock_irqrestore(rwlock_t *lock, unsigned long flags) | |||
| 60 | void __lockfunc _write_unlock_irqrestore(rwlock_t *lock, unsigned long flags) | 60 | void __lockfunc _write_unlock_irqrestore(rwlock_t *lock, unsigned long flags) |
| 61 | __releases(lock); | 61 | __releases(lock); |
| 62 | 62 | ||
| 63 | #ifdef CONFIG_INLINE_SPIN_LOCK | ||
| 64 | #define _spin_lock(lock) __spin_lock(lock) | ||
| 65 | #endif | ||
| 66 | |||
| 67 | #ifdef CONFIG_INLINE_READ_LOCK | ||
| 68 | #define _read_lock(lock) __read_lock(lock) | ||
| 69 | #endif | ||
| 70 | |||
| 71 | #ifdef CONFIG_INLINE_WRITE_LOCK | ||
| 72 | #define _write_lock(lock) __write_lock(lock) | ||
| 73 | #endif | ||
| 74 | |||
| 75 | #ifdef CONFIG_INLINE_SPIN_LOCK_BH | ||
| 76 | #define _spin_lock_bh(lock) __spin_lock_bh(lock) | ||
| 77 | #endif | ||
| 78 | |||
| 79 | #ifdef CONFIG_INLINE_READ_LOCK_BH | ||
| 80 | #define _read_lock_bh(lock) __read_lock_bh(lock) | ||
| 81 | #endif | ||
| 82 | |||
| 83 | #ifdef CONFIG_INLINE_WRITE_LOCK_BH | ||
| 84 | #define _write_lock_bh(lock) __write_lock_bh(lock) | ||
| 85 | #endif | ||
| 86 | |||
| 87 | #ifdef CONFIG_INLINE_SPIN_LOCK_IRQ | ||
| 88 | #define _spin_lock_irq(lock) __spin_lock_irq(lock) | ||
| 89 | #endif | ||
| 90 | |||
| 91 | #ifdef CONFIG_INLINE_READ_LOCK_IRQ | ||
| 92 | #define _read_lock_irq(lock) __read_lock_irq(lock) | ||
| 93 | #endif | ||
| 94 | |||
| 95 | #ifdef CONFIG_INLINE_WRITE_LOCK_IRQ | ||
| 96 | #define _write_lock_irq(lock) __write_lock_irq(lock) | ||
| 97 | #endif | ||
| 98 | |||
| 99 | #ifdef CONFIG_INLINE_SPIN_LOCK_IRQSAVE | ||
| 100 | #define _spin_lock_irqsave(lock) __spin_lock_irqsave(lock) | ||
| 101 | #endif | ||
| 102 | |||
| 103 | #ifdef CONFIG_INLINE_READ_LOCK_IRQSAVE | ||
| 104 | #define _read_lock_irqsave(lock) __read_lock_irqsave(lock) | ||
| 105 | #endif | ||
| 106 | |||
| 107 | #ifdef CONFIG_INLINE_WRITE_LOCK_IRQSAVE | ||
| 108 | #define _write_lock_irqsave(lock) __write_lock_irqsave(lock) | ||
| 109 | #endif | ||
| 110 | |||
| 111 | #ifdef CONFIG_INLINE_SPIN_TRYLOCK | ||
| 112 | #define _spin_trylock(lock) __spin_trylock(lock) | ||
| 113 | #endif | ||
| 114 | |||
| 115 | #ifdef CONFIG_INLINE_READ_TRYLOCK | ||
| 116 | #define _read_trylock(lock) __read_trylock(lock) | ||
| 117 | #endif | ||
| 118 | |||
| 119 | #ifdef CONFIG_INLINE_WRITE_TRYLOCK | ||
| 120 | #define _write_trylock(lock) __write_trylock(lock) | ||
| 121 | #endif | ||
| 122 | |||
| 123 | #ifdef CONFIG_INLINE_SPIN_TRYLOCK_BH | ||
| 124 | #define _spin_trylock_bh(lock) __spin_trylock_bh(lock) | ||
| 125 | #endif | ||
| 126 | |||
| 127 | #ifdef CONFIG_INLINE_SPIN_UNLOCK | ||
| 128 | #define _spin_unlock(lock) __spin_unlock(lock) | ||
| 129 | #endif | ||
| 130 | |||
| 131 | #ifdef CONFIG_INLINE_READ_UNLOCK | ||
| 132 | #define _read_unlock(lock) __read_unlock(lock) | ||
| 133 | #endif | ||
| 134 | |||
| 135 | #ifdef CONFIG_INLINE_WRITE_UNLOCK | ||
| 136 | #define _write_unlock(lock) __write_unlock(lock) | ||
| 137 | #endif | ||
| 138 | |||
| 139 | #ifdef CONFIG_INLINE_SPIN_UNLOCK_BH | ||
| 140 | #define _spin_unlock_bh(lock) __spin_unlock_bh(lock) | ||
| 141 | #endif | ||
| 142 | |||
| 143 | #ifdef CONFIG_INLINE_READ_UNLOCK_BH | ||
| 144 | #define _read_unlock_bh(lock) __read_unlock_bh(lock) | ||
| 145 | #endif | ||
| 146 | |||
| 147 | #ifdef CONFIG_INLINE_WRITE_UNLOCK_BH | ||
| 148 | #define _write_unlock_bh(lock) __write_unlock_bh(lock) | ||
| 149 | #endif | ||
| 150 | |||
| 151 | #ifdef CONFIG_INLINE_SPIN_UNLOCK_IRQ | ||
| 152 | #define _spin_unlock_irq(lock) __spin_unlock_irq(lock) | ||
| 153 | #endif | ||
| 154 | |||
| 155 | #ifdef CONFIG_INLINE_READ_UNLOCK_IRQ | ||
| 156 | #define _read_unlock_irq(lock) __read_unlock_irq(lock) | ||
| 157 | #endif | ||
| 158 | |||
| 159 | #ifdef CONFIG_INLINE_WRITE_UNLOCK_IRQ | ||
| 160 | #define _write_unlock_irq(lock) __write_unlock_irq(lock) | ||
| 161 | #endif | ||
| 162 | |||
| 163 | #ifdef CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE | ||
| 164 | #define _spin_unlock_irqrestore(lock, flags) __spin_unlock_irqrestore(lock, flags) | ||
| 165 | #endif | ||
| 166 | |||
| 167 | #ifdef CONFIG_INLINE_READ_UNLOCK_IRQRESTORE | ||
| 168 | #define _read_unlock_irqrestore(lock, flags) __read_unlock_irqrestore(lock, flags) | ||
| 169 | #endif | ||
| 170 | |||
| 171 | #ifdef CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE | ||
| 172 | #define _write_unlock_irqrestore(lock, flags) __write_unlock_irqrestore(lock, flags) | ||
| 173 | #endif | ||
| 174 | |||
| 175 | static inline int __spin_trylock(spinlock_t *lock) | ||
| 176 | { | ||
| 177 | preempt_disable(); | ||
| 178 | if (_raw_spin_trylock(lock)) { | ||
| 179 | spin_acquire(&lock->dep_map, 0, 1, _RET_IP_); | ||
| 180 | return 1; | ||
| 181 | } | ||
| 182 | preempt_enable(); | ||
| 183 | return 0; | ||
| 184 | } | ||
| 185 | |||
| 186 | static inline int __read_trylock(rwlock_t *lock) | ||
| 187 | { | ||
| 188 | preempt_disable(); | ||
| 189 | if (_raw_read_trylock(lock)) { | ||
| 190 | rwlock_acquire_read(&lock->dep_map, 0, 1, _RET_IP_); | ||
| 191 | return 1; | ||
| 192 | } | ||
| 193 | preempt_enable(); | ||
| 194 | return 0; | ||
| 195 | } | ||
| 196 | |||
| 197 | static inline int __write_trylock(rwlock_t *lock) | ||
| 198 | { | ||
| 199 | preempt_disable(); | ||
| 200 | if (_raw_write_trylock(lock)) { | ||
| 201 | rwlock_acquire(&lock->dep_map, 0, 1, _RET_IP_); | ||
| 202 | return 1; | ||
| 203 | } | ||
| 204 | preempt_enable(); | ||
| 205 | return 0; | ||
| 206 | } | ||
| 207 | |||
| 208 | /* | ||
| 209 | * If lockdep is enabled then we use the non-preemption spin-ops | ||
| 210 | * even on CONFIG_PREEMPT, because lockdep assumes that interrupts are | ||
| 211 | * not re-enabled during lock-acquire (which the preempt-spin-ops do): | ||
| 212 | */ | ||
| 213 | #if !defined(CONFIG_GENERIC_LOCKBREAK) || defined(CONFIG_DEBUG_LOCK_ALLOC) | ||
| 214 | |||
| 215 | static inline void __read_lock(rwlock_t *lock) | ||
| 216 | { | ||
| 217 | preempt_disable(); | ||
| 218 | rwlock_acquire_read(&lock->dep_map, 0, 0, _RET_IP_); | ||
| 219 | LOCK_CONTENDED(lock, _raw_read_trylock, _raw_read_lock); | ||
| 220 | } | ||
| 221 | |||
| 222 | static inline unsigned long __spin_lock_irqsave(spinlock_t *lock) | ||
| 223 | { | ||
| 224 | unsigned long flags; | ||
| 225 | |||
| 226 | local_irq_save(flags); | ||
| 227 | preempt_disable(); | ||
| 228 | spin_acquire(&lock->dep_map, 0, 0, _RET_IP_); | ||
| 229 | /* | ||
| 230 | * On lockdep we dont want the hand-coded irq-enable of | ||
| 231 | * _raw_spin_lock_flags() code, because lockdep assumes | ||
| 232 | * that interrupts are not re-enabled during lock-acquire: | ||
| 233 | */ | ||
| 234 | #ifdef CONFIG_LOCKDEP | ||
| 235 | LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock); | ||
| 236 | #else | ||
| 237 | _raw_spin_lock_flags(lock, &flags); | ||
| 238 | #endif | ||
| 239 | return flags; | ||
| 240 | } | ||
| 241 | |||
| 242 | static inline void __spin_lock_irq(spinlock_t *lock) | ||
| 243 | { | ||
| 244 | local_irq_disable(); | ||
| 245 | preempt_disable(); | ||
| 246 | spin_acquire(&lock->dep_map, 0, 0, _RET_IP_); | ||
| 247 | LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock); | ||
| 248 | } | ||
| 249 | |||
| 250 | static inline void __spin_lock_bh(spinlock_t *lock) | ||
| 251 | { | ||
| 252 | local_bh_disable(); | ||
| 253 | preempt_disable(); | ||
| 254 | spin_acquire(&lock->dep_map, 0, 0, _RET_IP_); | ||
| 255 | LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock); | ||
| 256 | } | ||
| 257 | |||
| 258 | static inline unsigned long __read_lock_irqsave(rwlock_t *lock) | ||
| 259 | { | ||
| 260 | unsigned long flags; | ||
| 261 | |||
| 262 | local_irq_save(flags); | ||
| 263 | preempt_disable(); | ||
| 264 | rwlock_acquire_read(&lock->dep_map, 0, 0, _RET_IP_); | ||
| 265 | LOCK_CONTENDED_FLAGS(lock, _raw_read_trylock, _raw_read_lock, | ||
| 266 | _raw_read_lock_flags, &flags); | ||
| 267 | return flags; | ||
| 268 | } | ||
| 269 | |||
| 270 | static inline void __read_lock_irq(rwlock_t *lock) | ||
| 271 | { | ||
| 272 | local_irq_disable(); | ||
| 273 | preempt_disable(); | ||
| 274 | rwlock_acquire_read(&lock->dep_map, 0, 0, _RET_IP_); | ||
| 275 | LOCK_CONTENDED(lock, _raw_read_trylock, _raw_read_lock); | ||
| 276 | } | ||
| 277 | |||
| 278 | static inline void __read_lock_bh(rwlock_t *lock) | ||
| 279 | { | ||
| 280 | local_bh_disable(); | ||
| 281 | preempt_disable(); | ||
| 282 | rwlock_acquire_read(&lock->dep_map, 0, 0, _RET_IP_); | ||
| 283 | LOCK_CONTENDED(lock, _raw_read_trylock, _raw_read_lock); | ||
| 284 | } | ||
| 285 | |||
| 286 | static inline unsigned long __write_lock_irqsave(rwlock_t *lock) | ||
| 287 | { | ||
| 288 | unsigned long flags; | ||
| 289 | |||
| 290 | local_irq_save(flags); | ||
| 291 | preempt_disable(); | ||
| 292 | rwlock_acquire(&lock->dep_map, 0, 0, _RET_IP_); | ||
| 293 | LOCK_CONTENDED_FLAGS(lock, _raw_write_trylock, _raw_write_lock, | ||
| 294 | _raw_write_lock_flags, &flags); | ||
| 295 | return flags; | ||
| 296 | } | ||
| 297 | |||
| 298 | static inline void __write_lock_irq(rwlock_t *lock) | ||
| 299 | { | ||
| 300 | local_irq_disable(); | ||
| 301 | preempt_disable(); | ||
| 302 | rwlock_acquire(&lock->dep_map, 0, 0, _RET_IP_); | ||
| 303 | LOCK_CONTENDED(lock, _raw_write_trylock, _raw_write_lock); | ||
| 304 | } | ||
| 305 | |||
| 306 | static inline void __write_lock_bh(rwlock_t *lock) | ||
| 307 | { | ||
| 308 | local_bh_disable(); | ||
| 309 | preempt_disable(); | ||
| 310 | rwlock_acquire(&lock->dep_map, 0, 0, _RET_IP_); | ||
| 311 | LOCK_CONTENDED(lock, _raw_write_trylock, _raw_write_lock); | ||
| 312 | } | ||
| 313 | |||
| 314 | static inline void __spin_lock(spinlock_t *lock) | ||
| 315 | { | ||
| 316 | preempt_disable(); | ||
| 317 | spin_acquire(&lock->dep_map, 0, 0, _RET_IP_); | ||
| 318 | LOCK_CONTENDED(lock, _raw_spin_trylock, _raw_spin_lock); | ||
| 319 | } | ||
| 320 | |||
| 321 | static inline void __write_lock(rwlock_t *lock) | ||
| 322 | { | ||
| 323 | preempt_disable(); | ||
| 324 | rwlock_acquire(&lock->dep_map, 0, 0, _RET_IP_); | ||
| 325 | LOCK_CONTENDED(lock, _raw_write_trylock, _raw_write_lock); | ||
| 326 | } | ||
| 327 | |||
| 328 | #endif /* CONFIG_PREEMPT */ | ||
| 329 | |||
| 330 | static inline void __spin_unlock(spinlock_t *lock) | ||
| 331 | { | ||
| 332 | spin_release(&lock->dep_map, 1, _RET_IP_); | ||
| 333 | _raw_spin_unlock(lock); | ||
| 334 | preempt_enable(); | ||
| 335 | } | ||
| 336 | |||
| 337 | static inline void __write_unlock(rwlock_t *lock) | ||
| 338 | { | ||
| 339 | rwlock_release(&lock->dep_map, 1, _RET_IP_); | ||
| 340 | _raw_write_unlock(lock); | ||
| 341 | preempt_enable(); | ||
| 342 | } | ||
| 343 | |||
| 344 | static inline void __read_unlock(rwlock_t *lock) | ||
| 345 | { | ||
| 346 | rwlock_release(&lock->dep_map, 1, _RET_IP_); | ||
| 347 | _raw_read_unlock(lock); | ||
| 348 | preempt_enable(); | ||
| 349 | } | ||
| 350 | |||
| 351 | static inline void __spin_unlock_irqrestore(spinlock_t *lock, | ||
| 352 | unsigned long flags) | ||
| 353 | { | ||
| 354 | spin_release(&lock->dep_map, 1, _RET_IP_); | ||
| 355 | _raw_spin_unlock(lock); | ||
| 356 | local_irq_restore(flags); | ||
| 357 | preempt_enable(); | ||
| 358 | } | ||
| 359 | |||
| 360 | static inline void __spin_unlock_irq(spinlock_t *lock) | ||
| 361 | { | ||
| 362 | spin_release(&lock->dep_map, 1, _RET_IP_); | ||
| 363 | _raw_spin_unlock(lock); | ||
| 364 | local_irq_enable(); | ||
| 365 | preempt_enable(); | ||
| 366 | } | ||
| 367 | |||
| 368 | static inline void __spin_unlock_bh(spinlock_t *lock) | ||
| 369 | { | ||
| 370 | spin_release(&lock->dep_map, 1, _RET_IP_); | ||
| 371 | _raw_spin_unlock(lock); | ||
| 372 | preempt_enable_no_resched(); | ||
| 373 | local_bh_enable_ip((unsigned long)__builtin_return_address(0)); | ||
| 374 | } | ||
| 375 | |||
| 376 | static inline void __read_unlock_irqrestore(rwlock_t *lock, unsigned long flags) | ||
| 377 | { | ||
| 378 | rwlock_release(&lock->dep_map, 1, _RET_IP_); | ||
| 379 | _raw_read_unlock(lock); | ||
| 380 | local_irq_restore(flags); | ||
| 381 | preempt_enable(); | ||
| 382 | } | ||
| 383 | |||
| 384 | static inline void __read_unlock_irq(rwlock_t *lock) | ||
| 385 | { | ||
| 386 | rwlock_release(&lock->dep_map, 1, _RET_IP_); | ||
| 387 | _raw_read_unlock(lock); | ||
| 388 | local_irq_enable(); | ||
| 389 | preempt_enable(); | ||
| 390 | } | ||
| 391 | |||
| 392 | static inline void __read_unlock_bh(rwlock_t *lock) | ||
| 393 | { | ||
| 394 | rwlock_release(&lock->dep_map, 1, _RET_IP_); | ||
| 395 | _raw_read_unlock(lock); | ||
| 396 | preempt_enable_no_resched(); | ||
| 397 | local_bh_enable_ip((unsigned long)__builtin_return_address(0)); | ||
| 398 | } | ||
| 399 | |||
| 400 | static inline void __write_unlock_irqrestore(rwlock_t *lock, | ||
| 401 | unsigned long flags) | ||
| 402 | { | ||
| 403 | rwlock_release(&lock->dep_map, 1, _RET_IP_); | ||
| 404 | _raw_write_unlock(lock); | ||
| 405 | local_irq_restore(flags); | ||
| 406 | preempt_enable(); | ||
| 407 | } | ||
| 408 | |||
| 409 | static inline void __write_unlock_irq(rwlock_t *lock) | ||
| 410 | { | ||
| 411 | rwlock_release(&lock->dep_map, 1, _RET_IP_); | ||
| 412 | _raw_write_unlock(lock); | ||
| 413 | local_irq_enable(); | ||
| 414 | preempt_enable(); | ||
| 415 | } | ||
| 416 | |||
| 417 | static inline void __write_unlock_bh(rwlock_t *lock) | ||
| 418 | { | ||
| 419 | rwlock_release(&lock->dep_map, 1, _RET_IP_); | ||
| 420 | _raw_write_unlock(lock); | ||
| 421 | preempt_enable_no_resched(); | ||
| 422 | local_bh_enable_ip((unsigned long)__builtin_return_address(0)); | ||
| 423 | } | ||
| 424 | |||
| 425 | static inline int __spin_trylock_bh(spinlock_t *lock) | ||
| 426 | { | ||
| 427 | local_bh_disable(); | ||
| 428 | preempt_disable(); | ||
| 429 | if (_raw_spin_trylock(lock)) { | ||
| 430 | spin_acquire(&lock->dep_map, 0, 1, _RET_IP_); | ||
| 431 | return 1; | ||
| 432 | } | ||
| 433 | preempt_enable_no_resched(); | ||
| 434 | local_bh_enable_ip((unsigned long)__builtin_return_address(0)); | ||
| 435 | return 0; | ||
| 436 | } | ||
| 437 | |||
| 63 | #endif /* __LINUX_SPINLOCK_API_SMP_H */ | 438 | #endif /* __LINUX_SPINLOCK_API_SMP_H */ |
diff --git a/include/linux/srcu.h b/include/linux/srcu.h index aca0eee53930..4765d97dcafb 100644 --- a/include/linux/srcu.h +++ b/include/linux/srcu.h | |||
| @@ -48,6 +48,7 @@ void cleanup_srcu_struct(struct srcu_struct *sp); | |||
| 48 | int srcu_read_lock(struct srcu_struct *sp) __acquires(sp); | 48 | int srcu_read_lock(struct srcu_struct *sp) __acquires(sp); |
| 49 | void srcu_read_unlock(struct srcu_struct *sp, int idx) __releases(sp); | 49 | void srcu_read_unlock(struct srcu_struct *sp, int idx) __releases(sp); |
| 50 | void synchronize_srcu(struct srcu_struct *sp); | 50 | void synchronize_srcu(struct srcu_struct *sp); |
| 51 | void synchronize_srcu_expedited(struct srcu_struct *sp); | ||
| 51 | long srcu_batches_completed(struct srcu_struct *sp); | 52 | long srcu_batches_completed(struct srcu_struct *sp); |
| 52 | 53 | ||
| 53 | #endif | 54 | #endif |
diff --git a/include/linux/ssb/ssb.h b/include/linux/ssb/ssb.h index 5ae8fa22d331..24f988547361 100644 --- a/include/linux/ssb/ssb.h +++ b/include/linux/ssb/ssb.h | |||
| @@ -27,24 +27,54 @@ struct ssb_sprom { | |||
| 27 | u8 et1mdcport; /* MDIO for enet1 */ | 27 | u8 et1mdcport; /* MDIO for enet1 */ |
| 28 | u8 board_rev; /* Board revision number from SPROM. */ | 28 | u8 board_rev; /* Board revision number from SPROM. */ |
| 29 | u8 country_code; /* Country Code */ | 29 | u8 country_code; /* Country Code */ |
| 30 | u8 ant_available_a; /* A-PHY antenna available bits (up to 4) */ | 30 | u8 ant_available_a; /* 2GHz antenna available bits (up to 4) */ |
| 31 | u8 ant_available_bg; /* B/G-PHY antenna available bits (up to 4) */ | 31 | u8 ant_available_bg; /* 5GHz antenna available bits (up to 4) */ |
| 32 | u16 pa0b0; | 32 | u16 pa0b0; |
| 33 | u16 pa0b1; | 33 | u16 pa0b1; |
| 34 | u16 pa0b2; | 34 | u16 pa0b2; |
| 35 | u16 pa1b0; | 35 | u16 pa1b0; |
| 36 | u16 pa1b1; | 36 | u16 pa1b1; |
| 37 | u16 pa1b2; | 37 | u16 pa1b2; |
| 38 | u16 pa1lob0; | ||
| 39 | u16 pa1lob1; | ||
| 40 | u16 pa1lob2; | ||
| 41 | u16 pa1hib0; | ||
| 42 | u16 pa1hib1; | ||
| 43 | u16 pa1hib2; | ||
| 38 | u8 gpio0; /* GPIO pin 0 */ | 44 | u8 gpio0; /* GPIO pin 0 */ |
| 39 | u8 gpio1; /* GPIO pin 1 */ | 45 | u8 gpio1; /* GPIO pin 1 */ |
| 40 | u8 gpio2; /* GPIO pin 2 */ | 46 | u8 gpio2; /* GPIO pin 2 */ |
| 41 | u8 gpio3; /* GPIO pin 3 */ | 47 | u8 gpio3; /* GPIO pin 3 */ |
| 42 | u16 maxpwr_a; /* A-PHY Amplifier Max Power (in dBm Q5.2) */ | 48 | u16 maxpwr_bg; /* 2.4GHz Amplifier Max Power (in dBm Q5.2) */ |
| 43 | u16 maxpwr_bg; /* B/G-PHY Amplifier Max Power (in dBm Q5.2) */ | 49 | u16 maxpwr_al; /* 5.2GHz Amplifier Max Power (in dBm Q5.2) */ |
| 50 | u16 maxpwr_a; /* 5.3GHz Amplifier Max Power (in dBm Q5.2) */ | ||
| 51 | u16 maxpwr_ah; /* 5.8GHz Amplifier Max Power (in dBm Q5.2) */ | ||
| 44 | u8 itssi_a; /* Idle TSSI Target for A-PHY */ | 52 | u8 itssi_a; /* Idle TSSI Target for A-PHY */ |
| 45 | u8 itssi_bg; /* Idle TSSI Target for B/G-PHY */ | 53 | u8 itssi_bg; /* Idle TSSI Target for B/G-PHY */ |
| 46 | u16 boardflags_lo; /* Boardflags (low 16 bits) */ | 54 | u8 tri2g; /* 2.4GHz TX isolation */ |
| 47 | u16 boardflags_hi; /* Boardflags (high 16 bits) */ | 55 | u8 tri5gl; /* 5.2GHz TX isolation */ |
| 56 | u8 tri5g; /* 5.3GHz TX isolation */ | ||
| 57 | u8 tri5gh; /* 5.8GHz TX isolation */ | ||
| 58 | u8 rxpo2g; /* 2GHz RX power offset */ | ||
| 59 | u8 rxpo5g; /* 5GHz RX power offset */ | ||
| 60 | u8 rssisav2g; /* 2GHz RSSI params */ | ||
| 61 | u8 rssismc2g; | ||
| 62 | u8 rssismf2g; | ||
| 63 | u8 bxa2g; /* 2GHz BX arch */ | ||
| 64 | u8 rssisav5g; /* 5GHz RSSI params */ | ||
| 65 | u8 rssismc5g; | ||
| 66 | u8 rssismf5g; | ||
| 67 | u8 bxa5g; /* 5GHz BX arch */ | ||
| 68 | u16 cck2gpo; /* CCK power offset */ | ||
| 69 | u32 ofdm2gpo; /* 2.4GHz OFDM power offset */ | ||
| 70 | u32 ofdm5glpo; /* 5.2GHz OFDM power offset */ | ||
| 71 | u32 ofdm5gpo; /* 5.3GHz OFDM power offset */ | ||
| 72 | u32 ofdm5ghpo; /* 5.8GHz OFDM power offset */ | ||
| 73 | u16 boardflags_lo; /* Board flags (bits 0-15) */ | ||
| 74 | u16 boardflags_hi; /* Board flags (bits 16-31) */ | ||
| 75 | u16 boardflags2_lo; /* Board flags (bits 32-47) */ | ||
| 76 | u16 boardflags2_hi; /* Board flags (bits 48-63) */ | ||
| 77 | /* TODO store board flags in a single u64 */ | ||
| 48 | 78 | ||
| 49 | /* Antenna gain values for up to 4 antennas | 79 | /* Antenna gain values for up to 4 antennas |
| 50 | * on each band. Values in dBm/4 (Q5.2). Negative gain means the | 80 | * on each band. Values in dBm/4 (Q5.2). Negative gain means the |
| @@ -58,7 +88,7 @@ struct ssb_sprom { | |||
| 58 | } ghz5; /* 5GHz band */ | 88 | } ghz5; /* 5GHz band */ |
| 59 | } antenna_gain; | 89 | } antenna_gain; |
| 60 | 90 | ||
| 61 | /* TODO - add any parameters needed from rev 2, 3, or 4 SPROMs */ | 91 | /* TODO - add any parameters needed from rev 2, 3, 4, 5 or 8 SPROMs */ |
| 62 | }; | 92 | }; |
| 63 | 93 | ||
| 64 | /* Information about the PCB the circuitry is soldered on. */ | 94 | /* Information about the PCB the circuitry is soldered on. */ |
| @@ -208,6 +238,7 @@ enum ssb_bustype { | |||
| 208 | SSB_BUSTYPE_SSB, /* This SSB bus is the system bus */ | 238 | SSB_BUSTYPE_SSB, /* This SSB bus is the system bus */ |
| 209 | SSB_BUSTYPE_PCI, /* SSB is connected to PCI bus */ | 239 | SSB_BUSTYPE_PCI, /* SSB is connected to PCI bus */ |
| 210 | SSB_BUSTYPE_PCMCIA, /* SSB is connected to PCMCIA bus */ | 240 | SSB_BUSTYPE_PCMCIA, /* SSB is connected to PCMCIA bus */ |
| 241 | SSB_BUSTYPE_SDIO, /* SSB is connected to SDIO bus */ | ||
| 211 | }; | 242 | }; |
| 212 | 243 | ||
| 213 | /* board_vendor */ | 244 | /* board_vendor */ |
| @@ -238,20 +269,33 @@ struct ssb_bus { | |||
| 238 | 269 | ||
| 239 | const struct ssb_bus_ops *ops; | 270 | const struct ssb_bus_ops *ops; |
| 240 | 271 | ||
| 241 | /* The core in the basic address register window. (PCI bus only) */ | 272 | /* The core currently mapped into the MMIO window. |
| 273 | * Not valid on all host-buses. So don't use outside of SSB. */ | ||
| 242 | struct ssb_device *mapped_device; | 274 | struct ssb_device *mapped_device; |
| 243 | /* Currently mapped PCMCIA segment. (bustype == SSB_BUSTYPE_PCMCIA only) */ | 275 | union { |
| 244 | u8 mapped_pcmcia_seg; | 276 | /* Currently mapped PCMCIA segment. (bustype == SSB_BUSTYPE_PCMCIA only) */ |
| 277 | u8 mapped_pcmcia_seg; | ||
| 278 | /* Current SSB base address window for SDIO. */ | ||
| 279 | u32 sdio_sbaddr; | ||
| 280 | }; | ||
| 245 | /* Lock for core and segment switching. | 281 | /* Lock for core and segment switching. |
| 246 | * On PCMCIA-host busses this is used to protect the whole MMIO access. */ | 282 | * On PCMCIA-host busses this is used to protect the whole MMIO access. */ |
| 247 | spinlock_t bar_lock; | 283 | spinlock_t bar_lock; |
| 248 | 284 | ||
| 249 | /* The bus this backplane is running on. */ | 285 | /* The host-bus this backplane is running on. */ |
| 250 | enum ssb_bustype bustype; | 286 | enum ssb_bustype bustype; |
| 251 | /* Pointer to the PCI bus (only valid if bustype == SSB_BUSTYPE_PCI). */ | 287 | /* Pointers to the host-bus. Check bustype before using any of these pointers. */ |
| 252 | struct pci_dev *host_pci; | 288 | union { |
| 253 | /* Pointer to the PCMCIA device (only if bustype == SSB_BUSTYPE_PCMCIA). */ | 289 | /* Pointer to the PCI bus (only valid if bustype == SSB_BUSTYPE_PCI). */ |
| 254 | struct pcmcia_device *host_pcmcia; | 290 | struct pci_dev *host_pci; |
| 291 | /* Pointer to the PCMCIA device (only if bustype == SSB_BUSTYPE_PCMCIA). */ | ||
| 292 | struct pcmcia_device *host_pcmcia; | ||
| 293 | /* Pointer to the SDIO device (only if bustype == SSB_BUSTYPE_SDIO). */ | ||
| 294 | struct sdio_func *host_sdio; | ||
| 295 | }; | ||
| 296 | |||
| 297 | /* See enum ssb_quirks */ | ||
| 298 | unsigned int quirks; | ||
| 255 | 299 | ||
| 256 | #ifdef CONFIG_SSB_SPROM | 300 | #ifdef CONFIG_SSB_SPROM |
| 257 | /* Mutex to protect the SPROM writing. */ | 301 | /* Mutex to protect the SPROM writing. */ |
| @@ -306,6 +350,11 @@ struct ssb_bus { | |||
| 306 | #endif /* DEBUG */ | 350 | #endif /* DEBUG */ |
| 307 | }; | 351 | }; |
| 308 | 352 | ||
| 353 | enum ssb_quirks { | ||
| 354 | /* SDIO connected card requires performing a read after writing a 32-bit value */ | ||
| 355 | SSB_QUIRK_SDIO_READ_AFTER_WRITE32 = (1 << 0), | ||
| 356 | }; | ||
| 357 | |||
| 309 | /* The initialization-invariants. */ | 358 | /* The initialization-invariants. */ |
| 310 | struct ssb_init_invariants { | 359 | struct ssb_init_invariants { |
| 311 | /* Versioning information about the PCB. */ | 360 | /* Versioning information about the PCB. */ |
| @@ -336,6 +385,12 @@ extern int ssb_bus_pcmciabus_register(struct ssb_bus *bus, | |||
| 336 | struct pcmcia_device *pcmcia_dev, | 385 | struct pcmcia_device *pcmcia_dev, |
| 337 | unsigned long baseaddr); | 386 | unsigned long baseaddr); |
| 338 | #endif /* CONFIG_SSB_PCMCIAHOST */ | 387 | #endif /* CONFIG_SSB_PCMCIAHOST */ |
| 388 | #ifdef CONFIG_SSB_SDIOHOST | ||
| 389 | extern int ssb_bus_sdiobus_register(struct ssb_bus *bus, | ||
| 390 | struct sdio_func *sdio_func, | ||
| 391 | unsigned int quirks); | ||
| 392 | #endif /* CONFIG_SSB_SDIOHOST */ | ||
| 393 | |||
| 339 | 394 | ||
| 340 | extern void ssb_bus_unregister(struct ssb_bus *bus); | 395 | extern void ssb_bus_unregister(struct ssb_bus *bus); |
| 341 | 396 | ||
diff --git a/include/linux/ssb/ssb_driver_chipcommon.h b/include/linux/ssb/ssb_driver_chipcommon.h index d3b1d18922f2..4e27acf0a92f 100644 --- a/include/linux/ssb/ssb_driver_chipcommon.h +++ b/include/linux/ssb/ssb_driver_chipcommon.h | |||
| @@ -629,5 +629,15 @@ extern int ssb_chipco_serial_init(struct ssb_chipcommon *cc, | |||
| 629 | /* PMU support */ | 629 | /* PMU support */ |
| 630 | extern void ssb_pmu_init(struct ssb_chipcommon *cc); | 630 | extern void ssb_pmu_init(struct ssb_chipcommon *cc); |
| 631 | 631 | ||
| 632 | enum ssb_pmu_ldo_volt_id { | ||
| 633 | LDO_PAREF = 0, | ||
| 634 | LDO_VOLT1, | ||
| 635 | LDO_VOLT2, | ||
| 636 | LDO_VOLT3, | ||
| 637 | }; | ||
| 638 | |||
| 639 | void ssb_pmu_set_ldo_voltage(struct ssb_chipcommon *cc, | ||
| 640 | enum ssb_pmu_ldo_volt_id id, u32 voltage); | ||
| 641 | void ssb_pmu_set_ldo_paref(struct ssb_chipcommon *cc, bool on); | ||
| 632 | 642 | ||
| 633 | #endif /* LINUX_SSB_CHIPCO_H_ */ | 643 | #endif /* LINUX_SSB_CHIPCO_H_ */ |
diff --git a/include/linux/ssb/ssb_regs.h b/include/linux/ssb/ssb_regs.h index a01b982b5783..9ae9082eaeb4 100644 --- a/include/linux/ssb/ssb_regs.h +++ b/include/linux/ssb/ssb_regs.h | |||
| @@ -162,7 +162,7 @@ | |||
| 162 | 162 | ||
| 163 | /* SPROM shadow area. If not otherwise noted, fields are | 163 | /* SPROM shadow area. If not otherwise noted, fields are |
| 164 | * two bytes wide. Note that the SPROM can _only_ be read | 164 | * two bytes wide. Note that the SPROM can _only_ be read |
| 165 | * in two-byte quantinies. | 165 | * in two-byte quantities. |
| 166 | */ | 166 | */ |
| 167 | #define SSB_SPROMSIZE_WORDS 64 | 167 | #define SSB_SPROMSIZE_WORDS 64 |
| 168 | #define SSB_SPROMSIZE_BYTES (SSB_SPROMSIZE_WORDS * sizeof(u16)) | 168 | #define SSB_SPROMSIZE_BYTES (SSB_SPROMSIZE_WORDS * sizeof(u16)) |
| @@ -327,8 +327,11 @@ | |||
| 327 | #define SSB_SPROM5_GPIOB_P3_SHIFT 8 | 327 | #define SSB_SPROM5_GPIOB_P3_SHIFT 8 |
| 328 | 328 | ||
| 329 | /* SPROM Revision 8 */ | 329 | /* SPROM Revision 8 */ |
| 330 | #define SSB_SPROM8_BFLLO 0x1084 /* Boardflags (low 16 bits) */ | 330 | #define SSB_SPROM8_BOARDREV 0x1082 /* Board revision */ |
| 331 | #define SSB_SPROM8_BFLHI 0x1086 /* Boardflags Hi */ | 331 | #define SSB_SPROM8_BFLLO 0x1084 /* Board flags (bits 0-15) */ |
| 332 | #define SSB_SPROM8_BFLHI 0x1086 /* Board flags (bits 16-31) */ | ||
| 333 | #define SSB_SPROM8_BFL2LO 0x1088 /* Board flags (bits 32-47) */ | ||
| 334 | #define SSB_SPROM8_BFL2HI 0x108A /* Board flags (bits 48-63) */ | ||
| 332 | #define SSB_SPROM8_IL0MAC 0x108C /* 6 byte MAC address */ | 335 | #define SSB_SPROM8_IL0MAC 0x108C /* 6 byte MAC address */ |
| 333 | #define SSB_SPROM8_CCODE 0x1092 /* 2 byte country code */ | 336 | #define SSB_SPROM8_CCODE 0x1092 /* 2 byte country code */ |
| 334 | #define SSB_SPROM8_ANTAVAIL 0x109C /* Antenna available bitfields*/ | 337 | #define SSB_SPROM8_ANTAVAIL 0x109C /* Antenna available bitfields*/ |
| @@ -354,14 +357,63 @@ | |||
| 354 | #define SSB_SPROM8_GPIOB_P2 0x00FF /* Pin 2 */ | 357 | #define SSB_SPROM8_GPIOB_P2 0x00FF /* Pin 2 */ |
| 355 | #define SSB_SPROM8_GPIOB_P3 0xFF00 /* Pin 3 */ | 358 | #define SSB_SPROM8_GPIOB_P3 0xFF00 /* Pin 3 */ |
| 356 | #define SSB_SPROM8_GPIOB_P3_SHIFT 8 | 359 | #define SSB_SPROM8_GPIOB_P3_SHIFT 8 |
| 357 | #define SSB_SPROM8_MAXP_BG 0x10C0 /* Max Power BG in path 1 */ | 360 | #define SSB_SPROM8_RSSIPARM2G 0x10A4 /* RSSI params for 2GHz */ |
| 358 | #define SSB_SPROM8_MAXP_BG_MASK 0x00FF /* Mask for Max Power BG */ | 361 | #define SSB_SPROM8_RSSISMF2G 0x000F |
| 362 | #define SSB_SPROM8_RSSISMC2G 0x00F0 | ||
| 363 | #define SSB_SPROM8_RSSISMC2G_SHIFT 4 | ||
| 364 | #define SSB_SPROM8_RSSISAV2G 0x0700 | ||
| 365 | #define SSB_SPROM8_RSSISAV2G_SHIFT 8 | ||
| 366 | #define SSB_SPROM8_BXA2G 0x1800 | ||
| 367 | #define SSB_SPROM8_BXA2G_SHIFT 11 | ||
| 368 | #define SSB_SPROM8_RSSIPARM5G 0x10A6 /* RSSI params for 5GHz */ | ||
| 369 | #define SSB_SPROM8_RSSISMF5G 0x000F | ||
| 370 | #define SSB_SPROM8_RSSISMC5G 0x00F0 | ||
| 371 | #define SSB_SPROM8_RSSISMC5G_SHIFT 4 | ||
| 372 | #define SSB_SPROM8_RSSISAV5G 0x0700 | ||
| 373 | #define SSB_SPROM8_RSSISAV5G_SHIFT 8 | ||
| 374 | #define SSB_SPROM8_BXA5G 0x1800 | ||
| 375 | #define SSB_SPROM8_BXA5G_SHIFT 11 | ||
| 376 | #define SSB_SPROM8_TRI25G 0x10A8 /* TX isolation 2.4&5.3GHz */ | ||
| 377 | #define SSB_SPROM8_TRI2G 0x00FF /* TX isolation 2.4GHz */ | ||
| 378 | #define SSB_SPROM8_TRI5G 0xFF00 /* TX isolation 5.3GHz */ | ||
| 379 | #define SSB_SPROM8_TRI5G_SHIFT 8 | ||
| 380 | #define SSB_SPROM8_TRI5GHL 0x10AA /* TX isolation 5.2/5.8GHz */ | ||
| 381 | #define SSB_SPROM8_TRI5GL 0x00FF /* TX isolation 5.2GHz */ | ||
| 382 | #define SSB_SPROM8_TRI5GH 0xFF00 /* TX isolation 5.8GHz */ | ||
| 383 | #define SSB_SPROM8_TRI5GH_SHIFT 8 | ||
| 384 | #define SSB_SPROM8_RXPO 0x10AC /* RX power offsets */ | ||
| 385 | #define SSB_SPROM8_RXPO2G 0x00FF /* 2GHz RX power offset */ | ||
| 386 | #define SSB_SPROM8_RXPO5G 0xFF00 /* 5GHz RX power offset */ | ||
| 387 | #define SSB_SPROM8_RXPO5G_SHIFT 8 | ||
| 388 | #define SSB_SPROM8_MAXP_BG 0x10C0 /* Max Power 2GHz in path 1 */ | ||
| 389 | #define SSB_SPROM8_MAXP_BG_MASK 0x00FF /* Mask for Max Power 2GHz */ | ||
| 359 | #define SSB_SPROM8_ITSSI_BG 0xFF00 /* Mask for path 1 itssi_bg */ | 390 | #define SSB_SPROM8_ITSSI_BG 0xFF00 /* Mask for path 1 itssi_bg */ |
| 360 | #define SSB_SPROM8_ITSSI_BG_SHIFT 8 | 391 | #define SSB_SPROM8_ITSSI_BG_SHIFT 8 |
| 361 | #define SSB_SPROM8_MAXP_A 0x10C8 /* Max Power A in path 1 */ | 392 | #define SSB_SPROM8_PA0B0 0x10C2 /* 2GHz power amp settings */ |
| 362 | #define SSB_SPROM8_MAXP_A_MASK 0x00FF /* Mask for Max Power A */ | 393 | #define SSB_SPROM8_PA0B1 0x10C4 |
| 394 | #define SSB_SPROM8_PA0B2 0x10C6 | ||
| 395 | #define SSB_SPROM8_MAXP_A 0x10C8 /* Max Power 5.3GHz */ | ||
| 396 | #define SSB_SPROM8_MAXP_A_MASK 0x00FF /* Mask for Max Power 5.3GHz */ | ||
| 363 | #define SSB_SPROM8_ITSSI_A 0xFF00 /* Mask for path 1 itssi_a */ | 397 | #define SSB_SPROM8_ITSSI_A 0xFF00 /* Mask for path 1 itssi_a */ |
| 364 | #define SSB_SPROM8_ITSSI_A_SHIFT 8 | 398 | #define SSB_SPROM8_ITSSI_A_SHIFT 8 |
| 399 | #define SSB_SPROM8_MAXP_AHL 0x10CA /* Max Power 5.2/5.8GHz */ | ||
| 400 | #define SSB_SPROM8_MAXP_AH_MASK 0x00FF /* Mask for Max Power 5.8GHz */ | ||
| 401 | #define SSB_SPROM8_MAXP_AL_MASK 0xFF00 /* Mask for Max Power 5.2GHz */ | ||
| 402 | #define SSB_SPROM8_MAXP_AL_SHIFT 8 | ||
| 403 | #define SSB_SPROM8_PA1B0 0x10CC /* 5.3GHz power amp settings */ | ||
| 404 | #define SSB_SPROM8_PA1B1 0x10CE | ||
| 405 | #define SSB_SPROM8_PA1B2 0x10D0 | ||
| 406 | #define SSB_SPROM8_PA1LOB0 0x10D2 /* 5.2GHz power amp settings */ | ||
| 407 | #define SSB_SPROM8_PA1LOB1 0x10D4 | ||
| 408 | #define SSB_SPROM8_PA1LOB2 0x10D6 | ||
| 409 | #define SSB_SPROM8_PA1HIB0 0x10D8 /* 5.8GHz power amp settings */ | ||
| 410 | #define SSB_SPROM8_PA1HIB1 0x10DA | ||
| 411 | #define SSB_SPROM8_PA1HIB2 0x10DC | ||
| 412 | #define SSB_SPROM8_CCK2GPO 0x1140 /* CCK power offset */ | ||
| 413 | #define SSB_SPROM8_OFDM2GPO 0x1142 /* 2.4GHz OFDM power offset */ | ||
| 414 | #define SSB_SPROM8_OFDM5GPO 0x1146 /* 5.3GHz OFDM power offset */ | ||
| 415 | #define SSB_SPROM8_OFDM5GLPO 0x114A /* 5.2GHz OFDM power offset */ | ||
| 416 | #define SSB_SPROM8_OFDM5GHPO 0x114E /* 5.8GHz OFDM power offset */ | ||
| 365 | 417 | ||
| 366 | /* Values for SSB_SPROM1_BINF_CCODE */ | 418 | /* Values for SSB_SPROM1_BINF_CCODE */ |
| 367 | enum { | 419 | enum { |
diff --git a/include/linux/string.h b/include/linux/string.h index 489019ef1694..b8508868d5ad 100644 --- a/include/linux/string.h +++ b/include/linux/string.h | |||
| @@ -62,7 +62,7 @@ extern char * strnchr(const char *, size_t, int); | |||
| 62 | #ifndef __HAVE_ARCH_STRRCHR | 62 | #ifndef __HAVE_ARCH_STRRCHR |
| 63 | extern char * strrchr(const char *,int); | 63 | extern char * strrchr(const char *,int); |
| 64 | #endif | 64 | #endif |
| 65 | extern char * strstrip(char *); | 65 | extern char * __must_check strstrip(char *); |
| 66 | #ifndef __HAVE_ARCH_STRSTR | 66 | #ifndef __HAVE_ARCH_STRSTR |
| 67 | extern char * strstr(const char *,const char *); | 67 | extern char * strstr(const char *,const char *); |
| 68 | #endif | 68 | #endif |
diff --git a/include/linux/sunrpc/auth.h b/include/linux/sunrpc/auth.h index 3f632182d8eb..996df4dac7d4 100644 --- a/include/linux/sunrpc/auth.h +++ b/include/linux/sunrpc/auth.h | |||
| @@ -111,7 +111,7 @@ struct rpc_credops { | |||
| 111 | void (*crdestroy)(struct rpc_cred *); | 111 | void (*crdestroy)(struct rpc_cred *); |
| 112 | 112 | ||
| 113 | int (*crmatch)(struct auth_cred *, struct rpc_cred *, int); | 113 | int (*crmatch)(struct auth_cred *, struct rpc_cred *, int); |
| 114 | void (*crbind)(struct rpc_task *, struct rpc_cred *); | 114 | void (*crbind)(struct rpc_task *, struct rpc_cred *, int); |
| 115 | __be32 * (*crmarshal)(struct rpc_task *, __be32 *); | 115 | __be32 * (*crmarshal)(struct rpc_task *, __be32 *); |
| 116 | int (*crrefresh)(struct rpc_task *); | 116 | int (*crrefresh)(struct rpc_task *); |
| 117 | __be32 * (*crvalidate)(struct rpc_task *, __be32 *); | 117 | __be32 * (*crvalidate)(struct rpc_task *, __be32 *); |
| @@ -140,7 +140,7 @@ struct rpc_cred * rpcauth_lookup_credcache(struct rpc_auth *, struct auth_cred * | |||
| 140 | void rpcauth_init_cred(struct rpc_cred *, const struct auth_cred *, struct rpc_auth *, const struct rpc_credops *); | 140 | void rpcauth_init_cred(struct rpc_cred *, const struct auth_cred *, struct rpc_auth *, const struct rpc_credops *); |
| 141 | struct rpc_cred * rpcauth_lookupcred(struct rpc_auth *, int); | 141 | struct rpc_cred * rpcauth_lookupcred(struct rpc_auth *, int); |
| 142 | void rpcauth_bindcred(struct rpc_task *, struct rpc_cred *, int); | 142 | void rpcauth_bindcred(struct rpc_task *, struct rpc_cred *, int); |
| 143 | void rpcauth_generic_bind_cred(struct rpc_task *, struct rpc_cred *); | 143 | void rpcauth_generic_bind_cred(struct rpc_task *, struct rpc_cred *, int); |
| 144 | void put_rpccred(struct rpc_cred *); | 144 | void put_rpccred(struct rpc_cred *); |
| 145 | void rpcauth_unbindcred(struct rpc_task *); | 145 | void rpcauth_unbindcred(struct rpc_task *); |
| 146 | __be32 * rpcauth_marshcred(struct rpc_task *, __be32 *); | 146 | __be32 * rpcauth_marshcred(struct rpc_task *, __be32 *); |
diff --git a/include/linux/sunrpc/cache.h b/include/linux/sunrpc/cache.h index 2d8b211b9324..6f52b4d7c447 100644 --- a/include/linux/sunrpc/cache.h +++ b/include/linux/sunrpc/cache.h | |||
| @@ -59,6 +59,15 @@ struct cache_head { | |||
| 59 | 59 | ||
| 60 | #define CACHE_NEW_EXPIRY 120 /* keep new things pending confirmation for 120 seconds */ | 60 | #define CACHE_NEW_EXPIRY 120 /* keep new things pending confirmation for 120 seconds */ |
| 61 | 61 | ||
| 62 | struct cache_detail_procfs { | ||
| 63 | struct proc_dir_entry *proc_ent; | ||
| 64 | struct proc_dir_entry *flush_ent, *channel_ent, *content_ent; | ||
| 65 | }; | ||
| 66 | |||
| 67 | struct cache_detail_pipefs { | ||
| 68 | struct dentry *dir; | ||
| 69 | }; | ||
| 70 | |||
| 62 | struct cache_detail { | 71 | struct cache_detail { |
| 63 | struct module * owner; | 72 | struct module * owner; |
| 64 | int hash_size; | 73 | int hash_size; |
| @@ -70,15 +79,17 @@ struct cache_detail { | |||
| 70 | char *name; | 79 | char *name; |
| 71 | void (*cache_put)(struct kref *); | 80 | void (*cache_put)(struct kref *); |
| 72 | 81 | ||
| 73 | void (*cache_request)(struct cache_detail *cd, | 82 | int (*cache_upcall)(struct cache_detail *, |
| 74 | struct cache_head *h, | 83 | struct cache_head *); |
| 75 | char **bpp, int *blen); | 84 | |
| 76 | int (*cache_parse)(struct cache_detail *, | 85 | int (*cache_parse)(struct cache_detail *, |
| 77 | char *buf, int len); | 86 | char *buf, int len); |
| 78 | 87 | ||
| 79 | int (*cache_show)(struct seq_file *m, | 88 | int (*cache_show)(struct seq_file *m, |
| 80 | struct cache_detail *cd, | 89 | struct cache_detail *cd, |
| 81 | struct cache_head *h); | 90 | struct cache_head *h); |
| 91 | void (*warn_no_listener)(struct cache_detail *cd, | ||
| 92 | int has_died); | ||
| 82 | 93 | ||
| 83 | struct cache_head * (*alloc)(void); | 94 | struct cache_head * (*alloc)(void); |
| 84 | int (*match)(struct cache_head *orig, struct cache_head *new); | 95 | int (*match)(struct cache_head *orig, struct cache_head *new); |
| @@ -96,13 +107,15 @@ struct cache_detail { | |||
| 96 | 107 | ||
| 97 | /* fields for communication over channel */ | 108 | /* fields for communication over channel */ |
| 98 | struct list_head queue; | 109 | struct list_head queue; |
| 99 | struct proc_dir_entry *proc_ent; | ||
| 100 | struct proc_dir_entry *flush_ent, *channel_ent, *content_ent; | ||
| 101 | 110 | ||
| 102 | atomic_t readers; /* how many time is /chennel open */ | 111 | atomic_t readers; /* how many time is /chennel open */ |
| 103 | time_t last_close; /* if no readers, when did last close */ | 112 | time_t last_close; /* if no readers, when did last close */ |
| 104 | time_t last_warn; /* when we last warned about no readers */ | 113 | time_t last_warn; /* when we last warned about no readers */ |
| 105 | void (*warn_no_listener)(struct cache_detail *cd); | 114 | |
| 115 | union { | ||
| 116 | struct cache_detail_procfs procfs; | ||
| 117 | struct cache_detail_pipefs pipefs; | ||
| 118 | } u; | ||
| 106 | }; | 119 | }; |
| 107 | 120 | ||
| 108 | 121 | ||
| @@ -127,6 +140,10 @@ struct cache_deferred_req { | |||
| 127 | }; | 140 | }; |
| 128 | 141 | ||
| 129 | 142 | ||
| 143 | extern const struct file_operations cache_file_operations_pipefs; | ||
| 144 | extern const struct file_operations content_file_operations_pipefs; | ||
| 145 | extern const struct file_operations cache_flush_operations_pipefs; | ||
| 146 | |||
| 130 | extern struct cache_head * | 147 | extern struct cache_head * |
| 131 | sunrpc_cache_lookup(struct cache_detail *detail, | 148 | sunrpc_cache_lookup(struct cache_detail *detail, |
| 132 | struct cache_head *key, int hash); | 149 | struct cache_head *key, int hash); |
| @@ -134,6 +151,13 @@ extern struct cache_head * | |||
| 134 | sunrpc_cache_update(struct cache_detail *detail, | 151 | sunrpc_cache_update(struct cache_detail *detail, |
| 135 | struct cache_head *new, struct cache_head *old, int hash); | 152 | struct cache_head *new, struct cache_head *old, int hash); |
| 136 | 153 | ||
| 154 | extern int | ||
| 155 | sunrpc_cache_pipe_upcall(struct cache_detail *detail, struct cache_head *h, | ||
| 156 | void (*cache_request)(struct cache_detail *, | ||
| 157 | struct cache_head *, | ||
| 158 | char **, | ||
| 159 | int *)); | ||
| 160 | |||
| 137 | 161 | ||
| 138 | extern void cache_clean_deferred(void *owner); | 162 | extern void cache_clean_deferred(void *owner); |
| 139 | 163 | ||
| @@ -171,6 +195,10 @@ extern void cache_purge(struct cache_detail *detail); | |||
| 171 | extern int cache_register(struct cache_detail *cd); | 195 | extern int cache_register(struct cache_detail *cd); |
| 172 | extern void cache_unregister(struct cache_detail *cd); | 196 | extern void cache_unregister(struct cache_detail *cd); |
| 173 | 197 | ||
| 198 | extern int sunrpc_cache_register_pipefs(struct dentry *parent, const char *, | ||
| 199 | mode_t, struct cache_detail *); | ||
| 200 | extern void sunrpc_cache_unregister_pipefs(struct cache_detail *); | ||
| 201 | |||
| 174 | extern void qword_add(char **bpp, int *lp, char *str); | 202 | extern void qword_add(char **bpp, int *lp, char *str); |
| 175 | extern void qword_addhex(char **bpp, int *lp, char *buf, int blen); | 203 | extern void qword_addhex(char **bpp, int *lp, char *buf, int blen); |
| 176 | extern int qword_get(char **bpp, char *dest, int bufsize); | 204 | extern int qword_get(char **bpp, char *dest, int bufsize); |
diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h index 37881f1a0bd7..8ed9642a5a76 100644 --- a/include/linux/sunrpc/clnt.h +++ b/include/linux/sunrpc/clnt.h | |||
| @@ -9,6 +9,10 @@ | |||
| 9 | #ifndef _LINUX_SUNRPC_CLNT_H | 9 | #ifndef _LINUX_SUNRPC_CLNT_H |
| 10 | #define _LINUX_SUNRPC_CLNT_H | 10 | #define _LINUX_SUNRPC_CLNT_H |
| 11 | 11 | ||
| 12 | #include <linux/socket.h> | ||
| 13 | #include <linux/in.h> | ||
| 14 | #include <linux/in6.h> | ||
| 15 | |||
| 12 | #include <linux/sunrpc/msg_prot.h> | 16 | #include <linux/sunrpc/msg_prot.h> |
| 13 | #include <linux/sunrpc/sched.h> | 17 | #include <linux/sunrpc/sched.h> |
| 14 | #include <linux/sunrpc/xprt.h> | 18 | #include <linux/sunrpc/xprt.h> |
| @@ -17,6 +21,8 @@ | |||
| 17 | #include <linux/sunrpc/xdr.h> | 21 | #include <linux/sunrpc/xdr.h> |
| 18 | #include <linux/sunrpc/timer.h> | 22 | #include <linux/sunrpc/timer.h> |
| 19 | #include <asm/signal.h> | 23 | #include <asm/signal.h> |
| 24 | #include <linux/path.h> | ||
| 25 | #include <net/ipv6.h> | ||
| 20 | 26 | ||
| 21 | struct rpc_inode; | 27 | struct rpc_inode; |
| 22 | 28 | ||
| @@ -50,9 +56,7 @@ struct rpc_clnt { | |||
| 50 | 56 | ||
| 51 | int cl_nodelen; /* nodename length */ | 57 | int cl_nodelen; /* nodename length */ |
| 52 | char cl_nodename[UNX_MAXNODENAME]; | 58 | char cl_nodename[UNX_MAXNODENAME]; |
| 53 | char cl_pathname[30];/* Path in rpc_pipe_fs */ | 59 | struct path cl_path; |
| 54 | struct vfsmount * cl_vfsmnt; | ||
| 55 | struct dentry * cl_dentry; /* inode */ | ||
| 56 | struct rpc_clnt * cl_parent; /* Points to parent of clones */ | 60 | struct rpc_clnt * cl_parent; /* Points to parent of clones */ |
| 57 | struct rpc_rtt cl_rtt_default; | 61 | struct rpc_rtt cl_rtt_default; |
| 58 | struct rpc_timeout cl_timeout_default; | 62 | struct rpc_timeout cl_timeout_default; |
| @@ -110,6 +114,7 @@ struct rpc_create_args { | |||
| 110 | rpc_authflavor_t authflavor; | 114 | rpc_authflavor_t authflavor; |
| 111 | unsigned long flags; | 115 | unsigned long flags; |
| 112 | char *client_name; | 116 | char *client_name; |
| 117 | struct svc_xprt *bc_xprt; /* NFSv4.1 backchannel */ | ||
| 113 | }; | 118 | }; |
| 114 | 119 | ||
| 115 | /* Values for "flags" field */ | 120 | /* Values for "flags" field */ |
| @@ -151,5 +156,151 @@ void rpc_force_rebind(struct rpc_clnt *); | |||
| 151 | size_t rpc_peeraddr(struct rpc_clnt *, struct sockaddr *, size_t); | 156 | size_t rpc_peeraddr(struct rpc_clnt *, struct sockaddr *, size_t); |
| 152 | const char *rpc_peeraddr2str(struct rpc_clnt *, enum rpc_display_format_t); | 157 | const char *rpc_peeraddr2str(struct rpc_clnt *, enum rpc_display_format_t); |
| 153 | 158 | ||
| 159 | size_t rpc_ntop(const struct sockaddr *, char *, const size_t); | ||
| 160 | size_t rpc_pton(const char *, const size_t, | ||
| 161 | struct sockaddr *, const size_t); | ||
| 162 | char * rpc_sockaddr2uaddr(const struct sockaddr *); | ||
| 163 | size_t rpc_uaddr2sockaddr(const char *, const size_t, | ||
| 164 | struct sockaddr *, const size_t); | ||
| 165 | |||
| 166 | static inline unsigned short rpc_get_port(const struct sockaddr *sap) | ||
| 167 | { | ||
| 168 | switch (sap->sa_family) { | ||
| 169 | case AF_INET: | ||
| 170 | return ntohs(((struct sockaddr_in *)sap)->sin_port); | ||
| 171 | case AF_INET6: | ||
| 172 | return ntohs(((struct sockaddr_in6 *)sap)->sin6_port); | ||
| 173 | } | ||
| 174 | return 0; | ||
| 175 | } | ||
| 176 | |||
| 177 | static inline void rpc_set_port(struct sockaddr *sap, | ||
| 178 | const unsigned short port) | ||
| 179 | { | ||
| 180 | switch (sap->sa_family) { | ||
| 181 | case AF_INET: | ||
| 182 | ((struct sockaddr_in *)sap)->sin_port = htons(port); | ||
| 183 | break; | ||
| 184 | case AF_INET6: | ||
| 185 | ((struct sockaddr_in6 *)sap)->sin6_port = htons(port); | ||
| 186 | break; | ||
| 187 | } | ||
| 188 | } | ||
| 189 | |||
| 190 | #define IPV6_SCOPE_DELIMITER '%' | ||
| 191 | #define IPV6_SCOPE_ID_LEN sizeof("%nnnnnnnnnn") | ||
| 192 | |||
| 193 | static inline bool __rpc_cmp_addr4(const struct sockaddr *sap1, | ||
| 194 | const struct sockaddr *sap2) | ||
| 195 | { | ||
| 196 | const struct sockaddr_in *sin1 = (const struct sockaddr_in *)sap1; | ||
| 197 | const struct sockaddr_in *sin2 = (const struct sockaddr_in *)sap2; | ||
| 198 | |||
| 199 | return sin1->sin_addr.s_addr == sin2->sin_addr.s_addr; | ||
| 200 | } | ||
| 201 | |||
| 202 | static inline bool __rpc_copy_addr4(struct sockaddr *dst, | ||
| 203 | const struct sockaddr *src) | ||
| 204 | { | ||
| 205 | const struct sockaddr_in *ssin = (struct sockaddr_in *) src; | ||
| 206 | struct sockaddr_in *dsin = (struct sockaddr_in *) dst; | ||
| 207 | |||
| 208 | dsin->sin_family = ssin->sin_family; | ||
| 209 | dsin->sin_addr.s_addr = ssin->sin_addr.s_addr; | ||
| 210 | return true; | ||
| 211 | } | ||
| 212 | |||
| 213 | #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) | ||
| 214 | static inline bool __rpc_cmp_addr6(const struct sockaddr *sap1, | ||
| 215 | const struct sockaddr *sap2) | ||
| 216 | { | ||
| 217 | const struct sockaddr_in6 *sin1 = (const struct sockaddr_in6 *)sap1; | ||
| 218 | const struct sockaddr_in6 *sin2 = (const struct sockaddr_in6 *)sap2; | ||
| 219 | return ipv6_addr_equal(&sin1->sin6_addr, &sin2->sin6_addr); | ||
| 220 | } | ||
| 221 | |||
| 222 | static inline bool __rpc_copy_addr6(struct sockaddr *dst, | ||
| 223 | const struct sockaddr *src) | ||
| 224 | { | ||
| 225 | const struct sockaddr_in6 *ssin6 = (const struct sockaddr_in6 *) src; | ||
| 226 | struct sockaddr_in6 *dsin6 = (struct sockaddr_in6 *) dst; | ||
| 227 | |||
| 228 | dsin6->sin6_family = ssin6->sin6_family; | ||
| 229 | ipv6_addr_copy(&dsin6->sin6_addr, &ssin6->sin6_addr); | ||
| 230 | return true; | ||
| 231 | } | ||
| 232 | #else /* !(CONFIG_IPV6 || CONFIG_IPV6_MODULE) */ | ||
| 233 | static inline bool __rpc_cmp_addr6(const struct sockaddr *sap1, | ||
| 234 | const struct sockaddr *sap2) | ||
| 235 | { | ||
| 236 | return false; | ||
| 237 | } | ||
| 238 | |||
| 239 | static inline bool __rpc_copy_addr6(struct sockaddr *dst, | ||
| 240 | const struct sockaddr *src) | ||
| 241 | { | ||
| 242 | return false; | ||
| 243 | } | ||
| 244 | #endif /* !(CONFIG_IPV6 || CONFIG_IPV6_MODULE) */ | ||
| 245 | |||
| 246 | /** | ||
| 247 | * rpc_cmp_addr - compare the address portion of two sockaddrs. | ||
| 248 | * @sap1: first sockaddr | ||
| 249 | * @sap2: second sockaddr | ||
| 250 | * | ||
| 251 | * Just compares the family and address portion. Ignores port, scope, etc. | ||
| 252 | * Returns true if the addrs are equal, false if they aren't. | ||
| 253 | */ | ||
| 254 | static inline bool rpc_cmp_addr(const struct sockaddr *sap1, | ||
| 255 | const struct sockaddr *sap2) | ||
| 256 | { | ||
| 257 | if (sap1->sa_family == sap2->sa_family) { | ||
| 258 | switch (sap1->sa_family) { | ||
| 259 | case AF_INET: | ||
| 260 | return __rpc_cmp_addr4(sap1, sap2); | ||
| 261 | case AF_INET6: | ||
| 262 | return __rpc_cmp_addr6(sap1, sap2); | ||
| 263 | } | ||
| 264 | } | ||
| 265 | return false; | ||
| 266 | } | ||
| 267 | |||
| 268 | /** | ||
| 269 | * rpc_copy_addr - copy the address portion of one sockaddr to another | ||
| 270 | * @dst: destination sockaddr | ||
| 271 | * @src: source sockaddr | ||
| 272 | * | ||
| 273 | * Just copies the address portion and family. Ignores port, scope, etc. | ||
| 274 | * Caller is responsible for making certain that dst is large enough to hold | ||
| 275 | * the address in src. Returns true if address family is supported. Returns | ||
| 276 | * false otherwise. | ||
| 277 | */ | ||
| 278 | static inline bool rpc_copy_addr(struct sockaddr *dst, | ||
| 279 | const struct sockaddr *src) | ||
| 280 | { | ||
| 281 | switch (src->sa_family) { | ||
| 282 | case AF_INET: | ||
| 283 | return __rpc_copy_addr4(dst, src); | ||
| 284 | case AF_INET6: | ||
| 285 | return __rpc_copy_addr6(dst, src); | ||
| 286 | } | ||
| 287 | return false; | ||
| 288 | } | ||
| 289 | |||
| 290 | /** | ||
| 291 | * rpc_get_scope_id - return scopeid for a given sockaddr | ||
| 292 | * @sa: sockaddr to get scopeid from | ||
| 293 | * | ||
| 294 | * Returns the value of the sin6_scope_id for AF_INET6 addrs, or 0 if | ||
| 295 | * not an AF_INET6 address. | ||
| 296 | */ | ||
| 297 | static inline u32 rpc_get_scope_id(const struct sockaddr *sa) | ||
| 298 | { | ||
| 299 | if (sa->sa_family != AF_INET6) | ||
| 300 | return 0; | ||
| 301 | |||
| 302 | return ((struct sockaddr_in6 *) sa)->sin6_scope_id; | ||
| 303 | } | ||
| 304 | |||
| 154 | #endif /* __KERNEL__ */ | 305 | #endif /* __KERNEL__ */ |
| 155 | #endif /* _LINUX_SUNRPC_CLNT_H */ | 306 | #endif /* _LINUX_SUNRPC_CLNT_H */ |
diff --git a/include/linux/sunrpc/msg_prot.h b/include/linux/sunrpc/msg_prot.h index 70df4f1d8847..77e624883393 100644 --- a/include/linux/sunrpc/msg_prot.h +++ b/include/linux/sunrpc/msg_prot.h | |||
| @@ -189,7 +189,22 @@ typedef __be32 rpc_fraghdr; | |||
| 189 | * Additionally, the two alternative forms specified in Section 2.2 of | 189 | * Additionally, the two alternative forms specified in Section 2.2 of |
| 190 | * [RFC2373] are also acceptable. | 190 | * [RFC2373] are also acceptable. |
| 191 | */ | 191 | */ |
| 192 | #define RPCBIND_MAXUADDRLEN (56u) | 192 | |
| 193 | #include <linux/inet.h> | ||
| 194 | |||
| 195 | /* Maximum size of the port number part of a universal address */ | ||
| 196 | #define RPCBIND_MAXUADDRPLEN sizeof(".255.255") | ||
| 197 | |||
| 198 | /* Maximum size of an IPv4 universal address */ | ||
| 199 | #define RPCBIND_MAXUADDR4LEN \ | ||
| 200 | (INET_ADDRSTRLEN + RPCBIND_MAXUADDRPLEN) | ||
| 201 | |||
| 202 | /* Maximum size of an IPv6 universal address */ | ||
| 203 | #define RPCBIND_MAXUADDR6LEN \ | ||
| 204 | (INET6_ADDRSTRLEN + RPCBIND_MAXUADDRPLEN) | ||
| 205 | |||
| 206 | /* Assume INET6_ADDRSTRLEN will always be larger than INET_ADDRSTRLEN... */ | ||
| 207 | #define RPCBIND_MAXUADDRLEN RPCBIND_MAXUADDR6LEN | ||
| 193 | 208 | ||
| 194 | #endif /* __KERNEL__ */ | 209 | #endif /* __KERNEL__ */ |
| 195 | #endif /* _LINUX_SUNRPC_MSGPROT_H_ */ | 210 | #endif /* _LINUX_SUNRPC_MSGPROT_H_ */ |
diff --git a/include/linux/sunrpc/rpc_pipe_fs.h b/include/linux/sunrpc/rpc_pipe_fs.h index cea764c2359f..cf14db975da0 100644 --- a/include/linux/sunrpc/rpc_pipe_fs.h +++ b/include/linux/sunrpc/rpc_pipe_fs.h | |||
| @@ -3,6 +3,8 @@ | |||
| 3 | 3 | ||
| 4 | #ifdef __KERNEL__ | 4 | #ifdef __KERNEL__ |
| 5 | 5 | ||
| 6 | #include <linux/workqueue.h> | ||
| 7 | |||
| 6 | struct rpc_pipe_msg { | 8 | struct rpc_pipe_msg { |
| 7 | struct list_head list; | 9 | struct list_head list; |
| 8 | void *data; | 10 | void *data; |
| @@ -32,8 +34,8 @@ struct rpc_inode { | |||
| 32 | wait_queue_head_t waitq; | 34 | wait_queue_head_t waitq; |
| 33 | #define RPC_PIPE_WAIT_FOR_OPEN 1 | 35 | #define RPC_PIPE_WAIT_FOR_OPEN 1 |
| 34 | int flags; | 36 | int flags; |
| 35 | struct rpc_pipe_ops *ops; | ||
| 36 | struct delayed_work queue_timeout; | 37 | struct delayed_work queue_timeout; |
| 38 | const struct rpc_pipe_ops *ops; | ||
| 37 | }; | 39 | }; |
| 38 | 40 | ||
| 39 | static inline struct rpc_inode * | 41 | static inline struct rpc_inode * |
| @@ -44,9 +46,19 @@ RPC_I(struct inode *inode) | |||
| 44 | 46 | ||
| 45 | extern int rpc_queue_upcall(struct inode *, struct rpc_pipe_msg *); | 47 | extern int rpc_queue_upcall(struct inode *, struct rpc_pipe_msg *); |
| 46 | 48 | ||
| 47 | extern struct dentry *rpc_mkdir(char *, struct rpc_clnt *); | 49 | struct rpc_clnt; |
| 48 | extern int rpc_rmdir(struct dentry *); | 50 | extern struct dentry *rpc_create_client_dir(struct dentry *, struct qstr *, struct rpc_clnt *); |
| 49 | extern struct dentry *rpc_mkpipe(struct dentry *, const char *, void *, struct rpc_pipe_ops *, int flags); | 51 | extern int rpc_remove_client_dir(struct dentry *); |
| 52 | |||
| 53 | struct cache_detail; | ||
| 54 | extern struct dentry *rpc_create_cache_dir(struct dentry *, | ||
| 55 | struct qstr *, | ||
| 56 | mode_t umode, | ||
| 57 | struct cache_detail *); | ||
| 58 | extern void rpc_remove_cache_dir(struct dentry *); | ||
| 59 | |||
| 60 | extern struct dentry *rpc_mkpipe(struct dentry *, const char *, void *, | ||
| 61 | const struct rpc_pipe_ops *, int flags); | ||
| 50 | extern int rpc_unlink(struct dentry *); | 62 | extern int rpc_unlink(struct dentry *); |
| 51 | extern struct vfsmount *rpc_get_mount(void); | 63 | extern struct vfsmount *rpc_get_mount(void); |
| 52 | extern void rpc_put_mount(void); | 64 | extern void rpc_put_mount(void); |
diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h index ea8009695c69..52e8cb0a7569 100644 --- a/include/linux/sunrpc/svc.h +++ b/include/linux/sunrpc/svc.h | |||
| @@ -94,8 +94,6 @@ struct svc_serv { | |||
| 94 | struct module * sv_module; /* optional module to count when | 94 | struct module * sv_module; /* optional module to count when |
| 95 | * adding threads */ | 95 | * adding threads */ |
| 96 | svc_thread_fn sv_function; /* main function for threads */ | 96 | svc_thread_fn sv_function; /* main function for threads */ |
| 97 | unsigned int sv_drc_max_pages; /* Total pages for DRC */ | ||
| 98 | unsigned int sv_drc_pages_used;/* DRC pages used */ | ||
| 99 | #if defined(CONFIG_NFS_V4_1) | 97 | #if defined(CONFIG_NFS_V4_1) |
| 100 | struct list_head sv_cb_list; /* queue for callback requests | 98 | struct list_head sv_cb_list; /* queue for callback requests |
| 101 | * that arrive over the same | 99 | * that arrive over the same |
diff --git a/include/linux/sunrpc/svc_xprt.h b/include/linux/sunrpc/svc_xprt.h index 2223ae0b5ed5..5f4e18b3ce73 100644 --- a/include/linux/sunrpc/svc_xprt.h +++ b/include/linux/sunrpc/svc_xprt.h | |||
| @@ -65,6 +65,7 @@ struct svc_xprt { | |||
| 65 | size_t xpt_locallen; /* length of address */ | 65 | size_t xpt_locallen; /* length of address */ |
| 66 | struct sockaddr_storage xpt_remote; /* remote peer's address */ | 66 | struct sockaddr_storage xpt_remote; /* remote peer's address */ |
| 67 | size_t xpt_remotelen; /* length of address */ | 67 | size_t xpt_remotelen; /* length of address */ |
| 68 | struct rpc_wait_queue xpt_bc_pending; /* backchannel wait queue */ | ||
| 68 | }; | 69 | }; |
| 69 | 70 | ||
| 70 | int svc_reg_xprt_class(struct svc_xprt_class *); | 71 | int svc_reg_xprt_class(struct svc_xprt_class *); |
diff --git a/include/linux/sunrpc/svcsock.h b/include/linux/sunrpc/svcsock.h index 04dba23c59f2..1b353a76c304 100644 --- a/include/linux/sunrpc/svcsock.h +++ b/include/linux/sunrpc/svcsock.h | |||
| @@ -28,6 +28,7 @@ struct svc_sock { | |||
| 28 | /* private TCP part */ | 28 | /* private TCP part */ |
| 29 | u32 sk_reclen; /* length of record */ | 29 | u32 sk_reclen; /* length of record */ |
| 30 | u32 sk_tcplen; /* current read length */ | 30 | u32 sk_tcplen; /* current read length */ |
| 31 | struct rpc_xprt *sk_bc_xprt; /* NFSv4.1 backchannel xprt */ | ||
| 31 | }; | 32 | }; |
| 32 | 33 | ||
| 33 | /* | 34 | /* |
diff --git a/include/linux/sunrpc/xdr.h b/include/linux/sunrpc/xdr.h index b99c625fddfe..f5cc0898bc53 100644 --- a/include/linux/sunrpc/xdr.h +++ b/include/linux/sunrpc/xdr.h | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | 11 | ||
| 12 | #include <linux/uio.h> | 12 | #include <linux/uio.h> |
| 13 | #include <asm/byteorder.h> | 13 | #include <asm/byteorder.h> |
| 14 | #include <asm/unaligned.h> | ||
| 14 | #include <linux/scatterlist.h> | 15 | #include <linux/scatterlist.h> |
| 15 | 16 | ||
| 16 | /* | 17 | /* |
| @@ -117,17 +118,15 @@ static inline __be32 *xdr_encode_array(__be32 *p, const void *s, unsigned int le | |||
| 117 | static inline __be32 * | 118 | static inline __be32 * |
| 118 | xdr_encode_hyper(__be32 *p, __u64 val) | 119 | xdr_encode_hyper(__be32 *p, __u64 val) |
| 119 | { | 120 | { |
| 120 | *p++ = htonl(val >> 32); | 121 | put_unaligned_be64(val, p); |
| 121 | *p++ = htonl(val & 0xFFFFFFFF); | 122 | return p + 2; |
| 122 | return p; | ||
| 123 | } | 123 | } |
| 124 | 124 | ||
| 125 | static inline __be32 * | 125 | static inline __be32 * |
| 126 | xdr_decode_hyper(__be32 *p, __u64 *valp) | 126 | xdr_decode_hyper(__be32 *p, __u64 *valp) |
| 127 | { | 127 | { |
| 128 | *valp = ((__u64) ntohl(*p++)) << 32; | 128 | *valp = get_unaligned_be64(p); |
| 129 | *valp |= ntohl(*p++); | 129 | return p + 2; |
| 130 | return p; | ||
| 131 | } | 130 | } |
| 132 | 131 | ||
| 133 | /* | 132 | /* |
diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h index 1175d58efc2e..6f9457a75b8f 100644 --- a/include/linux/sunrpc/xprt.h +++ b/include/linux/sunrpc/xprt.h | |||
| @@ -38,10 +38,8 @@ enum rpc_display_format_t { | |||
| 38 | RPC_DISPLAY_ADDR = 0, | 38 | RPC_DISPLAY_ADDR = 0, |
| 39 | RPC_DISPLAY_PORT, | 39 | RPC_DISPLAY_PORT, |
| 40 | RPC_DISPLAY_PROTO, | 40 | RPC_DISPLAY_PROTO, |
| 41 | RPC_DISPLAY_ALL, | ||
| 42 | RPC_DISPLAY_HEX_ADDR, | 41 | RPC_DISPLAY_HEX_ADDR, |
| 43 | RPC_DISPLAY_HEX_PORT, | 42 | RPC_DISPLAY_HEX_PORT, |
| 44 | RPC_DISPLAY_UNIVERSAL_ADDR, | ||
| 45 | RPC_DISPLAY_NETID, | 43 | RPC_DISPLAY_NETID, |
| 46 | RPC_DISPLAY_MAX, | 44 | RPC_DISPLAY_MAX, |
| 47 | }; | 45 | }; |
| @@ -126,6 +124,23 @@ struct rpc_xprt_ops { | |||
| 126 | void (*print_stats)(struct rpc_xprt *xprt, struct seq_file *seq); | 124 | void (*print_stats)(struct rpc_xprt *xprt, struct seq_file *seq); |
| 127 | }; | 125 | }; |
| 128 | 126 | ||
| 127 | /* | ||
| 128 | * RPC transport identifiers | ||
| 129 | * | ||
| 130 | * To preserve compatibility with the historical use of raw IP protocol | ||
| 131 | * id's for transport selection, UDP and TCP identifiers are specified | ||
| 132 | * with the previous values. No such restriction exists for new transports, | ||
| 133 | * except that they may not collide with these values (17 and 6, | ||
| 134 | * respectively). | ||
| 135 | */ | ||
| 136 | #define XPRT_TRANSPORT_BC (1 << 31) | ||
| 137 | enum xprt_transports { | ||
| 138 | XPRT_TRANSPORT_UDP = IPPROTO_UDP, | ||
| 139 | XPRT_TRANSPORT_TCP = IPPROTO_TCP, | ||
| 140 | XPRT_TRANSPORT_BC_TCP = IPPROTO_TCP | XPRT_TRANSPORT_BC, | ||
| 141 | XPRT_TRANSPORT_RDMA = 256 | ||
| 142 | }; | ||
| 143 | |||
| 129 | struct rpc_xprt { | 144 | struct rpc_xprt { |
| 130 | struct kref kref; /* Reference count */ | 145 | struct kref kref; /* Reference count */ |
| 131 | struct rpc_xprt_ops * ops; /* transport methods */ | 146 | struct rpc_xprt_ops * ops; /* transport methods */ |
| @@ -181,6 +196,7 @@ struct rpc_xprt { | |||
| 181 | spinlock_t reserve_lock; /* lock slot table */ | 196 | spinlock_t reserve_lock; /* lock slot table */ |
| 182 | u32 xid; /* Next XID value to use */ | 197 | u32 xid; /* Next XID value to use */ |
| 183 | struct rpc_task * snd_task; /* Task blocked in send */ | 198 | struct rpc_task * snd_task; /* Task blocked in send */ |
| 199 | struct svc_xprt *bc_xprt; /* NFSv4.1 backchannel */ | ||
| 184 | #if defined(CONFIG_NFS_V4_1) | 200 | #if defined(CONFIG_NFS_V4_1) |
| 185 | struct svc_serv *bc_serv; /* The RPC service which will */ | 201 | struct svc_serv *bc_serv; /* The RPC service which will */ |
| 186 | /* process the callback */ | 202 | /* process the callback */ |
| @@ -233,6 +249,7 @@ struct xprt_create { | |||
| 233 | struct sockaddr * srcaddr; /* optional local address */ | 249 | struct sockaddr * srcaddr; /* optional local address */ |
| 234 | struct sockaddr * dstaddr; /* remote peer address */ | 250 | struct sockaddr * dstaddr; /* remote peer address */ |
| 235 | size_t addrlen; | 251 | size_t addrlen; |
| 252 | struct svc_xprt *bc_xprt; /* NFSv4.1 backchannel */ | ||
| 236 | }; | 253 | }; |
| 237 | 254 | ||
| 238 | struct xprt_class { | 255 | struct xprt_class { |
diff --git a/include/linux/sunrpc/xprtrdma.h b/include/linux/sunrpc/xprtrdma.h index 54a379c9e8eb..c2f04e1ae159 100644 --- a/include/linux/sunrpc/xprtrdma.h +++ b/include/linux/sunrpc/xprtrdma.h | |||
| @@ -41,11 +41,6 @@ | |||
| 41 | #define _LINUX_SUNRPC_XPRTRDMA_H | 41 | #define _LINUX_SUNRPC_XPRTRDMA_H |
| 42 | 42 | ||
| 43 | /* | 43 | /* |
| 44 | * RPC transport identifier for RDMA | ||
| 45 | */ | ||
| 46 | #define XPRT_TRANSPORT_RDMA 256 | ||
| 47 | |||
| 48 | /* | ||
| 49 | * rpcbind (v3+) RDMA netid. | 44 | * rpcbind (v3+) RDMA netid. |
| 50 | */ | 45 | */ |
| 51 | #define RPCBIND_NETID_RDMA "rdma" | 46 | #define RPCBIND_NETID_RDMA "rdma" |
diff --git a/include/linux/sunrpc/xprtsock.h b/include/linux/sunrpc/xprtsock.h index c2a46c45c8f7..3f14a02e9cc0 100644 --- a/include/linux/sunrpc/xprtsock.h +++ b/include/linux/sunrpc/xprtsock.h | |||
| @@ -13,17 +13,6 @@ int init_socket_xprt(void); | |||
| 13 | void cleanup_socket_xprt(void); | 13 | void cleanup_socket_xprt(void); |
| 14 | 14 | ||
| 15 | /* | 15 | /* |
| 16 | * RPC transport identifiers for UDP, TCP | ||
| 17 | * | ||
| 18 | * To preserve compatibility with the historical use of raw IP protocol | ||
| 19 | * id's for transport selection, these are specified with the previous | ||
| 20 | * values. No such restriction exists for new transports, except that | ||
| 21 | * they may not collide with these values (17 and 6, respectively). | ||
| 22 | */ | ||
| 23 | #define XPRT_TRANSPORT_UDP IPPROTO_UDP | ||
| 24 | #define XPRT_TRANSPORT_TCP IPPROTO_TCP | ||
| 25 | |||
| 26 | /* | ||
| 27 | * RPC slot table sizes for UDP, TCP transports | 16 | * RPC slot table sizes for UDP, TCP transports |
| 28 | */ | 17 | */ |
| 29 | extern unsigned int xprt_udp_slot_table_entries; | 18 | extern unsigned int xprt_udp_slot_table_entries; |
diff --git a/include/linux/suspend.h b/include/linux/suspend.h index cd15df6c63cd..5e781d824e6d 100644 --- a/include/linux/suspend.h +++ b/include/linux/suspend.h | |||
| @@ -301,6 +301,8 @@ static inline int unregister_pm_notifier(struct notifier_block *nb) | |||
| 301 | #define pm_notifier(fn, pri) do { (void)(fn); } while (0) | 301 | #define pm_notifier(fn, pri) do { (void)(fn); } while (0) |
| 302 | #endif /* !CONFIG_PM_SLEEP */ | 302 | #endif /* !CONFIG_PM_SLEEP */ |
| 303 | 303 | ||
| 304 | extern struct mutex pm_mutex; | ||
| 305 | |||
| 304 | #ifndef CONFIG_HIBERNATION | 306 | #ifndef CONFIG_HIBERNATION |
| 305 | static inline void register_nosave_region(unsigned long b, unsigned long e) | 307 | static inline void register_nosave_region(unsigned long b, unsigned long e) |
| 306 | { | 308 | { |
| @@ -308,8 +310,23 @@ static inline void register_nosave_region(unsigned long b, unsigned long e) | |||
| 308 | static inline void register_nosave_region_late(unsigned long b, unsigned long e) | 310 | static inline void register_nosave_region_late(unsigned long b, unsigned long e) |
| 309 | { | 311 | { |
| 310 | } | 312 | } |
| 311 | #endif | ||
| 312 | 313 | ||
| 313 | extern struct mutex pm_mutex; | 314 | static inline void lock_system_sleep(void) {} |
| 315 | static inline void unlock_system_sleep(void) {} | ||
| 316 | |||
| 317 | #else | ||
| 318 | |||
| 319 | /* Let some subsystems like memory hotadd exclude hibernation */ | ||
| 320 | |||
| 321 | static inline void lock_system_sleep(void) | ||
| 322 | { | ||
| 323 | mutex_lock(&pm_mutex); | ||
| 324 | } | ||
| 325 | |||
| 326 | static inline void unlock_system_sleep(void) | ||
| 327 | { | ||
| 328 | mutex_unlock(&pm_mutex); | ||
| 329 | } | ||
| 330 | #endif | ||
| 314 | 331 | ||
| 315 | #endif /* _LINUX_SUSPEND_H */ | 332 | #endif /* _LINUX_SUSPEND_H */ |
diff --git a/include/linux/swap.h b/include/linux/swap.h index 7c15334f3ff2..4ec90019c1a4 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h | |||
| @@ -34,15 +34,37 @@ static inline int current_is_kswapd(void) | |||
| 34 | * the type/offset into the pte as 5/27 as well. | 34 | * the type/offset into the pte as 5/27 as well. |
| 35 | */ | 35 | */ |
| 36 | #define MAX_SWAPFILES_SHIFT 5 | 36 | #define MAX_SWAPFILES_SHIFT 5 |
| 37 | #ifndef CONFIG_MIGRATION | 37 | |
| 38 | #define MAX_SWAPFILES (1 << MAX_SWAPFILES_SHIFT) | 38 | /* |
| 39 | * Use some of the swap files numbers for other purposes. This | ||
| 40 | * is a convenient way to hook into the VM to trigger special | ||
| 41 | * actions on faults. | ||
| 42 | */ | ||
| 43 | |||
| 44 | /* | ||
| 45 | * NUMA node memory migration support | ||
| 46 | */ | ||
| 47 | #ifdef CONFIG_MIGRATION | ||
| 48 | #define SWP_MIGRATION_NUM 2 | ||
| 49 | #define SWP_MIGRATION_READ (MAX_SWAPFILES + SWP_HWPOISON_NUM) | ||
| 50 | #define SWP_MIGRATION_WRITE (MAX_SWAPFILES + SWP_HWPOISON_NUM + 1) | ||
| 51 | #else | ||
| 52 | #define SWP_MIGRATION_NUM 0 | ||
| 53 | #endif | ||
| 54 | |||
| 55 | /* | ||
| 56 | * Handling of hardware poisoned pages with memory corruption. | ||
| 57 | */ | ||
| 58 | #ifdef CONFIG_MEMORY_FAILURE | ||
| 59 | #define SWP_HWPOISON_NUM 1 | ||
| 60 | #define SWP_HWPOISON MAX_SWAPFILES | ||
| 39 | #else | 61 | #else |
| 40 | /* Use last two entries for page migration swap entries */ | 62 | #define SWP_HWPOISON_NUM 0 |
| 41 | #define MAX_SWAPFILES ((1 << MAX_SWAPFILES_SHIFT)-2) | ||
| 42 | #define SWP_MIGRATION_READ MAX_SWAPFILES | ||
| 43 | #define SWP_MIGRATION_WRITE (MAX_SWAPFILES + 1) | ||
| 44 | #endif | 63 | #endif |
| 45 | 64 | ||
| 65 | #define MAX_SWAPFILES \ | ||
| 66 | ((1 << MAX_SWAPFILES_SHIFT) - SWP_MIGRATION_NUM - SWP_HWPOISON_NUM) | ||
| 67 | |||
| 46 | /* | 68 | /* |
| 47 | * Magic header for a swap area. The first part of the union is | 69 | * Magic header for a swap area. The first part of the union is |
| 48 | * what the swap magic looks like for the old (limited to 128MB) | 70 | * what the swap magic looks like for the old (limited to 128MB) |
| @@ -217,6 +239,11 @@ extern unsigned long try_to_free_pages(struct zonelist *zonelist, int order, | |||
| 217 | extern unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *mem, | 239 | extern unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *mem, |
| 218 | gfp_t gfp_mask, bool noswap, | 240 | gfp_t gfp_mask, bool noswap, |
| 219 | unsigned int swappiness); | 241 | unsigned int swappiness); |
| 242 | extern unsigned long mem_cgroup_shrink_node_zone(struct mem_cgroup *mem, | ||
| 243 | gfp_t gfp_mask, bool noswap, | ||
| 244 | unsigned int swappiness, | ||
| 245 | struct zone *zone, | ||
| 246 | int nid); | ||
| 220 | extern int __isolate_lru_page(struct page *page, int mode, int file); | 247 | extern int __isolate_lru_page(struct page *page, int mode, int file); |
| 221 | extern unsigned long shrink_all_memory(unsigned long nr_pages); | 248 | extern unsigned long shrink_all_memory(unsigned long nr_pages); |
| 222 | extern int vm_swappiness; | 249 | extern int vm_swappiness; |
| @@ -240,7 +267,7 @@ extern int page_evictable(struct page *page, struct vm_area_struct *vma); | |||
| 240 | extern void scan_mapping_unevictable_pages(struct address_space *); | 267 | extern void scan_mapping_unevictable_pages(struct address_space *); |
| 241 | 268 | ||
| 242 | extern unsigned long scan_unevictable_pages; | 269 | extern unsigned long scan_unevictable_pages; |
| 243 | extern int scan_unevictable_handler(struct ctl_table *, int, struct file *, | 270 | extern int scan_unevictable_handler(struct ctl_table *, int, |
| 244 | void __user *, size_t *, loff_t *); | 271 | void __user *, size_t *, loff_t *); |
| 245 | extern int scan_unevictable_register_node(struct node *node); | 272 | extern int scan_unevictable_register_node(struct node *node); |
| 246 | extern void scan_unevictable_unregister_node(struct node *node); | 273 | extern void scan_unevictable_unregister_node(struct node *node); |
| @@ -419,10 +446,22 @@ static inline swp_entry_t get_swap_page(void) | |||
| 419 | } | 446 | } |
| 420 | 447 | ||
| 421 | /* linux/mm/thrash.c */ | 448 | /* linux/mm/thrash.c */ |
| 422 | #define put_swap_token(mm) do { } while (0) | 449 | static inline void put_swap_token(struct mm_struct *mm) |
| 423 | #define grab_swap_token(mm) do { } while (0) | 450 | { |
| 424 | #define has_swap_token(mm) 0 | 451 | } |
| 425 | #define disable_swap_token() do { } while (0) | 452 | |
| 453 | static inline void grab_swap_token(struct mm_struct *mm) | ||
| 454 | { | ||
| 455 | } | ||
| 456 | |||
| 457 | static inline int has_swap_token(struct mm_struct *mm) | ||
| 458 | { | ||
| 459 | return 0; | ||
| 460 | } | ||
| 461 | |||
| 462 | static inline void disable_swap_token(void) | ||
| 463 | { | ||
| 464 | } | ||
| 426 | 465 | ||
| 427 | static inline void | 466 | static inline void |
| 428 | mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent) | 467 | mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent) |
diff --git a/include/linux/swapops.h b/include/linux/swapops.h index 6ec39ab27b4b..cd42e30b7c6e 100644 --- a/include/linux/swapops.h +++ b/include/linux/swapops.h | |||
| @@ -131,3 +131,41 @@ static inline int is_write_migration_entry(swp_entry_t entry) | |||
| 131 | 131 | ||
| 132 | #endif | 132 | #endif |
| 133 | 133 | ||
| 134 | #ifdef CONFIG_MEMORY_FAILURE | ||
| 135 | /* | ||
| 136 | * Support for hardware poisoned pages | ||
| 137 | */ | ||
| 138 | static inline swp_entry_t make_hwpoison_entry(struct page *page) | ||
| 139 | { | ||
| 140 | BUG_ON(!PageLocked(page)); | ||
| 141 | return swp_entry(SWP_HWPOISON, page_to_pfn(page)); | ||
| 142 | } | ||
| 143 | |||
| 144 | static inline int is_hwpoison_entry(swp_entry_t entry) | ||
| 145 | { | ||
| 146 | return swp_type(entry) == SWP_HWPOISON; | ||
| 147 | } | ||
| 148 | #else | ||
| 149 | |||
| 150 | static inline swp_entry_t make_hwpoison_entry(struct page *page) | ||
| 151 | { | ||
| 152 | return swp_entry(0, 0); | ||
| 153 | } | ||
| 154 | |||
| 155 | static inline int is_hwpoison_entry(swp_entry_t swp) | ||
| 156 | { | ||
| 157 | return 0; | ||
| 158 | } | ||
| 159 | #endif | ||
| 160 | |||
| 161 | #if defined(CONFIG_MEMORY_FAILURE) || defined(CONFIG_MIGRATION) | ||
| 162 | static inline int non_swap_entry(swp_entry_t entry) | ||
| 163 | { | ||
| 164 | return swp_type(entry) >= MAX_SWAPFILES; | ||
| 165 | } | ||
| 166 | #else | ||
| 167 | static inline int non_swap_entry(swp_entry_t entry) | ||
| 168 | { | ||
| 169 | return 0; | ||
| 170 | } | ||
| 171 | #endif | ||
diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h index cb1a6631b8f4..febedcf67c7e 100644 --- a/include/linux/swiotlb.h +++ b/include/linux/swiotlb.h | |||
| @@ -7,6 +7,8 @@ struct device; | |||
| 7 | struct dma_attrs; | 7 | struct dma_attrs; |
| 8 | struct scatterlist; | 8 | struct scatterlist; |
| 9 | 9 | ||
| 10 | extern int swiotlb_force; | ||
| 11 | |||
| 10 | /* | 12 | /* |
| 11 | * Maximum allowable number of contiguous slabs to map, | 13 | * Maximum allowable number of contiguous slabs to map, |
| 12 | * must be a power of 2. What is the appropriate value ? | 14 | * must be a power of 2. What is the appropriate value ? |
| @@ -14,25 +16,13 @@ struct scatterlist; | |||
| 14 | */ | 16 | */ |
| 15 | #define IO_TLB_SEGSIZE 128 | 17 | #define IO_TLB_SEGSIZE 128 |
| 16 | 18 | ||
| 17 | |||
| 18 | /* | 19 | /* |
| 19 | * log of the size of each IO TLB slab. The number of slabs is command line | 20 | * log of the size of each IO TLB slab. The number of slabs is command line |
| 20 | * controllable. | 21 | * controllable. |
| 21 | */ | 22 | */ |
| 22 | #define IO_TLB_SHIFT 11 | 23 | #define IO_TLB_SHIFT 11 |
| 23 | 24 | ||
| 24 | extern void | 25 | extern void swiotlb_init(int verbose); |
| 25 | swiotlb_init(void); | ||
| 26 | |||
| 27 | extern void *swiotlb_alloc_boot(size_t bytes, unsigned long nslabs); | ||
| 28 | extern void *swiotlb_alloc(unsigned order, unsigned long nslabs); | ||
| 29 | |||
| 30 | extern dma_addr_t swiotlb_phys_to_bus(struct device *hwdev, | ||
| 31 | phys_addr_t address); | ||
| 32 | extern phys_addr_t swiotlb_bus_to_phys(struct device *hwdev, | ||
| 33 | dma_addr_t address); | ||
| 34 | |||
| 35 | extern int swiotlb_arch_range_needs_mapping(phys_addr_t paddr, size_t size); | ||
| 36 | 26 | ||
| 37 | extern void | 27 | extern void |
| 38 | *swiotlb_alloc_coherent(struct device *hwdev, size_t size, | 28 | *swiotlb_alloc_coherent(struct device *hwdev, size_t size, |
| @@ -99,4 +89,11 @@ swiotlb_dma_mapping_error(struct device *hwdev, dma_addr_t dma_addr); | |||
| 99 | extern int | 89 | extern int |
| 100 | swiotlb_dma_supported(struct device *hwdev, u64 mask); | 90 | swiotlb_dma_supported(struct device *hwdev, u64 mask); |
| 101 | 91 | ||
| 92 | #ifdef CONFIG_SWIOTLB | ||
| 93 | extern void __init swiotlb_free(void); | ||
| 94 | #else | ||
| 95 | static inline void swiotlb_free(void) { } | ||
| 96 | #endif | ||
| 97 | |||
| 98 | extern void swiotlb_print_info(void); | ||
| 102 | #endif /* __LINUX_SWIOTLB_H */ | 99 | #endif /* __LINUX_SWIOTLB_H */ |
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 80de7003d8c2..bc70c5810fec 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
| @@ -25,6 +25,7 @@ struct linux_dirent64; | |||
| 25 | struct list_head; | 25 | struct list_head; |
| 26 | struct msgbuf; | 26 | struct msgbuf; |
| 27 | struct msghdr; | 27 | struct msghdr; |
| 28 | struct mmsghdr; | ||
| 28 | struct msqid_ds; | 29 | struct msqid_ds; |
| 29 | struct new_utsname; | 30 | struct new_utsname; |
| 30 | struct nfsctl_arg; | 31 | struct nfsctl_arg; |
| @@ -55,7 +56,7 @@ struct compat_timeval; | |||
| 55 | struct robust_list_head; | 56 | struct robust_list_head; |
| 56 | struct getcpu_cache; | 57 | struct getcpu_cache; |
| 57 | struct old_linux_dirent; | 58 | struct old_linux_dirent; |
| 58 | struct perf_counter_attr; | 59 | struct perf_event_attr; |
| 59 | 60 | ||
| 60 | #include <linux/types.h> | 61 | #include <linux/types.h> |
| 61 | #include <linux/aio_abi.h> | 62 | #include <linux/aio_abi.h> |
| @@ -64,6 +65,7 @@ struct perf_counter_attr; | |||
| 64 | #include <linux/sem.h> | 65 | #include <linux/sem.h> |
| 65 | #include <asm/siginfo.h> | 66 | #include <asm/siginfo.h> |
| 66 | #include <asm/signal.h> | 67 | #include <asm/signal.h> |
| 68 | #include <linux/unistd.h> | ||
| 67 | #include <linux/quota.h> | 69 | #include <linux/quota.h> |
| 68 | #include <linux/key.h> | 70 | #include <linux/key.h> |
| 69 | #include <trace/syscall.h> | 71 | #include <trace/syscall.h> |
| @@ -97,6 +99,24 @@ struct perf_counter_attr; | |||
| 97 | #define __SC_TEST5(t5, a5, ...) __SC_TEST(t5); __SC_TEST4(__VA_ARGS__) | 99 | #define __SC_TEST5(t5, a5, ...) __SC_TEST(t5); __SC_TEST4(__VA_ARGS__) |
| 98 | #define __SC_TEST6(t6, a6, ...) __SC_TEST(t6); __SC_TEST5(__VA_ARGS__) | 100 | #define __SC_TEST6(t6, a6, ...) __SC_TEST(t6); __SC_TEST5(__VA_ARGS__) |
| 99 | 101 | ||
| 102 | #ifdef CONFIG_EVENT_PROFILE | ||
| 103 | |||
| 104 | #define TRACE_SYS_ENTER_PROFILE_INIT(sname) \ | ||
| 105 | .profile_count = ATOMIC_INIT(-1), \ | ||
| 106 | .profile_enable = prof_sysenter_enable, \ | ||
| 107 | .profile_disable = prof_sysenter_disable, | ||
| 108 | |||
| 109 | #define TRACE_SYS_EXIT_PROFILE_INIT(sname) \ | ||
| 110 | .profile_count = ATOMIC_INIT(-1), \ | ||
| 111 | .profile_enable = prof_sysexit_enable, \ | ||
| 112 | .profile_disable = prof_sysexit_disable, | ||
| 113 | #else | ||
| 114 | #define TRACE_SYS_ENTER_PROFILE(sname) | ||
| 115 | #define TRACE_SYS_ENTER_PROFILE_INIT(sname) | ||
| 116 | #define TRACE_SYS_EXIT_PROFILE(sname) | ||
| 117 | #define TRACE_SYS_EXIT_PROFILE_INIT(sname) | ||
| 118 | #endif | ||
| 119 | |||
| 100 | #ifdef CONFIG_FTRACE_SYSCALLS | 120 | #ifdef CONFIG_FTRACE_SYSCALLS |
| 101 | #define __SC_STR_ADECL1(t, a) #a | 121 | #define __SC_STR_ADECL1(t, a) #a |
| 102 | #define __SC_STR_ADECL2(t, a, ...) #a, __SC_STR_ADECL1(__VA_ARGS__) | 122 | #define __SC_STR_ADECL2(t, a, ...) #a, __SC_STR_ADECL1(__VA_ARGS__) |
| @@ -112,7 +132,53 @@ struct perf_counter_attr; | |||
| 112 | #define __SC_STR_TDECL5(t, a, ...) #t, __SC_STR_TDECL4(__VA_ARGS__) | 132 | #define __SC_STR_TDECL5(t, a, ...) #t, __SC_STR_TDECL4(__VA_ARGS__) |
| 113 | #define __SC_STR_TDECL6(t, a, ...) #t, __SC_STR_TDECL5(__VA_ARGS__) | 133 | #define __SC_STR_TDECL6(t, a, ...) #t, __SC_STR_TDECL5(__VA_ARGS__) |
| 114 | 134 | ||
| 135 | #define SYSCALL_TRACE_ENTER_EVENT(sname) \ | ||
| 136 | static const struct syscall_metadata __syscall_meta_##sname; \ | ||
| 137 | static struct ftrace_event_call event_enter_##sname; \ | ||
| 138 | static struct trace_event enter_syscall_print_##sname = { \ | ||
| 139 | .trace = print_syscall_enter, \ | ||
| 140 | }; \ | ||
| 141 | static struct ftrace_event_call __used \ | ||
| 142 | __attribute__((__aligned__(4))) \ | ||
| 143 | __attribute__((section("_ftrace_events"))) \ | ||
| 144 | event_enter_##sname = { \ | ||
| 145 | .name = "sys_enter"#sname, \ | ||
| 146 | .system = "syscalls", \ | ||
| 147 | .event = &enter_syscall_print_##sname, \ | ||
| 148 | .raw_init = init_syscall_trace, \ | ||
| 149 | .show_format = syscall_enter_format, \ | ||
| 150 | .define_fields = syscall_enter_define_fields, \ | ||
| 151 | .regfunc = reg_event_syscall_enter, \ | ||
| 152 | .unregfunc = unreg_event_syscall_enter, \ | ||
| 153 | .data = (void *)&__syscall_meta_##sname,\ | ||
| 154 | TRACE_SYS_ENTER_PROFILE_INIT(sname) \ | ||
| 155 | } | ||
| 156 | |||
| 157 | #define SYSCALL_TRACE_EXIT_EVENT(sname) \ | ||
| 158 | static const struct syscall_metadata __syscall_meta_##sname; \ | ||
| 159 | static struct ftrace_event_call event_exit_##sname; \ | ||
| 160 | static struct trace_event exit_syscall_print_##sname = { \ | ||
| 161 | .trace = print_syscall_exit, \ | ||
| 162 | }; \ | ||
| 163 | static struct ftrace_event_call __used \ | ||
| 164 | __attribute__((__aligned__(4))) \ | ||
| 165 | __attribute__((section("_ftrace_events"))) \ | ||
| 166 | event_exit_##sname = { \ | ||
| 167 | .name = "sys_exit"#sname, \ | ||
| 168 | .system = "syscalls", \ | ||
| 169 | .event = &exit_syscall_print_##sname, \ | ||
| 170 | .raw_init = init_syscall_trace, \ | ||
| 171 | .show_format = syscall_exit_format, \ | ||
| 172 | .define_fields = syscall_exit_define_fields, \ | ||
| 173 | .regfunc = reg_event_syscall_exit, \ | ||
| 174 | .unregfunc = unreg_event_syscall_exit, \ | ||
| 175 | .data = (void *)&__syscall_meta_##sname,\ | ||
| 176 | TRACE_SYS_EXIT_PROFILE_INIT(sname) \ | ||
| 177 | } | ||
| 178 | |||
| 115 | #define SYSCALL_METADATA(sname, nb) \ | 179 | #define SYSCALL_METADATA(sname, nb) \ |
| 180 | SYSCALL_TRACE_ENTER_EVENT(sname); \ | ||
| 181 | SYSCALL_TRACE_EXIT_EVENT(sname); \ | ||
| 116 | static const struct syscall_metadata __used \ | 182 | static const struct syscall_metadata __used \ |
| 117 | __attribute__((__aligned__(4))) \ | 183 | __attribute__((__aligned__(4))) \ |
| 118 | __attribute__((section("__syscalls_metadata"))) \ | 184 | __attribute__((section("__syscalls_metadata"))) \ |
| @@ -121,18 +187,23 @@ struct perf_counter_attr; | |||
| 121 | .nb_args = nb, \ | 187 | .nb_args = nb, \ |
| 122 | .types = types_##sname, \ | 188 | .types = types_##sname, \ |
| 123 | .args = args_##sname, \ | 189 | .args = args_##sname, \ |
| 124 | } | 190 | .enter_event = &event_enter_##sname, \ |
| 191 | .exit_event = &event_exit_##sname, \ | ||
| 192 | }; | ||
| 125 | 193 | ||
| 126 | #define SYSCALL_DEFINE0(sname) \ | 194 | #define SYSCALL_DEFINE0(sname) \ |
| 195 | SYSCALL_TRACE_ENTER_EVENT(_##sname); \ | ||
| 196 | SYSCALL_TRACE_EXIT_EVENT(_##sname); \ | ||
| 127 | static const struct syscall_metadata __used \ | 197 | static const struct syscall_metadata __used \ |
| 128 | __attribute__((__aligned__(4))) \ | 198 | __attribute__((__aligned__(4))) \ |
| 129 | __attribute__((section("__syscalls_metadata"))) \ | 199 | __attribute__((section("__syscalls_metadata"))) \ |
| 130 | __syscall_meta_##sname = { \ | 200 | __syscall_meta_##sname = { \ |
| 131 | .name = "sys_"#sname, \ | 201 | .name = "sys_"#sname, \ |
| 132 | .nb_args = 0, \ | 202 | .nb_args = 0, \ |
| 203 | .enter_event = &event_enter__##sname, \ | ||
| 204 | .exit_event = &event_exit__##sname, \ | ||
| 133 | }; \ | 205 | }; \ |
| 134 | asmlinkage long sys_##sname(void) | 206 | asmlinkage long sys_##sname(void) |
| 135 | |||
| 136 | #else | 207 | #else |
| 137 | #define SYSCALL_DEFINE0(name) asmlinkage long sys_##name(void) | 208 | #define SYSCALL_DEFINE0(name) asmlinkage long sys_##name(void) |
| 138 | #endif | 209 | #endif |
| @@ -341,8 +412,7 @@ asmlinkage long sys_mount(char __user *dev_name, char __user *dir_name, | |||
| 341 | void __user *data); | 412 | void __user *data); |
| 342 | asmlinkage long sys_umount(char __user *name, int flags); | 413 | asmlinkage long sys_umount(char __user *name, int flags); |
| 343 | asmlinkage long sys_oldumount(char __user *name); | 414 | asmlinkage long sys_oldumount(char __user *name); |
| 344 | asmlinkage long sys_truncate(const char __user *path, | 415 | asmlinkage long sys_truncate(const char __user *path, long length); |
| 345 | unsigned long length); | ||
| 346 | asmlinkage long sys_ftruncate(unsigned int fd, unsigned long length); | 416 | asmlinkage long sys_ftruncate(unsigned int fd, unsigned long length); |
| 347 | asmlinkage long sys_stat(char __user *filename, | 417 | asmlinkage long sys_stat(char __user *filename, |
| 348 | struct __old_kernel_stat __user *statbuf); | 418 | struct __old_kernel_stat __user *statbuf); |
| @@ -559,6 +629,9 @@ asmlinkage long sys_recv(int, void __user *, size_t, unsigned); | |||
| 559 | asmlinkage long sys_recvfrom(int, void __user *, size_t, unsigned, | 629 | asmlinkage long sys_recvfrom(int, void __user *, size_t, unsigned, |
| 560 | struct sockaddr __user *, int __user *); | 630 | struct sockaddr __user *, int __user *); |
| 561 | asmlinkage long sys_recvmsg(int fd, struct msghdr __user *msg, unsigned flags); | 631 | asmlinkage long sys_recvmsg(int fd, struct msghdr __user *msg, unsigned flags); |
| 632 | asmlinkage long sys_recvmmsg(int fd, struct mmsghdr __user *msg, | ||
| 633 | unsigned int vlen, unsigned flags, | ||
| 634 | struct timespec __user *timeout); | ||
| 562 | asmlinkage long sys_socket(int, int, int); | 635 | asmlinkage long sys_socket(int, int, int); |
| 563 | asmlinkage long sys_socketpair(int, int, int, int __user *); | 636 | asmlinkage long sys_socketpair(int, int, int, int __user *); |
| 564 | asmlinkage long sys_socketcall(int call, unsigned long __user *args); | 637 | asmlinkage long sys_socketcall(int call, unsigned long __user *args); |
| @@ -758,7 +831,7 @@ asmlinkage long sys_ppoll(struct pollfd __user *, unsigned int, | |||
| 758 | int kernel_execve(const char *filename, char *const argv[], char *const envp[]); | 831 | int kernel_execve(const char *filename, char *const argv[], char *const envp[]); |
| 759 | 832 | ||
| 760 | 833 | ||
| 761 | asmlinkage long sys_perf_counter_open( | 834 | asmlinkage long sys_perf_event_open( |
| 762 | struct perf_counter_attr __user *attr_uptr, | 835 | struct perf_event_attr __user *attr_uptr, |
| 763 | pid_t pid, int cpu, int group_fd, unsigned long flags); | 836 | pid_t pid, int cpu, int group_fd, unsigned long flags); |
| 764 | #endif | 837 | #endif |
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h index e76d3b22a466..56af3ca75e24 100644 --- a/include/linux/sysctl.h +++ b/include/linux/sysctl.h | |||
| @@ -15,9 +15,6 @@ | |||
| 15 | ** The kernel will then return -ENOTDIR to any application using | 15 | ** The kernel will then return -ENOTDIR to any application using |
| 16 | ** the old binary interface. | 16 | ** the old binary interface. |
| 17 | ** | 17 | ** |
| 18 | ** For new interfaces unless you really need a binary number | ||
| 19 | ** please use CTL_UNNUMBERED. | ||
| 20 | ** | ||
| 21 | **************************************************************** | 18 | **************************************************************** |
| 22 | **************************************************************** | 19 | **************************************************************** |
| 23 | */ | 20 | */ |
| @@ -29,7 +26,6 @@ | |||
| 29 | #include <linux/types.h> | 26 | #include <linux/types.h> |
| 30 | #include <linux/compiler.h> | 27 | #include <linux/compiler.h> |
| 31 | 28 | ||
| 32 | struct file; | ||
| 33 | struct completion; | 29 | struct completion; |
| 34 | 30 | ||
| 35 | #define CTL_MAXNAME 10 /* how many path components do we allow in a | 31 | #define CTL_MAXNAME 10 /* how many path components do we allow in a |
| @@ -51,12 +47,6 @@ struct __sysctl_args { | |||
| 51 | 47 | ||
| 52 | /* Top-level names: */ | 48 | /* Top-level names: */ |
| 53 | 49 | ||
| 54 | /* For internal pattern-matching use only: */ | ||
| 55 | #ifdef __KERNEL__ | ||
| 56 | #define CTL_NONE 0 | ||
| 57 | #define CTL_UNNUMBERED CTL_NONE /* sysctl without a binary number */ | ||
| 58 | #endif | ||
| 59 | |||
| 60 | enum | 50 | enum |
| 61 | { | 51 | { |
| 62 | CTL_KERN=1, /* General kernel info and control */ | 52 | CTL_KERN=1, /* General kernel info and control */ |
| @@ -491,6 +481,7 @@ enum | |||
| 491 | NET_IPV4_CONF_PROMOTE_SECONDARIES=20, | 481 | NET_IPV4_CONF_PROMOTE_SECONDARIES=20, |
| 492 | NET_IPV4_CONF_ARP_ACCEPT=21, | 482 | NET_IPV4_CONF_ARP_ACCEPT=21, |
| 493 | NET_IPV4_CONF_ARP_NOTIFY=22, | 483 | NET_IPV4_CONF_ARP_NOTIFY=22, |
| 484 | NET_IPV4_CONF_ACCEPT_LOCAL=23, | ||
| 494 | __NET_IPV4_CONF_MAX | 485 | __NET_IPV4_CONF_MAX |
| 495 | }; | 486 | }; |
| 496 | 487 | ||
| @@ -973,45 +964,30 @@ extern int sysctl_perm(struct ctl_table_root *root, | |||
| 973 | 964 | ||
| 974 | typedef struct ctl_table ctl_table; | 965 | typedef struct ctl_table ctl_table; |
| 975 | 966 | ||
| 976 | typedef int ctl_handler (struct ctl_table *table, | 967 | typedef int proc_handler (struct ctl_table *ctl, int write, |
| 977 | void __user *oldval, size_t __user *oldlenp, | ||
| 978 | void __user *newval, size_t newlen); | ||
| 979 | |||
| 980 | typedef int proc_handler (struct ctl_table *ctl, int write, struct file * filp, | ||
| 981 | void __user *buffer, size_t *lenp, loff_t *ppos); | 968 | void __user *buffer, size_t *lenp, loff_t *ppos); |
| 982 | 969 | ||
| 983 | extern int proc_dostring(struct ctl_table *, int, struct file *, | 970 | extern int proc_dostring(struct ctl_table *, int, |
| 984 | void __user *, size_t *, loff_t *); | 971 | void __user *, size_t *, loff_t *); |
| 985 | extern int proc_dointvec(struct ctl_table *, int, struct file *, | 972 | extern int proc_dointvec(struct ctl_table *, int, |
| 986 | void __user *, size_t *, loff_t *); | 973 | void __user *, size_t *, loff_t *); |
| 987 | extern int proc_dointvec_minmax(struct ctl_table *, int, struct file *, | 974 | extern int proc_dointvec_minmax(struct ctl_table *, int, |
| 988 | void __user *, size_t *, loff_t *); | 975 | void __user *, size_t *, loff_t *); |
| 989 | extern int proc_dointvec_jiffies(struct ctl_table *, int, struct file *, | 976 | extern int proc_dointvec_jiffies(struct ctl_table *, int, |
| 990 | void __user *, size_t *, loff_t *); | 977 | void __user *, size_t *, loff_t *); |
| 991 | extern int proc_dointvec_userhz_jiffies(struct ctl_table *, int, struct file *, | 978 | extern int proc_dointvec_userhz_jiffies(struct ctl_table *, int, |
| 992 | void __user *, size_t *, loff_t *); | 979 | void __user *, size_t *, loff_t *); |
| 993 | extern int proc_dointvec_ms_jiffies(struct ctl_table *, int, struct file *, | 980 | extern int proc_dointvec_ms_jiffies(struct ctl_table *, int, |
| 994 | void __user *, size_t *, loff_t *); | 981 | void __user *, size_t *, loff_t *); |
| 995 | extern int proc_doulongvec_minmax(struct ctl_table *, int, struct file *, | 982 | extern int proc_doulongvec_minmax(struct ctl_table *, int, |
| 996 | void __user *, size_t *, loff_t *); | 983 | void __user *, size_t *, loff_t *); |
| 997 | extern int proc_doulongvec_ms_jiffies_minmax(struct ctl_table *table, int, | 984 | extern int proc_doulongvec_ms_jiffies_minmax(struct ctl_table *table, int, |
| 998 | struct file *, void __user *, size_t *, loff_t *); | 985 | void __user *, size_t *, loff_t *); |
| 999 | |||
| 1000 | extern int do_sysctl (int __user *name, int nlen, | ||
| 1001 | void __user *oldval, size_t __user *oldlenp, | ||
| 1002 | void __user *newval, size_t newlen); | ||
| 1003 | |||
| 1004 | extern ctl_handler sysctl_data; | ||
| 1005 | extern ctl_handler sysctl_string; | ||
| 1006 | extern ctl_handler sysctl_intvec; | ||
| 1007 | extern ctl_handler sysctl_jiffies; | ||
| 1008 | extern ctl_handler sysctl_ms_jiffies; | ||
| 1009 | |||
| 1010 | 986 | ||
| 1011 | /* | 987 | /* |
| 1012 | * Register a set of sysctl names by calling register_sysctl_table | 988 | * Register a set of sysctl names by calling register_sysctl_table |
| 1013 | * with an initialised array of struct ctl_table's. An entry with zero | 989 | * with an initialised array of struct ctl_table's. An entry with |
| 1014 | * ctl_name and NULL procname terminates the table. table->de will be | 990 | * NULL procname terminates the table. table->de will be |
| 1015 | * set up by the registration and need not be initialised in advance. | 991 | * set up by the registration and need not be initialised in advance. |
| 1016 | * | 992 | * |
| 1017 | * sysctl names can be mirrored automatically under /proc/sys. The | 993 | * sysctl names can be mirrored automatically under /proc/sys. The |
| @@ -1024,24 +1000,11 @@ extern ctl_handler sysctl_ms_jiffies; | |||
| 1024 | * under /proc; non-leaf nodes will be represented by directories. A | 1000 | * under /proc; non-leaf nodes will be represented by directories. A |
| 1025 | * null procname disables /proc mirroring at this node. | 1001 | * null procname disables /proc mirroring at this node. |
| 1026 | * | 1002 | * |
| 1027 | * sysctl entries with a zero ctl_name will not be available through | ||
| 1028 | * the binary sysctl interface. | ||
| 1029 | * | ||
| 1030 | * sysctl(2) can automatically manage read and write requests through | 1003 | * sysctl(2) can automatically manage read and write requests through |
| 1031 | * the sysctl table. The data and maxlen fields of the ctl_table | 1004 | * the sysctl table. The data and maxlen fields of the ctl_table |
| 1032 | * struct enable minimal validation of the values being written to be | 1005 | * struct enable minimal validation of the values being written to be |
| 1033 | * performed, and the mode field allows minimal authentication. | 1006 | * performed, and the mode field allows minimal authentication. |
| 1034 | * | 1007 | * |
| 1035 | * More sophisticated management can be enabled by the provision of a | ||
| 1036 | * strategy routine with the table entry. This will be called before | ||
| 1037 | * any automatic read or write of the data is performed. | ||
| 1038 | * | ||
| 1039 | * The strategy routine may return: | ||
| 1040 | * <0: Error occurred (error is passed to user process) | ||
| 1041 | * 0: OK - proceed with automatic read or write. | ||
| 1042 | * >0: OK - read or write has been done by the strategy routine, so | ||
| 1043 | * return immediately. | ||
| 1044 | * | ||
| 1045 | * There must be a proc_handler routine for any terminal nodes | 1008 | * There must be a proc_handler routine for any terminal nodes |
| 1046 | * mirrored under /proc/sys (non-terminals are handled by a built-in | 1009 | * mirrored under /proc/sys (non-terminals are handled by a built-in |
| 1047 | * directory handler). Several default handlers are available to | 1010 | * directory handler). Several default handlers are available to |
| @@ -1051,7 +1014,6 @@ extern ctl_handler sysctl_ms_jiffies; | |||
| 1051 | /* A sysctl table is an array of struct ctl_table: */ | 1014 | /* A sysctl table is an array of struct ctl_table: */ |
| 1052 | struct ctl_table | 1015 | struct ctl_table |
| 1053 | { | 1016 | { |
| 1054 | int ctl_name; /* Binary ID */ | ||
| 1055 | const char *procname; /* Text ID for /proc/sys, or zero */ | 1017 | const char *procname; /* Text ID for /proc/sys, or zero */ |
| 1056 | void *data; | 1018 | void *data; |
| 1057 | int maxlen; | 1019 | int maxlen; |
| @@ -1059,7 +1021,6 @@ struct ctl_table | |||
| 1059 | struct ctl_table *child; | 1021 | struct ctl_table *child; |
| 1060 | struct ctl_table *parent; /* Automatically set */ | 1022 | struct ctl_table *parent; /* Automatically set */ |
| 1061 | proc_handler *proc_handler; /* Callback for text formatting */ | 1023 | proc_handler *proc_handler; /* Callback for text formatting */ |
| 1062 | ctl_handler *strategy; /* Callback function for all r/w */ | ||
| 1063 | void *extra1; | 1024 | void *extra1; |
| 1064 | void *extra2; | 1025 | void *extra2; |
| 1065 | }; | 1026 | }; |
| @@ -1093,7 +1054,6 @@ struct ctl_table_header | |||
| 1093 | /* struct ctl_path describes where in the hierarchy a table is added */ | 1054 | /* struct ctl_path describes where in the hierarchy a table is added */ |
| 1094 | struct ctl_path { | 1055 | struct ctl_path { |
| 1095 | const char *procname; | 1056 | const char *procname; |
| 1096 | int ctl_name; | ||
| 1097 | }; | 1057 | }; |
| 1098 | 1058 | ||
| 1099 | void register_sysctl_root(struct ctl_table_root *root); | 1059 | void register_sysctl_root(struct ctl_table_root *root); |
diff --git a/include/linux/taskstats_kern.h b/include/linux/taskstats_kern.h index 7e9680f4afdd..3398f4553269 100644 --- a/include/linux/taskstats_kern.h +++ b/include/linux/taskstats_kern.h | |||
| @@ -9,7 +9,6 @@ | |||
| 9 | 9 | ||
| 10 | #include <linux/taskstats.h> | 10 | #include <linux/taskstats.h> |
| 11 | #include <linux/sched.h> | 11 | #include <linux/sched.h> |
| 12 | #include <net/genetlink.h> | ||
| 13 | 12 | ||
| 14 | #ifdef CONFIG_TASKSTATS | 13 | #ifdef CONFIG_TASKSTATS |
| 15 | extern struct kmem_cache *taskstats_cache; | 14 | extern struct kmem_cache *taskstats_cache; |
diff --git a/include/linux/tboot.h b/include/linux/tboot.h new file mode 100644 index 000000000000..bf2a0c748878 --- /dev/null +++ b/include/linux/tboot.h | |||
| @@ -0,0 +1,162 @@ | |||
| 1 | /* | ||
| 2 | * tboot.h: shared data structure with tboot and kernel and functions | ||
| 3 | * used by kernel for runtime support of Intel(R) Trusted | ||
| 4 | * Execution Technology | ||
| 5 | * | ||
| 6 | * Copyright (c) 2006-2009, Intel Corporation | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify it | ||
| 9 | * under the terms and conditions of the GNU General Public License, | ||
| 10 | * version 2, as published by the Free Software Foundation. | ||
| 11 | * | ||
| 12 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
| 13 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 14 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
| 15 | * more details. | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License along with | ||
| 18 | * this program; if not, write to the Free Software Foundation, Inc., | ||
| 19 | * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 20 | * | ||
| 21 | */ | ||
| 22 | |||
| 23 | #ifndef _LINUX_TBOOT_H | ||
| 24 | #define _LINUX_TBOOT_H | ||
| 25 | |||
| 26 | /* these must have the values from 0-5 in this order */ | ||
| 27 | enum { | ||
| 28 | TB_SHUTDOWN_REBOOT = 0, | ||
| 29 | TB_SHUTDOWN_S5, | ||
| 30 | TB_SHUTDOWN_S4, | ||
| 31 | TB_SHUTDOWN_S3, | ||
| 32 | TB_SHUTDOWN_HALT, | ||
| 33 | TB_SHUTDOWN_WFS | ||
| 34 | }; | ||
| 35 | |||
| 36 | #ifdef CONFIG_INTEL_TXT | ||
| 37 | #include <acpi/acpi.h> | ||
| 38 | /* used to communicate between tboot and the launched kernel */ | ||
| 39 | |||
| 40 | #define TB_KEY_SIZE 64 /* 512 bits */ | ||
| 41 | |||
| 42 | #define MAX_TB_MAC_REGIONS 32 | ||
| 43 | |||
| 44 | struct tboot_mac_region { | ||
| 45 | u64 start; /* must be 64 byte -aligned */ | ||
| 46 | u32 size; /* must be 64 byte -granular */ | ||
| 47 | } __packed; | ||
| 48 | |||
| 49 | /* GAS - Generic Address Structure (ACPI 2.0+) */ | ||
| 50 | struct tboot_acpi_generic_address { | ||
| 51 | u8 space_id; | ||
| 52 | u8 bit_width; | ||
| 53 | u8 bit_offset; | ||
| 54 | u8 access_width; | ||
| 55 | u64 address; | ||
| 56 | } __packed; | ||
| 57 | |||
| 58 | /* | ||
| 59 | * combines Sx info from FADT and FACS tables per ACPI 2.0+ spec | ||
| 60 | * (http://www.acpi.info/) | ||
| 61 | */ | ||
| 62 | struct tboot_acpi_sleep_info { | ||
| 63 | struct tboot_acpi_generic_address pm1a_cnt_blk; | ||
| 64 | struct tboot_acpi_generic_address pm1b_cnt_blk; | ||
| 65 | struct tboot_acpi_generic_address pm1a_evt_blk; | ||
| 66 | struct tboot_acpi_generic_address pm1b_evt_blk; | ||
| 67 | u16 pm1a_cnt_val; | ||
| 68 | u16 pm1b_cnt_val; | ||
| 69 | u64 wakeup_vector; | ||
| 70 | u32 vector_width; | ||
| 71 | u64 kernel_s3_resume_vector; | ||
| 72 | } __packed; | ||
| 73 | |||
| 74 | /* | ||
| 75 | * shared memory page used for communication between tboot and kernel | ||
| 76 | */ | ||
| 77 | struct tboot { | ||
| 78 | /* | ||
| 79 | * version 3+ fields: | ||
| 80 | */ | ||
| 81 | |||
| 82 | /* TBOOT_UUID */ | ||
| 83 | u8 uuid[16]; | ||
| 84 | |||
| 85 | /* version number: 5 is current */ | ||
| 86 | u32 version; | ||
| 87 | |||
| 88 | /* physical addr of tb_log_t log */ | ||
| 89 | u32 log_addr; | ||
| 90 | |||
| 91 | /* | ||
| 92 | * physical addr of entry point for tboot shutdown and | ||
| 93 | * type of shutdown (TB_SHUTDOWN_*) being requested | ||
| 94 | */ | ||
| 95 | u32 shutdown_entry; | ||
| 96 | u32 shutdown_type; | ||
| 97 | |||
| 98 | /* kernel-specified ACPI info for Sx shutdown */ | ||
| 99 | struct tboot_acpi_sleep_info acpi_sinfo; | ||
| 100 | |||
| 101 | /* tboot location in memory (physical) */ | ||
| 102 | u32 tboot_base; | ||
| 103 | u32 tboot_size; | ||
| 104 | |||
| 105 | /* memory regions (phys addrs) for tboot to MAC on S3 */ | ||
| 106 | u8 num_mac_regions; | ||
| 107 | struct tboot_mac_region mac_regions[MAX_TB_MAC_REGIONS]; | ||
| 108 | |||
| 109 | |||
| 110 | /* | ||
| 111 | * version 4+ fields: | ||
| 112 | */ | ||
| 113 | |||
| 114 | /* symmetric key for use by kernel; will be encrypted on S3 */ | ||
| 115 | u8 s3_key[TB_KEY_SIZE]; | ||
| 116 | |||
| 117 | |||
| 118 | /* | ||
| 119 | * version 5+ fields: | ||
| 120 | */ | ||
| 121 | |||
| 122 | /* used to 4byte-align num_in_wfs */ | ||
| 123 | u8 reserved_align[3]; | ||
| 124 | |||
| 125 | /* number of processors in wait-for-SIPI */ | ||
| 126 | u32 num_in_wfs; | ||
| 127 | } __packed; | ||
| 128 | |||
| 129 | /* | ||
| 130 | * UUID for tboot data struct to facilitate matching | ||
| 131 | * defined as {663C8DFF-E8B3-4b82-AABF-19EA4D057A08} by tboot, which is | ||
| 132 | * represented as {} in the char array used here | ||
| 133 | */ | ||
| 134 | #define TBOOT_UUID {0xff, 0x8d, 0x3c, 0x66, 0xb3, 0xe8, 0x82, 0x4b, 0xbf,\ | ||
| 135 | 0xaa, 0x19, 0xea, 0x4d, 0x5, 0x7a, 0x8} | ||
| 136 | |||
| 137 | extern struct tboot *tboot; | ||
| 138 | |||
| 139 | static inline int tboot_enabled(void) | ||
| 140 | { | ||
| 141 | return tboot != NULL; | ||
| 142 | } | ||
| 143 | |||
| 144 | extern void tboot_probe(void); | ||
| 145 | extern void tboot_shutdown(u32 shutdown_type); | ||
| 146 | extern void tboot_sleep(u8 sleep_state, u32 pm1a_control, u32 pm1b_control); | ||
| 147 | extern struct acpi_table_header *tboot_get_dmar_table( | ||
| 148 | struct acpi_table_header *dmar_tbl); | ||
| 149 | extern int tboot_force_iommu(void); | ||
| 150 | |||
| 151 | #else | ||
| 152 | |||
| 153 | #define tboot_probe() do { } while (0) | ||
| 154 | #define tboot_shutdown(shutdown_type) do { } while (0) | ||
| 155 | #define tboot_sleep(sleep_state, pm1a_control, pm1b_control) \ | ||
| 156 | do { } while (0) | ||
| 157 | #define tboot_get_dmar_table(dmar_tbl) (dmar_tbl) | ||
| 158 | #define tboot_force_iommu() 0 | ||
| 159 | |||
| 160 | #endif /* !CONFIG_INTEL_TXT */ | ||
| 161 | |||
| 162 | #endif /* _LINUX_TBOOT_H */ | ||
diff --git a/include/linux/tc_act/tc_defact.h b/include/linux/tc_act/tc_defact.h index 964f473af0f0..6f65d07c7ce2 100644 --- a/include/linux/tc_act/tc_defact.h +++ b/include/linux/tc_act/tc_defact.h | |||
| @@ -3,13 +3,11 @@ | |||
| 3 | 3 | ||
| 4 | #include <linux/pkt_cls.h> | 4 | #include <linux/pkt_cls.h> |
| 5 | 5 | ||
| 6 | struct tc_defact | 6 | struct tc_defact { |
| 7 | { | ||
| 8 | tc_gen; | 7 | tc_gen; |
| 9 | }; | 8 | }; |
| 10 | 9 | ||
| 11 | enum | 10 | enum { |
| 12 | { | ||
| 13 | TCA_DEF_UNSPEC, | 11 | TCA_DEF_UNSPEC, |
| 14 | TCA_DEF_TM, | 12 | TCA_DEF_TM, |
| 15 | TCA_DEF_PARMS, | 13 | TCA_DEF_PARMS, |
diff --git a/include/linux/tc_act/tc_gact.h b/include/linux/tc_act/tc_gact.h index e895c0a39629..f7bf94eed510 100644 --- a/include/linux/tc_act/tc_gact.h +++ b/include/linux/tc_act/tc_gact.h | |||
| @@ -5,14 +5,12 @@ | |||
| 5 | #include <linux/pkt_cls.h> | 5 | #include <linux/pkt_cls.h> |
| 6 | 6 | ||
| 7 | #define TCA_ACT_GACT 5 | 7 | #define TCA_ACT_GACT 5 |
| 8 | struct tc_gact | 8 | struct tc_gact { |
| 9 | { | ||
| 10 | tc_gen; | 9 | tc_gen; |
| 11 | 10 | ||
| 12 | }; | 11 | }; |
| 13 | 12 | ||
| 14 | struct tc_gact_p | 13 | struct tc_gact_p { |
| 15 | { | ||
| 16 | #define PGACT_NONE 0 | 14 | #define PGACT_NONE 0 |
| 17 | #define PGACT_NETRAND 1 | 15 | #define PGACT_NETRAND 1 |
| 18 | #define PGACT_DETERM 2 | 16 | #define PGACT_DETERM 2 |
| @@ -22,8 +20,7 @@ struct tc_gact_p | |||
| 22 | int paction; | 20 | int paction; |
| 23 | }; | 21 | }; |
| 24 | 22 | ||
| 25 | enum | 23 | enum { |
| 26 | { | ||
| 27 | TCA_GACT_UNSPEC, | 24 | TCA_GACT_UNSPEC, |
| 28 | TCA_GACT_TM, | 25 | TCA_GACT_TM, |
| 29 | TCA_GACT_PARMS, | 26 | TCA_GACT_PARMS, |
diff --git a/include/linux/tc_act/tc_ipt.h b/include/linux/tc_act/tc_ipt.h index 4b6f7b6c7a79..a2335563d21f 100644 --- a/include/linux/tc_act/tc_ipt.h +++ b/include/linux/tc_act/tc_ipt.h | |||
| @@ -5,8 +5,7 @@ | |||
| 5 | 5 | ||
| 6 | #define TCA_ACT_IPT 6 | 6 | #define TCA_ACT_IPT 6 |
| 7 | 7 | ||
| 8 | enum | 8 | enum { |
| 9 | { | ||
| 10 | TCA_IPT_UNSPEC, | 9 | TCA_IPT_UNSPEC, |
| 11 | TCA_IPT_TABLE, | 10 | TCA_IPT_TABLE, |
| 12 | TCA_IPT_HOOK, | 11 | TCA_IPT_HOOK, |
diff --git a/include/linux/tc_act/tc_mirred.h b/include/linux/tc_act/tc_mirred.h index 0a99ab60d610..7561750e8fd6 100644 --- a/include/linux/tc_act/tc_mirred.h +++ b/include/linux/tc_act/tc_mirred.h | |||
| @@ -10,15 +10,13 @@ | |||
| 10 | #define TCA_INGRESS_REDIR 3 /* packet redirect to INGRESS*/ | 10 | #define TCA_INGRESS_REDIR 3 /* packet redirect to INGRESS*/ |
| 11 | #define TCA_INGRESS_MIRROR 4 /* mirror packet to INGRESS */ | 11 | #define TCA_INGRESS_MIRROR 4 /* mirror packet to INGRESS */ |
| 12 | 12 | ||
| 13 | struct tc_mirred | 13 | struct tc_mirred { |
| 14 | { | ||
| 15 | tc_gen; | 14 | tc_gen; |
| 16 | int eaction; /* one of IN/EGRESS_MIRROR/REDIR */ | 15 | int eaction; /* one of IN/EGRESS_MIRROR/REDIR */ |
| 17 | __u32 ifindex; /* ifindex of egress port */ | 16 | __u32 ifindex; /* ifindex of egress port */ |
| 18 | }; | 17 | }; |
| 19 | 18 | ||
| 20 | enum | 19 | enum { |
| 21 | { | ||
| 22 | TCA_MIRRED_UNSPEC, | 20 | TCA_MIRRED_UNSPEC, |
| 23 | TCA_MIRRED_TM, | 21 | TCA_MIRRED_TM, |
| 24 | TCA_MIRRED_PARMS, | 22 | TCA_MIRRED_PARMS, |
diff --git a/include/linux/tc_act/tc_nat.h b/include/linux/tc_act/tc_nat.h index e7cf31e8ba79..6663aeba0b9a 100644 --- a/include/linux/tc_act/tc_nat.h +++ b/include/linux/tc_act/tc_nat.h | |||
| @@ -6,8 +6,7 @@ | |||
| 6 | 6 | ||
| 7 | #define TCA_ACT_NAT 9 | 7 | #define TCA_ACT_NAT 9 |
| 8 | 8 | ||
| 9 | enum | 9 | enum { |
| 10 | { | ||
| 11 | TCA_NAT_UNSPEC, | 10 | TCA_NAT_UNSPEC, |
| 12 | TCA_NAT_PARMS, | 11 | TCA_NAT_PARMS, |
| 13 | TCA_NAT_TM, | 12 | TCA_NAT_TM, |
| @@ -17,8 +16,7 @@ enum | |||
| 17 | 16 | ||
| 18 | #define TCA_NAT_FLAG_EGRESS 1 | 17 | #define TCA_NAT_FLAG_EGRESS 1 |
| 19 | 18 | ||
| 20 | struct tc_nat | 19 | struct tc_nat { |
| 21 | { | ||
| 22 | tc_gen; | 20 | tc_gen; |
| 23 | __be32 old_addr; | 21 | __be32 old_addr; |
| 24 | __be32 new_addr; | 22 | __be32 new_addr; |
diff --git a/include/linux/tc_act/tc_pedit.h b/include/linux/tc_act/tc_pedit.h index 54ce9064115a..716cfabcd5b2 100644 --- a/include/linux/tc_act/tc_pedit.h +++ b/include/linux/tc_act/tc_pedit.h | |||
| @@ -6,8 +6,7 @@ | |||
| 6 | 6 | ||
| 7 | #define TCA_ACT_PEDIT 7 | 7 | #define TCA_ACT_PEDIT 7 |
| 8 | 8 | ||
| 9 | enum | 9 | enum { |
| 10 | { | ||
| 11 | TCA_PEDIT_UNSPEC, | 10 | TCA_PEDIT_UNSPEC, |
| 12 | TCA_PEDIT_TM, | 11 | TCA_PEDIT_TM, |
| 13 | TCA_PEDIT_PARMS, | 12 | TCA_PEDIT_PARMS, |
| @@ -15,8 +14,7 @@ enum | |||
| 15 | }; | 14 | }; |
| 16 | #define TCA_PEDIT_MAX (__TCA_PEDIT_MAX - 1) | 15 | #define TCA_PEDIT_MAX (__TCA_PEDIT_MAX - 1) |
| 17 | 16 | ||
| 18 | struct tc_pedit_key | 17 | struct tc_pedit_key { |
| 19 | { | ||
| 20 | __u32 mask; /* AND */ | 18 | __u32 mask; /* AND */ |
| 21 | __u32 val; /*XOR */ | 19 | __u32 val; /*XOR */ |
| 22 | __u32 off; /*offset */ | 20 | __u32 off; /*offset */ |
| @@ -25,8 +23,7 @@ struct tc_pedit_key | |||
| 25 | __u32 shift; | 23 | __u32 shift; |
| 26 | }; | 24 | }; |
| 27 | 25 | ||
| 28 | struct tc_pedit_sel | 26 | struct tc_pedit_sel { |
| 29 | { | ||
| 30 | tc_gen; | 27 | tc_gen; |
| 31 | unsigned char nkeys; | 28 | unsigned char nkeys; |
| 32 | unsigned char flags; | 29 | unsigned char flags; |
diff --git a/include/linux/tc_act/tc_skbedit.h b/include/linux/tc_act/tc_skbedit.h index a14e461a7af7..7a2e910a5f08 100644 --- a/include/linux/tc_act/tc_skbedit.h +++ b/include/linux/tc_act/tc_skbedit.h | |||
| @@ -26,6 +26,7 @@ | |||
| 26 | 26 | ||
| 27 | #define SKBEDIT_F_PRIORITY 0x1 | 27 | #define SKBEDIT_F_PRIORITY 0x1 |
| 28 | #define SKBEDIT_F_QUEUE_MAPPING 0x2 | 28 | #define SKBEDIT_F_QUEUE_MAPPING 0x2 |
| 29 | #define SKBEDIT_F_MARK 0x4 | ||
| 29 | 30 | ||
| 30 | struct tc_skbedit { | 31 | struct tc_skbedit { |
| 31 | tc_gen; | 32 | tc_gen; |
| @@ -37,6 +38,7 @@ enum { | |||
| 37 | TCA_SKBEDIT_PARMS, | 38 | TCA_SKBEDIT_PARMS, |
| 38 | TCA_SKBEDIT_PRIORITY, | 39 | TCA_SKBEDIT_PRIORITY, |
| 39 | TCA_SKBEDIT_QUEUE_MAPPING, | 40 | TCA_SKBEDIT_QUEUE_MAPPING, |
| 41 | TCA_SKBEDIT_MARK, | ||
| 40 | __TCA_SKBEDIT_MAX | 42 | __TCA_SKBEDIT_MAX |
| 41 | }; | 43 | }; |
| 42 | #define TCA_SKBEDIT_MAX (__TCA_SKBEDIT_MAX - 1) | 44 | #define TCA_SKBEDIT_MAX (__TCA_SKBEDIT_MAX - 1) |
diff --git a/include/linux/tc_ematch/tc_em_cmp.h b/include/linux/tc_ematch/tc_em_cmp.h index 38e7f7b25ec2..f34bb1bae083 100644 --- a/include/linux/tc_ematch/tc_em_cmp.h +++ b/include/linux/tc_ematch/tc_em_cmp.h | |||
| @@ -4,8 +4,7 @@ | |||
| 4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
| 5 | #include <linux/pkt_cls.h> | 5 | #include <linux/pkt_cls.h> |
| 6 | 6 | ||
| 7 | struct tcf_em_cmp | 7 | struct tcf_em_cmp { |
| 8 | { | ||
| 9 | __u32 val; | 8 | __u32 val; |
| 10 | __u32 mask; | 9 | __u32 mask; |
| 11 | __u16 off; | 10 | __u16 off; |
| @@ -15,8 +14,7 @@ struct tcf_em_cmp | |||
| 15 | __u8 opnd:4; | 14 | __u8 opnd:4; |
| 16 | }; | 15 | }; |
| 17 | 16 | ||
| 18 | enum | 17 | enum { |
| 19 | { | ||
| 20 | TCF_EM_ALIGN_U8 = 1, | 18 | TCF_EM_ALIGN_U8 = 1, |
| 21 | TCF_EM_ALIGN_U16 = 2, | 19 | TCF_EM_ALIGN_U16 = 2, |
| 22 | TCF_EM_ALIGN_U32 = 4 | 20 | TCF_EM_ALIGN_U32 = 4 |
diff --git a/include/linux/tc_ematch/tc_em_meta.h b/include/linux/tc_ematch/tc_em_meta.h index dcfb733fa1f6..0864206ec1a3 100644 --- a/include/linux/tc_ematch/tc_em_meta.h +++ b/include/linux/tc_ematch/tc_em_meta.h | |||
| @@ -4,8 +4,7 @@ | |||
| 4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
| 5 | #include <linux/pkt_cls.h> | 5 | #include <linux/pkt_cls.h> |
| 6 | 6 | ||
| 7 | enum | 7 | enum { |
| 8 | { | ||
| 9 | TCA_EM_META_UNSPEC, | 8 | TCA_EM_META_UNSPEC, |
| 10 | TCA_EM_META_HDR, | 9 | TCA_EM_META_HDR, |
| 11 | TCA_EM_META_LVALUE, | 10 | TCA_EM_META_LVALUE, |
| @@ -14,8 +13,7 @@ enum | |||
| 14 | }; | 13 | }; |
| 15 | #define TCA_EM_META_MAX (__TCA_EM_META_MAX - 1) | 14 | #define TCA_EM_META_MAX (__TCA_EM_META_MAX - 1) |
| 16 | 15 | ||
| 17 | struct tcf_meta_val | 16 | struct tcf_meta_val { |
| 18 | { | ||
| 19 | __u16 kind; | 17 | __u16 kind; |
| 20 | __u8 shift; | 18 | __u8 shift; |
| 21 | __u8 op; | 19 | __u8 op; |
| @@ -26,16 +24,14 @@ struct tcf_meta_val | |||
| 26 | #define TCF_META_ID_MASK 0x7ff | 24 | #define TCF_META_ID_MASK 0x7ff |
| 27 | #define TCF_META_ID(kind) ((kind) & TCF_META_ID_MASK) | 25 | #define TCF_META_ID(kind) ((kind) & TCF_META_ID_MASK) |
| 28 | 26 | ||
| 29 | enum | 27 | enum { |
| 30 | { | ||
| 31 | TCF_META_TYPE_VAR, | 28 | TCF_META_TYPE_VAR, |
| 32 | TCF_META_TYPE_INT, | 29 | TCF_META_TYPE_INT, |
| 33 | __TCF_META_TYPE_MAX | 30 | __TCF_META_TYPE_MAX |
| 34 | }; | 31 | }; |
| 35 | #define TCF_META_TYPE_MAX (__TCF_META_TYPE_MAX - 1) | 32 | #define TCF_META_TYPE_MAX (__TCF_META_TYPE_MAX - 1) |
| 36 | 33 | ||
| 37 | enum | 34 | enum { |
| 38 | { | ||
| 39 | TCF_META_ID_VALUE, | 35 | TCF_META_ID_VALUE, |
| 40 | TCF_META_ID_RANDOM, | 36 | TCF_META_ID_RANDOM, |
| 41 | TCF_META_ID_LOADAVG_0, | 37 | TCF_META_ID_LOADAVG_0, |
| @@ -87,8 +83,7 @@ enum | |||
| 87 | }; | 83 | }; |
| 88 | #define TCF_META_ID_MAX (__TCF_META_ID_MAX - 1) | 84 | #define TCF_META_ID_MAX (__TCF_META_ID_MAX - 1) |
| 89 | 85 | ||
| 90 | struct tcf_meta_hdr | 86 | struct tcf_meta_hdr { |
| 91 | { | ||
| 92 | struct tcf_meta_val left; | 87 | struct tcf_meta_val left; |
| 93 | struct tcf_meta_val right; | 88 | struct tcf_meta_val right; |
| 94 | }; | 89 | }; |
diff --git a/include/linux/tc_ematch/tc_em_nbyte.h b/include/linux/tc_ematch/tc_em_nbyte.h index 9ed8c2e58488..7172cfb999c1 100644 --- a/include/linux/tc_ematch/tc_em_nbyte.h +++ b/include/linux/tc_ematch/tc_em_nbyte.h | |||
| @@ -4,8 +4,7 @@ | |||
| 4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
| 5 | #include <linux/pkt_cls.h> | 5 | #include <linux/pkt_cls.h> |
| 6 | 6 | ||
| 7 | struct tcf_em_nbyte | 7 | struct tcf_em_nbyte { |
| 8 | { | ||
| 9 | __u16 off; | 8 | __u16 off; |
| 10 | __u16 len:12; | 9 | __u16 len:12; |
| 11 | __u8 layer:4; | 10 | __u8 layer:4; |
diff --git a/include/linux/tc_ematch/tc_em_text.h b/include/linux/tc_ematch/tc_em_text.h index d12a73a225fc..5aac4045ba88 100644 --- a/include/linux/tc_ematch/tc_em_text.h +++ b/include/linux/tc_ematch/tc_em_text.h | |||
| @@ -6,8 +6,7 @@ | |||
| 6 | 6 | ||
| 7 | #define TC_EM_TEXT_ALGOSIZ 16 | 7 | #define TC_EM_TEXT_ALGOSIZ 16 |
| 8 | 8 | ||
| 9 | struct tcf_em_text | 9 | struct tcf_em_text { |
| 10 | { | ||
| 11 | char algo[TC_EM_TEXT_ALGOSIZ]; | 10 | char algo[TC_EM_TEXT_ALGOSIZ]; |
| 12 | __u16 from_offset; | 11 | __u16 from_offset; |
| 13 | __u16 to_offset; | 12 | __u16 to_offset; |
diff --git a/include/linux/tcp.h b/include/linux/tcp.h index 8afac76cd748..7fee8a4df931 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h | |||
| @@ -81,6 +81,12 @@ enum { | |||
| 81 | TCP_DATA_OFFSET = __cpu_to_be32(0xF0000000) | 81 | TCP_DATA_OFFSET = __cpu_to_be32(0xF0000000) |
| 82 | }; | 82 | }; |
| 83 | 83 | ||
| 84 | /* | ||
| 85 | * TCP general constants | ||
| 86 | */ | ||
| 87 | #define TCP_MSS_DEFAULT 536U /* IPv4 (RFC1122, RFC2581) */ | ||
| 88 | #define TCP_MSS_DESIRED 1220U /* IPv6 (tunneled), EDNS0 (RFC3226) */ | ||
| 89 | |||
| 84 | /* TCP socket options */ | 90 | /* TCP socket options */ |
| 85 | #define TCP_NODELAY 1 /* Turn off Nagle's algorithm. */ | 91 | #define TCP_NODELAY 1 /* Turn off Nagle's algorithm. */ |
| 86 | #define TCP_MAXSEG 2 /* Limit MSS */ | 92 | #define TCP_MAXSEG 2 /* Limit MSS */ |
| @@ -96,14 +102,15 @@ enum { | |||
| 96 | #define TCP_QUICKACK 12 /* Block/reenable quick acks */ | 102 | #define TCP_QUICKACK 12 /* Block/reenable quick acks */ |
| 97 | #define TCP_CONGESTION 13 /* Congestion control algorithm */ | 103 | #define TCP_CONGESTION 13 /* Congestion control algorithm */ |
| 98 | #define TCP_MD5SIG 14 /* TCP MD5 Signature (RFC2385) */ | 104 | #define TCP_MD5SIG 14 /* TCP MD5 Signature (RFC2385) */ |
| 105 | #define TCP_COOKIE_TRANSACTIONS 15 /* TCP Cookie Transactions */ | ||
| 99 | 106 | ||
| 107 | /* for TCP_INFO socket option */ | ||
| 100 | #define TCPI_OPT_TIMESTAMPS 1 | 108 | #define TCPI_OPT_TIMESTAMPS 1 |
| 101 | #define TCPI_OPT_SACK 2 | 109 | #define TCPI_OPT_SACK 2 |
| 102 | #define TCPI_OPT_WSCALE 4 | 110 | #define TCPI_OPT_WSCALE 4 |
| 103 | #define TCPI_OPT_ECN 8 | 111 | #define TCPI_OPT_ECN 8 |
| 104 | 112 | ||
| 105 | enum tcp_ca_state | 113 | enum tcp_ca_state { |
| 106 | { | ||
| 107 | TCP_CA_Open = 0, | 114 | TCP_CA_Open = 0, |
| 108 | #define TCPF_CA_Open (1<<TCP_CA_Open) | 115 | #define TCPF_CA_Open (1<<TCP_CA_Open) |
| 109 | TCP_CA_Disorder = 1, | 116 | TCP_CA_Disorder = 1, |
| @@ -116,8 +123,7 @@ enum tcp_ca_state | |||
| 116 | #define TCPF_CA_Loss (1<<TCP_CA_Loss) | 123 | #define TCPF_CA_Loss (1<<TCP_CA_Loss) |
| 117 | }; | 124 | }; |
| 118 | 125 | ||
| 119 | struct tcp_info | 126 | struct tcp_info { |
| 120 | { | ||
| 121 | __u8 tcpi_state; | 127 | __u8 tcpi_state; |
| 122 | __u8 tcpi_ca_state; | 128 | __u8 tcpi_ca_state; |
| 123 | __u8 tcpi_retransmits; | 129 | __u8 tcpi_retransmits; |
| @@ -170,6 +176,30 @@ struct tcp_md5sig { | |||
| 170 | __u8 tcpm_key[TCP_MD5SIG_MAXKEYLEN]; /* key (binary) */ | 176 | __u8 tcpm_key[TCP_MD5SIG_MAXKEYLEN]; /* key (binary) */ |
| 171 | }; | 177 | }; |
| 172 | 178 | ||
| 179 | /* for TCP_COOKIE_TRANSACTIONS (TCPCT) socket option */ | ||
| 180 | #define TCP_COOKIE_MIN 8 /* 64-bits */ | ||
| 181 | #define TCP_COOKIE_MAX 16 /* 128-bits */ | ||
| 182 | #define TCP_COOKIE_PAIR_SIZE (2*TCP_COOKIE_MAX) | ||
| 183 | |||
| 184 | /* Flags for both getsockopt and setsockopt */ | ||
| 185 | #define TCP_COOKIE_IN_ALWAYS (1 << 0) /* Discard SYN without cookie */ | ||
| 186 | #define TCP_COOKIE_OUT_NEVER (1 << 1) /* Prohibit outgoing cookies, | ||
| 187 | * supercedes everything. */ | ||
| 188 | |||
| 189 | /* Flags for getsockopt */ | ||
| 190 | #define TCP_S_DATA_IN (1 << 2) /* Was data received? */ | ||
| 191 | #define TCP_S_DATA_OUT (1 << 3) /* Was data sent? */ | ||
| 192 | |||
| 193 | /* TCP_COOKIE_TRANSACTIONS data */ | ||
| 194 | struct tcp_cookie_transactions { | ||
| 195 | __u16 tcpct_flags; /* see above */ | ||
| 196 | __u8 __tcpct_pad1; /* zero */ | ||
| 197 | __u8 tcpct_cookie_desired; /* bytes */ | ||
| 198 | __u16 tcpct_s_data_desired; /* bytes of variable data */ | ||
| 199 | __u16 tcpct_used; /* bytes in value */ | ||
| 200 | __u8 tcpct_value[TCP_MSS_DEFAULT]; | ||
| 201 | }; | ||
| 202 | |||
| 173 | #ifdef __KERNEL__ | 203 | #ifdef __KERNEL__ |
| 174 | 204 | ||
| 175 | #include <linux/skbuff.h> | 205 | #include <linux/skbuff.h> |
| @@ -217,26 +247,38 @@ struct tcp_options_received { | |||
| 217 | sack_ok : 4, /* SACK seen on SYN packet */ | 247 | sack_ok : 4, /* SACK seen on SYN packet */ |
| 218 | snd_wscale : 4, /* Window scaling received from sender */ | 248 | snd_wscale : 4, /* Window scaling received from sender */ |
| 219 | rcv_wscale : 4; /* Window scaling to send to receiver */ | 249 | rcv_wscale : 4; /* Window scaling to send to receiver */ |
| 220 | /* SACKs data */ | 250 | u8 cookie_plus:6, /* bytes in authenticator/cookie option */ |
| 251 | cookie_out_never:1, | ||
| 252 | cookie_in_always:1; | ||
| 221 | u8 num_sacks; /* Number of SACK blocks */ | 253 | u8 num_sacks; /* Number of SACK blocks */ |
| 222 | u16 user_mss; /* mss requested by user in ioctl */ | 254 | u16 user_mss; /* mss requested by user in ioctl */ |
| 223 | u16 mss_clamp; /* Maximal mss, negotiated at connection setup */ | 255 | u16 mss_clamp; /* Maximal mss, negotiated at connection setup */ |
| 224 | }; | 256 | }; |
| 225 | 257 | ||
| 258 | static inline void tcp_clear_options(struct tcp_options_received *rx_opt) | ||
| 259 | { | ||
| 260 | rx_opt->tstamp_ok = rx_opt->sack_ok = 0; | ||
| 261 | rx_opt->wscale_ok = rx_opt->snd_wscale = 0; | ||
| 262 | rx_opt->cookie_plus = 0; | ||
| 263 | } | ||
| 264 | |||
| 226 | /* This is the max number of SACKS that we'll generate and process. It's safe | 265 | /* This is the max number of SACKS that we'll generate and process. It's safe |
| 227 | * to increse this, although since: | 266 | * to increase this, although since: |
| 228 | * size = TCPOLEN_SACK_BASE_ALIGNED (4) + n * TCPOLEN_SACK_PERBLOCK (8) | 267 | * size = TCPOLEN_SACK_BASE_ALIGNED (4) + n * TCPOLEN_SACK_PERBLOCK (8) |
| 229 | * only four options will fit in a standard TCP header */ | 268 | * only four options will fit in a standard TCP header */ |
| 230 | #define TCP_NUM_SACKS 4 | 269 | #define TCP_NUM_SACKS 4 |
| 231 | 270 | ||
| 271 | struct tcp_cookie_values; | ||
| 272 | struct tcp_request_sock_ops; | ||
| 273 | |||
| 232 | struct tcp_request_sock { | 274 | struct tcp_request_sock { |
| 233 | struct inet_request_sock req; | 275 | struct inet_request_sock req; |
| 234 | #ifdef CONFIG_TCP_MD5SIG | 276 | #ifdef CONFIG_TCP_MD5SIG |
| 235 | /* Only used by TCP MD5 Signature so far. */ | 277 | /* Only used by TCP MD5 Signature so far. */ |
| 236 | struct tcp_request_sock_ops *af_specific; | 278 | const struct tcp_request_sock_ops *af_specific; |
| 237 | #endif | 279 | #endif |
| 238 | u32 rcv_isn; | 280 | u32 rcv_isn; |
| 239 | u32 snt_isn; | 281 | u32 snt_isn; |
| 240 | }; | 282 | }; |
| 241 | 283 | ||
| 242 | static inline struct tcp_request_sock *tcp_rsk(const struct request_sock *req) | 284 | static inline struct tcp_request_sock *tcp_rsk(const struct request_sock *req) |
| @@ -401,11 +443,17 @@ struct tcp_sock { | |||
| 401 | 443 | ||
| 402 | #ifdef CONFIG_TCP_MD5SIG | 444 | #ifdef CONFIG_TCP_MD5SIG |
| 403 | /* TCP AF-Specific parts; only used by MD5 Signature support so far */ | 445 | /* TCP AF-Specific parts; only used by MD5 Signature support so far */ |
| 404 | struct tcp_sock_af_ops *af_specific; | 446 | const struct tcp_sock_af_ops *af_specific; |
| 405 | 447 | ||
| 406 | /* TCP MD5 Signagure Option information */ | 448 | /* TCP MD5 Signature Option information */ |
| 407 | struct tcp_md5sig_info *md5sig_info; | 449 | struct tcp_md5sig_info *md5sig_info; |
| 408 | #endif | 450 | #endif |
| 451 | |||
| 452 | /* When the cookie options are generated and exchanged, then this | ||
| 453 | * object holds a reference to them (cookie_values->kref). Also | ||
| 454 | * contains related tcp_cookie_transactions fields. | ||
| 455 | */ | ||
| 456 | struct tcp_cookie_values *cookie_values; | ||
| 409 | }; | 457 | }; |
| 410 | 458 | ||
| 411 | static inline struct tcp_sock *tcp_sk(const struct sock *sk) | 459 | static inline struct tcp_sock *tcp_sk(const struct sock *sk) |
| @@ -424,6 +472,10 @@ struct tcp_timewait_sock { | |||
| 424 | u16 tw_md5_keylen; | 472 | u16 tw_md5_keylen; |
| 425 | u8 tw_md5_key[TCP_MD5SIG_MAXKEYLEN]; | 473 | u8 tw_md5_key[TCP_MD5SIG_MAXKEYLEN]; |
| 426 | #endif | 474 | #endif |
| 475 | /* Few sockets in timewait have cookies; in that case, then this | ||
| 476 | * object holds a reference to them (tw_cookie_values->kref). | ||
| 477 | */ | ||
| 478 | struct tcp_cookie_values *tw_cookie_values; | ||
| 427 | }; | 479 | }; |
| 428 | 480 | ||
| 429 | static inline struct tcp_timewait_sock *tcp_twsk(const struct sock *sk) | 481 | static inline struct tcp_timewait_sock *tcp_twsk(const struct sock *sk) |
| @@ -431,6 +483,6 @@ static inline struct tcp_timewait_sock *tcp_twsk(const struct sock *sk) | |||
| 431 | return (struct tcp_timewait_sock *)sk; | 483 | return (struct tcp_timewait_sock *)sk; |
| 432 | } | 484 | } |
| 433 | 485 | ||
| 434 | #endif | 486 | #endif /* __KERNEL__ */ |
| 435 | 487 | ||
| 436 | #endif /* _LINUX_TCP_H */ | 488 | #endif /* _LINUX_TCP_H */ |
diff --git a/include/linux/time.h b/include/linux/time.h index ea16c1a01d51..fe04e5ef6a59 100644 --- a/include/linux/time.h +++ b/include/linux/time.h | |||
| @@ -75,7 +75,7 @@ extern unsigned long mktime(const unsigned int year, const unsigned int mon, | |||
| 75 | const unsigned int day, const unsigned int hour, | 75 | const unsigned int day, const unsigned int hour, |
| 76 | const unsigned int min, const unsigned int sec); | 76 | const unsigned int min, const unsigned int sec); |
| 77 | 77 | ||
| 78 | extern void set_normalized_timespec(struct timespec *ts, time_t sec, long nsec); | 78 | extern void set_normalized_timespec(struct timespec *ts, time_t sec, s64 nsec); |
| 79 | extern struct timespec timespec_add_safe(const struct timespec lhs, | 79 | extern struct timespec timespec_add_safe(const struct timespec lhs, |
| 80 | const struct timespec rhs); | 80 | const struct timespec rhs); |
| 81 | 81 | ||
| @@ -101,7 +101,8 @@ extern struct timespec xtime; | |||
| 101 | extern struct timespec wall_to_monotonic; | 101 | extern struct timespec wall_to_monotonic; |
| 102 | extern seqlock_t xtime_lock; | 102 | extern seqlock_t xtime_lock; |
| 103 | 103 | ||
| 104 | extern unsigned long read_persistent_clock(void); | 104 | extern void read_persistent_clock(struct timespec *ts); |
| 105 | extern void read_boot_clock(struct timespec *ts); | ||
| 105 | extern int update_persistent_clock(struct timespec now); | 106 | extern int update_persistent_clock(struct timespec now); |
| 106 | extern int no_sync_cmos_clock __read_mostly; | 107 | extern int no_sync_cmos_clock __read_mostly; |
| 107 | void timekeeping_init(void); | 108 | void timekeeping_init(void); |
| @@ -109,6 +110,8 @@ extern int timekeeping_suspended; | |||
| 109 | 110 | ||
| 110 | unsigned long get_seconds(void); | 111 | unsigned long get_seconds(void); |
| 111 | struct timespec current_kernel_time(void); | 112 | struct timespec current_kernel_time(void); |
| 113 | struct timespec __current_kernel_time(void); /* does not hold xtime_lock */ | ||
| 114 | struct timespec get_monotonic_coarse(void); | ||
| 112 | 115 | ||
| 113 | #define CURRENT_TIME (current_kernel_time()) | 116 | #define CURRENT_TIME (current_kernel_time()) |
| 114 | #define CURRENT_TIME_SEC ((struct timespec) { get_seconds(), 0 }) | 117 | #define CURRENT_TIME_SEC ((struct timespec) { get_seconds(), 0 }) |
| @@ -147,10 +150,39 @@ extern struct timespec timespec_trunc(struct timespec t, unsigned gran); | |||
| 147 | extern int timekeeping_valid_for_hres(void); | 150 | extern int timekeeping_valid_for_hres(void); |
| 148 | extern void update_wall_time(void); | 151 | extern void update_wall_time(void); |
| 149 | extern void update_xtime_cache(u64 nsec); | 152 | extern void update_xtime_cache(u64 nsec); |
| 153 | extern void timekeeping_leap_insert(int leapsecond); | ||
| 150 | 154 | ||
| 151 | struct tms; | 155 | struct tms; |
| 152 | extern void do_sys_times(struct tms *); | 156 | extern void do_sys_times(struct tms *); |
| 153 | 157 | ||
| 158 | /* | ||
| 159 | * Similar to the struct tm in userspace <time.h>, but it needs to be here so | ||
| 160 | * that the kernel source is self contained. | ||
| 161 | */ | ||
| 162 | struct tm { | ||
| 163 | /* | ||
| 164 | * the number of seconds after the minute, normally in the range | ||
| 165 | * 0 to 59, but can be up to 60 to allow for leap seconds | ||
| 166 | */ | ||
| 167 | int tm_sec; | ||
| 168 | /* the number of minutes after the hour, in the range 0 to 59*/ | ||
| 169 | int tm_min; | ||
| 170 | /* the number of hours past midnight, in the range 0 to 23 */ | ||
| 171 | int tm_hour; | ||
| 172 | /* the day of the month, in the range 1 to 31 */ | ||
| 173 | int tm_mday; | ||
| 174 | /* the number of months since January, in the range 0 to 11 */ | ||
| 175 | int tm_mon; | ||
| 176 | /* the number of years since 1900 */ | ||
| 177 | long tm_year; | ||
| 178 | /* the number of days since Sunday, in the range 0 to 6 */ | ||
| 179 | int tm_wday; | ||
| 180 | /* the number of days since January 1, in the range 0 to 365 */ | ||
| 181 | int tm_yday; | ||
| 182 | }; | ||
| 183 | |||
| 184 | void time_to_tm(time_t totalsecs, int offset, struct tm *result); | ||
| 185 | |||
| 154 | /** | 186 | /** |
| 155 | * timespec_to_ns - Convert timespec to nanoseconds | 187 | * timespec_to_ns - Convert timespec to nanoseconds |
| 156 | * @ts: pointer to the timespec variable to be converted | 188 | * @ts: pointer to the timespec variable to be converted |
| @@ -241,6 +273,8 @@ struct itimerval { | |||
| 241 | #define CLOCK_PROCESS_CPUTIME_ID 2 | 273 | #define CLOCK_PROCESS_CPUTIME_ID 2 |
| 242 | #define CLOCK_THREAD_CPUTIME_ID 3 | 274 | #define CLOCK_THREAD_CPUTIME_ID 3 |
| 243 | #define CLOCK_MONOTONIC_RAW 4 | 275 | #define CLOCK_MONOTONIC_RAW 4 |
| 276 | #define CLOCK_REALTIME_COARSE 5 | ||
| 277 | #define CLOCK_MONOTONIC_COARSE 6 | ||
| 244 | 278 | ||
| 245 | /* | 279 | /* |
| 246 | * The IDs of various hardware clocks: | 280 | * The IDs of various hardware clocks: |
diff --git a/include/linux/timer.h b/include/linux/timer.h index be62ec2ebea5..a2d1eb6cb3f0 100644 --- a/include/linux/timer.h +++ b/include/linux/timer.h | |||
| @@ -175,11 +175,6 @@ extern int mod_timer_pinned(struct timer_list *timer, unsigned long expires); | |||
| 175 | 175 | ||
| 176 | /* | 176 | /* |
| 177 | * Return when the next timer-wheel timeout occurs (in absolute jiffies), | 177 | * Return when the next timer-wheel timeout occurs (in absolute jiffies), |
| 178 | * locks the timer base: | ||
| 179 | */ | ||
| 180 | extern unsigned long next_timer_interrupt(void); | ||
| 181 | /* | ||
| 182 | * Return when the next timer-wheel timeout occurs (in absolute jiffies), | ||
| 183 | * locks the timer base and does the comparison against the given | 178 | * locks the timer base and does the comparison against the given |
| 184 | * jiffie. | 179 | * jiffie. |
| 185 | */ | 180 | */ |
diff --git a/include/linux/tipc.h b/include/linux/tipc.h index bea469455a0c..3d92396639de 100644 --- a/include/linux/tipc.h +++ b/include/linux/tipc.h | |||
| @@ -209,5 +209,7 @@ struct sockaddr_tipc { | |||
| 209 | #define TIPC_SRC_DROPPABLE 128 /* Default: 0 (resend congested msg) */ | 209 | #define TIPC_SRC_DROPPABLE 128 /* Default: 0 (resend congested msg) */ |
| 210 | #define TIPC_DEST_DROPPABLE 129 /* Default: based on socket type */ | 210 | #define TIPC_DEST_DROPPABLE 129 /* Default: based on socket type */ |
| 211 | #define TIPC_CONN_TIMEOUT 130 /* Default: 8000 (ms) */ | 211 | #define TIPC_CONN_TIMEOUT 130 /* Default: 8000 (ms) */ |
| 212 | #define TIPC_NODE_RECVQ_DEPTH 131 /* Default: none (read only) */ | ||
| 213 | #define TIPC_SOCK_RECVQ_DEPTH 132 /* Default: none (read only) */ | ||
| 212 | 214 | ||
| 213 | #endif | 215 | #endif |
diff --git a/include/linux/topology.h b/include/linux/topology.h index 7402c1a27c4f..57e63579bfdd 100644 --- a/include/linux/topology.h +++ b/include/linux/topology.h | |||
| @@ -85,20 +85,27 @@ int arch_update_cpu_topology(void); | |||
| 85 | #define ARCH_HAS_SCHED_WAKE_IDLE | 85 | #define ARCH_HAS_SCHED_WAKE_IDLE |
| 86 | /* Common values for SMT siblings */ | 86 | /* Common values for SMT siblings */ |
| 87 | #ifndef SD_SIBLING_INIT | 87 | #ifndef SD_SIBLING_INIT |
| 88 | #define SD_SIBLING_INIT (struct sched_domain) { \ | 88 | #define SD_SIBLING_INIT (struct sched_domain) { \ |
| 89 | .min_interval = 1, \ | 89 | .min_interval = 1, \ |
| 90 | .max_interval = 2, \ | 90 | .max_interval = 2, \ |
| 91 | .busy_factor = 64, \ | 91 | .busy_factor = 64, \ |
| 92 | .imbalance_pct = 110, \ | 92 | .imbalance_pct = 110, \ |
| 93 | .flags = SD_LOAD_BALANCE \ | 93 | \ |
| 94 | | SD_BALANCE_NEWIDLE \ | 94 | .flags = 1*SD_LOAD_BALANCE \ |
| 95 | | SD_BALANCE_FORK \ | 95 | | 1*SD_BALANCE_NEWIDLE \ |
| 96 | | SD_BALANCE_EXEC \ | 96 | | 1*SD_BALANCE_EXEC \ |
| 97 | | SD_WAKE_AFFINE \ | 97 | | 1*SD_BALANCE_FORK \ |
| 98 | | SD_WAKE_BALANCE \ | 98 | | 0*SD_BALANCE_WAKE \ |
| 99 | | SD_SHARE_CPUPOWER, \ | 99 | | 1*SD_WAKE_AFFINE \ |
| 100 | .last_balance = jiffies, \ | 100 | | 1*SD_SHARE_CPUPOWER \ |
| 101 | .balance_interval = 1, \ | 101 | | 0*SD_POWERSAVINGS_BALANCE \ |
| 102 | | 0*SD_SHARE_PKG_RESOURCES \ | ||
| 103 | | 0*SD_SERIALIZE \ | ||
| 104 | | 0*SD_PREFER_SIBLING \ | ||
| 105 | , \ | ||
| 106 | .last_balance = jiffies, \ | ||
| 107 | .balance_interval = 1, \ | ||
| 108 | .smt_gain = 1178, /* 15% */ \ | ||
| 102 | } | 109 | } |
| 103 | #endif | 110 | #endif |
| 104 | #endif /* CONFIG_SCHED_SMT */ | 111 | #endif /* CONFIG_SCHED_SMT */ |
| @@ -106,69 +113,90 @@ int arch_update_cpu_topology(void); | |||
| 106 | #ifdef CONFIG_SCHED_MC | 113 | #ifdef CONFIG_SCHED_MC |
| 107 | /* Common values for MC siblings. for now mostly derived from SD_CPU_INIT */ | 114 | /* Common values for MC siblings. for now mostly derived from SD_CPU_INIT */ |
| 108 | #ifndef SD_MC_INIT | 115 | #ifndef SD_MC_INIT |
| 109 | #define SD_MC_INIT (struct sched_domain) { \ | 116 | #define SD_MC_INIT (struct sched_domain) { \ |
| 110 | .min_interval = 1, \ | 117 | .min_interval = 1, \ |
| 111 | .max_interval = 4, \ | 118 | .max_interval = 4, \ |
| 112 | .busy_factor = 64, \ | 119 | .busy_factor = 64, \ |
| 113 | .imbalance_pct = 125, \ | 120 | .imbalance_pct = 125, \ |
| 114 | .cache_nice_tries = 1, \ | 121 | .cache_nice_tries = 1, \ |
| 115 | .busy_idx = 2, \ | 122 | .busy_idx = 2, \ |
| 116 | .wake_idx = 1, \ | 123 | .wake_idx = 0, \ |
| 117 | .forkexec_idx = 1, \ | 124 | .forkexec_idx = 0, \ |
| 118 | .flags = SD_LOAD_BALANCE \ | 125 | \ |
| 119 | | SD_BALANCE_FORK \ | 126 | .flags = 1*SD_LOAD_BALANCE \ |
| 120 | | SD_BALANCE_EXEC \ | 127 | | 1*SD_BALANCE_NEWIDLE \ |
| 121 | | SD_WAKE_AFFINE \ | 128 | | 1*SD_BALANCE_EXEC \ |
| 122 | | SD_WAKE_BALANCE \ | 129 | | 1*SD_BALANCE_FORK \ |
| 123 | | SD_SHARE_PKG_RESOURCES\ | 130 | | 0*SD_BALANCE_WAKE \ |
| 124 | | sd_balance_for_mc_power()\ | 131 | | 1*SD_WAKE_AFFINE \ |
| 125 | | sd_power_saving_flags(),\ | 132 | | 0*SD_PREFER_LOCAL \ |
| 126 | .last_balance = jiffies, \ | 133 | | 0*SD_SHARE_CPUPOWER \ |
| 127 | .balance_interval = 1, \ | 134 | | 1*SD_SHARE_PKG_RESOURCES \ |
| 135 | | 0*SD_SERIALIZE \ | ||
| 136 | | sd_balance_for_mc_power() \ | ||
| 137 | | sd_power_saving_flags() \ | ||
| 138 | , \ | ||
| 139 | .last_balance = jiffies, \ | ||
| 140 | .balance_interval = 1, \ | ||
| 128 | } | 141 | } |
| 129 | #endif | 142 | #endif |
| 130 | #endif /* CONFIG_SCHED_MC */ | 143 | #endif /* CONFIG_SCHED_MC */ |
| 131 | 144 | ||
| 132 | /* Common values for CPUs */ | 145 | /* Common values for CPUs */ |
| 133 | #ifndef SD_CPU_INIT | 146 | #ifndef SD_CPU_INIT |
| 134 | #define SD_CPU_INIT (struct sched_domain) { \ | 147 | #define SD_CPU_INIT (struct sched_domain) { \ |
| 135 | .min_interval = 1, \ | 148 | .min_interval = 1, \ |
| 136 | .max_interval = 4, \ | 149 | .max_interval = 4, \ |
| 137 | .busy_factor = 64, \ | 150 | .busy_factor = 64, \ |
| 138 | .imbalance_pct = 125, \ | 151 | .imbalance_pct = 125, \ |
| 139 | .cache_nice_tries = 1, \ | 152 | .cache_nice_tries = 1, \ |
| 140 | .busy_idx = 2, \ | 153 | .busy_idx = 2, \ |
| 141 | .idle_idx = 1, \ | 154 | .idle_idx = 1, \ |
| 142 | .newidle_idx = 2, \ | 155 | .newidle_idx = 0, \ |
| 143 | .wake_idx = 1, \ | 156 | .wake_idx = 0, \ |
| 144 | .forkexec_idx = 1, \ | 157 | .forkexec_idx = 0, \ |
| 145 | .flags = SD_LOAD_BALANCE \ | 158 | \ |
| 146 | | SD_BALANCE_EXEC \ | 159 | .flags = 1*SD_LOAD_BALANCE \ |
| 147 | | SD_BALANCE_FORK \ | 160 | | 1*SD_BALANCE_NEWIDLE \ |
| 148 | | SD_WAKE_AFFINE \ | 161 | | 1*SD_BALANCE_EXEC \ |
| 149 | | SD_WAKE_BALANCE \ | 162 | | 1*SD_BALANCE_FORK \ |
| 150 | | sd_balance_for_package_power()\ | 163 | | 0*SD_BALANCE_WAKE \ |
| 151 | | sd_power_saving_flags(),\ | 164 | | 1*SD_WAKE_AFFINE \ |
| 152 | .last_balance = jiffies, \ | 165 | | 0*SD_PREFER_LOCAL \ |
| 153 | .balance_interval = 1, \ | 166 | | 0*SD_SHARE_CPUPOWER \ |
| 167 | | 0*SD_SHARE_PKG_RESOURCES \ | ||
| 168 | | 0*SD_SERIALIZE \ | ||
| 169 | | sd_balance_for_package_power() \ | ||
| 170 | | sd_power_saving_flags() \ | ||
| 171 | , \ | ||
| 172 | .last_balance = jiffies, \ | ||
| 173 | .balance_interval = 1, \ | ||
| 154 | } | 174 | } |
| 155 | #endif | 175 | #endif |
| 156 | 176 | ||
| 157 | /* sched_domains SD_ALLNODES_INIT for NUMA machines */ | 177 | /* sched_domains SD_ALLNODES_INIT for NUMA machines */ |
| 158 | #define SD_ALLNODES_INIT (struct sched_domain) { \ | 178 | #define SD_ALLNODES_INIT (struct sched_domain) { \ |
| 159 | .min_interval = 64, \ | 179 | .min_interval = 64, \ |
| 160 | .max_interval = 64*num_online_cpus(), \ | 180 | .max_interval = 64*num_online_cpus(), \ |
| 161 | .busy_factor = 128, \ | 181 | .busy_factor = 128, \ |
| 162 | .imbalance_pct = 133, \ | 182 | .imbalance_pct = 133, \ |
| 163 | .cache_nice_tries = 1, \ | 183 | .cache_nice_tries = 1, \ |
| 164 | .busy_idx = 3, \ | 184 | .busy_idx = 3, \ |
| 165 | .idle_idx = 3, \ | 185 | .idle_idx = 3, \ |
| 166 | .flags = SD_LOAD_BALANCE \ | 186 | .flags = 1*SD_LOAD_BALANCE \ |
| 167 | | SD_BALANCE_NEWIDLE \ | 187 | | 1*SD_BALANCE_NEWIDLE \ |
| 168 | | SD_WAKE_AFFINE \ | 188 | | 0*SD_BALANCE_EXEC \ |
| 169 | | SD_SERIALIZE, \ | 189 | | 0*SD_BALANCE_FORK \ |
| 170 | .last_balance = jiffies, \ | 190 | | 0*SD_BALANCE_WAKE \ |
| 171 | .balance_interval = 64, \ | 191 | | 0*SD_WAKE_AFFINE \ |
| 192 | | 0*SD_SHARE_CPUPOWER \ | ||
| 193 | | 0*SD_POWERSAVINGS_BALANCE \ | ||
| 194 | | 0*SD_SHARE_PKG_RESOURCES \ | ||
| 195 | | 1*SD_SERIALIZE \ | ||
| 196 | | 0*SD_PREFER_SIBLING \ | ||
| 197 | , \ | ||
| 198 | .last_balance = jiffies, \ | ||
| 199 | .balance_interval = 64, \ | ||
| 172 | } | 200 | } |
| 173 | 201 | ||
| 174 | #ifdef CONFIG_NUMA | 202 | #ifdef CONFIG_NUMA |
| @@ -183,12 +211,6 @@ int arch_update_cpu_topology(void); | |||
| 183 | #ifndef topology_core_id | 211 | #ifndef topology_core_id |
| 184 | #define topology_core_id(cpu) ((void)(cpu), 0) | 212 | #define topology_core_id(cpu) ((void)(cpu), 0) |
| 185 | #endif | 213 | #endif |
| 186 | #ifndef topology_thread_siblings | ||
| 187 | #define topology_thread_siblings(cpu) cpumask_of_cpu(cpu) | ||
| 188 | #endif | ||
| 189 | #ifndef topology_core_siblings | ||
| 190 | #define topology_core_siblings(cpu) cpumask_of_cpu(cpu) | ||
| 191 | #endif | ||
| 192 | #ifndef topology_thread_cpumask | 214 | #ifndef topology_thread_cpumask |
| 193 | #define topology_thread_cpumask(cpu) cpumask_of(cpu) | 215 | #define topology_thread_cpumask(cpu) cpumask_of(cpu) |
| 194 | #endif | 216 | #endif |
diff --git a/include/linux/tpm.h b/include/linux/tpm.h index 3338b3f5c21a..ac5d1c1285d9 100644 --- a/include/linux/tpm.h +++ b/include/linux/tpm.h | |||
| @@ -27,9 +27,16 @@ | |||
| 27 | */ | 27 | */ |
| 28 | #define TPM_ANY_NUM 0xFFFF | 28 | #define TPM_ANY_NUM 0xFFFF |
| 29 | 29 | ||
| 30 | #if defined(CONFIG_TCG_TPM) | 30 | #if defined(CONFIG_TCG_TPM) || defined(CONFIG_TCG_TPM_MODULE) |
| 31 | 31 | ||
| 32 | extern int tpm_pcr_read(u32 chip_num, int pcr_idx, u8 *res_buf); | 32 | extern int tpm_pcr_read(u32 chip_num, int pcr_idx, u8 *res_buf); |
| 33 | extern int tpm_pcr_extend(u32 chip_num, int pcr_idx, const u8 *hash); | 33 | extern int tpm_pcr_extend(u32 chip_num, int pcr_idx, const u8 *hash); |
| 34 | #else | ||
| 35 | static inline int tpm_pcr_read(u32 chip_num, int pcr_idx, u8 *res_buf) { | ||
| 36 | return -ENODEV; | ||
| 37 | } | ||
| 38 | static inline int tpm_pcr_extend(u32 chip_num, int pcr_idx, const u8 *hash) { | ||
| 39 | return -ENODEV; | ||
| 40 | } | ||
| 34 | #endif | 41 | #endif |
| 35 | #endif | 42 | #endif |
diff --git a/include/linux/trace_seq.h b/include/linux/trace_seq.h index c134dd1fe6b6..09077f6ed128 100644 --- a/include/linux/trace_seq.h +++ b/include/linux/trace_seq.h | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Trace sequences are used to allow a function to call several other functions | 9 | * Trace sequences are used to allow a function to call several other functions |
| 10 | * to create a string of data to use (up to a max of PAGE_SIZE. | 10 | * to create a string of data to use (up to a max of PAGE_SIZE). |
| 11 | */ | 11 | */ |
| 12 | 12 | ||
| 13 | struct trace_seq { | 13 | struct trace_seq { |
diff --git a/include/linux/tracehook.h b/include/linux/tracehook.h index 17ba82efa483..1eb44a924e56 100644 --- a/include/linux/tracehook.h +++ b/include/linux/tracehook.h | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Tracing hooks | 2 | * Tracing hooks |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2008 Red Hat, Inc. All rights reserved. | 4 | * Copyright (C) 2008-2009 Red Hat, Inc. All rights reserved. |
| 5 | * | 5 | * |
| 6 | * This copyrighted material is made available to anyone wishing to use, | 6 | * This copyrighted material is made available to anyone wishing to use, |
| 7 | * modify, copy, or redistribute it subject to the terms and conditions | 7 | * modify, copy, or redistribute it subject to the terms and conditions |
| @@ -463,22 +463,38 @@ static inline int tracehook_get_signal(struct task_struct *task, | |||
| 463 | 463 | ||
| 464 | /** | 464 | /** |
| 465 | * tracehook_notify_jctl - report about job control stop/continue | 465 | * tracehook_notify_jctl - report about job control stop/continue |
| 466 | * @notify: nonzero if this is the last thread in the group to stop | 466 | * @notify: zero, %CLD_STOPPED or %CLD_CONTINUED |
| 467 | * @why: %CLD_STOPPED or %CLD_CONTINUED | 467 | * @why: %CLD_STOPPED or %CLD_CONTINUED |
| 468 | * | 468 | * |
| 469 | * This is called when we might call do_notify_parent_cldstop(). | 469 | * This is called when we might call do_notify_parent_cldstop(). |
| 470 | * It's called when about to stop for job control; we are already in | ||
| 471 | * %TASK_STOPPED state, about to call schedule(). It's also called when | ||
| 472 | * a delayed %CLD_STOPPED or %CLD_CONTINUED report is ready to be made. | ||
| 473 | * | 470 | * |
| 474 | * Return nonzero to generate a %SIGCHLD with @why, which is | 471 | * @notify is zero if we would not ordinarily send a %SIGCHLD, |
| 475 | * normal if @notify is nonzero. | 472 | * or is the %CLD_STOPPED or %CLD_CONTINUED .si_code for %SIGCHLD. |
| 476 | * | 473 | * |
| 477 | * Called with no locks held. | 474 | * @why is %CLD_STOPPED when about to stop for job control; |
| 475 | * we are already in %TASK_STOPPED state, about to call schedule(). | ||
| 476 | * It might also be that we have just exited (check %PF_EXITING), | ||
| 477 | * but need to report that a group-wide stop is complete. | ||
| 478 | * | ||
| 479 | * @why is %CLD_CONTINUED when waking up after job control stop and | ||
| 480 | * ready to make a delayed @notify report. | ||
| 481 | * | ||
| 482 | * Return the %CLD_* value for %SIGCHLD, or zero to generate no signal. | ||
| 483 | * | ||
| 484 | * Called with the siglock held. | ||
| 478 | */ | 485 | */ |
| 479 | static inline int tracehook_notify_jctl(int notify, int why) | 486 | static inline int tracehook_notify_jctl(int notify, int why) |
| 480 | { | 487 | { |
| 481 | return notify || (current->ptrace & PT_PTRACED); | 488 | return notify ?: (current->ptrace & PT_PTRACED) ? why : 0; |
| 489 | } | ||
| 490 | |||
| 491 | /** | ||
| 492 | * tracehook_finish_jctl - report about return from job control stop | ||
| 493 | * | ||
| 494 | * This is called by do_signal_stop() after wakeup. | ||
| 495 | */ | ||
| 496 | static inline void tracehook_finish_jctl(void) | ||
| 497 | { | ||
| 482 | } | 498 | } |
| 483 | 499 | ||
| 484 | #define DEATH_REAP -1 | 500 | #define DEATH_REAP -1 |
diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h index b9dc4ca0246f..f59604ed0ec6 100644 --- a/include/linux/tracepoint.h +++ b/include/linux/tracepoint.h | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | /* | 4 | /* |
| 5 | * Kernel Tracepoint API. | 5 | * Kernel Tracepoint API. |
| 6 | * | 6 | * |
| 7 | * See Documentation/tracepoint.txt. | 7 | * See Documentation/trace/tracepoints.txt. |
| 8 | * | 8 | * |
| 9 | * (C) Copyright 2008 Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca> | 9 | * (C) Copyright 2008 Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca> |
| 10 | * | 10 | * |
| @@ -23,6 +23,8 @@ struct tracepoint; | |||
| 23 | struct tracepoint { | 23 | struct tracepoint { |
| 24 | const char *name; /* Tracepoint name */ | 24 | const char *name; /* Tracepoint name */ |
| 25 | int state; /* State. */ | 25 | int state; /* State. */ |
| 26 | void (*regfunc)(void); | ||
| 27 | void (*unregfunc)(void); | ||
| 26 | void **funcs; | 28 | void **funcs; |
| 27 | } __attribute__((aligned(32))); /* | 29 | } __attribute__((aligned(32))); /* |
| 28 | * Aligned on 32 bytes because it is | 30 | * Aligned on 32 bytes because it is |
| @@ -34,7 +36,7 @@ struct tracepoint { | |||
| 34 | #ifndef DECLARE_TRACE | 36 | #ifndef DECLARE_TRACE |
| 35 | 37 | ||
| 36 | #define TP_PROTO(args...) args | 38 | #define TP_PROTO(args...) args |
| 37 | #define TP_ARGS(args...) args | 39 | #define TP_ARGS(args...) args |
| 38 | 40 | ||
| 39 | #ifdef CONFIG_TRACEPOINTS | 41 | #ifdef CONFIG_TRACEPOINTS |
| 40 | 42 | ||
| @@ -78,12 +80,16 @@ struct tracepoint { | |||
| 78 | return tracepoint_probe_unregister(#name, (void *)probe);\ | 80 | return tracepoint_probe_unregister(#name, (void *)probe);\ |
| 79 | } | 81 | } |
| 80 | 82 | ||
| 81 | #define DEFINE_TRACE(name) \ | 83 | |
| 84 | #define DEFINE_TRACE_FN(name, reg, unreg) \ | ||
| 82 | static const char __tpstrtab_##name[] \ | 85 | static const char __tpstrtab_##name[] \ |
| 83 | __attribute__((section("__tracepoints_strings"))) = #name; \ | 86 | __attribute__((section("__tracepoints_strings"))) = #name; \ |
| 84 | struct tracepoint __tracepoint_##name \ | 87 | struct tracepoint __tracepoint_##name \ |
| 85 | __attribute__((section("__tracepoints"), aligned(32))) = \ | 88 | __attribute__((section("__tracepoints"), aligned(32))) = \ |
| 86 | { __tpstrtab_##name, 0, NULL } | 89 | { __tpstrtab_##name, 0, reg, unreg, NULL } |
| 90 | |||
| 91 | #define DEFINE_TRACE(name) \ | ||
| 92 | DEFINE_TRACE_FN(name, NULL, NULL); | ||
| 87 | 93 | ||
| 88 | #define EXPORT_TRACEPOINT_SYMBOL_GPL(name) \ | 94 | #define EXPORT_TRACEPOINT_SYMBOL_GPL(name) \ |
| 89 | EXPORT_SYMBOL_GPL(__tracepoint_##name) | 95 | EXPORT_SYMBOL_GPL(__tracepoint_##name) |
| @@ -108,6 +114,7 @@ extern void tracepoint_update_probe_range(struct tracepoint *begin, | |||
| 108 | return -ENOSYS; \ | 114 | return -ENOSYS; \ |
| 109 | } | 115 | } |
| 110 | 116 | ||
| 117 | #define DEFINE_TRACE_FN(name, reg, unreg) | ||
| 111 | #define DEFINE_TRACE(name) | 118 | #define DEFINE_TRACE(name) |
| 112 | #define EXPORT_TRACEPOINT_SYMBOL_GPL(name) | 119 | #define EXPORT_TRACEPOINT_SYMBOL_GPL(name) |
| 113 | #define EXPORT_TRACEPOINT_SYMBOL(name) | 120 | #define EXPORT_TRACEPOINT_SYMBOL(name) |
| @@ -158,6 +165,15 @@ static inline void tracepoint_synchronize_unregister(void) | |||
| 158 | 165 | ||
| 159 | #define PARAMS(args...) args | 166 | #define PARAMS(args...) args |
| 160 | 167 | ||
| 168 | #endif /* _LINUX_TRACEPOINT_H */ | ||
| 169 | |||
| 170 | /* | ||
| 171 | * Note: we keep the TRACE_EVENT outside the include file ifdef protection. | ||
| 172 | * This is due to the way trace events work. If a file includes two | ||
| 173 | * trace event headers under one "CREATE_TRACE_POINTS" the first include | ||
| 174 | * will override the TRACE_EVENT and break the second include. | ||
| 175 | */ | ||
| 176 | |||
| 161 | #ifndef TRACE_EVENT | 177 | #ifndef TRACE_EVENT |
| 162 | /* | 178 | /* |
| 163 | * For use with the TRACE_EVENT macro: | 179 | * For use with the TRACE_EVENT macro: |
| @@ -259,10 +275,21 @@ static inline void tracepoint_synchronize_unregister(void) | |||
| 259 | * can also by used by generic instrumentation like SystemTap), and | 275 | * can also by used by generic instrumentation like SystemTap), and |
| 260 | * it is also used to expose a structured trace record in | 276 | * it is also used to expose a structured trace record in |
| 261 | * /sys/kernel/debug/tracing/events/. | 277 | * /sys/kernel/debug/tracing/events/. |
| 278 | * | ||
| 279 | * A set of (un)registration functions can be passed to the variant | ||
| 280 | * TRACE_EVENT_FN to perform any (un)registration work. | ||
| 262 | */ | 281 | */ |
| 263 | 282 | ||
| 283 | #define DECLARE_EVENT_CLASS(name, proto, args, tstruct, assign, print) | ||
| 284 | #define DEFINE_EVENT(template, name, proto, args) \ | ||
| 285 | DECLARE_TRACE(name, PARAMS(proto), PARAMS(args)) | ||
| 286 | #define DEFINE_EVENT_PRINT(template, name, proto, args, print) \ | ||
| 287 | DECLARE_TRACE(name, PARAMS(proto), PARAMS(args)) | ||
| 288 | |||
| 264 | #define TRACE_EVENT(name, proto, args, struct, assign, print) \ | 289 | #define TRACE_EVENT(name, proto, args, struct, assign, print) \ |
| 265 | DECLARE_TRACE(name, PARAMS(proto), PARAMS(args)) | 290 | DECLARE_TRACE(name, PARAMS(proto), PARAMS(args)) |
| 266 | #endif | 291 | #define TRACE_EVENT_FN(name, proto, args, struct, \ |
| 292 | assign, print, reg, unreg) \ | ||
| 293 | DECLARE_TRACE(name, PARAMS(proto), PARAMS(args)) | ||
| 267 | 294 | ||
| 268 | #endif | 295 | #endif /* ifdef TRACE_EVENT (see note above) */ |
diff --git a/include/linux/transport_class.h b/include/linux/transport_class.h index eaec1ea9558e..9ae8da3e6407 100644 --- a/include/linux/transport_class.h +++ b/include/linux/transport_class.h | |||
| @@ -55,7 +55,7 @@ struct anon_transport_class cls = { \ | |||
| 55 | 55 | ||
| 56 | struct transport_container { | 56 | struct transport_container { |
| 57 | struct attribute_container ac; | 57 | struct attribute_container ac; |
| 58 | struct attribute_group *statistics; | 58 | const struct attribute_group *statistics; |
| 59 | }; | 59 | }; |
| 60 | 60 | ||
| 61 | #define attribute_container_to_transport_container(x) \ | 61 | #define attribute_container_to_transport_container(x) \ |
diff --git a/include/linux/tty.h b/include/linux/tty.h index e8c6c9136c97..f0f43d08d8b8 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | */ | 23 | */ |
| 24 | #define NR_UNIX98_PTY_DEFAULT 4096 /* Default maximum for Unix98 ptys */ | 24 | #define NR_UNIX98_PTY_DEFAULT 4096 /* Default maximum for Unix98 ptys */ |
| 25 | #define NR_UNIX98_PTY_MAX (1 << MINORBITS) /* Absolute limit */ | 25 | #define NR_UNIX98_PTY_MAX (1 << MINORBITS) /* Absolute limit */ |
| 26 | #define NR_LDISCS 19 | 26 | #define NR_LDISCS 20 |
| 27 | 27 | ||
| 28 | /* line disciplines */ | 28 | /* line disciplines */ |
| 29 | #define N_TTY 0 | 29 | #define N_TTY 0 |
| @@ -47,6 +47,8 @@ | |||
| 47 | #define N_SLCAN 17 /* Serial / USB serial CAN Adaptors */ | 47 | #define N_SLCAN 17 /* Serial / USB serial CAN Adaptors */ |
| 48 | #define N_PPS 18 /* Pulse per Second */ | 48 | #define N_PPS 18 /* Pulse per Second */ |
| 49 | 49 | ||
| 50 | #define N_V253 19 /* Codec control over voice modem */ | ||
| 51 | |||
| 50 | /* | 52 | /* |
| 51 | * This character is the same as _POSIX_VDISABLE: it cannot be used as | 53 | * This character is the same as _POSIX_VDISABLE: it cannot be used as |
| 52 | * a c_cc[] character, but indicates that a particular special character | 54 | * a c_cc[] character, but indicates that a particular special character |
| @@ -185,7 +187,12 @@ struct tty_port; | |||
| 185 | struct tty_port_operations { | 187 | struct tty_port_operations { |
| 186 | /* Return 1 if the carrier is raised */ | 188 | /* Return 1 if the carrier is raised */ |
| 187 | int (*carrier_raised)(struct tty_port *port); | 189 | int (*carrier_raised)(struct tty_port *port); |
| 190 | /* Control the DTR line */ | ||
| 188 | void (*dtr_rts)(struct tty_port *port, int raise); | 191 | void (*dtr_rts)(struct tty_port *port, int raise); |
| 192 | /* Called when the last close completes or a hangup finishes | ||
| 193 | IFF the port was initialized. Do not use to free resources */ | ||
| 194 | void (*shutdown)(struct tty_port *port); | ||
| 195 | void (*drop)(struct tty_port *port); | ||
| 189 | }; | 196 | }; |
| 190 | 197 | ||
| 191 | struct tty_port { | 198 | struct tty_port { |
| @@ -196,11 +203,12 @@ struct tty_port { | |||
| 196 | int count; /* Usage count */ | 203 | int count; /* Usage count */ |
| 197 | wait_queue_head_t open_wait; /* Open waiters */ | 204 | wait_queue_head_t open_wait; /* Open waiters */ |
| 198 | wait_queue_head_t close_wait; /* Close waiters */ | 205 | wait_queue_head_t close_wait; /* Close waiters */ |
| 206 | wait_queue_head_t delta_msr_wait; /* Modem status change */ | ||
| 199 | unsigned long flags; /* TTY flags ASY_*/ | 207 | unsigned long flags; /* TTY flags ASY_*/ |
| 200 | struct mutex mutex; /* Locking */ | 208 | struct mutex mutex; /* Locking */ |
| 201 | unsigned char *xmit_buf; /* Optional buffer */ | 209 | unsigned char *xmit_buf; /* Optional buffer */ |
| 202 | int close_delay; /* Close port delay */ | 210 | unsigned int close_delay; /* Close port delay */ |
| 203 | int closing_wait; /* Delay for output */ | 211 | unsigned int closing_wait; /* Delay for output */ |
| 204 | int drain_delay; /* Set to zero if no pure time | 212 | int drain_delay; /* Set to zero if no pure time |
| 205 | based drain is needed else | 213 | based drain is needed else |
| 206 | set to size of fifo */ | 214 | set to size of fifo */ |
| @@ -457,6 +465,12 @@ extern int tty_port_block_til_ready(struct tty_port *port, | |||
| 457 | extern int tty_port_close_start(struct tty_port *port, | 465 | extern int tty_port_close_start(struct tty_port *port, |
| 458 | struct tty_struct *tty, struct file *filp); | 466 | struct tty_struct *tty, struct file *filp); |
| 459 | extern void tty_port_close_end(struct tty_port *port, struct tty_struct *tty); | 467 | extern void tty_port_close_end(struct tty_port *port, struct tty_struct *tty); |
| 468 | extern void tty_port_close(struct tty_port *port, | ||
| 469 | struct tty_struct *tty, struct file *filp); | ||
| 470 | extern inline int tty_port_users(struct tty_port *port) | ||
| 471 | { | ||
| 472 | return port->count + port->blocked_open; | ||
| 473 | } | ||
| 460 | 474 | ||
| 461 | extern int tty_register_ldisc(int disc, struct tty_ldisc_ops *new_ldisc); | 475 | extern int tty_register_ldisc(int disc, struct tty_ldisc_ops *new_ldisc); |
| 462 | extern int tty_unregister_ldisc(int disc); | 476 | extern int tty_unregister_ldisc(int disc); |
| @@ -517,14 +531,13 @@ extern void serial_console_init(void); | |||
| 517 | 531 | ||
| 518 | extern int pcxe_open(struct tty_struct *tty, struct file *filp); | 532 | extern int pcxe_open(struct tty_struct *tty, struct file *filp); |
| 519 | 533 | ||
| 520 | /* printk.c */ | ||
| 521 | |||
| 522 | extern void console_print(const char *); | ||
| 523 | |||
| 524 | /* vt.c */ | 534 | /* vt.c */ |
| 525 | 535 | ||
| 526 | extern int vt_ioctl(struct tty_struct *tty, struct file *file, | 536 | extern int vt_ioctl(struct tty_struct *tty, struct file *file, |
| 527 | unsigned int cmd, unsigned long arg); | 537 | unsigned int cmd, unsigned long arg); |
| 528 | 538 | ||
| 539 | extern long vt_compat_ioctl(struct tty_struct *tty, struct file * file, | ||
| 540 | unsigned int cmd, unsigned long arg); | ||
| 541 | |||
| 529 | #endif /* __KERNEL__ */ | 542 | #endif /* __KERNEL__ */ |
| 530 | #endif | 543 | #endif |
diff --git a/include/linux/tty_driver.h b/include/linux/tty_driver.h index 3566129384a4..b08677982525 100644 --- a/include/linux/tty_driver.h +++ b/include/linux/tty_driver.h | |||
| @@ -45,8 +45,16 @@ | |||
| 45 | * | 45 | * |
| 46 | * void (*shutdown)(struct tty_struct * tty); | 46 | * void (*shutdown)(struct tty_struct * tty); |
| 47 | * | 47 | * |
| 48 | * This routine is called when a particular tty device is closed for | 48 | * This routine is called synchronously when a particular tty device |
| 49 | * the last time freeing up the resources. | 49 | * is closed for the last time freeing up the resources. |
| 50 | * | ||
| 51 | * | ||
| 52 | * void (*cleanup)(struct tty_struct * tty); | ||
| 53 | * | ||
| 54 | * This routine is called asynchronously when a particular tty device | ||
| 55 | * is closed for the last time freeing up the resources. This is | ||
| 56 | * actually the second part of shutdown for routines that might sleep. | ||
| 57 | * | ||
| 50 | * | 58 | * |
| 51 | * int (*write)(struct tty_struct * tty, | 59 | * int (*write)(struct tty_struct * tty, |
| 52 | * const unsigned char *buf, int count); | 60 | * const unsigned char *buf, int count); |
| @@ -233,6 +241,7 @@ struct tty_operations { | |||
| 233 | int (*open)(struct tty_struct * tty, struct file * filp); | 241 | int (*open)(struct tty_struct * tty, struct file * filp); |
| 234 | void (*close)(struct tty_struct * tty, struct file * filp); | 242 | void (*close)(struct tty_struct * tty, struct file * filp); |
| 235 | void (*shutdown)(struct tty_struct *tty); | 243 | void (*shutdown)(struct tty_struct *tty); |
| 244 | void (*cleanup)(struct tty_struct *tty); | ||
| 236 | int (*write)(struct tty_struct * tty, | 245 | int (*write)(struct tty_struct * tty, |
| 237 | const unsigned char *buf, int count); | 246 | const unsigned char *buf, int count); |
| 238 | int (*put_char)(struct tty_struct *tty, unsigned char ch); | 247 | int (*put_char)(struct tty_struct *tty, unsigned char ch); |
diff --git a/include/linux/ucb1400.h b/include/linux/ucb1400.h index ae779bb8cc0f..adb44066680c 100644 --- a/include/linux/ucb1400.h +++ b/include/linux/ucb1400.h | |||
| @@ -26,6 +26,7 @@ | |||
| 26 | #include <sound/ac97_codec.h> | 26 | #include <sound/ac97_codec.h> |
| 27 | #include <linux/mutex.h> | 27 | #include <linux/mutex.h> |
| 28 | #include <linux/platform_device.h> | 28 | #include <linux/platform_device.h> |
| 29 | #include <linux/gpio.h> | ||
| 29 | 30 | ||
| 30 | /* | 31 | /* |
| 31 | * UCB1400 AC-link registers | 32 | * UCB1400 AC-link registers |
| @@ -82,6 +83,17 @@ | |||
| 82 | #define UCB_ID 0x7e | 83 | #define UCB_ID 0x7e |
| 83 | #define UCB_ID_1400 0x4304 | 84 | #define UCB_ID_1400 0x4304 |
| 84 | 85 | ||
| 86 | struct ucb1400_gpio_data { | ||
| 87 | int gpio_offset; | ||
| 88 | int (*gpio_setup)(struct device *dev, int ngpio); | ||
| 89 | int (*gpio_teardown)(struct device *dev, int ngpio); | ||
| 90 | }; | ||
| 91 | |||
| 92 | struct ucb1400_gpio { | ||
| 93 | struct gpio_chip gc; | ||
| 94 | struct snd_ac97 *ac97; | ||
| 95 | }; | ||
| 96 | |||
| 85 | struct ucb1400_ts { | 97 | struct ucb1400_ts { |
| 86 | struct input_dev *ts_idev; | 98 | struct input_dev *ts_idev; |
| 87 | struct task_struct *ts_task; | 99 | struct task_struct *ts_task; |
| @@ -95,6 +107,7 @@ struct ucb1400_ts { | |||
| 95 | 107 | ||
| 96 | struct ucb1400 { | 108 | struct ucb1400 { |
| 97 | struct platform_device *ucb1400_ts; | 109 | struct platform_device *ucb1400_ts; |
| 110 | struct platform_device *ucb1400_gpio; | ||
| 98 | }; | 111 | }; |
| 99 | 112 | ||
| 100 | static inline u16 ucb1400_reg_read(struct snd_ac97 *ac97, u16 reg) | 113 | static inline u16 ucb1400_reg_read(struct snd_ac97 *ac97, u16 reg) |
| @@ -147,4 +160,10 @@ static inline void ucb1400_adc_disable(struct snd_ac97 *ac97) | |||
| 147 | unsigned int ucb1400_adc_read(struct snd_ac97 *ac97, u16 adc_channel, | 160 | unsigned int ucb1400_adc_read(struct snd_ac97 *ac97, u16 adc_channel, |
| 148 | int adcsync); | 161 | int adcsync); |
| 149 | 162 | ||
| 163 | #ifdef CONFIG_GPIO_UCB1400 | ||
| 164 | void __init ucb1400_gpio_set_data(struct ucb1400_gpio_data *data); | ||
| 165 | #else | ||
| 166 | static inline void ucb1400_gpio_set_data(struct ucb1400_gpio_data *data) {} | ||
| 167 | #endif | ||
| 168 | |||
| 150 | #endif | 169 | #endif |
diff --git a/include/linux/udp.h b/include/linux/udp.h index 0cf5c4c0ec81..03f72a2ba028 100644 --- a/include/linux/udp.h +++ b/include/linux/udp.h | |||
| @@ -45,16 +45,19 @@ static inline struct udphdr *udp_hdr(const struct sk_buff *skb) | |||
| 45 | return (struct udphdr *)skb_transport_header(skb); | 45 | return (struct udphdr *)skb_transport_header(skb); |
| 46 | } | 46 | } |
| 47 | 47 | ||
| 48 | #define UDP_HTABLE_SIZE 128 | 48 | #define UDP_HTABLE_SIZE_MIN (CONFIG_BASE_SMALL ? 128 : 256) |
| 49 | 49 | ||
| 50 | static inline int udp_hashfn(struct net *net, const unsigned num) | 50 | static inline int udp_hashfn(struct net *net, unsigned num, unsigned mask) |
| 51 | { | 51 | { |
| 52 | return (num + net_hash_mix(net)) & (UDP_HTABLE_SIZE - 1); | 52 | return (num + net_hash_mix(net)) & mask; |
| 53 | } | 53 | } |
| 54 | 54 | ||
| 55 | struct udp_sock { | 55 | struct udp_sock { |
| 56 | /* inet_sock has to be the first member */ | 56 | /* inet_sock has to be the first member */ |
| 57 | struct inet_sock inet; | 57 | struct inet_sock inet; |
| 58 | #define udp_port_hash inet.sk.__sk_common.skc_u16hashes[0] | ||
| 59 | #define udp_portaddr_hash inet.sk.__sk_common.skc_u16hashes[1] | ||
| 60 | #define udp_portaddr_node inet.sk.__sk_common.skc_portaddr_node | ||
| 58 | int pending; /* Any pending frames ? */ | 61 | int pending; /* Any pending frames ? */ |
| 59 | unsigned int corkflag; /* Cork is required */ | 62 | unsigned int corkflag; /* Cork is required */ |
| 60 | __u16 encap_type; /* Is this an Encapsulation socket? */ | 63 | __u16 encap_type; /* Is this an Encapsulation socket? */ |
| @@ -85,6 +88,12 @@ static inline struct udp_sock *udp_sk(const struct sock *sk) | |||
| 85 | return (struct udp_sock *)sk; | 88 | return (struct udp_sock *)sk; |
| 86 | } | 89 | } |
| 87 | 90 | ||
| 91 | #define udp_portaddr_for_each_entry(__sk, node, list) \ | ||
| 92 | hlist_nulls_for_each_entry(__sk, node, list, __sk_common.skc_portaddr_node) | ||
| 93 | |||
| 94 | #define udp_portaddr_for_each_entry_rcu(__sk, node, list) \ | ||
| 95 | hlist_nulls_for_each_entry_rcu(__sk, node, list, __sk_common.skc_portaddr_node) | ||
| 96 | |||
| 88 | #define IS_UDPLITE(__sk) (udp_sk(__sk)->pcflag) | 97 | #define IS_UDPLITE(__sk) (udp_sk(__sk)->pcflag) |
| 89 | 98 | ||
| 90 | #endif | 99 | #endif |
diff --git a/include/linux/unaligned/be_byteshift.h b/include/linux/unaligned/be_byteshift.h index 46dd12c5709e..9356b24223ac 100644 --- a/include/linux/unaligned/be_byteshift.h +++ b/include/linux/unaligned/be_byteshift.h | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | #ifndef _LINUX_UNALIGNED_BE_BYTESHIFT_H | 1 | #ifndef _LINUX_UNALIGNED_BE_BYTESHIFT_H |
| 2 | #define _LINUX_UNALIGNED_BE_BYTESHIFT_H | 2 | #define _LINUX_UNALIGNED_BE_BYTESHIFT_H |
| 3 | 3 | ||
| 4 | #include <linux/kernel.h> | 4 | #include <linux/types.h> |
| 5 | 5 | ||
| 6 | static inline u16 __get_unaligned_be16(const u8 *p) | 6 | static inline u16 __get_unaligned_be16(const u8 *p) |
| 7 | { | 7 | { |
diff --git a/include/linux/unaligned/le_byteshift.h b/include/linux/unaligned/le_byteshift.h index 59777e951baf..be376fb79b64 100644 --- a/include/linux/unaligned/le_byteshift.h +++ b/include/linux/unaligned/le_byteshift.h | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | #ifndef _LINUX_UNALIGNED_LE_BYTESHIFT_H | 1 | #ifndef _LINUX_UNALIGNED_LE_BYTESHIFT_H |
| 2 | #define _LINUX_UNALIGNED_LE_BYTESHIFT_H | 2 | #define _LINUX_UNALIGNED_LE_BYTESHIFT_H |
| 3 | 3 | ||
| 4 | #include <linux/kernel.h> | 4 | #include <linux/types.h> |
| 5 | 5 | ||
| 6 | static inline u16 __get_unaligned_le16(const u8 *p) | 6 | static inline u16 __get_unaligned_le16(const u8 *p) |
| 7 | { | 7 | { |
diff --git a/include/linux/usb.h b/include/linux/usb.h index b1e3c2fbfe11..a34fa89f1474 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
| @@ -195,7 +195,7 @@ struct usb_interface { | |||
| 195 | 195 | ||
| 196 | struct device dev; /* interface specific device info */ | 196 | struct device dev; /* interface specific device info */ |
| 197 | struct device *usb_dev; | 197 | struct device *usb_dev; |
| 198 | int pm_usage_cnt; /* usage counter for autosuspend */ | 198 | atomic_t pm_usage_cnt; /* usage counter for autosuspend */ |
| 199 | struct work_struct reset_ws; /* for resets in atomic context */ | 199 | struct work_struct reset_ws; /* for resets in atomic context */ |
| 200 | }; | 200 | }; |
| 201 | #define to_usb_interface(d) container_of(d, struct usb_interface, dev) | 201 | #define to_usb_interface(d) container_of(d, struct usb_interface, dev) |
| @@ -551,13 +551,13 @@ extern void usb_autopm_put_interface_async(struct usb_interface *intf); | |||
| 551 | 551 | ||
| 552 | static inline void usb_autopm_enable(struct usb_interface *intf) | 552 | static inline void usb_autopm_enable(struct usb_interface *intf) |
| 553 | { | 553 | { |
| 554 | intf->pm_usage_cnt = 0; | 554 | atomic_set(&intf->pm_usage_cnt, 0); |
| 555 | usb_autopm_set_interface(intf); | 555 | usb_autopm_set_interface(intf); |
| 556 | } | 556 | } |
| 557 | 557 | ||
| 558 | static inline void usb_autopm_disable(struct usb_interface *intf) | 558 | static inline void usb_autopm_disable(struct usb_interface *intf) |
| 559 | { | 559 | { |
| 560 | intf->pm_usage_cnt = 1; | 560 | atomic_set(&intf->pm_usage_cnt, 1); |
| 561 | usb_autopm_set_interface(intf); | 561 | usb_autopm_set_interface(intf); |
| 562 | } | 562 | } |
| 563 | 563 | ||
| @@ -922,7 +922,7 @@ extern struct bus_type usb_bus_type; | |||
| 922 | /** | 922 | /** |
| 923 | * struct usb_class_driver - identifies a USB driver that wants to use the USB major number | 923 | * struct usb_class_driver - identifies a USB driver that wants to use the USB major number |
| 924 | * @name: the usb class device name for this driver. Will show up in sysfs. | 924 | * @name: the usb class device name for this driver. Will show up in sysfs. |
| 925 | * @nodename: Callback to provide a naming hint for a possible | 925 | * @devnode: Callback to provide a naming hint for a possible |
| 926 | * device node to create. | 926 | * device node to create. |
| 927 | * @fops: pointer to the struct file_operations of this driver. | 927 | * @fops: pointer to the struct file_operations of this driver. |
| 928 | * @minor_base: the start of the minor range for this driver. | 928 | * @minor_base: the start of the minor range for this driver. |
| @@ -933,7 +933,7 @@ extern struct bus_type usb_bus_type; | |||
| 933 | */ | 933 | */ |
| 934 | struct usb_class_driver { | 934 | struct usb_class_driver { |
| 935 | char *name; | 935 | char *name; |
| 936 | char *(*nodename)(struct device *dev); | 936 | char *(*devnode)(struct device *dev, mode_t *mode); |
| 937 | const struct file_operations *fops; | 937 | const struct file_operations *fops; |
| 938 | int minor_base; | 938 | int minor_base; |
| 939 | }; | 939 | }; |
| @@ -1036,9 +1036,10 @@ typedef void (*usb_complete_t)(struct urb *); | |||
| 1036 | * @transfer_flags: A variety of flags may be used to affect how URB | 1036 | * @transfer_flags: A variety of flags may be used to affect how URB |
| 1037 | * submission, unlinking, or operation are handled. Different | 1037 | * submission, unlinking, or operation are handled. Different |
| 1038 | * kinds of URB can use different flags. | 1038 | * kinds of URB can use different flags. |
| 1039 | * @transfer_buffer: This identifies the buffer to (or from) which | 1039 | * @transfer_buffer: This identifies the buffer to (or from) which the I/O |
| 1040 | * the I/O request will be performed (unless URB_NO_TRANSFER_DMA_MAP | 1040 | * request will be performed unless URB_NO_TRANSFER_DMA_MAP is set |
| 1041 | * is set). This buffer must be suitable for DMA; allocate it with | 1041 | * (however, do not leave garbage in transfer_buffer even then). |
| 1042 | * This buffer must be suitable for DMA; allocate it with | ||
| 1042 | * kmalloc() or equivalent. For transfers to "in" endpoints, contents | 1043 | * kmalloc() or equivalent. For transfers to "in" endpoints, contents |
| 1043 | * of this buffer will be modified. This buffer is used for the data | 1044 | * of this buffer will be modified. This buffer is used for the data |
| 1044 | * stage of control transfers. | 1045 | * stage of control transfers. |
| @@ -1071,7 +1072,7 @@ typedef void (*usb_complete_t)(struct urb *); | |||
| 1071 | * @start_frame: Returns the initial frame for isochronous transfers. | 1072 | * @start_frame: Returns the initial frame for isochronous transfers. |
| 1072 | * @number_of_packets: Lists the number of ISO transfer buffers. | 1073 | * @number_of_packets: Lists the number of ISO transfer buffers. |
| 1073 | * @interval: Specifies the polling interval for interrupt or isochronous | 1074 | * @interval: Specifies the polling interval for interrupt or isochronous |
| 1074 | * transfers. The units are frames (milliseconds) for for full and low | 1075 | * transfers. The units are frames (milliseconds) for full and low |
| 1075 | * speed devices, and microframes (1/8 millisecond) for highspeed ones. | 1076 | * speed devices, and microframes (1/8 millisecond) for highspeed ones. |
| 1076 | * @error_count: Returns the number of ISO transfers that reported errors. | 1077 | * @error_count: Returns the number of ISO transfers that reported errors. |
| 1077 | * @context: For use in completion functions. This normally points to | 1078 | * @context: For use in completion functions. This normally points to |
| @@ -1104,9 +1105,15 @@ typedef void (*usb_complete_t)(struct urb *); | |||
| 1104 | * allocate a DMA buffer with usb_buffer_alloc() or call usb_buffer_map(). | 1105 | * allocate a DMA buffer with usb_buffer_alloc() or call usb_buffer_map(). |
| 1105 | * When these transfer flags are provided, host controller drivers will | 1106 | * When these transfer flags are provided, host controller drivers will |
| 1106 | * attempt to use the dma addresses found in the transfer_dma and/or | 1107 | * attempt to use the dma addresses found in the transfer_dma and/or |
| 1107 | * setup_dma fields rather than determining a dma address themselves. (Note | 1108 | * setup_dma fields rather than determining a dma address themselves. |
| 1108 | * that transfer_buffer and setup_packet must still be set because not all | 1109 | * |
| 1109 | * host controllers use DMA, nor do virtual root hubs). | 1110 | * Note that transfer_buffer must still be set if the controller |
| 1111 | * does not support DMA (as indicated by bus.uses_dma) and when talking | ||
| 1112 | * to root hub. If you have to trasfer between highmem zone and the device | ||
| 1113 | * on such controller, create a bounce buffer or bail out with an error. | ||
| 1114 | * If transfer_buffer cannot be set (is in highmem) and the controller is DMA | ||
| 1115 | * capable, assign NULL to it, so that usbmon knows not to use the value. | ||
| 1116 | * The setup_packet must always be set, so it cannot be located in highmem. | ||
| 1110 | * | 1117 | * |
| 1111 | * Initialization: | 1118 | * Initialization: |
| 1112 | * | 1119 | * |
diff --git a/include/linux/usb/audio.h b/include/linux/usb/audio.h index b5744bc218ab..eaf9dffe0a01 100644 --- a/include/linux/usb/audio.h +++ b/include/linux/usb/audio.h | |||
| @@ -24,88 +24,78 @@ | |||
| 24 | #define USB_SUBCLASS_AUDIOCONTROL 0x01 | 24 | #define USB_SUBCLASS_AUDIOCONTROL 0x01 |
| 25 | #define USB_SUBCLASS_AUDIOSTREAMING 0x02 | 25 | #define USB_SUBCLASS_AUDIOSTREAMING 0x02 |
| 26 | #define USB_SUBCLASS_MIDISTREAMING 0x03 | 26 | #define USB_SUBCLASS_MIDISTREAMING 0x03 |
| 27 | #define USB_SUBCLASS_VENDOR_SPEC 0xff | 27 | |
| 28 | 28 | /* A.5 Audio Class-Specific AC Interface Descriptor Subtypes */ | |
| 29 | /* A.5 Audio Class-Specific AC interface Descriptor Subtypes*/ | 29 | #define UAC_HEADER 0x01 |
| 30 | #define HEADER 0x01 | 30 | #define UAC_INPUT_TERMINAL 0x02 |
| 31 | #define INPUT_TERMINAL 0x02 | 31 | #define UAC_OUTPUT_TERMINAL 0x03 |
| 32 | #define OUTPUT_TERMINAL 0x03 | 32 | #define UAC_MIXER_UNIT 0x04 |
| 33 | #define MIXER_UNIT 0x04 | 33 | #define UAC_SELECTOR_UNIT 0x05 |
| 34 | #define SELECTOR_UNIT 0x05 | 34 | #define UAC_FEATURE_UNIT 0x06 |
| 35 | #define FEATURE_UNIT 0x06 | 35 | #define UAC_PROCESSING_UNIT 0x07 |
| 36 | #define PROCESSING_UNIT 0x07 | 36 | #define UAC_EXTENSION_UNIT 0x08 |
| 37 | #define EXTENSION_UNIT 0x08 | 37 | |
| 38 | 38 | /* A.6 Audio Class-Specific AS Interface Descriptor Subtypes */ | |
| 39 | #define AS_GENERAL 0x01 | 39 | #define UAC_AS_GENERAL 0x01 |
| 40 | #define FORMAT_TYPE 0x02 | 40 | #define UAC_FORMAT_TYPE 0x02 |
| 41 | #define FORMAT_SPECIFIC 0x03 | 41 | #define UAC_FORMAT_SPECIFIC 0x03 |
| 42 | 42 | ||
| 43 | #define EP_GENERAL 0x01 | 43 | /* A.8 Audio Class-Specific Endpoint Descriptor Subtypes */ |
| 44 | 44 | #define UAC_EP_GENERAL 0x01 | |
| 45 | #define MS_GENERAL 0x01 | 45 | |
| 46 | #define MIDI_IN_JACK 0x02 | 46 | /* A.9 Audio Class-Specific Request Codes */ |
| 47 | #define MIDI_OUT_JACK 0x03 | 47 | #define UAC_SET_ 0x00 |
| 48 | 48 | #define UAC_GET_ 0x80 | |
| 49 | /* endpoint attributes */ | 49 | |
| 50 | #define EP_ATTR_MASK 0x0c | 50 | #define UAC__CUR 0x1 |
| 51 | #define EP_ATTR_ASYNC 0x04 | 51 | #define UAC__MIN 0x2 |
| 52 | #define EP_ATTR_ADAPTIVE 0x08 | 52 | #define UAC__MAX 0x3 |
| 53 | #define EP_ATTR_SYNC 0x0c | 53 | #define UAC__RES 0x4 |
| 54 | 54 | #define UAC__MEM 0x5 | |
| 55 | /* cs endpoint attributes */ | 55 | |
| 56 | #define EP_CS_ATTR_SAMPLE_RATE 0x01 | 56 | #define UAC_SET_CUR (UAC_SET_ | UAC__CUR) |
| 57 | #define EP_CS_ATTR_PITCH_CONTROL 0x02 | 57 | #define UAC_GET_CUR (UAC_GET_ | UAC__CUR) |
| 58 | #define EP_CS_ATTR_FILL_MAX 0x80 | 58 | #define UAC_SET_MIN (UAC_SET_ | UAC__MIN) |
| 59 | 59 | #define UAC_GET_MIN (UAC_GET_ | UAC__MIN) | |
| 60 | /* Audio Class specific Request Codes */ | 60 | #define UAC_SET_MAX (UAC_SET_ | UAC__MAX) |
| 61 | #define USB_AUDIO_SET_INTF 0x21 | 61 | #define UAC_GET_MAX (UAC_GET_ | UAC__MAX) |
| 62 | #define USB_AUDIO_SET_ENDPOINT 0x22 | 62 | #define UAC_SET_RES (UAC_SET_ | UAC__RES) |
| 63 | #define USB_AUDIO_GET_INTF 0xa1 | 63 | #define UAC_GET_RES (UAC_GET_ | UAC__RES) |
| 64 | #define USB_AUDIO_GET_ENDPOINT 0xa2 | 64 | #define UAC_SET_MEM (UAC_SET_ | UAC__MEM) |
| 65 | 65 | #define UAC_GET_MEM (UAC_GET_ | UAC__MEM) | |
| 66 | #define SET_ 0x00 | 66 | |
| 67 | #define GET_ 0x80 | 67 | #define UAC_GET_STAT 0xff |
| 68 | 68 | ||
| 69 | #define _CUR 0x1 | 69 | /* MIDI - A.1 MS Class-Specific Interface Descriptor Subtypes */ |
| 70 | #define _MIN 0x2 | 70 | #define UAC_MS_HEADER 0x01 |
| 71 | #define _MAX 0x3 | 71 | #define UAC_MIDI_IN_JACK 0x02 |
| 72 | #define _RES 0x4 | 72 | #define UAC_MIDI_OUT_JACK 0x03 |
| 73 | #define _MEM 0x5 | 73 | |
| 74 | 74 | /* MIDI - A.1 MS Class-Specific Endpoint Descriptor Subtypes */ | |
| 75 | #define SET_CUR (SET_ | _CUR) | 75 | #define UAC_MS_GENERAL 0x01 |
| 76 | #define GET_CUR (GET_ | _CUR) | 76 | |
| 77 | #define SET_MIN (SET_ | _MIN) | 77 | /* Terminals - 2.1 USB Terminal Types */ |
| 78 | #define GET_MIN (GET_ | _MIN) | 78 | #define UAC_TERMINAL_UNDEFINED 0x100 |
| 79 | #define SET_MAX (SET_ | _MAX) | 79 | #define UAC_TERMINAL_STREAMING 0x101 |
| 80 | #define GET_MAX (GET_ | _MAX) | 80 | #define UAC_TERMINAL_VENDOR_SPEC 0x1FF |
| 81 | #define SET_RES (SET_ | _RES) | ||
| 82 | #define GET_RES (GET_ | _RES) | ||
| 83 | #define SET_MEM (SET_ | _MEM) | ||
| 84 | #define GET_MEM (GET_ | _MEM) | ||
| 85 | |||
| 86 | #define GET_STAT 0xff | ||
| 87 | |||
| 88 | #define USB_AC_TERMINAL_UNDEFINED 0x100 | ||
| 89 | #define USB_AC_TERMINAL_STREAMING 0x101 | ||
| 90 | #define USB_AC_TERMINAL_VENDOR_SPEC 0x1FF | ||
| 91 | 81 | ||
| 92 | /* Terminal Control Selectors */ | 82 | /* Terminal Control Selectors */ |
| 93 | /* 4.3.2 Class-Specific AC Interface Descriptor */ | 83 | /* 4.3.2 Class-Specific AC Interface Descriptor */ |
| 94 | struct usb_ac_header_descriptor { | 84 | struct uac_ac_header_descriptor { |
| 95 | __u8 bLength; /* 8 + n */ | 85 | __u8 bLength; /* 8 + n */ |
| 96 | __u8 bDescriptorType; /* USB_DT_CS_INTERFACE */ | 86 | __u8 bDescriptorType; /* USB_DT_CS_INTERFACE */ |
| 97 | __u8 bDescriptorSubtype; /* USB_MS_HEADER */ | 87 | __u8 bDescriptorSubtype; /* UAC_MS_HEADER */ |
| 98 | __le16 bcdADC; /* 0x0100 */ | 88 | __le16 bcdADC; /* 0x0100 */ |
| 99 | __le16 wTotalLength; /* includes Unit and Terminal desc. */ | 89 | __le16 wTotalLength; /* includes Unit and Terminal desc. */ |
| 100 | __u8 bInCollection; /* n */ | 90 | __u8 bInCollection; /* n */ |
| 101 | __u8 baInterfaceNr[]; /* [n] */ | 91 | __u8 baInterfaceNr[]; /* [n] */ |
| 102 | } __attribute__ ((packed)); | 92 | } __attribute__ ((packed)); |
| 103 | 93 | ||
| 104 | #define USB_DT_AC_HEADER_SIZE(n) (8 + (n)) | 94 | #define UAC_DT_AC_HEADER_SIZE(n) (8 + (n)) |
| 105 | 95 | ||
| 106 | /* As above, but more useful for defining your own descriptors: */ | 96 | /* As above, but more useful for defining your own descriptors: */ |
| 107 | #define DECLARE_USB_AC_HEADER_DESCRIPTOR(n) \ | 97 | #define DECLARE_UAC_AC_HEADER_DESCRIPTOR(n) \ |
| 108 | struct usb_ac_header_descriptor_##n { \ | 98 | struct uac_ac_header_descriptor_##n { \ |
| 109 | __u8 bLength; \ | 99 | __u8 bLength; \ |
| 110 | __u8 bDescriptorType; \ | 100 | __u8 bDescriptorType; \ |
| 111 | __u8 bDescriptorSubtype; \ | 101 | __u8 bDescriptorSubtype; \ |
| @@ -116,7 +106,7 @@ struct usb_ac_header_descriptor_##n { \ | |||
| 116 | } __attribute__ ((packed)) | 106 | } __attribute__ ((packed)) |
| 117 | 107 | ||
| 118 | /* 4.3.2.1 Input Terminal Descriptor */ | 108 | /* 4.3.2.1 Input Terminal Descriptor */ |
| 119 | struct usb_input_terminal_descriptor { | 109 | struct uac_input_terminal_descriptor { |
| 120 | __u8 bLength; /* in bytes: 12 */ | 110 | __u8 bLength; /* in bytes: 12 */ |
| 121 | __u8 bDescriptorType; /* CS_INTERFACE descriptor type */ | 111 | __u8 bDescriptorType; /* CS_INTERFACE descriptor type */ |
| 122 | __u8 bDescriptorSubtype; /* INPUT_TERMINAL descriptor subtype */ | 112 | __u8 bDescriptorSubtype; /* INPUT_TERMINAL descriptor subtype */ |
| @@ -129,18 +119,19 @@ struct usb_input_terminal_descriptor { | |||
| 129 | __u8 iTerminal; | 119 | __u8 iTerminal; |
| 130 | } __attribute__ ((packed)); | 120 | } __attribute__ ((packed)); |
| 131 | 121 | ||
| 132 | #define USB_DT_AC_INPUT_TERMINAL_SIZE 12 | 122 | #define UAC_DT_INPUT_TERMINAL_SIZE 12 |
| 133 | 123 | ||
| 134 | #define USB_AC_INPUT_TERMINAL_UNDEFINED 0x200 | 124 | /* Terminals - 2.2 Input Terminal Types */ |
| 135 | #define USB_AC_INPUT_TERMINAL_MICROPHONE 0x201 | 125 | #define UAC_INPUT_TERMINAL_UNDEFINED 0x200 |
| 136 | #define USB_AC_INPUT_TERMINAL_DESKTOP_MICROPHONE 0x202 | 126 | #define UAC_INPUT_TERMINAL_MICROPHONE 0x201 |
| 137 | #define USB_AC_INPUT_TERMINAL_PERSONAL_MICROPHONE 0x203 | 127 | #define UAC_INPUT_TERMINAL_DESKTOP_MICROPHONE 0x202 |
| 138 | #define USB_AC_INPUT_TERMINAL_OMNI_DIR_MICROPHONE 0x204 | 128 | #define UAC_INPUT_TERMINAL_PERSONAL_MICROPHONE 0x203 |
| 139 | #define USB_AC_INPUT_TERMINAL_MICROPHONE_ARRAY 0x205 | 129 | #define UAC_INPUT_TERMINAL_OMNI_DIR_MICROPHONE 0x204 |
| 140 | #define USB_AC_INPUT_TERMINAL_PROC_MICROPHONE_ARRAY 0x206 | 130 | #define UAC_INPUT_TERMINAL_MICROPHONE_ARRAY 0x205 |
| 131 | #define UAC_INPUT_TERMINAL_PROC_MICROPHONE_ARRAY 0x206 | ||
| 141 | 132 | ||
| 142 | /* 4.3.2.2 Output Terminal Descriptor */ | 133 | /* 4.3.2.2 Output Terminal Descriptor */ |
| 143 | struct usb_output_terminal_descriptor { | 134 | struct uac_output_terminal_descriptor { |
| 144 | __u8 bLength; /* in bytes: 9 */ | 135 | __u8 bLength; /* in bytes: 9 */ |
| 145 | __u8 bDescriptorType; /* CS_INTERFACE descriptor type */ | 136 | __u8 bDescriptorType; /* CS_INTERFACE descriptor type */ |
| 146 | __u8 bDescriptorSubtype; /* OUTPUT_TERMINAL descriptor subtype */ | 137 | __u8 bDescriptorSubtype; /* OUTPUT_TERMINAL descriptor subtype */ |
| @@ -151,23 +142,24 @@ struct usb_output_terminal_descriptor { | |||
| 151 | __u8 iTerminal; | 142 | __u8 iTerminal; |
| 152 | } __attribute__ ((packed)); | 143 | } __attribute__ ((packed)); |
| 153 | 144 | ||
| 154 | #define USB_DT_AC_OUTPUT_TERMINAL_SIZE 9 | 145 | #define UAC_DT_OUTPUT_TERMINAL_SIZE 9 |
| 155 | 146 | ||
| 156 | #define USB_AC_OUTPUT_TERMINAL_UNDEFINED 0x300 | 147 | /* Terminals - 2.3 Output Terminal Types */ |
| 157 | #define USB_AC_OUTPUT_TERMINAL_SPEAKER 0x301 | 148 | #define UAC_OUTPUT_TERMINAL_UNDEFINED 0x300 |
| 158 | #define USB_AC_OUTPUT_TERMINAL_HEADPHONES 0x302 | 149 | #define UAC_OUTPUT_TERMINAL_SPEAKER 0x301 |
| 159 | #define USB_AC_OUTPUT_TERMINAL_HEAD_MOUNTED_DISPLAY_AUDIO 0x303 | 150 | #define UAC_OUTPUT_TERMINAL_HEADPHONES 0x302 |
| 160 | #define USB_AC_OUTPUT_TERMINAL_DESKTOP_SPEAKER 0x304 | 151 | #define UAC_OUTPUT_TERMINAL_HEAD_MOUNTED_DISPLAY_AUDIO 0x303 |
| 161 | #define USB_AC_OUTPUT_TERMINAL_ROOM_SPEAKER 0x305 | 152 | #define UAC_OUTPUT_TERMINAL_DESKTOP_SPEAKER 0x304 |
| 162 | #define USB_AC_OUTPUT_TERMINAL_COMMUNICATION_SPEAKER 0x306 | 153 | #define UAC_OUTPUT_TERMINAL_ROOM_SPEAKER 0x305 |
| 163 | #define USB_AC_OUTPUT_TERMINAL_LOW_FREQ_EFFECTS_SPEAKER 0x307 | 154 | #define UAC_OUTPUT_TERMINAL_COMMUNICATION_SPEAKER 0x306 |
| 155 | #define UAC_OUTPUT_TERMINAL_LOW_FREQ_EFFECTS_SPEAKER 0x307 | ||
| 164 | 156 | ||
| 165 | /* Set bControlSize = 2 as default setting */ | 157 | /* Set bControlSize = 2 as default setting */ |
| 166 | #define USB_DT_AC_FEATURE_UNIT_SIZE(ch) (7 + ((ch) + 1) * 2) | 158 | #define UAC_DT_FEATURE_UNIT_SIZE(ch) (7 + ((ch) + 1) * 2) |
| 167 | 159 | ||
| 168 | /* As above, but more useful for defining your own descriptors: */ | 160 | /* As above, but more useful for defining your own descriptors: */ |
| 169 | #define DECLARE_USB_AC_FEATURE_UNIT_DESCRIPTOR(ch) \ | 161 | #define DECLARE_UAC_FEATURE_UNIT_DESCRIPTOR(ch) \ |
| 170 | struct usb_ac_feature_unit_descriptor_##ch { \ | 162 | struct uac_feature_unit_descriptor_##ch { \ |
| 171 | __u8 bLength; \ | 163 | __u8 bLength; \ |
| 172 | __u8 bDescriptorType; \ | 164 | __u8 bDescriptorType; \ |
| 173 | __u8 bDescriptorSubtype; \ | 165 | __u8 bDescriptorSubtype; \ |
| @@ -179,7 +171,7 @@ struct usb_ac_feature_unit_descriptor_##ch { \ | |||
| 179 | } __attribute__ ((packed)) | 171 | } __attribute__ ((packed)) |
| 180 | 172 | ||
| 181 | /* 4.5.2 Class-Specific AS Interface Descriptor */ | 173 | /* 4.5.2 Class-Specific AS Interface Descriptor */ |
| 182 | struct usb_as_header_descriptor { | 174 | struct uac_as_header_descriptor { |
| 183 | __u8 bLength; /* in bytes: 7 */ | 175 | __u8 bLength; /* in bytes: 7 */ |
| 184 | __u8 bDescriptorType; /* USB_DT_CS_INTERFACE */ | 176 | __u8 bDescriptorType; /* USB_DT_CS_INTERFACE */ |
| 185 | __u8 bDescriptorSubtype; /* AS_GENERAL */ | 177 | __u8 bDescriptorSubtype; /* AS_GENERAL */ |
| @@ -188,16 +180,17 @@ struct usb_as_header_descriptor { | |||
| 188 | __le16 wFormatTag; /* The Audio Data Format */ | 180 | __le16 wFormatTag; /* The Audio Data Format */ |
| 189 | } __attribute__ ((packed)); | 181 | } __attribute__ ((packed)); |
| 190 | 182 | ||
| 191 | #define USB_DT_AS_HEADER_SIZE 7 | 183 | #define UAC_DT_AS_HEADER_SIZE 7 |
| 192 | 184 | ||
| 193 | #define USB_AS_AUDIO_FORMAT_TYPE_I_UNDEFINED 0x0 | 185 | /* Formats - A.1.1 Audio Data Format Type I Codes */ |
| 194 | #define USB_AS_AUDIO_FORMAT_TYPE_I_PCM 0x1 | 186 | #define UAC_FORMAT_TYPE_I_UNDEFINED 0x0 |
| 195 | #define USB_AS_AUDIO_FORMAT_TYPE_I_PCM8 0x2 | 187 | #define UAC_FORMAT_TYPE_I_PCM 0x1 |
| 196 | #define USB_AS_AUDIO_FORMAT_TYPE_I_IEEE_FLOAT 0x3 | 188 | #define UAC_FORMAT_TYPE_I_PCM8 0x2 |
| 197 | #define USB_AS_AUDIO_FORMAT_TYPE_I_ALAW 0x4 | 189 | #define UAC_FORMAT_TYPE_I_IEEE_FLOAT 0x3 |
| 198 | #define USB_AS_AUDIO_FORMAT_TYPE_I_MULAW 0x5 | 190 | #define UAC_FORMAT_TYPE_I_ALAW 0x4 |
| 191 | #define UAC_FORMAT_TYPE_I_MULAW 0x5 | ||
| 199 | 192 | ||
| 200 | struct usb_as_format_type_i_continuous_descriptor { | 193 | struct uac_format_type_i_continuous_descriptor { |
| 201 | __u8 bLength; /* in bytes: 8 + (ns * 3) */ | 194 | __u8 bLength; /* in bytes: 8 + (ns * 3) */ |
| 202 | __u8 bDescriptorType; /* USB_DT_CS_INTERFACE */ | 195 | __u8 bDescriptorType; /* USB_DT_CS_INTERFACE */ |
| 203 | __u8 bDescriptorSubtype; /* FORMAT_TYPE */ | 196 | __u8 bDescriptorSubtype; /* FORMAT_TYPE */ |
| @@ -210,9 +203,9 @@ struct usb_as_format_type_i_continuous_descriptor { | |||
| 210 | __u8 tUpperSamFreq[3]; | 203 | __u8 tUpperSamFreq[3]; |
| 211 | } __attribute__ ((packed)); | 204 | } __attribute__ ((packed)); |
| 212 | 205 | ||
| 213 | #define USB_AS_FORMAT_TYPE_I_CONTINUOUS_DESC_SIZE 14 | 206 | #define UAC_FORMAT_TYPE_I_CONTINUOUS_DESC_SIZE 14 |
| 214 | 207 | ||
| 215 | struct usb_as_formate_type_i_discrete_descriptor { | 208 | struct uac_format_type_i_discrete_descriptor { |
| 216 | __u8 bLength; /* in bytes: 8 + (ns * 3) */ | 209 | __u8 bLength; /* in bytes: 8 + (ns * 3) */ |
| 217 | __u8 bDescriptorType; /* USB_DT_CS_INTERFACE */ | 210 | __u8 bDescriptorType; /* USB_DT_CS_INTERFACE */ |
| 218 | __u8 bDescriptorSubtype; /* FORMAT_TYPE */ | 211 | __u8 bDescriptorSubtype; /* FORMAT_TYPE */ |
| @@ -224,8 +217,8 @@ struct usb_as_formate_type_i_discrete_descriptor { | |||
| 224 | __u8 tSamFreq[][3]; | 217 | __u8 tSamFreq[][3]; |
| 225 | } __attribute__ ((packed)); | 218 | } __attribute__ ((packed)); |
| 226 | 219 | ||
| 227 | #define DECLARE_USB_AS_FORMAT_TYPE_I_DISCRETE_DESC(n) \ | 220 | #define DECLARE_UAC_FORMAT_TYPE_I_DISCRETE_DESC(n) \ |
| 228 | struct usb_as_formate_type_i_discrete_descriptor_##n { \ | 221 | struct uac_format_type_i_discrete_descriptor_##n { \ |
| 229 | __u8 bLength; \ | 222 | __u8 bLength; \ |
| 230 | __u8 bDescriptorType; \ | 223 | __u8 bDescriptorType; \ |
| 231 | __u8 bDescriptorSubtype; \ | 224 | __u8 bDescriptorSubtype; \ |
| @@ -237,18 +230,15 @@ struct usb_as_formate_type_i_discrete_descriptor_##n { \ | |||
| 237 | __u8 tSamFreq[n][3]; \ | 230 | __u8 tSamFreq[n][3]; \ |
| 238 | } __attribute__ ((packed)) | 231 | } __attribute__ ((packed)) |
| 239 | 232 | ||
| 240 | #define USB_AS_FORMAT_TYPE_I_DISCRETE_DESC_SIZE(n) (8 + (n * 3)) | 233 | #define UAC_FORMAT_TYPE_I_DISCRETE_DESC_SIZE(n) (8 + (n * 3)) |
| 241 | |||
| 242 | #define USB_AS_FORMAT_TYPE_UNDEFINED 0x0 | ||
| 243 | #define USB_AS_FORMAT_TYPE_I 0x1 | ||
| 244 | #define USB_AS_FORMAT_TYPE_II 0x2 | ||
| 245 | #define USB_AS_FORMAT_TYPE_III 0x3 | ||
| 246 | 234 | ||
| 247 | #define USB_AS_ENDPOINT_ASYNC (1 << 2) | 235 | /* Formats - A.2 Format Type Codes */ |
| 248 | #define USB_AS_ENDPOINT_ADAPTIVE (2 << 2) | 236 | #define UAC_FORMAT_TYPE_UNDEFINED 0x0 |
| 249 | #define USB_AS_ENDPOINT_SYNC (3 << 2) | 237 | #define UAC_FORMAT_TYPE_I 0x1 |
| 238 | #define UAC_FORMAT_TYPE_II 0x2 | ||
| 239 | #define UAC_FORMAT_TYPE_III 0x3 | ||
| 250 | 240 | ||
| 251 | struct usb_as_iso_endpoint_descriptor { | 241 | struct uac_iso_endpoint_descriptor { |
| 252 | __u8 bLength; /* in bytes: 7 */ | 242 | __u8 bLength; /* in bytes: 7 */ |
| 253 | __u8 bDescriptorType; /* USB_DT_CS_ENDPOINT */ | 243 | __u8 bDescriptorType; /* USB_DT_CS_ENDPOINT */ |
| 254 | __u8 bDescriptorSubtype; /* EP_GENERAL */ | 244 | __u8 bDescriptorSubtype; /* EP_GENERAL */ |
| @@ -256,30 +246,37 @@ struct usb_as_iso_endpoint_descriptor { | |||
| 256 | __u8 bLockDelayUnits; | 246 | __u8 bLockDelayUnits; |
| 257 | __le16 wLockDelay; | 247 | __le16 wLockDelay; |
| 258 | }; | 248 | }; |
| 259 | #define USB_AS_ISO_ENDPOINT_DESC_SIZE 7 | 249 | #define UAC_ISO_ENDPOINT_DESC_SIZE 7 |
| 260 | 250 | ||
| 261 | #define FU_CONTROL_UNDEFINED 0x00 | 251 | #define UAC_EP_CS_ATTR_SAMPLE_RATE 0x01 |
| 262 | #define MUTE_CONTROL 0x01 | 252 | #define UAC_EP_CS_ATTR_PITCH_CONTROL 0x02 |
| 263 | #define VOLUME_CONTROL 0x02 | 253 | #define UAC_EP_CS_ATTR_FILL_MAX 0x80 |
| 264 | #define BASS_CONTROL 0x03 | 254 | |
| 265 | #define MID_CONTROL 0x04 | 255 | /* A.10.2 Feature Unit Control Selectors */ |
| 266 | #define TREBLE_CONTROL 0x05 | 256 | #define UAC_FU_CONTROL_UNDEFINED 0x00 |
| 267 | #define GRAPHIC_EQUALIZER_CONTROL 0x06 | 257 | #define UAC_MUTE_CONTROL 0x01 |
| 268 | #define AUTOMATIC_GAIN_CONTROL 0x07 | 258 | #define UAC_VOLUME_CONTROL 0x02 |
| 269 | #define DELAY_CONTROL 0x08 | 259 | #define UAC_BASS_CONTROL 0x03 |
| 270 | #define BASS_BOOST_CONTROL 0x09 | 260 | #define UAC_MID_CONTROL 0x04 |
| 271 | #define LOUDNESS_CONTROL 0x0a | 261 | #define UAC_TREBLE_CONTROL 0x05 |
| 272 | 262 | #define UAC_GRAPHIC_EQUALIZER_CONTROL 0x06 | |
| 273 | #define FU_MUTE (1 << (MUTE_CONTROL - 1)) | 263 | #define UAC_AUTOMATIC_GAIN_CONTROL 0x07 |
| 274 | #define FU_VOLUME (1 << (VOLUME_CONTROL - 1)) | 264 | #define UAC_DELAY_CONTROL 0x08 |
| 275 | #define FU_BASS (1 << (BASS_CONTROL - 1)) | 265 | #define UAC_BASS_BOOST_CONTROL 0x09 |
| 276 | #define FU_MID (1 << (MID_CONTROL - 1)) | 266 | #define UAC_LOUDNESS_CONTROL 0x0a |
| 277 | #define FU_TREBLE (1 << (TREBLE_CONTROL - 1)) | 267 | |
| 278 | #define FU_GRAPHIC_EQ (1 << (GRAPHIC_EQUALIZER_CONTROL - 1)) | 268 | #define UAC_FU_MUTE (1 << (UAC_MUTE_CONTROL - 1)) |
| 279 | #define FU_AUTO_GAIN (1 << (AUTOMATIC_GAIN_CONTROL - 1)) | 269 | #define UAC_FU_VOLUME (1 << (UAC_VOLUME_CONTROL - 1)) |
| 280 | #define FU_DELAY (1 << (DELAY_CONTROL - 1)) | 270 | #define UAC_FU_BASS (1 << (UAC_BASS_CONTROL - 1)) |
| 281 | #define FU_BASS_BOOST (1 << (BASS_BOOST_CONTROL - 1)) | 271 | #define UAC_FU_MID (1 << (UAC_MID_CONTROL - 1)) |
| 282 | #define FU_LOUDNESS (1 << (LOUDNESS_CONTROL - 1)) | 272 | #define UAC_FU_TREBLE (1 << (UAC_TREBLE_CONTROL - 1)) |
| 273 | #define UAC_FU_GRAPHIC_EQ (1 << (UAC_GRAPHIC_EQUALIZER_CONTROL - 1)) | ||
| 274 | #define UAC_FU_AUTO_GAIN (1 << (UAC_AUTOMATIC_GAIN_CONTROL - 1)) | ||
| 275 | #define UAC_FU_DELAY (1 << (UAC_DELAY_CONTROL - 1)) | ||
| 276 | #define UAC_FU_BASS_BOOST (1 << (UAC_BASS_BOOST_CONTROL - 1)) | ||
| 277 | #define UAC_FU_LOUDNESS (1 << (UAC_LOUDNESS_CONTROL - 1)) | ||
| 278 | |||
| 279 | #ifdef __KERNEL__ | ||
| 283 | 280 | ||
| 284 | struct usb_audio_control { | 281 | struct usb_audio_control { |
| 285 | struct list_head list; | 282 | struct list_head list; |
| @@ -290,18 +287,6 @@ struct usb_audio_control { | |||
| 290 | int (*get)(struct usb_audio_control *con, u8 cmd); | 287 | int (*get)(struct usb_audio_control *con, u8 cmd); |
| 291 | }; | 288 | }; |
| 292 | 289 | ||
| 293 | static inline int generic_set_cmd(struct usb_audio_control *con, u8 cmd, int value) | ||
| 294 | { | ||
| 295 | con->data[cmd] = value; | ||
| 296 | |||
| 297 | return 0; | ||
| 298 | } | ||
| 299 | |||
| 300 | static inline int generic_get_cmd(struct usb_audio_control *con, u8 cmd) | ||
| 301 | { | ||
| 302 | return con->data[cmd]; | ||
| 303 | } | ||
| 304 | |||
| 305 | struct usb_audio_control_selector { | 290 | struct usb_audio_control_selector { |
| 306 | struct list_head list; | 291 | struct list_head list; |
| 307 | struct list_head control; | 292 | struct list_head control; |
| @@ -311,4 +296,6 @@ struct usb_audio_control_selector { | |||
| 311 | struct usb_descriptor_header *desc; | 296 | struct usb_descriptor_header *desc; |
| 312 | }; | 297 | }; |
| 313 | 298 | ||
| 299 | #endif /* __KERNEL__ */ | ||
| 300 | |||
| 314 | #endif /* __LINUX_USB_AUDIO_H */ | 301 | #endif /* __LINUX_USB_AUDIO_H */ |
diff --git a/include/linux/usb/ch9.h b/include/linux/usb/ch9.h index 93223638f702..94012e649d86 100644 --- a/include/linux/usb/ch9.h +++ b/include/linux/usb/ch9.h | |||
| @@ -258,6 +258,8 @@ struct usb_device_descriptor { | |||
| 258 | #define USB_CLASS_APP_SPEC 0xfe | 258 | #define USB_CLASS_APP_SPEC 0xfe |
| 259 | #define USB_CLASS_VENDOR_SPEC 0xff | 259 | #define USB_CLASS_VENDOR_SPEC 0xff |
| 260 | 260 | ||
| 261 | #define USB_SUBCLASS_VENDOR_SPEC 0xff | ||
| 262 | |||
| 261 | /*-------------------------------------------------------------------------*/ | 263 | /*-------------------------------------------------------------------------*/ |
| 262 | 264 | ||
| 263 | /* USB_DT_CONFIG: Configuration descriptor information. | 265 | /* USB_DT_CONFIG: Configuration descriptor information. |
| @@ -348,6 +350,12 @@ struct usb_endpoint_descriptor { | |||
| 348 | #define USB_ENDPOINT_NUMBER_MASK 0x0f /* in bEndpointAddress */ | 350 | #define USB_ENDPOINT_NUMBER_MASK 0x0f /* in bEndpointAddress */ |
| 349 | #define USB_ENDPOINT_DIR_MASK 0x80 | 351 | #define USB_ENDPOINT_DIR_MASK 0x80 |
| 350 | 352 | ||
| 353 | #define USB_ENDPOINT_SYNCTYPE 0x0c | ||
| 354 | #define USB_ENDPOINT_SYNC_NONE (0 << 2) | ||
| 355 | #define USB_ENDPOINT_SYNC_ASYNC (1 << 2) | ||
| 356 | #define USB_ENDPOINT_SYNC_ADAPTIVE (2 << 2) | ||
| 357 | #define USB_ENDPOINT_SYNC_SYNC (3 << 2) | ||
| 358 | |||
| 351 | #define USB_ENDPOINT_XFERTYPE_MASK 0x03 /* in bmAttributes */ | 359 | #define USB_ENDPOINT_XFERTYPE_MASK 0x03 /* in bmAttributes */ |
| 352 | #define USB_ENDPOINT_XFER_CONTROL 0 | 360 | #define USB_ENDPOINT_XFER_CONTROL 0 |
| 353 | #define USB_ENDPOINT_XFER_ISOC 1 | 361 | #define USB_ENDPOINT_XFER_ISOC 1 |
diff --git a/include/linux/usb/ehci_def.h b/include/linux/usb/ehci_def.h index 5b88e36c9103..af4b86f3aca3 100644 --- a/include/linux/usb/ehci_def.h +++ b/include/linux/usb/ehci_def.h | |||
| @@ -105,6 +105,7 @@ struct ehci_regs { | |||
| 105 | #define PORT_WKDISC_E (1<<21) /* wake on disconnect (enable) */ | 105 | #define PORT_WKDISC_E (1<<21) /* wake on disconnect (enable) */ |
| 106 | #define PORT_WKCONN_E (1<<20) /* wake on connect (enable) */ | 106 | #define PORT_WKCONN_E (1<<20) /* wake on connect (enable) */ |
| 107 | /* 19:16 for port testing */ | 107 | /* 19:16 for port testing */ |
| 108 | #define PORT_TEST_PKT (0x4<<16) /* Port Test Control - packet test */ | ||
| 108 | #define PORT_LED_OFF (0<<14) | 109 | #define PORT_LED_OFF (0<<14) |
| 109 | #define PORT_LED_AMBER (1<<14) | 110 | #define PORT_LED_AMBER (1<<14) |
| 110 | #define PORT_LED_GREEN (2<<14) | 111 | #define PORT_LED_GREEN (2<<14) |
| @@ -132,6 +133,19 @@ struct ehci_regs { | |||
| 132 | #define USBMODE_CM_HC (3<<0) /* host controller mode */ | 133 | #define USBMODE_CM_HC (3<<0) /* host controller mode */ |
| 133 | #define USBMODE_CM_IDLE (0<<0) /* idle state */ | 134 | #define USBMODE_CM_IDLE (0<<0) /* idle state */ |
| 134 | 135 | ||
| 136 | /* Moorestown has some non-standard registers, partially due to the fact that | ||
| 137 | * its EHCI controller has both TT and LPM support. HOSTPCx are extentions to | ||
| 138 | * PORTSCx | ||
| 139 | */ | ||
| 140 | #define HOSTPC0 0x84 /* HOSTPC extension */ | ||
| 141 | #define HOSTPC_PHCD (1<<22) /* Phy clock disable */ | ||
| 142 | #define HOSTPC_PSPD (3<<25) /* Port speed detection */ | ||
| 143 | #define USBMODE_EX 0xc8 /* USB Device mode extension */ | ||
| 144 | #define USBMODE_EX_VBPS (1<<5) /* VBus Power Select On */ | ||
| 145 | #define USBMODE_EX_HC (3<<0) /* host controller mode */ | ||
| 146 | #define TXFILLTUNING 0x24 /* TX FIFO Tuning register */ | ||
| 147 | #define TXFIFO_DEFAULT (8<<16) /* FIFO burst threshold 8 */ | ||
| 148 | |||
| 135 | /* Appendix C, Debug port ... intended for use with special "debug devices" | 149 | /* Appendix C, Debug port ... intended for use with special "debug devices" |
| 136 | * that can help if there's no serial console. (nonstandard enumeration.) | 150 | * that can help if there's no serial console. (nonstandard enumeration.) |
| 137 | */ | 151 | */ |
| @@ -157,4 +171,25 @@ struct ehci_dbg_port { | |||
| 157 | #define DBGP_EPADDR(dev, ep) (((dev)<<8)|(ep)) | 171 | #define DBGP_EPADDR(dev, ep) (((dev)<<8)|(ep)) |
| 158 | } __attribute__ ((packed)); | 172 | } __attribute__ ((packed)); |
| 159 | 173 | ||
| 174 | #ifdef CONFIG_EARLY_PRINTK_DBGP | ||
| 175 | #include <linux/init.h> | ||
| 176 | extern int __init early_dbgp_init(char *s); | ||
| 177 | extern struct console early_dbgp_console; | ||
| 178 | #endif /* CONFIG_EARLY_PRINTK_DBGP */ | ||
| 179 | |||
| 180 | #ifdef CONFIG_EARLY_PRINTK_DBGP | ||
| 181 | /* Call backs from ehci host driver to ehci debug driver */ | ||
| 182 | extern int dbgp_external_startup(void); | ||
| 183 | extern int dbgp_reset_prep(void); | ||
| 184 | #else | ||
| 185 | static inline int dbgp_reset_prep(void) | ||
| 186 | { | ||
| 187 | return 1; | ||
| 188 | } | ||
| 189 | static inline int dbgp_external_startup(void) | ||
| 190 | { | ||
| 191 | return -1; | ||
| 192 | } | ||
| 193 | #endif | ||
| 194 | |||
| 160 | #endif /* __LINUX_USB_EHCI_DEF_H */ | 195 | #endif /* __LINUX_USB_EHCI_DEF_H */ |
diff --git a/include/linux/usb/isp1362.h b/include/linux/usb/isp1362.h new file mode 100644 index 000000000000..642684bb9292 --- /dev/null +++ b/include/linux/usb/isp1362.h | |||
| @@ -0,0 +1,46 @@ | |||
| 1 | /* | ||
| 2 | * board initialization code should put one of these into dev->platform_data | ||
| 3 | * and place the isp1362 onto platform_bus. | ||
| 4 | */ | ||
| 5 | |||
| 6 | #ifndef __LINUX_USB_ISP1362_H__ | ||
| 7 | #define __LINUX_USB_ISP1362_H__ | ||
| 8 | |||
| 9 | struct isp1362_platform_data { | ||
| 10 | /* Enable internal pulldown resistors on downstream ports */ | ||
| 11 | unsigned sel15Kres:1; | ||
| 12 | /* Clock cannot be stopped */ | ||
| 13 | unsigned clknotstop:1; | ||
| 14 | /* On-chip overcurrent protection */ | ||
| 15 | unsigned oc_enable:1; | ||
| 16 | /* INT output polarity */ | ||
| 17 | unsigned int_act_high:1; | ||
| 18 | /* INT edge or level triggered */ | ||
| 19 | unsigned int_edge_triggered:1; | ||
| 20 | /* DREQ output polarity */ | ||
| 21 | unsigned dreq_act_high:1; | ||
| 22 | /* DACK input polarity */ | ||
| 23 | unsigned dack_act_high:1; | ||
| 24 | /* chip can be resumed via H_WAKEUP pin */ | ||
| 25 | unsigned remote_wakeup_connected:1; | ||
| 26 | /* Switch or not to switch (keep always powered) */ | ||
| 27 | unsigned no_power_switching:1; | ||
| 28 | /* Ganged port power switching (0) or individual port power switching (1) */ | ||
| 29 | unsigned power_switching_mode:1; | ||
| 30 | /* Given port_power, msec/2 after power on till power good */ | ||
| 31 | u8 potpg; | ||
| 32 | /* Hardware reset set/clear */ | ||
| 33 | void (*reset) (struct device *dev, int set); | ||
| 34 | /* Clock start/stop */ | ||
| 35 | void (*clock) (struct device *dev, int start); | ||
| 36 | /* Inter-io delay (ns). The chip is picky about access timings; it | ||
| 37 | * expects at least: | ||
| 38 | * 110ns delay between consecutive accesses to DATA_REG, | ||
| 39 | * 300ns delay between access to ADDR_REG and DATA_REG (registers) | ||
| 40 | * 462ns delay between access to ADDR_REG and DATA_REG (buffer memory) | ||
| 41 | * WE MUST NOT be activated during these intervals (even without CS!) | ||
| 42 | */ | ||
| 43 | void (*delay) (struct device *dev, unsigned int delay); | ||
| 44 | }; | ||
| 45 | |||
| 46 | #endif | ||
diff --git a/include/linux/usb/isp1760.h b/include/linux/usb/isp1760.h new file mode 100644 index 000000000000..de7de53c5531 --- /dev/null +++ b/include/linux/usb/isp1760.h | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | /* | ||
| 2 | * board initialization should put one of these into dev->platform_data | ||
| 3 | * and place the isp1760 onto platform_bus named "isp1760-hcd". | ||
| 4 | */ | ||
| 5 | |||
| 6 | #ifndef __LINUX_USB_ISP1760_H | ||
| 7 | #define __LINUX_USB_ISP1760_H | ||
| 8 | |||
| 9 | struct isp1760_platform_data { | ||
| 10 | unsigned is_isp1761:1; /* Chip is ISP1761 */ | ||
| 11 | unsigned bus_width_16:1; /* 16/32-bit data bus width */ | ||
| 12 | unsigned port1_otg:1; /* Port 1 supports OTG */ | ||
| 13 | unsigned analog_oc:1; /* Analog overcurrent */ | ||
| 14 | unsigned dack_polarity_high:1; /* DACK active high */ | ||
| 15 | unsigned dreq_polarity_high:1; /* DREQ active high */ | ||
| 16 | }; | ||
| 17 | |||
| 18 | #endif /* __LINUX_USB_ISP1760_H */ | ||
diff --git a/include/linux/usb/m66592.h b/include/linux/usb/m66592.h new file mode 100644 index 000000000000..cda9625e7df0 --- /dev/null +++ b/include/linux/usb/m66592.h | |||
| @@ -0,0 +1,44 @@ | |||
| 1 | /* | ||
| 2 | * M66592 driver platform data | ||
| 3 | * | ||
| 4 | * Copyright (C) 2009 Renesas Solutions Corp. | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License as published by | ||
| 8 | * the Free Software Foundation; version 2 of the License. | ||
| 9 | * | ||
| 10 | * This program is distributed in the hope that it will be useful, | ||
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 13 | * GNU General Public License for more details. | ||
| 14 | * | ||
| 15 | * You should have received a copy of the GNU General Public License | ||
| 16 | * along with this program; if not, write to the Free Software | ||
| 17 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
| 18 | * | ||
| 19 | */ | ||
| 20 | |||
| 21 | #ifndef __LINUX_USB_M66592_H | ||
| 22 | #define __LINUX_USB_M66592_H | ||
| 23 | |||
| 24 | #define M66592_PLATDATA_XTAL_12MHZ 0x01 | ||
| 25 | #define M66592_PLATDATA_XTAL_24MHZ 0x02 | ||
| 26 | #define M66592_PLATDATA_XTAL_48MHZ 0x03 | ||
| 27 | |||
| 28 | struct m66592_platdata { | ||
| 29 | /* one = on chip controller, zero = external controller */ | ||
| 30 | unsigned on_chip:1; | ||
| 31 | |||
| 32 | /* one = big endian, zero = little endian */ | ||
| 33 | unsigned endian:1; | ||
| 34 | |||
| 35 | /* (external controller only) M66592_PLATDATA_XTAL_nnMHZ */ | ||
| 36 | unsigned xtal:2; | ||
| 37 | |||
| 38 | /* (external controller only) one = 3.3V, zero = 1.5V */ | ||
| 39 | unsigned vif:1; | ||
| 40 | |||
| 41 | }; | ||
| 42 | |||
| 43 | #endif /* __LINUX_USB_M66592_H */ | ||
| 44 | |||
diff --git a/include/linux/usb/r8a66597.h b/include/linux/usb/r8a66597.h index e9f0384fa20c..26d216734057 100644 --- a/include/linux/usb/r8a66597.h +++ b/include/linux/usb/r8a66597.h | |||
| @@ -28,9 +28,12 @@ | |||
| 28 | #define R8A66597_PLATDATA_XTAL_48MHZ 0x03 | 28 | #define R8A66597_PLATDATA_XTAL_48MHZ 0x03 |
| 29 | 29 | ||
| 30 | struct r8a66597_platdata { | 30 | struct r8a66597_platdata { |
| 31 | /* This ops can controll port power instead of DVSTCTR register. */ | 31 | /* This callback can control port power instead of DVSTCTR register. */ |
| 32 | void (*port_power)(int port, int power); | 32 | void (*port_power)(int port, int power); |
| 33 | 33 | ||
| 34 | /* set one = on chip controller, set zero = external controller */ | ||
| 35 | unsigned on_chip:1; | ||
| 36 | |||
| 34 | /* (external controller only) set R8A66597_PLATDATA_XTAL_nnMHZ */ | 37 | /* (external controller only) set R8A66597_PLATDATA_XTAL_nnMHZ */ |
| 35 | unsigned xtal:2; | 38 | unsigned xtal:2; |
| 36 | 39 | ||
| @@ -40,5 +43,373 @@ struct r8a66597_platdata { | |||
| 40 | /* set one = big endian, set zero = little endian */ | 43 | /* set one = big endian, set zero = little endian */ |
| 41 | unsigned endian:1; | 44 | unsigned endian:1; |
| 42 | }; | 45 | }; |
| 43 | #endif | 46 | |
| 47 | /* Register definitions */ | ||
| 48 | #define SYSCFG0 0x00 | ||
| 49 | #define SYSCFG1 0x02 | ||
| 50 | #define SYSSTS0 0x04 | ||
| 51 | #define SYSSTS1 0x06 | ||
| 52 | #define DVSTCTR0 0x08 | ||
| 53 | #define DVSTCTR1 0x0A | ||
| 54 | #define TESTMODE 0x0C | ||
| 55 | #define PINCFG 0x0E | ||
| 56 | #define DMA0CFG 0x10 | ||
| 57 | #define DMA1CFG 0x12 | ||
| 58 | #define CFIFO 0x14 | ||
| 59 | #define D0FIFO 0x18 | ||
| 60 | #define D1FIFO 0x1C | ||
| 61 | #define CFIFOSEL 0x20 | ||
| 62 | #define CFIFOCTR 0x22 | ||
| 63 | #define CFIFOSIE 0x24 | ||
| 64 | #define D0FIFOSEL 0x28 | ||
| 65 | #define D0FIFOCTR 0x2A | ||
| 66 | #define D1FIFOSEL 0x2C | ||
| 67 | #define D1FIFOCTR 0x2E | ||
| 68 | #define INTENB0 0x30 | ||
| 69 | #define INTENB1 0x32 | ||
| 70 | #define INTENB2 0x34 | ||
| 71 | #define BRDYENB 0x36 | ||
| 72 | #define NRDYENB 0x38 | ||
| 73 | #define BEMPENB 0x3A | ||
| 74 | #define SOFCFG 0x3C | ||
| 75 | #define INTSTS0 0x40 | ||
| 76 | #define INTSTS1 0x42 | ||
| 77 | #define INTSTS2 0x44 | ||
| 78 | #define BRDYSTS 0x46 | ||
| 79 | #define NRDYSTS 0x48 | ||
| 80 | #define BEMPSTS 0x4A | ||
| 81 | #define FRMNUM 0x4C | ||
| 82 | #define UFRMNUM 0x4E | ||
| 83 | #define USBADDR 0x50 | ||
| 84 | #define USBREQ 0x54 | ||
| 85 | #define USBVAL 0x56 | ||
| 86 | #define USBINDX 0x58 | ||
| 87 | #define USBLENG 0x5A | ||
| 88 | #define DCPCFG 0x5C | ||
| 89 | #define DCPMAXP 0x5E | ||
| 90 | #define DCPCTR 0x60 | ||
| 91 | #define PIPESEL 0x64 | ||
| 92 | #define PIPECFG 0x68 | ||
| 93 | #define PIPEBUF 0x6A | ||
| 94 | #define PIPEMAXP 0x6C | ||
| 95 | #define PIPEPERI 0x6E | ||
| 96 | #define PIPE1CTR 0x70 | ||
| 97 | #define PIPE2CTR 0x72 | ||
| 98 | #define PIPE3CTR 0x74 | ||
| 99 | #define PIPE4CTR 0x76 | ||
| 100 | #define PIPE5CTR 0x78 | ||
| 101 | #define PIPE6CTR 0x7A | ||
| 102 | #define PIPE7CTR 0x7C | ||
| 103 | #define PIPE8CTR 0x7E | ||
| 104 | #define PIPE9CTR 0x80 | ||
| 105 | #define PIPE1TRE 0x90 | ||
| 106 | #define PIPE1TRN 0x92 | ||
| 107 | #define PIPE2TRE 0x94 | ||
| 108 | #define PIPE2TRN 0x96 | ||
| 109 | #define PIPE3TRE 0x98 | ||
| 110 | #define PIPE3TRN 0x9A | ||
| 111 | #define PIPE4TRE 0x9C | ||
| 112 | #define PIPE4TRN 0x9E | ||
| 113 | #define PIPE5TRE 0xA0 | ||
| 114 | #define PIPE5TRN 0xA2 | ||
| 115 | #define DEVADD0 0xD0 | ||
| 116 | #define DEVADD1 0xD2 | ||
| 117 | #define DEVADD2 0xD4 | ||
| 118 | #define DEVADD3 0xD6 | ||
| 119 | #define DEVADD4 0xD8 | ||
| 120 | #define DEVADD5 0xDA | ||
| 121 | #define DEVADD6 0xDC | ||
| 122 | #define DEVADD7 0xDE | ||
| 123 | #define DEVADD8 0xE0 | ||
| 124 | #define DEVADD9 0xE2 | ||
| 125 | #define DEVADDA 0xE4 | ||
| 126 | |||
| 127 | /* System Configuration Control Register */ | ||
| 128 | #define XTAL 0xC000 /* b15-14: Crystal selection */ | ||
| 129 | #define XTAL48 0x8000 /* 48MHz */ | ||
| 130 | #define XTAL24 0x4000 /* 24MHz */ | ||
| 131 | #define XTAL12 0x0000 /* 12MHz */ | ||
| 132 | #define XCKE 0x2000 /* b13: External clock enable */ | ||
| 133 | #define PLLC 0x0800 /* b11: PLL control */ | ||
| 134 | #define SCKE 0x0400 /* b10: USB clock enable */ | ||
| 135 | #define PCSDIS 0x0200 /* b9: not CS wakeup */ | ||
| 136 | #define LPSME 0x0100 /* b8: Low power sleep mode */ | ||
| 137 | #define HSE 0x0080 /* b7: Hi-speed enable */ | ||
| 138 | #define DCFM 0x0040 /* b6: Controller function select */ | ||
| 139 | #define DRPD 0x0020 /* b5: D+/- pull down control */ | ||
| 140 | #define DPRPU 0x0010 /* b4: D+ pull up control */ | ||
| 141 | #define USBE 0x0001 /* b0: USB module operation enable */ | ||
| 142 | |||
| 143 | /* System Configuration Status Register */ | ||
| 144 | #define OVCBIT 0x8000 /* b15-14: Over-current bit */ | ||
| 145 | #define OVCMON 0xC000 /* b15-14: Over-current monitor */ | ||
| 146 | #define SOFEA 0x0020 /* b5: SOF monitor */ | ||
| 147 | #define IDMON 0x0004 /* b3: ID-pin monitor */ | ||
| 148 | #define LNST 0x0003 /* b1-0: D+, D- line status */ | ||
| 149 | #define SE1 0x0003 /* SE1 */ | ||
| 150 | #define FS_KSTS 0x0002 /* Full-Speed K State */ | ||
| 151 | #define FS_JSTS 0x0001 /* Full-Speed J State */ | ||
| 152 | #define LS_JSTS 0x0002 /* Low-Speed J State */ | ||
| 153 | #define LS_KSTS 0x0001 /* Low-Speed K State */ | ||
| 154 | #define SE0 0x0000 /* SE0 */ | ||
| 155 | |||
| 156 | /* Device State Control Register */ | ||
| 157 | #define EXTLP0 0x0400 /* b10: External port */ | ||
| 158 | #define VBOUT 0x0200 /* b9: VBUS output */ | ||
| 159 | #define WKUP 0x0100 /* b8: Remote wakeup */ | ||
| 160 | #define RWUPE 0x0080 /* b7: Remote wakeup sense */ | ||
| 161 | #define USBRST 0x0040 /* b6: USB reset enable */ | ||
| 162 | #define RESUME 0x0020 /* b5: Resume enable */ | ||
| 163 | #define UACT 0x0010 /* b4: USB bus enable */ | ||
| 164 | #define RHST 0x0007 /* b1-0: Reset handshake status */ | ||
| 165 | #define HSPROC 0x0004 /* HS handshake is processing */ | ||
| 166 | #define HSMODE 0x0003 /* Hi-Speed mode */ | ||
| 167 | #define FSMODE 0x0002 /* Full-Speed mode */ | ||
| 168 | #define LSMODE 0x0001 /* Low-Speed mode */ | ||
| 169 | #define UNDECID 0x0000 /* Undecided */ | ||
| 170 | |||
| 171 | /* Test Mode Register */ | ||
| 172 | #define UTST 0x000F /* b3-0: Test select */ | ||
| 173 | #define H_TST_PACKET 0x000C /* HOST TEST Packet */ | ||
| 174 | #define H_TST_SE0_NAK 0x000B /* HOST TEST SE0 NAK */ | ||
| 175 | #define H_TST_K 0x000A /* HOST TEST K */ | ||
| 176 | #define H_TST_J 0x0009 /* HOST TEST J */ | ||
| 177 | #define H_TST_NORMAL 0x0000 /* HOST Normal Mode */ | ||
| 178 | #define P_TST_PACKET 0x0004 /* PERI TEST Packet */ | ||
| 179 | #define P_TST_SE0_NAK 0x0003 /* PERI TEST SE0 NAK */ | ||
| 180 | #define P_TST_K 0x0002 /* PERI TEST K */ | ||
| 181 | #define P_TST_J 0x0001 /* PERI TEST J */ | ||
| 182 | #define P_TST_NORMAL 0x0000 /* PERI Normal Mode */ | ||
| 183 | |||
| 184 | /* Data Pin Configuration Register */ | ||
| 185 | #define LDRV 0x8000 /* b15: Drive Current Adjust */ | ||
| 186 | #define VIF1 0x0000 /* VIF = 1.8V */ | ||
| 187 | #define VIF3 0x8000 /* VIF = 3.3V */ | ||
| 188 | #define INTA 0x0001 /* b1: USB INT-pin active */ | ||
| 189 | |||
| 190 | /* DMAx Pin Configuration Register */ | ||
| 191 | #define DREQA 0x4000 /* b14: Dreq active select */ | ||
| 192 | #define BURST 0x2000 /* b13: Burst mode */ | ||
| 193 | #define DACKA 0x0400 /* b10: Dack active select */ | ||
| 194 | #define DFORM 0x0380 /* b9-7: DMA mode select */ | ||
| 195 | #define CPU_ADR_RD_WR 0x0000 /* Address + RD/WR mode (CPU bus) */ | ||
| 196 | #define CPU_DACK_RD_WR 0x0100 /* DACK + RD/WR mode (CPU bus) */ | ||
| 197 | #define CPU_DACK_ONLY 0x0180 /* DACK only mode (CPU bus) */ | ||
| 198 | #define SPLIT_DACK_ONLY 0x0200 /* DACK only mode (SPLIT bus) */ | ||
| 199 | #define DENDA 0x0040 /* b6: Dend active select */ | ||
| 200 | #define PKTM 0x0020 /* b5: Packet mode */ | ||
| 201 | #define DENDE 0x0010 /* b4: Dend enable */ | ||
| 202 | #define OBUS 0x0004 /* b2: OUTbus mode */ | ||
| 203 | |||
| 204 | /* CFIFO/DxFIFO Port Select Register */ | ||
| 205 | #define RCNT 0x8000 /* b15: Read count mode */ | ||
| 206 | #define REW 0x4000 /* b14: Buffer rewind */ | ||
| 207 | #define DCLRM 0x2000 /* b13: DMA buffer clear mode */ | ||
| 208 | #define DREQE 0x1000 /* b12: DREQ output enable */ | ||
| 209 | #define MBW_8 0x0000 /* 8bit */ | ||
| 210 | #define MBW_16 0x0400 /* 16bit */ | ||
| 211 | #define MBW_32 0x0800 /* 32bit */ | ||
| 212 | #define BIGEND 0x0100 /* b8: Big endian mode */ | ||
| 213 | #define BYTE_LITTLE 0x0000 /* little dendian */ | ||
| 214 | #define BYTE_BIG 0x0100 /* big endifan */ | ||
| 215 | #define ISEL 0x0020 /* b5: DCP FIFO port direction select */ | ||
| 216 | #define CURPIPE 0x000F /* b2-0: PIPE select */ | ||
| 217 | |||
| 218 | /* CFIFO/DxFIFO Port Control Register */ | ||
| 219 | #define BVAL 0x8000 /* b15: Buffer valid flag */ | ||
| 220 | #define BCLR 0x4000 /* b14: Buffer clear */ | ||
| 221 | #define FRDY 0x2000 /* b13: FIFO ready */ | ||
| 222 | #define DTLN 0x0FFF /* b11-0: FIFO received data length */ | ||
| 223 | |||
| 224 | /* Interrupt Enable Register 0 */ | ||
| 225 | #define VBSE 0x8000 /* b15: VBUS interrupt */ | ||
| 226 | #define RSME 0x4000 /* b14: Resume interrupt */ | ||
| 227 | #define SOFE 0x2000 /* b13: Frame update interrupt */ | ||
| 228 | #define DVSE 0x1000 /* b12: Device state transition interrupt */ | ||
| 229 | #define CTRE 0x0800 /* b11: Control transfer stage transition interrupt */ | ||
| 230 | #define BEMPE 0x0400 /* b10: Buffer empty interrupt */ | ||
| 231 | #define NRDYE 0x0200 /* b9: Buffer not ready interrupt */ | ||
| 232 | #define BRDYE 0x0100 /* b8: Buffer ready interrupt */ | ||
| 233 | |||
| 234 | /* Interrupt Enable Register 1 */ | ||
| 235 | #define OVRCRE 0x8000 /* b15: Over-current interrupt */ | ||
| 236 | #define BCHGE 0x4000 /* b14: USB us chenge interrupt */ | ||
| 237 | #define DTCHE 0x1000 /* b12: Detach sense interrupt */ | ||
| 238 | #define ATTCHE 0x0800 /* b11: Attach sense interrupt */ | ||
| 239 | #define EOFERRE 0x0040 /* b6: EOF error interrupt */ | ||
| 240 | #define SIGNE 0x0020 /* b5: SETUP IGNORE interrupt */ | ||
| 241 | #define SACKE 0x0010 /* b4: SETUP ACK interrupt */ | ||
| 242 | |||
| 243 | /* BRDY Interrupt Enable/Status Register */ | ||
| 244 | #define BRDY9 0x0200 /* b9: PIPE9 */ | ||
| 245 | #define BRDY8 0x0100 /* b8: PIPE8 */ | ||
| 246 | #define BRDY7 0x0080 /* b7: PIPE7 */ | ||
| 247 | #define BRDY6 0x0040 /* b6: PIPE6 */ | ||
| 248 | #define BRDY5 0x0020 /* b5: PIPE5 */ | ||
| 249 | #define BRDY4 0x0010 /* b4: PIPE4 */ | ||
| 250 | #define BRDY3 0x0008 /* b3: PIPE3 */ | ||
| 251 | #define BRDY2 0x0004 /* b2: PIPE2 */ | ||
| 252 | #define BRDY1 0x0002 /* b1: PIPE1 */ | ||
| 253 | #define BRDY0 0x0001 /* b1: PIPE0 */ | ||
| 254 | |||
| 255 | /* NRDY Interrupt Enable/Status Register */ | ||
| 256 | #define NRDY9 0x0200 /* b9: PIPE9 */ | ||
| 257 | #define NRDY8 0x0100 /* b8: PIPE8 */ | ||
| 258 | #define NRDY7 0x0080 /* b7: PIPE7 */ | ||
| 259 | #define NRDY6 0x0040 /* b6: PIPE6 */ | ||
| 260 | #define NRDY5 0x0020 /* b5: PIPE5 */ | ||
| 261 | #define NRDY4 0x0010 /* b4: PIPE4 */ | ||
| 262 | #define NRDY3 0x0008 /* b3: PIPE3 */ | ||
| 263 | #define NRDY2 0x0004 /* b2: PIPE2 */ | ||
| 264 | #define NRDY1 0x0002 /* b1: PIPE1 */ | ||
| 265 | #define NRDY0 0x0001 /* b1: PIPE0 */ | ||
| 266 | |||
| 267 | /* BEMP Interrupt Enable/Status Register */ | ||
| 268 | #define BEMP9 0x0200 /* b9: PIPE9 */ | ||
| 269 | #define BEMP8 0x0100 /* b8: PIPE8 */ | ||
| 270 | #define BEMP7 0x0080 /* b7: PIPE7 */ | ||
| 271 | #define BEMP6 0x0040 /* b6: PIPE6 */ | ||
| 272 | #define BEMP5 0x0020 /* b5: PIPE5 */ | ||
| 273 | #define BEMP4 0x0010 /* b4: PIPE4 */ | ||
| 274 | #define BEMP3 0x0008 /* b3: PIPE3 */ | ||
| 275 | #define BEMP2 0x0004 /* b2: PIPE2 */ | ||
| 276 | #define BEMP1 0x0002 /* b1: PIPE1 */ | ||
| 277 | #define BEMP0 0x0001 /* b0: PIPE0 */ | ||
| 278 | |||
| 279 | /* SOF Pin Configuration Register */ | ||
| 280 | #define TRNENSEL 0x0100 /* b8: Select transaction enable period */ | ||
| 281 | #define BRDYM 0x0040 /* b6: BRDY clear timing */ | ||
| 282 | #define INTL 0x0020 /* b5: Interrupt sense select */ | ||
| 283 | #define EDGESTS 0x0010 /* b4: */ | ||
| 284 | #define SOFMODE 0x000C /* b3-2: SOF pin select */ | ||
| 285 | #define SOF_125US 0x0008 /* SOF OUT 125us Frame Signal */ | ||
| 286 | #define SOF_1MS 0x0004 /* SOF OUT 1ms Frame Signal */ | ||
| 287 | #define SOF_DISABLE 0x0000 /* SOF OUT Disable */ | ||
| 288 | |||
| 289 | /* Interrupt Status Register 0 */ | ||
| 290 | #define VBINT 0x8000 /* b15: VBUS interrupt */ | ||
| 291 | #define RESM 0x4000 /* b14: Resume interrupt */ | ||
| 292 | #define SOFR 0x2000 /* b13: SOF frame update interrupt */ | ||
| 293 | #define DVST 0x1000 /* b12: Device state transition interrupt */ | ||
| 294 | #define CTRT 0x0800 /* b11: Control transfer stage transition interrupt */ | ||
| 295 | #define BEMP 0x0400 /* b10: Buffer empty interrupt */ | ||
| 296 | #define NRDY 0x0200 /* b9: Buffer not ready interrupt */ | ||
| 297 | #define BRDY 0x0100 /* b8: Buffer ready interrupt */ | ||
| 298 | #define VBSTS 0x0080 /* b7: VBUS input port */ | ||
| 299 | #define DVSQ 0x0070 /* b6-4: Device state */ | ||
| 300 | #define DS_SPD_CNFG 0x0070 /* Suspend Configured */ | ||
| 301 | #define DS_SPD_ADDR 0x0060 /* Suspend Address */ | ||
| 302 | #define DS_SPD_DFLT 0x0050 /* Suspend Default */ | ||
| 303 | #define DS_SPD_POWR 0x0040 /* Suspend Powered */ | ||
| 304 | #define DS_SUSP 0x0040 /* Suspend */ | ||
| 305 | #define DS_CNFG 0x0030 /* Configured */ | ||
| 306 | #define DS_ADDS 0x0020 /* Address */ | ||
| 307 | #define DS_DFLT 0x0010 /* Default */ | ||
| 308 | #define DS_POWR 0x0000 /* Powered */ | ||
| 309 | #define DVSQS 0x0030 /* b5-4: Device state */ | ||
| 310 | #define VALID 0x0008 /* b3: Setup packet detected flag */ | ||
| 311 | #define CTSQ 0x0007 /* b2-0: Control transfer stage */ | ||
| 312 | #define CS_SQER 0x0006 /* Sequence error */ | ||
| 313 | #define CS_WRND 0x0005 /* Control write nodata status stage */ | ||
| 314 | #define CS_WRSS 0x0004 /* Control write status stage */ | ||
| 315 | #define CS_WRDS 0x0003 /* Control write data stage */ | ||
| 316 | #define CS_RDSS 0x0002 /* Control read status stage */ | ||
| 317 | #define CS_RDDS 0x0001 /* Control read data stage */ | ||
| 318 | #define CS_IDST 0x0000 /* Idle or setup stage */ | ||
| 319 | |||
| 320 | /* Interrupt Status Register 1 */ | ||
| 321 | #define OVRCR 0x8000 /* b15: Over-current interrupt */ | ||
| 322 | #define BCHG 0x4000 /* b14: USB bus chenge interrupt */ | ||
| 323 | #define DTCH 0x1000 /* b12: Detach sense interrupt */ | ||
| 324 | #define ATTCH 0x0800 /* b11: Attach sense interrupt */ | ||
| 325 | #define EOFERR 0x0040 /* b6: EOF-error interrupt */ | ||
| 326 | #define SIGN 0x0020 /* b5: Setup ignore interrupt */ | ||
| 327 | #define SACK 0x0010 /* b4: Setup acknowledge interrupt */ | ||
| 328 | |||
| 329 | /* Frame Number Register */ | ||
| 330 | #define OVRN 0x8000 /* b15: Overrun error */ | ||
| 331 | #define CRCE 0x4000 /* b14: Received data error */ | ||
| 332 | #define FRNM 0x07FF /* b10-0: Frame number */ | ||
| 333 | |||
| 334 | /* Micro Frame Number Register */ | ||
| 335 | #define UFRNM 0x0007 /* b2-0: Micro frame number */ | ||
| 336 | |||
| 337 | /* Default Control Pipe Maxpacket Size Register */ | ||
| 338 | /* Pipe Maxpacket Size Register */ | ||
| 339 | #define DEVSEL 0xF000 /* b15-14: Device address select */ | ||
| 340 | #define MAXP 0x007F /* b6-0: Maxpacket size of default control pipe */ | ||
| 341 | |||
| 342 | /* Default Control Pipe Control Register */ | ||
| 343 | #define BSTS 0x8000 /* b15: Buffer status */ | ||
| 344 | #define SUREQ 0x4000 /* b14: Send USB request */ | ||
| 345 | #define CSCLR 0x2000 /* b13: complete-split status clear */ | ||
| 346 | #define CSSTS 0x1000 /* b12: complete-split status */ | ||
| 347 | #define SUREQCLR 0x0800 /* b11: stop setup request */ | ||
| 348 | #define SQCLR 0x0100 /* b8: Sequence toggle bit clear */ | ||
| 349 | #define SQSET 0x0080 /* b7: Sequence toggle bit set */ | ||
| 350 | #define SQMON 0x0040 /* b6: Sequence toggle bit monitor */ | ||
| 351 | #define PBUSY 0x0020 /* b5: pipe busy */ | ||
| 352 | #define PINGE 0x0010 /* b4: ping enable */ | ||
| 353 | #define CCPL 0x0004 /* b2: Enable control transfer complete */ | ||
| 354 | #define PID 0x0003 /* b1-0: Response PID */ | ||
| 355 | #define PID_STALL11 0x0003 /* STALL */ | ||
| 356 | #define PID_STALL 0x0002 /* STALL */ | ||
| 357 | #define PID_BUF 0x0001 /* BUF */ | ||
| 358 | #define PID_NAK 0x0000 /* NAK */ | ||
| 359 | |||
| 360 | /* Pipe Window Select Register */ | ||
| 361 | #define PIPENM 0x0007 /* b2-0: Pipe select */ | ||
| 362 | |||
| 363 | /* Pipe Configuration Register */ | ||
| 364 | #define R8A66597_TYP 0xC000 /* b15-14: Transfer type */ | ||
| 365 | #define R8A66597_ISO 0xC000 /* Isochronous */ | ||
| 366 | #define R8A66597_INT 0x8000 /* Interrupt */ | ||
| 367 | #define R8A66597_BULK 0x4000 /* Bulk */ | ||
| 368 | #define R8A66597_BFRE 0x0400 /* b10: Buffer ready interrupt mode select */ | ||
| 369 | #define R8A66597_DBLB 0x0200 /* b9: Double buffer mode select */ | ||
| 370 | #define R8A66597_CNTMD 0x0100 /* b8: Continuous transfer mode select */ | ||
| 371 | #define R8A66597_SHTNAK 0x0080 /* b7: Transfer end NAK */ | ||
| 372 | #define R8A66597_DIR 0x0010 /* b4: Transfer direction select */ | ||
| 373 | #define R8A66597_EPNUM 0x000F /* b3-0: Eendpoint number select */ | ||
| 374 | |||
| 375 | /* Pipe Buffer Configuration Register */ | ||
| 376 | #define BUFSIZE 0x7C00 /* b14-10: Pipe buffer size */ | ||
| 377 | #define BUFNMB 0x007F /* b6-0: Pipe buffer number */ | ||
| 378 | #define PIPE0BUF 256 | ||
| 379 | #define PIPExBUF 64 | ||
| 380 | |||
| 381 | /* Pipe Maxpacket Size Register */ | ||
| 382 | #define MXPS 0x07FF /* b10-0: Maxpacket size */ | ||
| 383 | |||
| 384 | /* Pipe Cycle Configuration Register */ | ||
| 385 | #define IFIS 0x1000 /* b12: Isochronous in-buffer flush mode select */ | ||
| 386 | #define IITV 0x0007 /* b2-0: Isochronous interval */ | ||
| 387 | |||
| 388 | /* Pipex Control Register */ | ||
| 389 | #define BSTS 0x8000 /* b15: Buffer status */ | ||
| 390 | #define INBUFM 0x4000 /* b14: IN buffer monitor (Only for PIPE1 to 5) */ | ||
| 391 | #define CSCLR 0x2000 /* b13: complete-split status clear */ | ||
| 392 | #define CSSTS 0x1000 /* b12: complete-split status */ | ||
| 393 | #define ATREPM 0x0400 /* b10: Auto repeat mode */ | ||
| 394 | #define ACLRM 0x0200 /* b9: Out buffer auto clear mode */ | ||
| 395 | #define SQCLR 0x0100 /* b8: Sequence toggle bit clear */ | ||
| 396 | #define SQSET 0x0080 /* b7: Sequence toggle bit set */ | ||
| 397 | #define SQMON 0x0040 /* b6: Sequence toggle bit monitor */ | ||
| 398 | #define PBUSY 0x0020 /* b5: pipe busy */ | ||
| 399 | #define PID 0x0003 /* b1-0: Response PID */ | ||
| 400 | |||
| 401 | /* PIPExTRE */ | ||
| 402 | #define TRENB 0x0200 /* b9: Transaction counter enable */ | ||
| 403 | #define TRCLR 0x0100 /* b8: Transaction counter clear */ | ||
| 404 | |||
| 405 | /* PIPExTRN */ | ||
| 406 | #define TRNCNT 0xFFFF /* b15-0: Transaction counter */ | ||
| 407 | |||
| 408 | /* DEVADDx */ | ||
| 409 | #define UPPHUB 0x7800 | ||
| 410 | #define HUBPORT 0x0700 | ||
| 411 | #define USBSPD 0x00C0 | ||
| 412 | #define RTPORT 0x0001 | ||
| 413 | |||
| 414 | #endif /* __LINUX_USB_R8A66597_H */ | ||
| 44 | 415 | ||
diff --git a/include/linux/usb/rndis_host.h b/include/linux/usb/rndis_host.h index 37836b937d97..1ef1ebc2b04f 100644 --- a/include/linux/usb/rndis_host.h +++ b/include/linux/usb/rndis_host.h | |||
| @@ -70,12 +70,13 @@ struct rndis_msg_hdr { | |||
| 70 | #define RNDIS_MSG_KEEPALIVE_C (RNDIS_MSG_KEEPALIVE|RNDIS_MSG_COMPLETION) | 70 | #define RNDIS_MSG_KEEPALIVE_C (RNDIS_MSG_KEEPALIVE|RNDIS_MSG_COMPLETION) |
| 71 | 71 | ||
| 72 | /* codes for "status" field of completion messages */ | 72 | /* codes for "status" field of completion messages */ |
| 73 | #define RNDIS_STATUS_SUCCESS cpu_to_le32(0x00000000) | 73 | #define RNDIS_STATUS_SUCCESS cpu_to_le32(0x00000000) |
| 74 | #define RNDIS_STATUS_FAILURE cpu_to_le32(0xc0000001) | 74 | #define RNDIS_STATUS_FAILURE cpu_to_le32(0xc0000001) |
| 75 | #define RNDIS_STATUS_INVALID_DATA cpu_to_le32(0xc0010015) | 75 | #define RNDIS_STATUS_INVALID_DATA cpu_to_le32(0xc0010015) |
| 76 | #define RNDIS_STATUS_NOT_SUPPORTED cpu_to_le32(0xc00000bb) | 76 | #define RNDIS_STATUS_NOT_SUPPORTED cpu_to_le32(0xc00000bb) |
| 77 | #define RNDIS_STATUS_MEDIA_CONNECT cpu_to_le32(0x4001000b) | 77 | #define RNDIS_STATUS_MEDIA_CONNECT cpu_to_le32(0x4001000b) |
| 78 | #define RNDIS_STATUS_MEDIA_DISCONNECT cpu_to_le32(0x4001000c) | 78 | #define RNDIS_STATUS_MEDIA_DISCONNECT cpu_to_le32(0x4001000c) |
| 79 | #define RNDIS_STATUS_MEDIA_SPECIFIC_INDICATION cpu_to_le32(0x40010012) | ||
| 79 | 80 | ||
| 80 | /* codes for OID_GEN_PHYSICAL_MEDIUM */ | 81 | /* codes for OID_GEN_PHYSICAL_MEDIUM */ |
| 81 | #define RNDIS_PHYSICAL_MEDIUM_UNSPECIFIED cpu_to_le32(0x00000000) | 82 | #define RNDIS_PHYSICAL_MEDIUM_UNSPECIFIED cpu_to_le32(0x00000000) |
diff --git a/include/linux/usb/serial.h b/include/linux/usb/serial.h index 0ec50ba62139..ce911ebf91e8 100644 --- a/include/linux/usb/serial.h +++ b/include/linux/usb/serial.h | |||
| @@ -59,6 +59,7 @@ enum port_dev_state { | |||
| 59 | * @bulk_out_buffer: pointer to the bulk out buffer for this port. | 59 | * @bulk_out_buffer: pointer to the bulk out buffer for this port. |
| 60 | * @bulk_out_size: the size of the bulk_out_buffer, in bytes. | 60 | * @bulk_out_size: the size of the bulk_out_buffer, in bytes. |
| 61 | * @write_urb: pointer to the bulk out struct urb for this port. | 61 | * @write_urb: pointer to the bulk out struct urb for this port. |
| 62 | * @write_fifo: kfifo used to buffer outgoing data | ||
| 62 | * @write_urb_busy: port`s writing status | 63 | * @write_urb_busy: port`s writing status |
| 63 | * @bulk_out_endpointAddress: endpoint address for the bulk out pipe for this | 64 | * @bulk_out_endpointAddress: endpoint address for the bulk out pipe for this |
| 64 | * port. | 65 | * port. |
| @@ -96,6 +97,7 @@ struct usb_serial_port { | |||
| 96 | unsigned char *bulk_out_buffer; | 97 | unsigned char *bulk_out_buffer; |
| 97 | int bulk_out_size; | 98 | int bulk_out_size; |
| 98 | struct urb *write_urb; | 99 | struct urb *write_urb; |
| 100 | struct kfifo *write_fifo; | ||
| 99 | int write_urb_busy; | 101 | int write_urb_busy; |
| 100 | __u8 bulk_out_endpointAddress; | 102 | __u8 bulk_out_endpointAddress; |
| 101 | 103 | ||
| @@ -148,6 +150,7 @@ struct usb_serial { | |||
| 148 | struct usb_interface *interface; | 150 | struct usb_interface *interface; |
| 149 | unsigned char disconnected:1; | 151 | unsigned char disconnected:1; |
| 150 | unsigned char suspending:1; | 152 | unsigned char suspending:1; |
| 153 | unsigned char attached:1; | ||
| 151 | unsigned char minor; | 154 | unsigned char minor; |
| 152 | unsigned char num_ports; | 155 | unsigned char num_ports; |
| 153 | unsigned char num_port_pointers; | 156 | unsigned char num_port_pointers; |
| @@ -238,9 +241,8 @@ struct usb_serial_driver { | |||
| 238 | int (*resume)(struct usb_serial *serial); | 241 | int (*resume)(struct usb_serial *serial); |
| 239 | 242 | ||
| 240 | /* serial function calls */ | 243 | /* serial function calls */ |
| 241 | /* Called by console with tty = NULL and by tty */ | 244 | /* Called by console and by the tty layer */ |
| 242 | int (*open)(struct tty_struct *tty, | 245 | int (*open)(struct tty_struct *tty, struct usb_serial_port *port); |
| 243 | struct usb_serial_port *port, struct file *filp); | ||
| 244 | void (*close)(struct usb_serial_port *port); | 246 | void (*close)(struct usb_serial_port *port); |
| 245 | int (*write)(struct tty_struct *tty, struct usb_serial_port *port, | 247 | int (*write)(struct tty_struct *tty, struct usb_serial_port *port, |
| 246 | const unsigned char *buf, int count); | 248 | const unsigned char *buf, int count); |
| @@ -261,6 +263,9 @@ struct usb_serial_driver { | |||
| 261 | be an attached tty at this point */ | 263 | be an attached tty at this point */ |
| 262 | void (*dtr_rts)(struct usb_serial_port *port, int on); | 264 | void (*dtr_rts)(struct usb_serial_port *port, int on); |
| 263 | int (*carrier_raised)(struct usb_serial_port *port); | 265 | int (*carrier_raised)(struct usb_serial_port *port); |
| 266 | /* Called by the usb serial hooks to allow the user to rework the | ||
| 267 | termios state */ | ||
| 268 | void (*init_termios)(struct tty_struct *tty); | ||
| 264 | /* USB events */ | 269 | /* USB events */ |
| 265 | void (*read_int_callback)(struct urb *urb); | 270 | void (*read_int_callback)(struct urb *urb); |
| 266 | void (*write_int_callback)(struct urb *urb); | 271 | void (*write_int_callback)(struct urb *urb); |
| @@ -300,7 +305,7 @@ static inline void usb_serial_console_disconnect(struct usb_serial *serial) {} | |||
| 300 | extern struct usb_serial *usb_serial_get_by_index(unsigned int minor); | 305 | extern struct usb_serial *usb_serial_get_by_index(unsigned int minor); |
| 301 | extern void usb_serial_put(struct usb_serial *serial); | 306 | extern void usb_serial_put(struct usb_serial *serial); |
| 302 | extern int usb_serial_generic_open(struct tty_struct *tty, | 307 | extern int usb_serial_generic_open(struct tty_struct *tty, |
| 303 | struct usb_serial_port *port, struct file *filp); | 308 | struct usb_serial_port *port); |
| 304 | extern int usb_serial_generic_write(struct tty_struct *tty, | 309 | extern int usb_serial_generic_write(struct tty_struct *tty, |
| 305 | struct usb_serial_port *port, const unsigned char *buf, int count); | 310 | struct usb_serial_port *port, const unsigned char *buf, int count); |
| 306 | extern void usb_serial_generic_close(struct usb_serial_port *port); | 311 | extern void usb_serial_generic_close(struct usb_serial_port *port); |
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h index 310e18a880ff..8ce61359bf73 100644 --- a/include/linux/usb/usbnet.h +++ b/include/linux/usb/usbnet.h | |||
| @@ -53,7 +53,9 @@ struct usbnet { | |||
| 53 | struct sk_buff_head rxq; | 53 | struct sk_buff_head rxq; |
| 54 | struct sk_buff_head txq; | 54 | struct sk_buff_head txq; |
| 55 | struct sk_buff_head done; | 55 | struct sk_buff_head done; |
| 56 | struct sk_buff_head rxq_pause; | ||
| 56 | struct urb *interrupt; | 57 | struct urb *interrupt; |
| 58 | struct usb_anchor deferred; | ||
| 57 | struct tasklet_struct bh; | 59 | struct tasklet_struct bh; |
| 58 | 60 | ||
| 59 | struct work_struct kevent; | 61 | struct work_struct kevent; |
| @@ -63,6 +65,9 @@ struct usbnet { | |||
| 63 | # define EVENT_RX_MEMORY 2 | 65 | # define EVENT_RX_MEMORY 2 |
| 64 | # define EVENT_STS_SPLIT 3 | 66 | # define EVENT_STS_SPLIT 3 |
| 65 | # define EVENT_LINK_RESET 4 | 67 | # define EVENT_LINK_RESET 4 |
| 68 | # define EVENT_RX_PAUSED 5 | ||
| 69 | # define EVENT_DEV_WAKING 6 | ||
| 70 | # define EVENT_DEV_ASLEEP 7 | ||
| 66 | }; | 71 | }; |
| 67 | 72 | ||
| 68 | static inline struct usb_driver *driver_of(struct usb_interface *intf) | 73 | static inline struct usb_driver *driver_of(struct usb_interface *intf) |
| @@ -86,7 +91,11 @@ struct driver_info { | |||
| 86 | 91 | ||
| 87 | #define FLAG_FRAMING_AX 0x0040 /* AX88772/178 packets */ | 92 | #define FLAG_FRAMING_AX 0x0040 /* AX88772/178 packets */ |
| 88 | #define FLAG_WLAN 0x0080 /* use "wlan%d" names */ | 93 | #define FLAG_WLAN 0x0080 /* use "wlan%d" names */ |
| 94 | #define FLAG_AVOID_UNLINK_URBS 0x0100 /* don't unlink urbs at usbnet_stop() */ | ||
| 95 | #define FLAG_SEND_ZLP 0x0200 /* hw requires ZLPs are sent */ | ||
| 96 | #define FLAG_WWAN 0x0400 /* use "wwan%d" names */ | ||
| 89 | 97 | ||
| 98 | #define FLAG_LINK_INTR 0x0800 /* updates link (carrier) status */ | ||
| 90 | 99 | ||
| 91 | /* init device ... can sleep, or cause probe() failure */ | 100 | /* init device ... can sleep, or cause probe() failure */ |
| 92 | int (*bind)(struct usbnet *, struct usb_interface *); | 101 | int (*bind)(struct usbnet *, struct usb_interface *); |
| @@ -97,9 +106,15 @@ struct driver_info { | |||
| 97 | /* reset device ... can sleep */ | 106 | /* reset device ... can sleep */ |
| 98 | int (*reset)(struct usbnet *); | 107 | int (*reset)(struct usbnet *); |
| 99 | 108 | ||
| 109 | /* stop device ... can sleep */ | ||
| 110 | int (*stop)(struct usbnet *); | ||
| 111 | |||
| 100 | /* see if peer is connected ... can sleep */ | 112 | /* see if peer is connected ... can sleep */ |
| 101 | int (*check_connect)(struct usbnet *); | 113 | int (*check_connect)(struct usbnet *); |
| 102 | 114 | ||
| 115 | /* (dis)activate runtime power management */ | ||
| 116 | int (*manage_power)(struct usbnet *, int); | ||
| 117 | |||
| 103 | /* for status polling */ | 118 | /* for status polling */ |
| 104 | void (*status)(struct usbnet *, struct urb *); | 119 | void (*status)(struct usbnet *, struct urb *); |
| 105 | 120 | ||
| @@ -118,9 +133,8 @@ struct driver_info { | |||
| 118 | * right after minidriver have initialized hardware. */ | 133 | * right after minidriver have initialized hardware. */ |
| 119 | int (*early_init)(struct usbnet *dev); | 134 | int (*early_init)(struct usbnet *dev); |
| 120 | 135 | ||
| 121 | /* called by minidriver when link state changes, state: 0=disconnect, | 136 | /* called by minidriver when receiving indication */ |
| 122 | * 1=connect */ | 137 | void (*indication)(struct usbnet *dev, void *ind, int indlen); |
| 123 | void (*link_change)(struct usbnet *dev, int state); | ||
| 124 | 138 | ||
| 125 | /* for new devices, use the descriptor-reading code instead */ | 139 | /* for new devices, use the descriptor-reading code instead */ |
| 126 | int in; /* rx endpoint */ | 140 | int in; /* rx endpoint */ |
| @@ -177,7 +191,8 @@ struct skb_data { /* skb->cb is one of these */ | |||
| 177 | 191 | ||
| 178 | extern int usbnet_open (struct net_device *net); | 192 | extern int usbnet_open (struct net_device *net); |
| 179 | extern int usbnet_stop (struct net_device *net); | 193 | extern int usbnet_stop (struct net_device *net); |
| 180 | extern int usbnet_start_xmit (struct sk_buff *skb, struct net_device *net); | 194 | extern netdev_tx_t usbnet_start_xmit (struct sk_buff *skb, |
| 195 | struct net_device *net); | ||
| 181 | extern void usbnet_tx_timeout (struct net_device *net); | 196 | extern void usbnet_tx_timeout (struct net_device *net); |
| 182 | extern int usbnet_change_mtu (struct net_device *net, int new_mtu); | 197 | extern int usbnet_change_mtu (struct net_device *net, int new_mtu); |
| 183 | 198 | ||
| @@ -187,6 +202,10 @@ extern void usbnet_defer_kevent (struct usbnet *, int); | |||
| 187 | extern void usbnet_skb_return (struct usbnet *, struct sk_buff *); | 202 | extern void usbnet_skb_return (struct usbnet *, struct sk_buff *); |
| 188 | extern void usbnet_unlink_rx_urbs(struct usbnet *); | 203 | extern void usbnet_unlink_rx_urbs(struct usbnet *); |
| 189 | 204 | ||
| 205 | extern void usbnet_pause_rx(struct usbnet *); | ||
| 206 | extern void usbnet_resume_rx(struct usbnet *); | ||
| 207 | extern void usbnet_purge_paused_rxq(struct usbnet *); | ||
| 208 | |||
| 190 | extern int usbnet_get_settings (struct net_device *net, struct ethtool_cmd *cmd); | 209 | extern int usbnet_get_settings (struct net_device *net, struct ethtool_cmd *cmd); |
| 191 | extern int usbnet_set_settings (struct net_device *net, struct ethtool_cmd *cmd); | 210 | extern int usbnet_set_settings (struct net_device *net, struct ethtool_cmd *cmd); |
| 192 | extern u32 usbnet_get_link (struct net_device *net); | 211 | extern u32 usbnet_get_link (struct net_device *net); |
diff --git a/include/linux/usb/video.h b/include/linux/usb/video.h new file mode 100644 index 000000000000..be436d9ee479 --- /dev/null +++ b/include/linux/usb/video.h | |||
| @@ -0,0 +1,164 @@ | |||
| 1 | /* | ||
| 2 | * USB Video Class definitions. | ||
| 3 | * | ||
| 4 | * Copyright (C) 2009 Laurent Pinchart <laurent.pinchart@skynet.be> | ||
| 5 | * | ||
| 6 | * This file holds USB constants and structures defined by the USB Device | ||
| 7 | * Class Definition for Video Devices. Unless otherwise stated, comments | ||
| 8 | * below reference relevant sections of the USB Video Class 1.1 specification | ||
| 9 | * available at | ||
| 10 | * | ||
| 11 | * http://www.usb.org/developers/devclass_docs/USB_Video_Class_1_1.zip | ||
| 12 | */ | ||
| 13 | |||
| 14 | #ifndef __LINUX_USB_VIDEO_H | ||
| 15 | #define __LINUX_USB_VIDEO_H | ||
| 16 | |||
| 17 | #include <linux/types.h> | ||
| 18 | |||
| 19 | /* -------------------------------------------------------------------------- | ||
| 20 | * UVC constants | ||
| 21 | */ | ||
| 22 | |||
| 23 | /* A.2. Video Interface Subclass Codes */ | ||
| 24 | #define UVC_SC_UNDEFINED 0x00 | ||
| 25 | #define UVC_SC_VIDEOCONTROL 0x01 | ||
| 26 | #define UVC_SC_VIDEOSTREAMING 0x02 | ||
| 27 | #define UVC_SC_VIDEO_INTERFACE_COLLECTION 0x03 | ||
| 28 | |||
| 29 | /* A.3. Video Interface Protocol Codes */ | ||
| 30 | #define UVC_PC_PROTOCOL_UNDEFINED 0x00 | ||
| 31 | |||
| 32 | /* A.5. Video Class-Specific VC Interface Descriptor Subtypes */ | ||
| 33 | #define UVC_VC_DESCRIPTOR_UNDEFINED 0x00 | ||
| 34 | #define UVC_VC_HEADER 0x01 | ||
| 35 | #define UVC_VC_INPUT_TERMINAL 0x02 | ||
| 36 | #define UVC_VC_OUTPUT_TERMINAL 0x03 | ||
| 37 | #define UVC_VC_SELECTOR_UNIT 0x04 | ||
| 38 | #define UVC_VC_PROCESSING_UNIT 0x05 | ||
| 39 | #define UVC_VC_EXTENSION_UNIT 0x06 | ||
| 40 | |||
| 41 | /* A.6. Video Class-Specific VS Interface Descriptor Subtypes */ | ||
| 42 | #define UVC_VS_UNDEFINED 0x00 | ||
| 43 | #define UVC_VS_INPUT_HEADER 0x01 | ||
| 44 | #define UVC_VS_OUTPUT_HEADER 0x02 | ||
| 45 | #define UVC_VS_STILL_IMAGE_FRAME 0x03 | ||
| 46 | #define UVC_VS_FORMAT_UNCOMPRESSED 0x04 | ||
| 47 | #define UVC_VS_FRAME_UNCOMPRESSED 0x05 | ||
| 48 | #define UVC_VS_FORMAT_MJPEG 0x06 | ||
| 49 | #define UVC_VS_FRAME_MJPEG 0x07 | ||
| 50 | #define UVC_VS_FORMAT_MPEG2TS 0x0a | ||
| 51 | #define UVC_VS_FORMAT_DV 0x0c | ||
| 52 | #define UVC_VS_COLORFORMAT 0x0d | ||
| 53 | #define UVC_VS_FORMAT_FRAME_BASED 0x10 | ||
| 54 | #define UVC_VS_FRAME_FRAME_BASED 0x11 | ||
| 55 | #define UVC_VS_FORMAT_STREAM_BASED 0x12 | ||
| 56 | |||
| 57 | /* A.7. Video Class-Specific Endpoint Descriptor Subtypes */ | ||
| 58 | #define UVC_EP_UNDEFINED 0x00 | ||
| 59 | #define UVC_EP_GENERAL 0x01 | ||
| 60 | #define UVC_EP_ENDPOINT 0x02 | ||
| 61 | #define UVC_EP_INTERRUPT 0x03 | ||
| 62 | |||
| 63 | /* A.8. Video Class-Specific Request Codes */ | ||
| 64 | #define UVC_RC_UNDEFINED 0x00 | ||
| 65 | #define UVC_SET_CUR 0x01 | ||
| 66 | #define UVC_GET_CUR 0x81 | ||
| 67 | #define UVC_GET_MIN 0x82 | ||
| 68 | #define UVC_GET_MAX 0x83 | ||
| 69 | #define UVC_GET_RES 0x84 | ||
| 70 | #define UVC_GET_LEN 0x85 | ||
| 71 | #define UVC_GET_INFO 0x86 | ||
| 72 | #define UVC_GET_DEF 0x87 | ||
| 73 | |||
| 74 | /* A.9.1. VideoControl Interface Control Selectors */ | ||
| 75 | #define UVC_VC_CONTROL_UNDEFINED 0x00 | ||
| 76 | #define UVC_VC_VIDEO_POWER_MODE_CONTROL 0x01 | ||
| 77 | #define UVC_VC_REQUEST_ERROR_CODE_CONTROL 0x02 | ||
| 78 | |||
| 79 | /* A.9.2. Terminal Control Selectors */ | ||
| 80 | #define UVC_TE_CONTROL_UNDEFINED 0x00 | ||
| 81 | |||
| 82 | /* A.9.3. Selector Unit Control Selectors */ | ||
| 83 | #define UVC_SU_CONTROL_UNDEFINED 0x00 | ||
| 84 | #define UVC_SU_INPUT_SELECT_CONTROL 0x01 | ||
| 85 | |||
| 86 | /* A.9.4. Camera Terminal Control Selectors */ | ||
| 87 | #define UVC_CT_CONTROL_UNDEFINED 0x00 | ||
| 88 | #define UVC_CT_SCANNING_MODE_CONTROL 0x01 | ||
| 89 | #define UVC_CT_AE_MODE_CONTROL 0x02 | ||
| 90 | #define UVC_CT_AE_PRIORITY_CONTROL 0x03 | ||
| 91 | #define UVC_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL 0x04 | ||
| 92 | #define UVC_CT_EXPOSURE_TIME_RELATIVE_CONTROL 0x05 | ||
| 93 | #define UVC_CT_FOCUS_ABSOLUTE_CONTROL 0x06 | ||
| 94 | #define UVC_CT_FOCUS_RELATIVE_CONTROL 0x07 | ||
| 95 | #define UVC_CT_FOCUS_AUTO_CONTROL 0x08 | ||
| 96 | #define UVC_CT_IRIS_ABSOLUTE_CONTROL 0x09 | ||
| 97 | #define UVC_CT_IRIS_RELATIVE_CONTROL 0x0a | ||
| 98 | #define UVC_CT_ZOOM_ABSOLUTE_CONTROL 0x0b | ||
| 99 | #define UVC_CT_ZOOM_RELATIVE_CONTROL 0x0c | ||
| 100 | #define UVC_CT_PANTILT_ABSOLUTE_CONTROL 0x0d | ||
| 101 | #define UVC_CT_PANTILT_RELATIVE_CONTROL 0x0e | ||
| 102 | #define UVC_CT_ROLL_ABSOLUTE_CONTROL 0x0f | ||
| 103 | #define UVC_CT_ROLL_RELATIVE_CONTROL 0x10 | ||
| 104 | #define UVC_CT_PRIVACY_CONTROL 0x11 | ||
| 105 | |||
| 106 | /* A.9.5. Processing Unit Control Selectors */ | ||
| 107 | #define UVC_PU_CONTROL_UNDEFINED 0x00 | ||
| 108 | #define UVC_PU_BACKLIGHT_COMPENSATION_CONTROL 0x01 | ||
| 109 | #define UVC_PU_BRIGHTNESS_CONTROL 0x02 | ||
| 110 | #define UVC_PU_CONTRAST_CONTROL 0x03 | ||
| 111 | #define UVC_PU_GAIN_CONTROL 0x04 | ||
| 112 | #define UVC_PU_POWER_LINE_FREQUENCY_CONTROL 0x05 | ||
| 113 | #define UVC_PU_HUE_CONTROL 0x06 | ||
| 114 | #define UVC_PU_SATURATION_CONTROL 0x07 | ||
| 115 | #define UVC_PU_SHARPNESS_CONTROL 0x08 | ||
| 116 | #define UVC_PU_GAMMA_CONTROL 0x09 | ||
| 117 | #define UVC_PU_WHITE_BALANCE_TEMPERATURE_CONTROL 0x0a | ||
| 118 | #define UVC_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL 0x0b | ||
| 119 | #define UVC_PU_WHITE_BALANCE_COMPONENT_CONTROL 0x0c | ||
| 120 | #define UVC_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL 0x0d | ||
| 121 | #define UVC_PU_DIGITAL_MULTIPLIER_CONTROL 0x0e | ||
| 122 | #define UVC_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL 0x0f | ||
| 123 | #define UVC_PU_HUE_AUTO_CONTROL 0x10 | ||
| 124 | #define UVC_PU_ANALOG_VIDEO_STANDARD_CONTROL 0x11 | ||
| 125 | #define UVC_PU_ANALOG_LOCK_STATUS_CONTROL 0x12 | ||
| 126 | |||
| 127 | /* A.9.7. VideoStreaming Interface Control Selectors */ | ||
| 128 | #define UVC_VS_CONTROL_UNDEFINED 0x00 | ||
| 129 | #define UVC_VS_PROBE_CONTROL 0x01 | ||
| 130 | #define UVC_VS_COMMIT_CONTROL 0x02 | ||
| 131 | #define UVC_VS_STILL_PROBE_CONTROL 0x03 | ||
| 132 | #define UVC_VS_STILL_COMMIT_CONTROL 0x04 | ||
| 133 | #define UVC_VS_STILL_IMAGE_TRIGGER_CONTROL 0x05 | ||
| 134 | #define UVC_VS_STREAM_ERROR_CODE_CONTROL 0x06 | ||
| 135 | #define UVC_VS_GENERATE_KEY_FRAME_CONTROL 0x07 | ||
| 136 | #define UVC_VS_UPDATE_FRAME_SEGMENT_CONTROL 0x08 | ||
| 137 | #define UVC_VS_SYNC_DELAY_CONTROL 0x09 | ||
| 138 | |||
| 139 | /* B.1. USB Terminal Types */ | ||
| 140 | #define UVC_TT_VENDOR_SPECIFIC 0x0100 | ||
| 141 | #define UVC_TT_STREAMING 0x0101 | ||
| 142 | |||
| 143 | /* B.2. Input Terminal Types */ | ||
| 144 | #define UVC_ITT_VENDOR_SPECIFIC 0x0200 | ||
| 145 | #define UVC_ITT_CAMERA 0x0201 | ||
| 146 | #define UVC_ITT_MEDIA_TRANSPORT_INPUT 0x0202 | ||
| 147 | |||
| 148 | /* B.3. Output Terminal Types */ | ||
| 149 | #define UVC_OTT_VENDOR_SPECIFIC 0x0300 | ||
| 150 | #define UVC_OTT_DISPLAY 0x0301 | ||
| 151 | #define UVC_OTT_MEDIA_TRANSPORT_OUTPUT 0x0302 | ||
| 152 | |||
| 153 | /* B.4. External Terminal Types */ | ||
| 154 | #define UVC_EXTERNAL_VENDOR_SPECIFIC 0x0400 | ||
| 155 | #define UVC_COMPOSITE_CONNECTOR 0x0401 | ||
| 156 | #define UVC_SVIDEO_CONNECTOR 0x0402 | ||
| 157 | #define UVC_COMPONENT_CONNECTOR 0x0403 | ||
| 158 | |||
| 159 | /* 2.4.2.2. Status Packet Type */ | ||
| 160 | #define UVC_STATUS_TYPE_CONTROL 1 | ||
| 161 | #define UVC_STATUS_TYPE_STREAMING 2 | ||
| 162 | |||
| 163 | #endif /* __LINUX_USB_VIDEO_H */ | ||
| 164 | |||
diff --git a/include/linux/usbdevice_fs.h b/include/linux/usbdevice_fs.h index 0044d9b4cb85..b2a7d8ba6ee3 100644 --- a/include/linux/usbdevice_fs.h +++ b/include/linux/usbdevice_fs.h | |||
| @@ -77,6 +77,7 @@ struct usbdevfs_connectinfo { | |||
| 77 | 77 | ||
| 78 | #define USBDEVFS_URB_SHORT_NOT_OK 0x01 | 78 | #define USBDEVFS_URB_SHORT_NOT_OK 0x01 |
| 79 | #define USBDEVFS_URB_ISO_ASAP 0x02 | 79 | #define USBDEVFS_URB_ISO_ASAP 0x02 |
| 80 | #define USBDEVFS_URB_BULK_CONTINUATION 0x04 | ||
| 80 | #define USBDEVFS_URB_NO_FSBR 0x20 | 81 | #define USBDEVFS_URB_NO_FSBR 0x20 |
| 81 | #define USBDEVFS_URB_ZERO_PACKET 0x40 | 82 | #define USBDEVFS_URB_ZERO_PACKET 0x40 |
| 82 | #define USBDEVFS_URB_NO_INTERRUPT 0x80 | 83 | #define USBDEVFS_URB_NO_INTERRUPT 0x80 |
| @@ -175,4 +176,6 @@ struct usbdevfs_ioctl32 { | |||
| 175 | #define USBDEVFS_CLEAR_HALT _IOR('U', 21, unsigned int) | 176 | #define USBDEVFS_CLEAR_HALT _IOR('U', 21, unsigned int) |
| 176 | #define USBDEVFS_DISCONNECT _IO('U', 22) | 177 | #define USBDEVFS_DISCONNECT _IO('U', 22) |
| 177 | #define USBDEVFS_CONNECT _IO('U', 23) | 178 | #define USBDEVFS_CONNECT _IO('U', 23) |
| 179 | #define USBDEVFS_CLAIM_PORT _IOR('U', 24, unsigned int) | ||
| 180 | #define USBDEVFS_RELEASE_PORT _IOR('U', 25, unsigned int) | ||
| 178 | #endif /* _LINUX_USBDEVICE_FS_H */ | 181 | #endif /* _LINUX_USBDEVICE_FS_H */ |
diff --git a/include/linux/user-return-notifier.h b/include/linux/user-return-notifier.h new file mode 100644 index 000000000000..9c4a445bb43c --- /dev/null +++ b/include/linux/user-return-notifier.h | |||
| @@ -0,0 +1,49 @@ | |||
| 1 | #ifndef _LINUX_USER_RETURN_NOTIFIER_H | ||
| 2 | #define _LINUX_USER_RETURN_NOTIFIER_H | ||
| 3 | |||
| 4 | #ifdef CONFIG_USER_RETURN_NOTIFIER | ||
| 5 | |||
| 6 | #include <linux/list.h> | ||
| 7 | #include <linux/sched.h> | ||
| 8 | |||
| 9 | struct user_return_notifier { | ||
| 10 | void (*on_user_return)(struct user_return_notifier *urn); | ||
| 11 | struct hlist_node link; | ||
| 12 | }; | ||
| 13 | |||
| 14 | |||
| 15 | void user_return_notifier_register(struct user_return_notifier *urn); | ||
| 16 | void user_return_notifier_unregister(struct user_return_notifier *urn); | ||
| 17 | |||
| 18 | static inline void propagate_user_return_notify(struct task_struct *prev, | ||
| 19 | struct task_struct *next) | ||
| 20 | { | ||
| 21 | if (test_tsk_thread_flag(prev, TIF_USER_RETURN_NOTIFY)) { | ||
| 22 | clear_tsk_thread_flag(prev, TIF_USER_RETURN_NOTIFY); | ||
| 23 | set_tsk_thread_flag(next, TIF_USER_RETURN_NOTIFY); | ||
| 24 | } | ||
| 25 | } | ||
| 26 | |||
| 27 | void fire_user_return_notifiers(void); | ||
| 28 | |||
| 29 | static inline void clear_user_return_notifier(struct task_struct *p) | ||
| 30 | { | ||
| 31 | clear_tsk_thread_flag(p, TIF_USER_RETURN_NOTIFY); | ||
| 32 | } | ||
| 33 | |||
| 34 | #else | ||
| 35 | |||
| 36 | struct user_return_notifier {}; | ||
| 37 | |||
| 38 | static inline void propagate_user_return_notify(struct task_struct *prev, | ||
| 39 | struct task_struct *next) | ||
| 40 | { | ||
| 41 | } | ||
| 42 | |||
| 43 | static inline void fire_user_return_notifiers(void) {} | ||
| 44 | |||
| 45 | static inline void clear_user_return_notifier(struct task_struct *p) {} | ||
| 46 | |||
| 47 | #endif | ||
| 48 | |||
| 49 | #endif | ||
diff --git a/include/linux/utsname.h b/include/linux/utsname.h index 3656b300de3a..69f39974c041 100644 --- a/include/linux/utsname.h +++ b/include/linux/utsname.h | |||
| @@ -36,7 +36,6 @@ struct new_utsname { | |||
| 36 | #include <linux/kref.h> | 36 | #include <linux/kref.h> |
| 37 | #include <linux/nsproxy.h> | 37 | #include <linux/nsproxy.h> |
| 38 | #include <linux/err.h> | 38 | #include <linux/err.h> |
| 39 | #include <asm/atomic.h> | ||
| 40 | 39 | ||
| 41 | struct uts_namespace { | 40 | struct uts_namespace { |
| 42 | struct kref kref; | 41 | struct kref kref; |
diff --git a/include/linux/uwb.h b/include/linux/uwb.h index c02128991ff7..7fc9746f22cd 100644 --- a/include/linux/uwb.h +++ b/include/linux/uwb.h | |||
| @@ -597,7 +597,7 @@ void uwb_rc_neh_grok(struct uwb_rc *, void *, size_t); | |||
| 597 | void uwb_rc_neh_error(struct uwb_rc *, int); | 597 | void uwb_rc_neh_error(struct uwb_rc *, int); |
| 598 | void uwb_rc_reset_all(struct uwb_rc *rc); | 598 | void uwb_rc_reset_all(struct uwb_rc *rc); |
| 599 | void uwb_rc_pre_reset(struct uwb_rc *rc); | 599 | void uwb_rc_pre_reset(struct uwb_rc *rc); |
| 600 | void uwb_rc_post_reset(struct uwb_rc *rc); | 600 | int uwb_rc_post_reset(struct uwb_rc *rc); |
| 601 | 601 | ||
| 602 | /** | 602 | /** |
| 603 | * uwb_rsv_is_owner - is the owner of this reservation the RC? | 603 | * uwb_rsv_is_owner - is the owner of this reservation the RC? |
diff --git a/include/linux/vgaarb.h b/include/linux/vgaarb.h new file mode 100644 index 000000000000..2dfaa293ae8c --- /dev/null +++ b/include/linux/vgaarb.h | |||
| @@ -0,0 +1,210 @@ | |||
| 1 | /* | ||
| 2 | * The VGA aribiter manages VGA space routing and VGA resource decode to | ||
| 3 | * allow multiple VGA devices to be used in a system in a safe way. | ||
| 4 | * | ||
| 5 | * (C) Copyright 2005 Benjamin Herrenschmidt <benh@kernel.crashing.org> | ||
| 6 | * (C) Copyright 2007 Paulo R. Zanoni <przanoni@gmail.com> | ||
| 7 | * (C) Copyright 2007, 2009 Tiago Vignatti <vignatti@freedesktop.org> | ||
| 8 | */ | ||
| 9 | |||
| 10 | #ifndef LINUX_VGA_H | ||
| 11 | |||
| 12 | #include <asm/vga.h> | ||
| 13 | |||
| 14 | /* Legacy VGA regions */ | ||
| 15 | #define VGA_RSRC_NONE 0x00 | ||
| 16 | #define VGA_RSRC_LEGACY_IO 0x01 | ||
| 17 | #define VGA_RSRC_LEGACY_MEM 0x02 | ||
| 18 | #define VGA_RSRC_LEGACY_MASK (VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM) | ||
| 19 | /* Non-legacy access */ | ||
| 20 | #define VGA_RSRC_NORMAL_IO 0x04 | ||
| 21 | #define VGA_RSRC_NORMAL_MEM 0x08 | ||
| 22 | |||
| 23 | /* Passing that instead of a pci_dev to use the system "default" | ||
| 24 | * device, that is the one used by vgacon. Archs will probably | ||
| 25 | * have to provide their own vga_default_device(); | ||
| 26 | */ | ||
| 27 | #define VGA_DEFAULT_DEVICE (NULL) | ||
| 28 | |||
| 29 | /* For use by clients */ | ||
| 30 | |||
| 31 | /** | ||
| 32 | * vga_set_legacy_decoding | ||
| 33 | * | ||
| 34 | * @pdev: pci device of the VGA card | ||
| 35 | * @decodes: bit mask of what legacy regions the card decodes | ||
| 36 | * | ||
| 37 | * Indicates to the arbiter if the card decodes legacy VGA IOs, | ||
| 38 | * legacy VGA Memory, both, or none. All cards default to both, | ||
| 39 | * the card driver (fbdev for example) should tell the arbiter | ||
| 40 | * if it has disabled legacy decoding, so the card can be left | ||
| 41 | * out of the arbitration process (and can be safe to take | ||
| 42 | * interrupts at any time. | ||
| 43 | */ | ||
| 44 | extern void vga_set_legacy_decoding(struct pci_dev *pdev, | ||
| 45 | unsigned int decodes); | ||
| 46 | |||
| 47 | /** | ||
| 48 | * vga_get - acquire & locks VGA resources | ||
| 49 | * | ||
| 50 | * @pdev: pci device of the VGA card or NULL for the system default | ||
| 51 | * @rsrc: bit mask of resources to acquire and lock | ||
| 52 | * @interruptible: blocking should be interruptible by signals ? | ||
| 53 | * | ||
| 54 | * This function acquires VGA resources for the given | ||
| 55 | * card and mark those resources locked. If the resource requested | ||
| 56 | * are "normal" (and not legacy) resources, the arbiter will first check | ||
| 57 | * wether the card is doing legacy decoding for that type of resource. If | ||
| 58 | * yes, the lock is "converted" into a legacy resource lock. | ||
| 59 | * The arbiter will first look for all VGA cards that might conflict | ||
| 60 | * and disable their IOs and/or Memory access, inlcuding VGA forwarding | ||
| 61 | * on P2P bridges if necessary, so that the requested resources can | ||
| 62 | * be used. Then, the card is marked as locking these resources and | ||
| 63 | * the IO and/or Memory accesse are enabled on the card (including | ||
| 64 | * VGA forwarding on parent P2P bridges if any). | ||
| 65 | * This function will block if some conflicting card is already locking | ||
| 66 | * one of the required resources (or any resource on a different bus | ||
| 67 | * segment, since P2P bridges don't differenciate VGA memory and IO | ||
| 68 | * afaik). You can indicate wether this blocking should be interruptible | ||
| 69 | * by a signal (for userland interface) or not. | ||
| 70 | * Must not be called at interrupt time or in atomic context. | ||
| 71 | * If the card already owns the resources, the function succeeds. | ||
| 72 | * Nested calls are supported (a per-resource counter is maintained) | ||
| 73 | */ | ||
| 74 | |||
| 75 | extern int vga_get(struct pci_dev *pdev, unsigned int rsrc, | ||
| 76 | int interruptible); | ||
| 77 | |||
| 78 | /** | ||
| 79 | * vga_get_interruptible | ||
| 80 | * | ||
| 81 | * Shortcut to vga_get | ||
| 82 | */ | ||
| 83 | |||
| 84 | static inline int vga_get_interruptible(struct pci_dev *pdev, | ||
| 85 | unsigned int rsrc) | ||
| 86 | { | ||
| 87 | return vga_get(pdev, rsrc, 1); | ||
| 88 | } | ||
| 89 | |||
| 90 | /** | ||
| 91 | * vga_get_uninterruptible | ||
| 92 | * | ||
| 93 | * Shortcut to vga_get | ||
| 94 | */ | ||
| 95 | |||
| 96 | static inline int vga_get_uninterruptible(struct pci_dev *pdev, | ||
| 97 | unsigned int rsrc) | ||
| 98 | { | ||
| 99 | return vga_get(pdev, rsrc, 0); | ||
| 100 | } | ||
| 101 | |||
| 102 | /** | ||
| 103 | * vga_tryget - try to acquire & lock legacy VGA resources | ||
| 104 | * | ||
| 105 | * @pdev: pci devivce of VGA card or NULL for system default | ||
| 106 | * @rsrc: bit mask of resources to acquire and lock | ||
| 107 | * | ||
| 108 | * This function performs the same operation as vga_get(), but | ||
| 109 | * will return an error (-EBUSY) instead of blocking if the resources | ||
| 110 | * are already locked by another card. It can be called in any context | ||
| 111 | */ | ||
| 112 | |||
| 113 | extern int vga_tryget(struct pci_dev *pdev, unsigned int rsrc); | ||
| 114 | |||
| 115 | /** | ||
| 116 | * vga_put - release lock on legacy VGA resources | ||
| 117 | * | ||
| 118 | * @pdev: pci device of VGA card or NULL for system default | ||
| 119 | * @rsrc: but mask of resource to release | ||
| 120 | * | ||
| 121 | * This function releases resources previously locked by vga_get() | ||
| 122 | * or vga_tryget(). The resources aren't disabled right away, so | ||
| 123 | * that a subsequence vga_get() on the same card will succeed | ||
| 124 | * immediately. Resources have a counter, so locks are only | ||
| 125 | * released if the counter reaches 0. | ||
| 126 | */ | ||
| 127 | |||
| 128 | extern void vga_put(struct pci_dev *pdev, unsigned int rsrc); | ||
| 129 | |||
| 130 | |||
| 131 | /** | ||
| 132 | * vga_default_device | ||
| 133 | * | ||
| 134 | * This can be defined by the platform. The default implementation | ||
| 135 | * is rather dumb and will probably only work properly on single | ||
| 136 | * vga card setups and/or x86 platforms. | ||
| 137 | * | ||
| 138 | * If your VGA default device is not PCI, you'll have to return | ||
| 139 | * NULL here. In this case, I assume it will not conflict with | ||
| 140 | * any PCI card. If this is not true, I'll have to define two archs | ||
| 141 | * hooks for enabling/disabling the VGA default device if that is | ||
| 142 | * possible. This may be a problem with real _ISA_ VGA cards, in | ||
| 143 | * addition to a PCI one. I don't know at this point how to deal | ||
| 144 | * with that card. Can theirs IOs be disabled at all ? If not, then | ||
| 145 | * I suppose it's a matter of having the proper arch hook telling | ||
| 146 | * us about it, so we basically never allow anybody to succeed a | ||
| 147 | * vga_get()... | ||
| 148 | */ | ||
| 149 | |||
| 150 | #ifndef __ARCH_HAS_VGA_DEFAULT_DEVICE | ||
| 151 | extern struct pci_dev *vga_default_device(void); | ||
| 152 | #endif | ||
| 153 | |||
| 154 | /** | ||
| 155 | * vga_conflicts | ||
| 156 | * | ||
| 157 | * Architectures should define this if they have several | ||
| 158 | * independant PCI domains that can afford concurrent VGA | ||
| 159 | * decoding | ||
| 160 | */ | ||
| 161 | |||
| 162 | #ifndef __ARCH_HAS_VGA_CONFLICT | ||
| 163 | static inline int vga_conflicts(struct pci_dev *p1, struct pci_dev *p2) | ||
| 164 | { | ||
| 165 | return 1; | ||
| 166 | } | ||
| 167 | #endif | ||
| 168 | |||
| 169 | /** | ||
| 170 | * vga_client_register | ||
| 171 | * | ||
| 172 | * @pdev: pci device of the VGA client | ||
| 173 | * @cookie: client cookie to be used in callbacks | ||
| 174 | * @irq_set_state: irq state change callback | ||
| 175 | * @set_vga_decode: vga decode change callback | ||
| 176 | * | ||
| 177 | * return value: 0 on success, -1 on failure | ||
| 178 | * Register a client with the VGA arbitration logic | ||
| 179 | * | ||
| 180 | * Clients have two callback mechanisms they can use. | ||
| 181 | * irq enable/disable callback - | ||
| 182 | * If a client can't disable its GPUs VGA resources, then we | ||
| 183 | * need to be able to ask it to turn off its irqs when we | ||
| 184 | * turn off its mem and io decoding. | ||
| 185 | * set_vga_decode | ||
| 186 | * If a client can disable its GPU VGA resource, it will | ||
| 187 | * get a callback from this to set the encode/decode state | ||
| 188 | * | ||
| 189 | * Rationale: we cannot disable VGA decode resources unconditionally | ||
| 190 | * some single GPU laptops seem to require ACPI or BIOS access to the | ||
| 191 | * VGA registers to control things like backlights etc. | ||
| 192 | * Hopefully newer multi-GPU laptops do something saner, and desktops | ||
| 193 | * won't have any special ACPI for this. | ||
| 194 | * They driver will get a callback when VGA arbitration is first used | ||
| 195 | * by userspace since we some older X servers have issues. | ||
| 196 | */ | ||
| 197 | #if defined(CONFIG_VGA_ARB) | ||
| 198 | int vga_client_register(struct pci_dev *pdev, void *cookie, | ||
| 199 | void (*irq_set_state)(void *cookie, bool state), | ||
| 200 | unsigned int (*set_vga_decode)(void *cookie, bool state)); | ||
| 201 | #else | ||
| 202 | static inline int vga_client_register(struct pci_dev *pdev, void *cookie, | ||
| 203 | void (*irq_set_state)(void *cookie, bool state), | ||
| 204 | unsigned int (*set_vga_decode)(void *cookie, bool state)) | ||
| 205 | { | ||
| 206 | return 0; | ||
| 207 | } | ||
| 208 | #endif | ||
| 209 | |||
| 210 | #endif /* LINUX_VGA_H */ | ||
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index 74f16876f38d..b59e78c57161 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h | |||
| @@ -167,6 +167,7 @@ enum v4l2_ctrl_type { | |||
| 167 | V4L2_CTRL_TYPE_BUTTON = 4, | 167 | V4L2_CTRL_TYPE_BUTTON = 4, |
| 168 | V4L2_CTRL_TYPE_INTEGER64 = 5, | 168 | V4L2_CTRL_TYPE_INTEGER64 = 5, |
| 169 | V4L2_CTRL_TYPE_CTRL_CLASS = 6, | 169 | V4L2_CTRL_TYPE_CTRL_CLASS = 6, |
| 170 | V4L2_CTRL_TYPE_STRING = 7, | ||
| 170 | }; | 171 | }; |
| 171 | 172 | ||
| 172 | enum v4l2_tuner_type { | 173 | enum v4l2_tuner_type { |
| @@ -252,10 +253,12 @@ struct v4l2_capability { | |||
| 252 | #define V4L2_CAP_RDS_CAPTURE 0x00000100 /* RDS data capture */ | 253 | #define V4L2_CAP_RDS_CAPTURE 0x00000100 /* RDS data capture */ |
| 253 | #define V4L2_CAP_VIDEO_OUTPUT_OVERLAY 0x00000200 /* Can do video output overlay */ | 254 | #define V4L2_CAP_VIDEO_OUTPUT_OVERLAY 0x00000200 /* Can do video output overlay */ |
| 254 | #define V4L2_CAP_HW_FREQ_SEEK 0x00000400 /* Can do hardware frequency seek */ | 255 | #define V4L2_CAP_HW_FREQ_SEEK 0x00000400 /* Can do hardware frequency seek */ |
| 256 | #define V4L2_CAP_RDS_OUTPUT 0x00000800 /* Is an RDS encoder */ | ||
| 255 | 257 | ||
| 256 | #define V4L2_CAP_TUNER 0x00010000 /* has a tuner */ | 258 | #define V4L2_CAP_TUNER 0x00010000 /* has a tuner */ |
| 257 | #define V4L2_CAP_AUDIO 0x00020000 /* has audio support */ | 259 | #define V4L2_CAP_AUDIO 0x00020000 /* has audio support */ |
| 258 | #define V4L2_CAP_RADIO 0x00040000 /* is a radio device */ | 260 | #define V4L2_CAP_RADIO 0x00040000 /* is a radio device */ |
| 261 | #define V4L2_CAP_MODULATOR 0x00080000 /* has a modulator */ | ||
| 259 | 262 | ||
| 260 | #define V4L2_CAP_READWRITE 0x01000000 /* read/write systemcalls */ | 263 | #define V4L2_CAP_READWRITE 0x01000000 /* read/write systemcalls */ |
| 261 | #define V4L2_CAP_ASYNCIO 0x02000000 /* async I/O */ | 264 | #define V4L2_CAP_ASYNCIO 0x02000000 /* async I/O */ |
| @@ -275,7 +278,9 @@ struct v4l2_pix_format { | |||
| 275 | __u32 priv; /* private data, depends on pixelformat */ | 278 | __u32 priv; /* private data, depends on pixelformat */ |
| 276 | }; | 279 | }; |
| 277 | 280 | ||
| 278 | /* Pixel format FOURCC depth Description */ | 281 | /* Pixel format FOURCC depth Description */ |
| 282 | |||
| 283 | /* RGB formats */ | ||
| 279 | #define V4L2_PIX_FMT_RGB332 v4l2_fourcc('R', 'G', 'B', '1') /* 8 RGB-3-3-2 */ | 284 | #define V4L2_PIX_FMT_RGB332 v4l2_fourcc('R', 'G', 'B', '1') /* 8 RGB-3-3-2 */ |
| 280 | #define V4L2_PIX_FMT_RGB444 v4l2_fourcc('R', '4', '4', '4') /* 16 xxxxrrrr ggggbbbb */ | 285 | #define V4L2_PIX_FMT_RGB444 v4l2_fourcc('R', '4', '4', '4') /* 16 xxxxrrrr ggggbbbb */ |
| 281 | #define V4L2_PIX_FMT_RGB555 v4l2_fourcc('R', 'G', 'B', 'O') /* 16 RGB-5-5-5 */ | 286 | #define V4L2_PIX_FMT_RGB555 v4l2_fourcc('R', 'G', 'B', 'O') /* 16 RGB-5-5-5 */ |
| @@ -286,12 +291,20 @@ struct v4l2_pix_format { | |||
| 286 | #define V4L2_PIX_FMT_RGB24 v4l2_fourcc('R', 'G', 'B', '3') /* 24 RGB-8-8-8 */ | 291 | #define V4L2_PIX_FMT_RGB24 v4l2_fourcc('R', 'G', 'B', '3') /* 24 RGB-8-8-8 */ |
| 287 | #define V4L2_PIX_FMT_BGR32 v4l2_fourcc('B', 'G', 'R', '4') /* 32 BGR-8-8-8-8 */ | 292 | #define V4L2_PIX_FMT_BGR32 v4l2_fourcc('B', 'G', 'R', '4') /* 32 BGR-8-8-8-8 */ |
| 288 | #define V4L2_PIX_FMT_RGB32 v4l2_fourcc('R', 'G', 'B', '4') /* 32 RGB-8-8-8-8 */ | 293 | #define V4L2_PIX_FMT_RGB32 v4l2_fourcc('R', 'G', 'B', '4') /* 32 RGB-8-8-8-8 */ |
| 294 | |||
| 295 | /* Grey formats */ | ||
| 289 | #define V4L2_PIX_FMT_GREY v4l2_fourcc('G', 'R', 'E', 'Y') /* 8 Greyscale */ | 296 | #define V4L2_PIX_FMT_GREY v4l2_fourcc('G', 'R', 'E', 'Y') /* 8 Greyscale */ |
| 290 | #define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ') /* 16 Greyscale */ | 297 | #define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ') /* 16 Greyscale */ |
| 298 | |||
| 299 | /* Palette formats */ | ||
| 291 | #define V4L2_PIX_FMT_PAL8 v4l2_fourcc('P', 'A', 'L', '8') /* 8 8-bit palette */ | 300 | #define V4L2_PIX_FMT_PAL8 v4l2_fourcc('P', 'A', 'L', '8') /* 8 8-bit palette */ |
| 301 | |||
| 302 | /* Luminance+Chrominance formats */ | ||
| 292 | #define V4L2_PIX_FMT_YVU410 v4l2_fourcc('Y', 'V', 'U', '9') /* 9 YVU 4:1:0 */ | 303 | #define V4L2_PIX_FMT_YVU410 v4l2_fourcc('Y', 'V', 'U', '9') /* 9 YVU 4:1:0 */ |
| 293 | #define V4L2_PIX_FMT_YVU420 v4l2_fourcc('Y', 'V', '1', '2') /* 12 YVU 4:2:0 */ | 304 | #define V4L2_PIX_FMT_YVU420 v4l2_fourcc('Y', 'V', '1', '2') /* 12 YVU 4:2:0 */ |
| 294 | #define V4L2_PIX_FMT_YUYV v4l2_fourcc('Y', 'U', 'Y', 'V') /* 16 YUV 4:2:2 */ | 305 | #define V4L2_PIX_FMT_YUYV v4l2_fourcc('Y', 'U', 'Y', 'V') /* 16 YUV 4:2:2 */ |
| 306 | #define V4L2_PIX_FMT_YYUV v4l2_fourcc('Y', 'Y', 'U', 'V') /* 16 YUV 4:2:2 */ | ||
| 307 | #define V4L2_PIX_FMT_YVYU v4l2_fourcc('Y', 'V', 'Y', 'U') /* 16 YVU 4:2:2 */ | ||
| 295 | #define V4L2_PIX_FMT_UYVY v4l2_fourcc('U', 'Y', 'V', 'Y') /* 16 YUV 4:2:2 */ | 308 | #define V4L2_PIX_FMT_UYVY v4l2_fourcc('U', 'Y', 'V', 'Y') /* 16 YUV 4:2:2 */ |
| 296 | #define V4L2_PIX_FMT_VYUY v4l2_fourcc('V', 'Y', 'U', 'Y') /* 16 YUV 4:2:2 */ | 309 | #define V4L2_PIX_FMT_VYUY v4l2_fourcc('V', 'Y', 'U', 'Y') /* 16 YUV 4:2:2 */ |
| 297 | #define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P') /* 16 YVU422 planar */ | 310 | #define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P') /* 16 YVU422 planar */ |
| @@ -301,6 +314,10 @@ struct v4l2_pix_format { | |||
| 301 | #define V4L2_PIX_FMT_YUV555 v4l2_fourcc('Y', 'U', 'V', 'O') /* 16 YUV-5-5-5 */ | 314 | #define V4L2_PIX_FMT_YUV555 v4l2_fourcc('Y', 'U', 'V', 'O') /* 16 YUV-5-5-5 */ |
| 302 | #define V4L2_PIX_FMT_YUV565 v4l2_fourcc('Y', 'U', 'V', 'P') /* 16 YUV-5-6-5 */ | 315 | #define V4L2_PIX_FMT_YUV565 v4l2_fourcc('Y', 'U', 'V', 'P') /* 16 YUV-5-6-5 */ |
| 303 | #define V4L2_PIX_FMT_YUV32 v4l2_fourcc('Y', 'U', 'V', '4') /* 32 YUV-8-8-8-8 */ | 316 | #define V4L2_PIX_FMT_YUV32 v4l2_fourcc('Y', 'U', 'V', '4') /* 32 YUV-8-8-8-8 */ |
| 317 | #define V4L2_PIX_FMT_YUV410 v4l2_fourcc('Y', 'U', 'V', '9') /* 9 YUV 4:1:0 */ | ||
| 318 | #define V4L2_PIX_FMT_YUV420 v4l2_fourcc('Y', 'U', '1', '2') /* 12 YUV 4:2:0 */ | ||
| 319 | #define V4L2_PIX_FMT_HI240 v4l2_fourcc('H', 'I', '2', '4') /* 8 8-bit color */ | ||
| 320 | #define V4L2_PIX_FMT_HM12 v4l2_fourcc('H', 'M', '1', '2') /* 8 YUV 4:2:0 16x16 macroblocks */ | ||
| 304 | 321 | ||
| 305 | /* two planes -- one Y, one Cr + Cb interleaved */ | 322 | /* two planes -- one Y, one Cr + Cb interleaved */ |
| 306 | #define V4L2_PIX_FMT_NV12 v4l2_fourcc('N', 'V', '1', '2') /* 12 Y/CbCr 4:2:0 */ | 323 | #define V4L2_PIX_FMT_NV12 v4l2_fourcc('N', 'V', '1', '2') /* 12 Y/CbCr 4:2:0 */ |
| @@ -308,25 +325,17 @@ struct v4l2_pix_format { | |||
| 308 | #define V4L2_PIX_FMT_NV16 v4l2_fourcc('N', 'V', '1', '6') /* 16 Y/CbCr 4:2:2 */ | 325 | #define V4L2_PIX_FMT_NV16 v4l2_fourcc('N', 'V', '1', '6') /* 16 Y/CbCr 4:2:2 */ |
| 309 | #define V4L2_PIX_FMT_NV61 v4l2_fourcc('N', 'V', '6', '1') /* 16 Y/CrCb 4:2:2 */ | 326 | #define V4L2_PIX_FMT_NV61 v4l2_fourcc('N', 'V', '6', '1') /* 16 Y/CrCb 4:2:2 */ |
| 310 | 327 | ||
| 311 | /* The following formats are not defined in the V4L2 specification */ | 328 | /* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */ |
| 312 | #define V4L2_PIX_FMT_YUV410 v4l2_fourcc('Y', 'U', 'V', '9') /* 9 YUV 4:1:0 */ | ||
| 313 | #define V4L2_PIX_FMT_YUV420 v4l2_fourcc('Y', 'U', '1', '2') /* 12 YUV 4:2:0 */ | ||
| 314 | #define V4L2_PIX_FMT_YYUV v4l2_fourcc('Y', 'Y', 'U', 'V') /* 16 YUV 4:2:2 */ | ||
| 315 | #define V4L2_PIX_FMT_HI240 v4l2_fourcc('H', 'I', '2', '4') /* 8 8-bit color */ | ||
| 316 | #define V4L2_PIX_FMT_HM12 v4l2_fourcc('H', 'M', '1', '2') /* 8 YUV 4:2:0 16x16 macroblocks */ | ||
| 317 | |||
| 318 | /* see http://www.siliconimaging.com/RGB%20Bayer.htm */ | ||
| 319 | #define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B', 'A', '8', '1') /* 8 BGBG.. GRGR.. */ | 329 | #define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B', 'A', '8', '1') /* 8 BGBG.. GRGR.. */ |
| 320 | #define V4L2_PIX_FMT_SGBRG8 v4l2_fourcc('G', 'B', 'R', 'G') /* 8 GBGB.. RGRG.. */ | 330 | #define V4L2_PIX_FMT_SGBRG8 v4l2_fourcc('G', 'B', 'R', 'G') /* 8 GBGB.. RGRG.. */ |
| 321 | #define V4L2_PIX_FMT_SGRBG8 v4l2_fourcc('G', 'R', 'B', 'G') /* 8 GRGR.. BGBG.. */ | 331 | #define V4L2_PIX_FMT_SGRBG8 v4l2_fourcc('G', 'R', 'B', 'G') /* 8 GRGR.. BGBG.. */ |
| 322 | 332 | #define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0') /* 10bit raw bayer */ | |
| 323 | /* | 333 | /* 10bit raw bayer DPCM compressed to 8 bits */ |
| 324 | * 10bit raw bayer, expanded to 16 bits | ||
| 325 | * xxxxrrrrrrrrrrxxxxgggggggggg xxxxggggggggggxxxxbbbbbbbbbb... | ||
| 326 | */ | ||
| 327 | #define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0') | ||
| 328 | /* 10bit raw bayer DPCM compressed to 8 bits */ | ||
| 329 | #define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0') | 334 | #define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0') |
| 335 | /* | ||
| 336 | * 10bit raw bayer, expanded to 16 bits | ||
| 337 | * xxxxrrrrrrrrrrxxxxgggggggggg xxxxggggggggggxxxxbbbbbbbbbb... | ||
| 338 | */ | ||
| 330 | #define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2') /* 16 BGBG.. GRGR.. */ | 339 | #define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2') /* 16 BGBG.. GRGR.. */ |
| 331 | 340 | ||
| 332 | /* compressed formats */ | 341 | /* compressed formats */ |
| @@ -350,7 +359,6 @@ struct v4l2_pix_format { | |||
| 350 | #define V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '0') /* compressed BGGR bayer */ | 359 | #define V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '0') /* compressed BGGR bayer */ |
| 351 | #define V4L2_PIX_FMT_SQ905C v4l2_fourcc('9', '0', '5', 'C') /* compressed RGGB bayer */ | 360 | #define V4L2_PIX_FMT_SQ905C v4l2_fourcc('9', '0', '5', 'C') /* compressed RGGB bayer */ |
| 352 | #define V4L2_PIX_FMT_PJPG v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */ | 361 | #define V4L2_PIX_FMT_PJPG v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */ |
| 353 | #define V4L2_PIX_FMT_YVYU v4l2_fourcc('Y', 'V', 'Y', 'U') /* 16 YVU 4:2:2 */ | ||
| 354 | #define V4L2_PIX_FMT_OV511 v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */ | 362 | #define V4L2_PIX_FMT_OV511 v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */ |
| 355 | #define V4L2_PIX_FMT_OV518 v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */ | 363 | #define V4L2_PIX_FMT_OV518 v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */ |
| 356 | 364 | ||
| @@ -367,6 +375,7 @@ struct v4l2_fmtdesc { | |||
| 367 | }; | 375 | }; |
| 368 | 376 | ||
| 369 | #define V4L2_FMT_FLAG_COMPRESSED 0x0001 | 377 | #define V4L2_FMT_FLAG_COMPRESSED 0x0001 |
| 378 | #define V4L2_FMT_FLAG_EMULATED 0x0002 | ||
| 370 | 379 | ||
| 371 | #if 1 | 380 | #if 1 |
| 372 | /* Experimental Frame Size and frame rate enumeration */ | 381 | /* Experimental Frame Size and frame rate enumeration */ |
| @@ -788,11 +797,12 @@ struct v4l2_control { | |||
| 788 | 797 | ||
| 789 | struct v4l2_ext_control { | 798 | struct v4l2_ext_control { |
| 790 | __u32 id; | 799 | __u32 id; |
| 791 | __u32 reserved2[2]; | 800 | __u32 size; |
| 801 | __u32 reserved2[1]; | ||
| 792 | union { | 802 | union { |
| 793 | __s32 value; | 803 | __s32 value; |
| 794 | __s64 value64; | 804 | __s64 value64; |
| 795 | void *reserved; | 805 | char *string; |
| 796 | }; | 806 | }; |
| 797 | } __attribute__ ((packed)); | 807 | } __attribute__ ((packed)); |
| 798 | 808 | ||
| @@ -808,6 +818,7 @@ struct v4l2_ext_controls { | |||
| 808 | #define V4L2_CTRL_CLASS_USER 0x00980000 /* Old-style 'user' controls */ | 818 | #define V4L2_CTRL_CLASS_USER 0x00980000 /* Old-style 'user' controls */ |
| 809 | #define V4L2_CTRL_CLASS_MPEG 0x00990000 /* MPEG-compression controls */ | 819 | #define V4L2_CTRL_CLASS_MPEG 0x00990000 /* MPEG-compression controls */ |
| 810 | #define V4L2_CTRL_CLASS_CAMERA 0x009a0000 /* Camera class controls */ | 820 | #define V4L2_CTRL_CLASS_CAMERA 0x009a0000 /* Camera class controls */ |
| 821 | #define V4L2_CTRL_CLASS_FM_TX 0x009b0000 /* FM Modulator control class */ | ||
| 811 | 822 | ||
| 812 | #define V4L2_CTRL_ID_MASK (0x0fffffff) | 823 | #define V4L2_CTRL_ID_MASK (0x0fffffff) |
| 813 | #define V4L2_CTRL_ID2CLASS(id) ((id) & 0x0fff0000UL) | 824 | #define V4L2_CTRL_ID2CLASS(id) ((id) & 0x0fff0000UL) |
| @@ -899,9 +910,10 @@ enum v4l2_colorfx { | |||
| 899 | V4L2_COLORFX_SEPIA = 2, | 910 | V4L2_COLORFX_SEPIA = 2, |
| 900 | }; | 911 | }; |
| 901 | #define V4L2_CID_AUTOBRIGHTNESS (V4L2_CID_BASE+32) | 912 | #define V4L2_CID_AUTOBRIGHTNESS (V4L2_CID_BASE+32) |
| 913 | #define V4L2_CID_BAND_STOP_FILTER (V4L2_CID_BASE+33) | ||
| 902 | 914 | ||
| 903 | /* last CID + 1 */ | 915 | /* last CID + 1 */ |
| 904 | #define V4L2_CID_LASTP1 (V4L2_CID_BASE+33) | 916 | #define V4L2_CID_LASTP1 (V4L2_CID_BASE+34) |
| 905 | 917 | ||
| 906 | /* MPEG-class control IDs defined by V4L2 */ | 918 | /* MPEG-class control IDs defined by V4L2 */ |
| 907 | #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) | 919 | #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) |
| @@ -1147,6 +1159,39 @@ enum v4l2_exposure_auto_type { | |||
| 1147 | 1159 | ||
| 1148 | #define V4L2_CID_PRIVACY (V4L2_CID_CAMERA_CLASS_BASE+16) | 1160 | #define V4L2_CID_PRIVACY (V4L2_CID_CAMERA_CLASS_BASE+16) |
| 1149 | 1161 | ||
| 1162 | /* FM Modulator class control IDs */ | ||
| 1163 | #define V4L2_CID_FM_TX_CLASS_BASE (V4L2_CTRL_CLASS_FM_TX | 0x900) | ||
| 1164 | #define V4L2_CID_FM_TX_CLASS (V4L2_CTRL_CLASS_FM_TX | 1) | ||
| 1165 | |||
| 1166 | #define V4L2_CID_RDS_TX_DEVIATION (V4L2_CID_FM_TX_CLASS_BASE + 1) | ||
| 1167 | #define V4L2_CID_RDS_TX_PI (V4L2_CID_FM_TX_CLASS_BASE + 2) | ||
| 1168 | #define V4L2_CID_RDS_TX_PTY (V4L2_CID_FM_TX_CLASS_BASE + 3) | ||
| 1169 | #define V4L2_CID_RDS_TX_PS_NAME (V4L2_CID_FM_TX_CLASS_BASE + 5) | ||
| 1170 | #define V4L2_CID_RDS_TX_RADIO_TEXT (V4L2_CID_FM_TX_CLASS_BASE + 6) | ||
| 1171 | |||
| 1172 | #define V4L2_CID_AUDIO_LIMITER_ENABLED (V4L2_CID_FM_TX_CLASS_BASE + 64) | ||
| 1173 | #define V4L2_CID_AUDIO_LIMITER_RELEASE_TIME (V4L2_CID_FM_TX_CLASS_BASE + 65) | ||
| 1174 | #define V4L2_CID_AUDIO_LIMITER_DEVIATION (V4L2_CID_FM_TX_CLASS_BASE + 66) | ||
| 1175 | |||
| 1176 | #define V4L2_CID_AUDIO_COMPRESSION_ENABLED (V4L2_CID_FM_TX_CLASS_BASE + 80) | ||
| 1177 | #define V4L2_CID_AUDIO_COMPRESSION_GAIN (V4L2_CID_FM_TX_CLASS_BASE + 81) | ||
| 1178 | #define V4L2_CID_AUDIO_COMPRESSION_THRESHOLD (V4L2_CID_FM_TX_CLASS_BASE + 82) | ||
| 1179 | #define V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME (V4L2_CID_FM_TX_CLASS_BASE + 83) | ||
| 1180 | #define V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME (V4L2_CID_FM_TX_CLASS_BASE + 84) | ||
| 1181 | |||
| 1182 | #define V4L2_CID_PILOT_TONE_ENABLED (V4L2_CID_FM_TX_CLASS_BASE + 96) | ||
| 1183 | #define V4L2_CID_PILOT_TONE_DEVIATION (V4L2_CID_FM_TX_CLASS_BASE + 97) | ||
| 1184 | #define V4L2_CID_PILOT_TONE_FREQUENCY (V4L2_CID_FM_TX_CLASS_BASE + 98) | ||
| 1185 | |||
| 1186 | #define V4L2_CID_TUNE_PREEMPHASIS (V4L2_CID_FM_TX_CLASS_BASE + 112) | ||
| 1187 | enum v4l2_preemphasis { | ||
| 1188 | V4L2_PREEMPHASIS_DISABLED = 0, | ||
| 1189 | V4L2_PREEMPHASIS_50_uS = 1, | ||
| 1190 | V4L2_PREEMPHASIS_75_uS = 2, | ||
| 1191 | }; | ||
| 1192 | #define V4L2_CID_TUNE_POWER_LEVEL (V4L2_CID_FM_TX_CLASS_BASE + 113) | ||
| 1193 | #define V4L2_CID_TUNE_ANTENNA_CAPACITOR (V4L2_CID_FM_TX_CLASS_BASE + 114) | ||
| 1194 | |||
| 1150 | /* | 1195 | /* |
| 1151 | * T U N I N G | 1196 | * T U N I N G |
| 1152 | */ | 1197 | */ |
| @@ -1181,6 +1226,7 @@ struct v4l2_modulator { | |||
| 1181 | #define V4L2_TUNER_CAP_LANG2 0x0020 | 1226 | #define V4L2_TUNER_CAP_LANG2 0x0020 |
| 1182 | #define V4L2_TUNER_CAP_SAP 0x0020 | 1227 | #define V4L2_TUNER_CAP_SAP 0x0020 |
| 1183 | #define V4L2_TUNER_CAP_LANG1 0x0040 | 1228 | #define V4L2_TUNER_CAP_LANG1 0x0040 |
| 1229 | #define V4L2_TUNER_CAP_RDS 0x0080 | ||
| 1184 | 1230 | ||
| 1185 | /* Flags for the 'rxsubchans' field */ | 1231 | /* Flags for the 'rxsubchans' field */ |
| 1186 | #define V4L2_TUNER_SUB_MONO 0x0001 | 1232 | #define V4L2_TUNER_SUB_MONO 0x0001 |
| @@ -1188,6 +1234,7 @@ struct v4l2_modulator { | |||
| 1188 | #define V4L2_TUNER_SUB_LANG2 0x0004 | 1234 | #define V4L2_TUNER_SUB_LANG2 0x0004 |
| 1189 | #define V4L2_TUNER_SUB_SAP 0x0004 | 1235 | #define V4L2_TUNER_SUB_SAP 0x0004 |
| 1190 | #define V4L2_TUNER_SUB_LANG1 0x0008 | 1236 | #define V4L2_TUNER_SUB_LANG1 0x0008 |
| 1237 | #define V4L2_TUNER_SUB_RDS 0x0010 | ||
| 1191 | 1238 | ||
| 1192 | /* Values for the 'audmode' field */ | 1239 | /* Values for the 'audmode' field */ |
| 1193 | #define V4L2_TUNER_MODE_MONO 0x0000 | 1240 | #define V4L2_TUNER_MODE_MONO 0x0000 |
| @@ -1213,6 +1260,27 @@ struct v4l2_hw_freq_seek { | |||
| 1213 | }; | 1260 | }; |
| 1214 | 1261 | ||
| 1215 | /* | 1262 | /* |
| 1263 | * R D S | ||
| 1264 | */ | ||
| 1265 | |||
| 1266 | struct v4l2_rds_data { | ||
| 1267 | __u8 lsb; | ||
| 1268 | __u8 msb; | ||
| 1269 | __u8 block; | ||
| 1270 | } __attribute__ ((packed)); | ||
| 1271 | |||
| 1272 | #define V4L2_RDS_BLOCK_MSK 0x7 | ||
| 1273 | #define V4L2_RDS_BLOCK_A 0 | ||
| 1274 | #define V4L2_RDS_BLOCK_B 1 | ||
| 1275 | #define V4L2_RDS_BLOCK_C 2 | ||
| 1276 | #define V4L2_RDS_BLOCK_D 3 | ||
| 1277 | #define V4L2_RDS_BLOCK_C_ALT 4 | ||
| 1278 | #define V4L2_RDS_BLOCK_INVALID 7 | ||
| 1279 | |||
| 1280 | #define V4L2_RDS_BLOCK_CORRECTED 0x40 | ||
| 1281 | #define V4L2_RDS_BLOCK_ERROR 0x80 | ||
| 1282 | |||
| 1283 | /* | ||
| 1216 | * A U D I O | 1284 | * A U D I O |
| 1217 | */ | 1285 | */ |
| 1218 | struct v4l2_audio { | 1286 | struct v4l2_audio { |
diff --git a/include/linux/virtio.h b/include/linux/virtio.h index 4fca4f5440ba..057a2e010758 100644 --- a/include/linux/virtio.h +++ b/include/linux/virtio.h | |||
| @@ -34,7 +34,7 @@ struct virtqueue { | |||
| 34 | * out_num: the number of sg readable by other side | 34 | * out_num: the number of sg readable by other side |
| 35 | * in_num: the number of sg which are writable (after readable ones) | 35 | * in_num: the number of sg which are writable (after readable ones) |
| 36 | * data: the token identifying the buffer. | 36 | * data: the token identifying the buffer. |
| 37 | * Returns 0 or an error. | 37 | * Returns remaining capacity of queue (sg segments) or a negative error. |
| 38 | * @kick: update after add_buf | 38 | * @kick: update after add_buf |
| 39 | * vq: the struct virtqueue | 39 | * vq: the struct virtqueue |
| 40 | * After one or more add_buf calls, invoke this to kick the other side. | 40 | * After one or more add_buf calls, invoke this to kick the other side. |
diff --git a/include/linux/virtio_9p.h b/include/linux/virtio_9p.h index b3c4a60ceeb3..095e10d148b4 100644 --- a/include/linux/virtio_9p.h +++ b/include/linux/virtio_9p.h | |||
| @@ -2,10 +2,9 @@ | |||
| 2 | #define _LINUX_VIRTIO_9P_H | 2 | #define _LINUX_VIRTIO_9P_H |
| 3 | /* This header is BSD licensed so anyone can use the definitions to implement | 3 | /* This header is BSD licensed so anyone can use the definitions to implement |
| 4 | * compatible drivers/servers. */ | 4 | * compatible drivers/servers. */ |
| 5 | #include <linux/virtio_ids.h> | ||
| 5 | #include <linux/virtio_config.h> | 6 | #include <linux/virtio_config.h> |
| 6 | 7 | ||
| 7 | /* The ID for virtio console */ | ||
| 8 | #define VIRTIO_ID_9P 9 | ||
| 9 | /* Maximum number of virtio channels per partition (1 for now) */ | 8 | /* Maximum number of virtio channels per partition (1 for now) */ |
| 10 | #define MAX_9P_CHAN 1 | 9 | #define MAX_9P_CHAN 1 |
| 11 | 10 | ||
diff --git a/include/linux/virtio_balloon.h b/include/linux/virtio_balloon.h index 8726ff77763e..1418f048cb34 100644 --- a/include/linux/virtio_balloon.h +++ b/include/linux/virtio_balloon.h | |||
| @@ -2,11 +2,9 @@ | |||
| 2 | #define _LINUX_VIRTIO_BALLOON_H | 2 | #define _LINUX_VIRTIO_BALLOON_H |
| 3 | /* This header is BSD licensed so anyone can use the definitions to implement | 3 | /* This header is BSD licensed so anyone can use the definitions to implement |
| 4 | * compatible drivers/servers. */ | 4 | * compatible drivers/servers. */ |
| 5 | #include <linux/virtio_ids.h> | ||
| 5 | #include <linux/virtio_config.h> | 6 | #include <linux/virtio_config.h> |
| 6 | 7 | ||
| 7 | /* The ID for virtio_balloon */ | ||
| 8 | #define VIRTIO_ID_BALLOON 5 | ||
| 9 | |||
| 10 | /* The feature bitmap for virtio balloon */ | 8 | /* The feature bitmap for virtio balloon */ |
| 11 | #define VIRTIO_BALLOON_F_MUST_TELL_HOST 0 /* Tell before reclaiming pages */ | 9 | #define VIRTIO_BALLOON_F_MUST_TELL_HOST 0 /* Tell before reclaiming pages */ |
| 12 | 10 | ||
diff --git a/include/linux/virtio_blk.h b/include/linux/virtio_blk.h index 8dab9f2b8832..fd294c56d571 100644 --- a/include/linux/virtio_blk.h +++ b/include/linux/virtio_blk.h | |||
| @@ -3,11 +3,9 @@ | |||
| 3 | /* This header is BSD licensed so anyone can use the definitions to implement | 3 | /* This header is BSD licensed so anyone can use the definitions to implement |
| 4 | * compatible drivers/servers. */ | 4 | * compatible drivers/servers. */ |
| 5 | #include <linux/types.h> | 5 | #include <linux/types.h> |
| 6 | #include <linux/virtio_ids.h> | ||
| 6 | #include <linux/virtio_config.h> | 7 | #include <linux/virtio_config.h> |
| 7 | 8 | ||
| 8 | /* The ID for virtio_block */ | ||
| 9 | #define VIRTIO_ID_BLOCK 2 | ||
| 10 | |||
| 11 | /* Feature bits */ | 9 | /* Feature bits */ |
| 12 | #define VIRTIO_BLK_F_BARRIER 0 /* Does host support barriers? */ | 10 | #define VIRTIO_BLK_F_BARRIER 0 /* Does host support barriers? */ |
| 13 | #define VIRTIO_BLK_F_SIZE_MAX 1 /* Indicates maximum segment size */ | 11 | #define VIRTIO_BLK_F_SIZE_MAX 1 /* Indicates maximum segment size */ |
| @@ -16,9 +14,7 @@ | |||
| 16 | #define VIRTIO_BLK_F_RO 5 /* Disk is read-only */ | 14 | #define VIRTIO_BLK_F_RO 5 /* Disk is read-only */ |
| 17 | #define VIRTIO_BLK_F_BLK_SIZE 6 /* Block size of disk is available*/ | 15 | #define VIRTIO_BLK_F_BLK_SIZE 6 /* Block size of disk is available*/ |
| 18 | #define VIRTIO_BLK_F_SCSI 7 /* Supports scsi command passthru */ | 16 | #define VIRTIO_BLK_F_SCSI 7 /* Supports scsi command passthru */ |
| 19 | #define VIRTIO_BLK_F_IDENTIFY 8 /* ATA IDENTIFY supported */ | 17 | #define VIRTIO_BLK_F_FLUSH 9 /* Cache flush command support */ |
| 20 | |||
| 21 | #define VIRTIO_BLK_ID_BYTES (sizeof(__u16[256])) /* IDENTIFY DATA */ | ||
| 22 | 18 | ||
| 23 | struct virtio_blk_config { | 19 | struct virtio_blk_config { |
| 24 | /* The capacity (in 512-byte sectors). */ | 20 | /* The capacity (in 512-byte sectors). */ |
| @@ -35,9 +31,19 @@ struct virtio_blk_config { | |||
| 35 | } geometry; | 31 | } geometry; |
| 36 | /* block size of device (if VIRTIO_BLK_F_BLK_SIZE) */ | 32 | /* block size of device (if VIRTIO_BLK_F_BLK_SIZE) */ |
| 37 | __u32 blk_size; | 33 | __u32 blk_size; |
| 38 | __u8 identify[VIRTIO_BLK_ID_BYTES]; | ||
| 39 | } __attribute__((packed)); | 34 | } __attribute__((packed)); |
| 40 | 35 | ||
| 36 | /* | ||
| 37 | * Command types | ||
| 38 | * | ||
| 39 | * Usage is a bit tricky as some bits are used as flags and some are not. | ||
| 40 | * | ||
| 41 | * Rules: | ||
| 42 | * VIRTIO_BLK_T_OUT may be combined with VIRTIO_BLK_T_SCSI_CMD or | ||
| 43 | * VIRTIO_BLK_T_BARRIER. VIRTIO_BLK_T_FLUSH is a command of its own | ||
| 44 | * and may not be combined with any of the other flags. | ||
| 45 | */ | ||
| 46 | |||
| 41 | /* These two define direction. */ | 47 | /* These two define direction. */ |
| 42 | #define VIRTIO_BLK_T_IN 0 | 48 | #define VIRTIO_BLK_T_IN 0 |
| 43 | #define VIRTIO_BLK_T_OUT 1 | 49 | #define VIRTIO_BLK_T_OUT 1 |
| @@ -45,6 +51,9 @@ struct virtio_blk_config { | |||
| 45 | /* This bit says it's a scsi command, not an actual read or write. */ | 51 | /* This bit says it's a scsi command, not an actual read or write. */ |
| 46 | #define VIRTIO_BLK_T_SCSI_CMD 2 | 52 | #define VIRTIO_BLK_T_SCSI_CMD 2 |
| 47 | 53 | ||
| 54 | /* Cache flush command */ | ||
| 55 | #define VIRTIO_BLK_T_FLUSH 4 | ||
| 56 | |||
| 48 | /* Barrier before this op. */ | 57 | /* Barrier before this op. */ |
| 49 | #define VIRTIO_BLK_T_BARRIER 0x80000000 | 58 | #define VIRTIO_BLK_T_BARRIER 0x80000000 |
| 50 | 59 | ||
diff --git a/include/linux/virtio_config.h b/include/linux/virtio_config.h index e547e3c8ee9a..0093dd7c1d6f 100644 --- a/include/linux/virtio_config.h +++ b/include/linux/virtio_config.h | |||
| @@ -109,8 +109,7 @@ static inline bool virtio_has_feature(const struct virtio_device *vdev, | |||
| 109 | unsigned int fbit) | 109 | unsigned int fbit) |
| 110 | { | 110 | { |
| 111 | /* Did you forget to fix assumptions on max features? */ | 111 | /* Did you forget to fix assumptions on max features? */ |
| 112 | if (__builtin_constant_p(fbit)) | 112 | MAYBE_BUILD_BUG_ON(fbit >= 32); |
| 113 | BUILD_BUG_ON(fbit >= 32); | ||
| 114 | 113 | ||
| 115 | if (fbit < VIRTIO_TRANSPORT_F_START) | 114 | if (fbit < VIRTIO_TRANSPORT_F_START) |
| 116 | virtio_check_driver_offered_feature(vdev, fbit); | 115 | virtio_check_driver_offered_feature(vdev, fbit); |
diff --git a/include/linux/virtio_console.h b/include/linux/virtio_console.h index dc161115ae35..fe885174cc1f 100644 --- a/include/linux/virtio_console.h +++ b/include/linux/virtio_console.h | |||
| @@ -1,13 +1,11 @@ | |||
| 1 | #ifndef _LINUX_VIRTIO_CONSOLE_H | 1 | #ifndef _LINUX_VIRTIO_CONSOLE_H |
| 2 | #define _LINUX_VIRTIO_CONSOLE_H | 2 | #define _LINUX_VIRTIO_CONSOLE_H |
| 3 | #include <linux/types.h> | 3 | #include <linux/types.h> |
| 4 | #include <linux/virtio_ids.h> | ||
| 4 | #include <linux/virtio_config.h> | 5 | #include <linux/virtio_config.h> |
| 5 | /* This header, excluding the #ifdef __KERNEL__ part, is BSD licensed so | 6 | /* This header, excluding the #ifdef __KERNEL__ part, is BSD licensed so |
| 6 | * anyone can use the definitions to implement compatible drivers/servers. */ | 7 | * anyone can use the definitions to implement compatible drivers/servers. */ |
| 7 | 8 | ||
| 8 | /* The ID for virtio console */ | ||
| 9 | #define VIRTIO_ID_CONSOLE 3 | ||
| 10 | |||
| 11 | /* Feature bits */ | 9 | /* Feature bits */ |
| 12 | #define VIRTIO_CONSOLE_F_SIZE 0 /* Does host provide console size? */ | 10 | #define VIRTIO_CONSOLE_F_SIZE 0 /* Does host provide console size? */ |
| 13 | 11 | ||
diff --git a/include/linux/virtio_ids.h b/include/linux/virtio_ids.h new file mode 100644 index 000000000000..06660c0a78d7 --- /dev/null +++ b/include/linux/virtio_ids.h | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | #ifndef _LINUX_VIRTIO_IDS_H | ||
| 2 | #define _LINUX_VIRTIO_IDS_H | ||
| 3 | /* | ||
| 4 | * Virtio IDs | ||
| 5 | * | ||
| 6 | * This header is BSD licensed so anyone can use the definitions to implement | ||
| 7 | * compatible drivers/servers. | ||
| 8 | */ | ||
| 9 | |||
| 10 | #define VIRTIO_ID_NET 1 /* virtio net */ | ||
| 11 | #define VIRTIO_ID_BLOCK 2 /* virtio block */ | ||
| 12 | #define VIRTIO_ID_CONSOLE 3 /* virtio console */ | ||
| 13 | #define VIRTIO_ID_RNG 4 /* virtio ring */ | ||
| 14 | #define VIRTIO_ID_BALLOON 5 /* virtio balloon */ | ||
| 15 | #define VIRTIO_ID_9P 9 /* 9p virtio console */ | ||
| 16 | |||
| 17 | #endif /* _LINUX_VIRTIO_IDS_H */ | ||
diff --git a/include/linux/virtio_net.h b/include/linux/virtio_net.h index d8dd539c9f48..085e42298ce5 100644 --- a/include/linux/virtio_net.h +++ b/include/linux/virtio_net.h | |||
| @@ -3,12 +3,10 @@ | |||
| 3 | /* This header is BSD licensed so anyone can use the definitions to implement | 3 | /* This header is BSD licensed so anyone can use the definitions to implement |
| 4 | * compatible drivers/servers. */ | 4 | * compatible drivers/servers. */ |
| 5 | #include <linux/types.h> | 5 | #include <linux/types.h> |
| 6 | #include <linux/virtio_ids.h> | ||
| 6 | #include <linux/virtio_config.h> | 7 | #include <linux/virtio_config.h> |
| 7 | #include <linux/if_ether.h> | 8 | #include <linux/if_ether.h> |
| 8 | 9 | ||
| 9 | /* The ID for virtio_net */ | ||
| 10 | #define VIRTIO_ID_NET 1 | ||
| 11 | |||
| 12 | /* The feature bitmap for virtio net */ | 10 | /* The feature bitmap for virtio net */ |
| 13 | #define VIRTIO_NET_F_CSUM 0 /* Host handles pkts w/ partial csum */ | 11 | #define VIRTIO_NET_F_CSUM 0 /* Host handles pkts w/ partial csum */ |
| 14 | #define VIRTIO_NET_F_GUEST_CSUM 1 /* Guest handles pkts w/ partial csum */ | 12 | #define VIRTIO_NET_F_GUEST_CSUM 1 /* Guest handles pkts w/ partial csum */ |
diff --git a/include/linux/virtio_rng.h b/include/linux/virtio_rng.h index 1a85dab8a940..c4d5de896f0c 100644 --- a/include/linux/virtio_rng.h +++ b/include/linux/virtio_rng.h | |||
| @@ -2,9 +2,7 @@ | |||
| 2 | #define _LINUX_VIRTIO_RNG_H | 2 | #define _LINUX_VIRTIO_RNG_H |
| 3 | /* This header is BSD licensed so anyone can use the definitions to implement | 3 | /* This header is BSD licensed so anyone can use the definitions to implement |
| 4 | * compatible drivers/servers. */ | 4 | * compatible drivers/servers. */ |
| 5 | #include <linux/virtio_ids.h> | ||
| 5 | #include <linux/virtio_config.h> | 6 | #include <linux/virtio_config.h> |
| 6 | 7 | ||
| 7 | /* The ID for virtio_rng */ | ||
| 8 | #define VIRTIO_ID_RNG 4 | ||
| 9 | |||
| 10 | #endif /* _LINUX_VIRTIO_RNG_H */ | 8 | #endif /* _LINUX_VIRTIO_RNG_H */ |
diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h index a43ebec3a7b9..227c2a585e4f 100644 --- a/include/linux/vmalloc.h +++ b/include/linux/vmalloc.h | |||
| @@ -115,4 +115,10 @@ extern rwlock_t vmlist_lock; | |||
| 115 | extern struct vm_struct *vmlist; | 115 | extern struct vm_struct *vmlist; |
| 116 | extern __init void vm_area_register_early(struct vm_struct *vm, size_t align); | 116 | extern __init void vm_area_register_early(struct vm_struct *vm, size_t align); |
| 117 | 117 | ||
| 118 | struct vm_struct **pcpu_get_vm_areas(const unsigned long *offsets, | ||
| 119 | const size_t *sizes, int nr_vms, | ||
| 120 | size_t align, gfp_t gfp_mask); | ||
| 121 | |||
| 122 | void pcpu_free_vm_areas(struct vm_struct **vms, int nr_vms); | ||
| 123 | |||
| 118 | #endif /* _LINUX_VMALLOC_H */ | 124 | #endif /* _LINUX_VMALLOC_H */ |
diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h index 81a97cf8f0a0..2d0f222388a8 100644 --- a/include/linux/vmstat.h +++ b/include/linux/vmstat.h | |||
| @@ -166,15 +166,8 @@ static inline unsigned long zone_page_state(struct zone *zone, | |||
| 166 | return x; | 166 | return x; |
| 167 | } | 167 | } |
| 168 | 168 | ||
| 169 | extern unsigned long global_lru_pages(void); | 169 | extern unsigned long global_reclaimable_pages(void); |
| 170 | 170 | extern unsigned long zone_reclaimable_pages(struct zone *zone); | |
| 171 | static inline unsigned long zone_lru_pages(struct zone *zone) | ||
| 172 | { | ||
| 173 | return (zone_page_state(zone, NR_ACTIVE_ANON) | ||
| 174 | + zone_page_state(zone, NR_ACTIVE_FILE) | ||
| 175 | + zone_page_state(zone, NR_INACTIVE_ANON) | ||
| 176 | + zone_page_state(zone, NR_INACTIVE_FILE)); | ||
| 177 | } | ||
| 178 | 171 | ||
| 179 | #ifdef CONFIG_NUMA | 172 | #ifdef CONFIG_NUMA |
| 180 | /* | 173 | /* |
| @@ -210,11 +203,6 @@ extern void zone_statistics(struct zone *, struct zone *); | |||
| 210 | 203 | ||
| 211 | #endif /* CONFIG_NUMA */ | 204 | #endif /* CONFIG_NUMA */ |
| 212 | 205 | ||
| 213 | #define __add_zone_page_state(__z, __i, __d) \ | ||
| 214 | __mod_zone_page_state(__z, __i, __d) | ||
| 215 | #define __sub_zone_page_state(__z, __i, __d) \ | ||
| 216 | __mod_zone_page_state(__z, __i,-(__d)) | ||
| 217 | |||
| 218 | #define add_zone_page_state(__z, __i, __d) mod_zone_page_state(__z, __i, __d) | 206 | #define add_zone_page_state(__z, __i, __d) mod_zone_page_state(__z, __i, __d) |
| 219 | #define sub_zone_page_state(__z, __i, __d) mod_zone_page_state(__z, __i, -(__d)) | 207 | #define sub_zone_page_state(__z, __i, __d) mod_zone_page_state(__z, __i, -(__d)) |
| 220 | 208 | ||
diff --git a/include/linux/vt.h b/include/linux/vt.h index 02c1c0288770..7ffa11f06232 100644 --- a/include/linux/vt.h +++ b/include/linux/vt.h | |||
| @@ -1,17 +1,6 @@ | |||
| 1 | #ifndef _LINUX_VT_H | 1 | #ifndef _LINUX_VT_H |
| 2 | #define _LINUX_VT_H | 2 | #define _LINUX_VT_H |
| 3 | 3 | ||
| 4 | #ifdef __KERNEL__ | ||
| 5 | struct notifier_block; | ||
| 6 | |||
| 7 | struct vt_notifier_param { | ||
| 8 | struct vc_data *vc; /* VC on which the update happened */ | ||
| 9 | unsigned int c; /* Printed char */ | ||
| 10 | }; | ||
| 11 | |||
| 12 | extern int register_vt_notifier(struct notifier_block *nb); | ||
| 13 | extern int unregister_vt_notifier(struct notifier_block *nb); | ||
| 14 | #endif | ||
| 15 | 4 | ||
| 16 | /* | 5 | /* |
| 17 | * These constants are also useful for user-level apps (e.g., VC | 6 | * These constants are also useful for user-level apps (e.g., VC |
| @@ -74,4 +63,25 @@ struct vt_consize { | |||
| 74 | #define VT_UNLOCKSWITCH 0x560C /* allow vt switching */ | 63 | #define VT_UNLOCKSWITCH 0x560C /* allow vt switching */ |
| 75 | #define VT_GETHIFONTMASK 0x560D /* return hi font mask */ | 64 | #define VT_GETHIFONTMASK 0x560D /* return hi font mask */ |
| 76 | 65 | ||
| 66 | struct vt_event { | ||
| 67 | unsigned int event; | ||
| 68 | #define VT_EVENT_SWITCH 0x0001 /* Console switch */ | ||
| 69 | #define VT_EVENT_BLANK 0x0002 /* Screen blank */ | ||
| 70 | #define VT_EVENT_UNBLANK 0x0004 /* Screen unblank */ | ||
| 71 | #define VT_EVENT_RESIZE 0x0008 /* Resize display */ | ||
| 72 | #define VT_MAX_EVENT 0x000F | ||
| 73 | unsigned int oldev; /* Old console */ | ||
| 74 | unsigned int newev; /* New console (if changing) */ | ||
| 75 | unsigned int pad[4]; /* Padding for expansion */ | ||
| 76 | }; | ||
| 77 | |||
| 78 | #define VT_WAITEVENT 0x560E /* Wait for an event */ | ||
| 79 | |||
| 80 | struct vt_setactivate { | ||
| 81 | unsigned int console; | ||
| 82 | struct vt_mode mode; | ||
| 83 | }; | ||
| 84 | |||
| 85 | #define VT_SETACTIVATE 0x560F /* Activate and set the mode of a console */ | ||
| 86 | |||
| 77 | #endif /* _LINUX_VT_H */ | 87 | #endif /* _LINUX_VT_H */ |
diff --git a/include/linux/vt_kern.h b/include/linux/vt_kern.h index 2f1113467f70..c0c4e1103a73 100644 --- a/include/linux/vt_kern.h +++ b/include/linux/vt_kern.h | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #include <linux/console_struct.h> | 13 | #include <linux/console_struct.h> |
| 14 | #include <linux/mm.h> | 14 | #include <linux/mm.h> |
| 15 | #include <linux/consolemap.h> | 15 | #include <linux/consolemap.h> |
| 16 | #include <linux/notifier.h> | ||
| 16 | 17 | ||
| 17 | /* | 18 | /* |
| 18 | * Presently, a lot of graphics programs do not restore the contents of | 19 | * Presently, a lot of graphics programs do not restore the contents of |
| @@ -91,7 +92,8 @@ int con_copy_unimap(struct vc_data *dst_vc, struct vc_data *src_vc); | |||
| 91 | #endif | 92 | #endif |
| 92 | 93 | ||
| 93 | /* vt.c */ | 94 | /* vt.c */ |
| 94 | int vt_waitactive(int vt); | 95 | void vt_event_post(unsigned int event, unsigned int old, unsigned int new); |
| 96 | int vt_waitactive(int n); | ||
| 95 | void change_console(struct vc_data *new_vc); | 97 | void change_console(struct vc_data *new_vc); |
| 96 | void reset_vc(struct vc_data *vc); | 98 | void reset_vc(struct vc_data *vc); |
| 97 | extern int unbind_con_driver(const struct consw *csw, int first, int last, | 99 | extern int unbind_con_driver(const struct consw *csw, int first, int last, |
| @@ -116,4 +118,16 @@ struct vt_spawn_console { | |||
| 116 | }; | 118 | }; |
| 117 | extern struct vt_spawn_console vt_spawn_con; | 119 | extern struct vt_spawn_console vt_spawn_con; |
| 118 | 120 | ||
| 121 | extern int vt_move_to_console(unsigned int vt, int alloc); | ||
| 122 | |||
| 123 | /* Interfaces for VC notification of character events (for accessibility etc) */ | ||
| 124 | |||
| 125 | struct vt_notifier_param { | ||
| 126 | struct vc_data *vc; /* VC on which the update happened */ | ||
| 127 | unsigned int c; /* Printed char */ | ||
| 128 | }; | ||
| 129 | |||
| 130 | extern int register_vt_notifier(struct notifier_block *nb); | ||
| 131 | extern int unregister_vt_notifier(struct notifier_block *nb); | ||
| 132 | |||
| 119 | #endif /* _VT_KERN_H */ | 133 | #endif /* _VT_KERN_H */ |
diff --git a/include/linux/wait.h b/include/linux/wait.h index cf3c2f5dba51..a48e16b77d5e 100644 --- a/include/linux/wait.h +++ b/include/linux/wait.h | |||
| @@ -26,8 +26,8 @@ | |||
| 26 | #include <asm/current.h> | 26 | #include <asm/current.h> |
| 27 | 27 | ||
| 28 | typedef struct __wait_queue wait_queue_t; | 28 | typedef struct __wait_queue wait_queue_t; |
| 29 | typedef int (*wait_queue_func_t)(wait_queue_t *wait, unsigned mode, int sync, void *key); | 29 | typedef int (*wait_queue_func_t)(wait_queue_t *wait, unsigned mode, int flags, void *key); |
| 30 | int default_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key); | 30 | int default_wake_function(wait_queue_t *wait, unsigned mode, int flags, void *key); |
| 31 | 31 | ||
| 32 | struct __wait_queue { | 32 | struct __wait_queue { |
| 33 | unsigned int flags; | 33 | unsigned int flags; |
diff --git a/include/linux/wimax/debug.h b/include/linux/wimax/debug.h index c703e0340423..db8096e88533 100644 --- a/include/linux/wimax/debug.h +++ b/include/linux/wimax/debug.h | |||
| @@ -450,4 +450,76 @@ do { \ | |||
| 450 | }) | 450 | }) |
| 451 | 451 | ||
| 452 | 452 | ||
| 453 | static inline | ||
| 454 | void d_submodule_set(struct d_level *d_level, size_t d_level_size, | ||
| 455 | const char *submodule, u8 level, const char *tag) | ||
| 456 | { | ||
| 457 | struct d_level *itr, *top; | ||
| 458 | int index = -1; | ||
| 459 | |||
| 460 | for (itr = d_level, top = itr + d_level_size; itr < top; itr++) { | ||
| 461 | index++; | ||
| 462 | if (itr->name == NULL) { | ||
| 463 | printk(KERN_ERR "%s: itr->name NULL?? (%p, #%d)\n", | ||
| 464 | tag, itr, index); | ||
| 465 | continue; | ||
| 466 | } | ||
| 467 | if (!strcmp(itr->name, submodule)) { | ||
| 468 | itr->level = level; | ||
| 469 | return; | ||
| 470 | } | ||
| 471 | } | ||
| 472 | printk(KERN_ERR "%s: unknown submodule %s\n", tag, submodule); | ||
| 473 | } | ||
| 474 | |||
| 475 | |||
| 476 | /** | ||
| 477 | * d_parse_params - Parse a string with debug parameters from the | ||
| 478 | * command line | ||
| 479 | * | ||
| 480 | * @d_level: level structure (D_LEVEL) | ||
| 481 | * @d_level_size: number of items in the level structure | ||
| 482 | * (D_LEVEL_SIZE). | ||
| 483 | * @_params: string with the parameters; this is a space (not tab!) | ||
| 484 | * separated list of NAME:VALUE, where value is the debug level | ||
| 485 | * and NAME is the name of the submodule. | ||
| 486 | * @tag: string for error messages (example: MODULE.ARGNAME). | ||
| 487 | */ | ||
| 488 | static inline | ||
| 489 | void d_parse_params(struct d_level *d_level, size_t d_level_size, | ||
| 490 | const char *_params, const char *tag) | ||
| 491 | { | ||
| 492 | char submodule[130], *params, *params_orig, *token, *colon; | ||
| 493 | unsigned level, tokens; | ||
| 494 | |||
| 495 | if (_params == NULL) | ||
| 496 | return; | ||
| 497 | params_orig = kstrdup(_params, GFP_KERNEL); | ||
| 498 | params = params_orig; | ||
| 499 | while (1) { | ||
| 500 | token = strsep(¶ms, " "); | ||
| 501 | if (token == NULL) | ||
| 502 | break; | ||
| 503 | if (*token == '\0') /* eat joint spaces */ | ||
| 504 | continue; | ||
| 505 | /* kernel's sscanf %s eats until whitespace, so we | ||
| 506 | * replace : by \n so it doesn't get eaten later by | ||
| 507 | * strsep */ | ||
| 508 | colon = strchr(token, ':'); | ||
| 509 | if (colon != NULL) | ||
| 510 | *colon = '\n'; | ||
| 511 | tokens = sscanf(token, "%s\n%u", submodule, &level); | ||
| 512 | if (colon != NULL) | ||
| 513 | *colon = ':'; /* set back, for error messages */ | ||
| 514 | if (tokens == 2) | ||
| 515 | d_submodule_set(d_level, d_level_size, | ||
| 516 | submodule, level, tag); | ||
| 517 | else | ||
| 518 | printk(KERN_ERR "%s: can't parse '%s' as a " | ||
| 519 | "SUBMODULE:LEVEL (%d tokens)\n", | ||
| 520 | tag, token, tokens); | ||
| 521 | } | ||
| 522 | kfree(params_orig); | ||
| 523 | } | ||
| 524 | |||
| 453 | #endif /* #ifndef __debug__h__ */ | 525 | #endif /* #ifndef __debug__h__ */ |
diff --git a/include/linux/wimax/i2400m.h b/include/linux/wimax/i2400m.h index 433693ef2bb0..62d356153565 100644 --- a/include/linux/wimax/i2400m.h +++ b/include/linux/wimax/i2400m.h | |||
| @@ -138,7 +138,7 @@ struct i2400m_bcf_hdr { | |||
| 138 | __le32 module_id; | 138 | __le32 module_id; |
| 139 | __le32 module_vendor; | 139 | __le32 module_vendor; |
| 140 | __le32 date; /* BCD YYYMMDD */ | 140 | __le32 date; /* BCD YYYMMDD */ |
| 141 | __le32 size; | 141 | __le32 size; /* in dwords */ |
| 142 | __le32 key_size; /* in dwords */ | 142 | __le32 key_size; /* in dwords */ |
| 143 | __le32 modulus_size; /* in dwords */ | 143 | __le32 modulus_size; /* in dwords */ |
| 144 | __le32 exponent_size; /* in dwords */ | 144 | __le32 exponent_size; /* in dwords */ |
| @@ -168,16 +168,6 @@ enum i2400m_brh { | |||
| 168 | }; | 168 | }; |
| 169 | 169 | ||
| 170 | 170 | ||
| 171 | /* Constants for bcf->module_id */ | ||
| 172 | enum i2400m_bcf_mod_id { | ||
| 173 | /* Firmware file carries its own pokes -- pokes are a set of | ||
| 174 | * magical values that have to be written in certain memory | ||
| 175 | * addresses to get the device up and ready for firmware | ||
| 176 | * download when it is in non-signed boot mode. */ | ||
| 177 | I2400M_BCF_MOD_ID_POKES = 0x000000001, | ||
| 178 | }; | ||
| 179 | |||
| 180 | |||
| 181 | /** | 171 | /** |
| 182 | * i2400m_bootrom_header - Header for a boot-mode command | 172 | * i2400m_bootrom_header - Header for a boot-mode command |
| 183 | * | 173 | * |
| @@ -276,6 +266,7 @@ enum { | |||
| 276 | I2400M_WARM_RESET_BARKER = 0x50f750f7, | 266 | I2400M_WARM_RESET_BARKER = 0x50f750f7, |
| 277 | I2400M_NBOOT_BARKER = 0xdeadbeef, | 267 | I2400M_NBOOT_BARKER = 0xdeadbeef, |
| 278 | I2400M_SBOOT_BARKER = 0x0ff1c1a1, | 268 | I2400M_SBOOT_BARKER = 0x0ff1c1a1, |
| 269 | I2400M_SBOOT_BARKER_6050 = 0x80000001, | ||
| 279 | I2400M_ACK_BARKER = 0xfeedbabe, | 270 | I2400M_ACK_BARKER = 0xfeedbabe, |
| 280 | I2400M_D2H_MSG_BARKER = 0xbeefbabe, | 271 | I2400M_D2H_MSG_BARKER = 0xbeefbabe, |
| 281 | }; | 272 | }; |
diff --git a/include/linux/wireless.h b/include/linux/wireless.h index cb24204851f7..5b4c6c772a9b 100644 --- a/include/linux/wireless.h +++ b/include/linux/wireless.h | |||
| @@ -1132,6 +1132,14 @@ struct __compat_iw_event { | |||
| 1132 | }; | 1132 | }; |
| 1133 | #define IW_EV_COMPAT_LCP_LEN offsetof(struct __compat_iw_event, pointer) | 1133 | #define IW_EV_COMPAT_LCP_LEN offsetof(struct __compat_iw_event, pointer) |
| 1134 | #define IW_EV_COMPAT_POINT_OFF offsetof(struct compat_iw_point, length) | 1134 | #define IW_EV_COMPAT_POINT_OFF offsetof(struct compat_iw_point, length) |
| 1135 | |||
| 1136 | /* Size of the various events for compat */ | ||
| 1137 | #define IW_EV_COMPAT_CHAR_LEN (IW_EV_COMPAT_LCP_LEN + IFNAMSIZ) | ||
| 1138 | #define IW_EV_COMPAT_UINT_LEN (IW_EV_COMPAT_LCP_LEN + sizeof(__u32)) | ||
| 1139 | #define IW_EV_COMPAT_FREQ_LEN (IW_EV_COMPAT_LCP_LEN + sizeof(struct iw_freq)) | ||
| 1140 | #define IW_EV_COMPAT_PARAM_LEN (IW_EV_COMPAT_LCP_LEN + sizeof(struct iw_param)) | ||
| 1141 | #define IW_EV_COMPAT_ADDR_LEN (IW_EV_COMPAT_LCP_LEN + sizeof(struct sockaddr)) | ||
| 1142 | #define IW_EV_COMPAT_QUAL_LEN (IW_EV_COMPAT_LCP_LEN + sizeof(struct iw_quality)) | ||
| 1135 | #define IW_EV_COMPAT_POINT_LEN \ | 1143 | #define IW_EV_COMPAT_POINT_LEN \ |
| 1136 | (IW_EV_COMPAT_LCP_LEN + sizeof(struct compat_iw_point) - \ | 1144 | (IW_EV_COMPAT_LCP_LEN + sizeof(struct compat_iw_point) - \ |
| 1137 | IW_EV_COMPAT_POINT_OFF) | 1145 | IW_EV_COMPAT_POINT_OFF) |
diff --git a/include/linux/wm97xx.h b/include/linux/wm97xx.h index 6f69968eab24..38e8c4d9289e 100644 --- a/include/linux/wm97xx.h +++ b/include/linux/wm97xx.h | |||
| @@ -16,6 +16,12 @@ | |||
| 16 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
| 17 | 17 | ||
| 18 | /* | 18 | /* |
| 19 | * WM97xx variants | ||
| 20 | */ | ||
| 21 | #define WM97xx_GENERIC 0x0000 | ||
| 22 | #define WM97xx_WM1613 0x1613 | ||
| 23 | |||
| 24 | /* | ||
| 19 | * WM97xx AC97 Touchscreen registers | 25 | * WM97xx AC97 Touchscreen registers |
| 20 | */ | 26 | */ |
| 21 | #define AC97_WM97XX_DIGITISER1 0x76 | 27 | #define AC97_WM97XX_DIGITISER1 0x76 |
| @@ -283,9 +289,28 @@ struct wm97xx { | |||
| 283 | unsigned pen_is_down:1; /* Pen is down */ | 289 | unsigned pen_is_down:1; /* Pen is down */ |
| 284 | unsigned aux_waiting:1; /* aux measurement waiting */ | 290 | unsigned aux_waiting:1; /* aux measurement waiting */ |
| 285 | unsigned pen_probably_down:1; /* used in polling mode */ | 291 | unsigned pen_probably_down:1; /* used in polling mode */ |
| 292 | u16 variant; /* WM97xx chip variant */ | ||
| 286 | u16 suspend_mode; /* PRP in suspend mode */ | 293 | u16 suspend_mode; /* PRP in suspend mode */ |
| 287 | }; | 294 | }; |
| 288 | 295 | ||
| 296 | struct wm97xx_batt_pdata { | ||
| 297 | int batt_aux; | ||
| 298 | int temp_aux; | ||
| 299 | int charge_gpio; | ||
| 300 | int min_voltage; | ||
| 301 | int max_voltage; | ||
| 302 | int batt_div; | ||
| 303 | int batt_mult; | ||
| 304 | int temp_div; | ||
| 305 | int temp_mult; | ||
| 306 | int batt_tech; | ||
| 307 | char *batt_name; | ||
| 308 | }; | ||
| 309 | |||
| 310 | struct wm97xx_pdata { | ||
| 311 | struct wm97xx_batt_pdata *batt_pdata; /* battery data */ | ||
| 312 | }; | ||
| 313 | |||
| 289 | /* | 314 | /* |
| 290 | * Codec GPIO access (not supported on WM9705) | 315 | * Codec GPIO access (not supported on WM9705) |
| 291 | * This can be used to set/get codec GPIO and Virtual GPIO status. | 316 | * This can be used to set/get codec GPIO and Virtual GPIO status. |
diff --git a/include/linux/wm97xx_batt.h b/include/linux/wm97xx_batt.h index 9681d1ab0e4f..a1d6419c2ff8 100644 --- a/include/linux/wm97xx_batt.h +++ b/include/linux/wm97xx_batt.h | |||
| @@ -3,22 +3,12 @@ | |||
| 3 | 3 | ||
| 4 | #include <linux/wm97xx.h> | 4 | #include <linux/wm97xx.h> |
| 5 | 5 | ||
| 6 | struct wm97xx_batt_info { | 6 | #warning This file will be removed soon, use wm97xx.h instead! |
| 7 | int batt_aux; | 7 | |
| 8 | int temp_aux; | 8 | #define wm97xx_batt_info wm97xx_batt_pdata |
| 9 | int charge_gpio; | ||
| 10 | int min_voltage; | ||
| 11 | int max_voltage; | ||
| 12 | int batt_div; | ||
| 13 | int batt_mult; | ||
| 14 | int temp_div; | ||
| 15 | int temp_mult; | ||
| 16 | int batt_tech; | ||
| 17 | char *batt_name; | ||
| 18 | }; | ||
| 19 | 9 | ||
| 20 | #ifdef CONFIG_BATTERY_WM97XX | 10 | #ifdef CONFIG_BATTERY_WM97XX |
| 21 | void __init wm97xx_bat_set_pdata(struct wm97xx_batt_info *data); | 11 | void wm97xx_bat_set_pdata(struct wm97xx_batt_info *data); |
| 22 | #else | 12 | #else |
| 23 | static inline void wm97xx_bat_set_pdata(struct wm97xx_batt_info *data) {} | 13 | static inline void wm97xx_bat_set_pdata(struct wm97xx_batt_info *data) {} |
| 24 | #endif | 14 | #endif |
diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h index 6273fa97b527..cf24c20de9e4 100644 --- a/include/linux/workqueue.h +++ b/include/linux/workqueue.h | |||
| @@ -94,7 +94,7 @@ struct execute_work { | |||
| 94 | /* | 94 | /* |
| 95 | * initialize all of a work item in one go | 95 | * initialize all of a work item in one go |
| 96 | * | 96 | * |
| 97 | * NOTE! No point in using "atomic_long_set()": useing a direct | 97 | * NOTE! No point in using "atomic_long_set()": using a direct |
| 98 | * assignment of the work data initializer allows the compiler | 98 | * assignment of the work data initializer allows the compiler |
| 99 | * to generate better code. | 99 | * to generate better code. |
| 100 | */ | 100 | */ |
| @@ -207,6 +207,7 @@ extern int queue_delayed_work_on(int cpu, struct workqueue_struct *wq, | |||
| 207 | 207 | ||
| 208 | extern void flush_workqueue(struct workqueue_struct *wq); | 208 | extern void flush_workqueue(struct workqueue_struct *wq); |
| 209 | extern void flush_scheduled_work(void); | 209 | extern void flush_scheduled_work(void); |
| 210 | extern void flush_delayed_work(struct delayed_work *work); | ||
| 210 | 211 | ||
| 211 | extern int schedule_work(struct work_struct *work); | 212 | extern int schedule_work(struct work_struct *work); |
| 212 | extern int schedule_work_on(int cpu, struct work_struct *work); | 213 | extern int schedule_work_on(int cpu, struct work_struct *work); |
diff --git a/include/linux/writeback.h b/include/linux/writeback.h index 3224820c8514..66ebddcff664 100644 --- a/include/linux/writeback.h +++ b/include/linux/writeback.h | |||
| @@ -14,17 +14,6 @@ extern struct list_head inode_in_use; | |||
| 14 | extern struct list_head inode_unused; | 14 | extern struct list_head inode_unused; |
| 15 | 15 | ||
| 16 | /* | 16 | /* |
| 17 | * Yes, writeback.h requires sched.h | ||
| 18 | * No, sched.h is not included from here. | ||
| 19 | */ | ||
| 20 | static inline int task_is_pdflush(struct task_struct *task) | ||
| 21 | { | ||
| 22 | return task->flags & PF_FLUSHER; | ||
| 23 | } | ||
| 24 | |||
| 25 | #define current_is_pdflush() task_is_pdflush(current) | ||
| 26 | |||
| 27 | /* | ||
| 28 | * fs/fs-writeback.c | 17 | * fs/fs-writeback.c |
| 29 | */ | 18 | */ |
| 30 | enum writeback_sync_modes { | 19 | enum writeback_sync_modes { |
| @@ -40,6 +29,8 @@ enum writeback_sync_modes { | |||
| 40 | struct writeback_control { | 29 | struct writeback_control { |
| 41 | struct backing_dev_info *bdi; /* If !NULL, only write back this | 30 | struct backing_dev_info *bdi; /* If !NULL, only write back this |
| 42 | queue */ | 31 | queue */ |
| 32 | struct super_block *sb; /* if !NULL, only write inodes from | ||
| 33 | this super_block */ | ||
| 43 | enum writeback_sync_modes sync_mode; | 34 | enum writeback_sync_modes sync_mode; |
| 44 | unsigned long *older_than_this; /* If !NULL, only write back inodes | 35 | unsigned long *older_than_this; /* If !NULL, only write back inodes |
| 45 | older than this */ | 36 | older than this */ |
| @@ -59,7 +50,6 @@ struct writeback_control { | |||
| 59 | unsigned encountered_congestion:1; /* An output: a queue is full */ | 50 | unsigned encountered_congestion:1; /* An output: a queue is full */ |
| 60 | unsigned for_kupdate:1; /* A kupdate writeback */ | 51 | unsigned for_kupdate:1; /* A kupdate writeback */ |
| 61 | unsigned for_reclaim:1; /* Invoked from the page allocator */ | 52 | unsigned for_reclaim:1; /* Invoked from the page allocator */ |
| 62 | unsigned for_writepages:1; /* This is a writepages() call */ | ||
| 63 | unsigned range_cyclic:1; /* range_start is cyclic */ | 53 | unsigned range_cyclic:1; /* range_start is cyclic */ |
| 64 | unsigned more_io:1; /* more io to be dispatched */ | 54 | unsigned more_io:1; /* more io to be dispatched */ |
| 65 | /* | 55 | /* |
| @@ -76,9 +66,13 @@ struct writeback_control { | |||
| 76 | /* | 66 | /* |
| 77 | * fs/fs-writeback.c | 67 | * fs/fs-writeback.c |
| 78 | */ | 68 | */ |
| 79 | void writeback_inodes(struct writeback_control *wbc); | 69 | struct bdi_writeback; |
| 80 | int inode_wait(void *); | 70 | int inode_wait(void *); |
| 81 | void sync_inodes_sb(struct super_block *, int wait); | 71 | void writeback_inodes_sb(struct super_block *); |
| 72 | void sync_inodes_sb(struct super_block *); | ||
| 73 | void writeback_inodes_wbc(struct writeback_control *wbc); | ||
| 74 | long wb_do_writeback(struct bdi_writeback *wb, int force_wait); | ||
| 75 | void wakeup_flusher_threads(long nr_pages); | ||
| 82 | 76 | ||
| 83 | /* writeback.h requires fs.h; it, too, is not included from here. */ | 77 | /* writeback.h requires fs.h; it, too, is not included from here. */ |
| 84 | static inline void wait_on_inode(struct inode *inode) | 78 | static inline void wait_on_inode(struct inode *inode) |
| @@ -98,7 +92,6 @@ static inline void inode_sync_wait(struct inode *inode) | |||
| 98 | /* | 92 | /* |
| 99 | * mm/page-writeback.c | 93 | * mm/page-writeback.c |
| 100 | */ | 94 | */ |
| 101 | int wakeup_pdflush(long nr_pages); | ||
| 102 | void laptop_io_completion(void); | 95 | void laptop_io_completion(void); |
| 103 | void laptop_sync_completion(void); | 96 | void laptop_sync_completion(void); |
| 104 | void throttle_vm_writeout(gfp_t gfp_mask); | 97 | void throttle_vm_writeout(gfp_t gfp_mask); |
| @@ -117,21 +110,20 @@ extern int laptop_mode; | |||
| 117 | extern unsigned long determine_dirtyable_memory(void); | 110 | extern unsigned long determine_dirtyable_memory(void); |
| 118 | 111 | ||
| 119 | extern int dirty_background_ratio_handler(struct ctl_table *table, int write, | 112 | extern int dirty_background_ratio_handler(struct ctl_table *table, int write, |
| 120 | struct file *filp, void __user *buffer, size_t *lenp, | 113 | void __user *buffer, size_t *lenp, |
| 121 | loff_t *ppos); | 114 | loff_t *ppos); |
| 122 | extern int dirty_background_bytes_handler(struct ctl_table *table, int write, | 115 | extern int dirty_background_bytes_handler(struct ctl_table *table, int write, |
| 123 | struct file *filp, void __user *buffer, size_t *lenp, | 116 | void __user *buffer, size_t *lenp, |
| 124 | loff_t *ppos); | 117 | loff_t *ppos); |
| 125 | extern int dirty_ratio_handler(struct ctl_table *table, int write, | 118 | extern int dirty_ratio_handler(struct ctl_table *table, int write, |
| 126 | struct file *filp, void __user *buffer, size_t *lenp, | 119 | void __user *buffer, size_t *lenp, |
| 127 | loff_t *ppos); | 120 | loff_t *ppos); |
| 128 | extern int dirty_bytes_handler(struct ctl_table *table, int write, | 121 | extern int dirty_bytes_handler(struct ctl_table *table, int write, |
| 129 | struct file *filp, void __user *buffer, size_t *lenp, | 122 | void __user *buffer, size_t *lenp, |
| 130 | loff_t *ppos); | 123 | loff_t *ppos); |
| 131 | 124 | ||
| 132 | struct ctl_table; | 125 | struct ctl_table; |
| 133 | struct file; | 126 | int dirty_writeback_centisecs_handler(struct ctl_table *, int, |
| 134 | int dirty_writeback_centisecs_handler(struct ctl_table *, int, struct file *, | ||
| 135 | void __user *, size_t *, loff_t *); | 127 | void __user *, size_t *, loff_t *); |
| 136 | 128 | ||
| 137 | void get_dirty_limits(unsigned long *pbackground, unsigned long *pdirty, | 129 | void get_dirty_limits(unsigned long *pbackground, unsigned long *pdirty, |
| @@ -150,17 +142,12 @@ balance_dirty_pages_ratelimited(struct address_space *mapping) | |||
| 150 | typedef int (*writepage_t)(struct page *page, struct writeback_control *wbc, | 142 | typedef int (*writepage_t)(struct page *page, struct writeback_control *wbc, |
| 151 | void *data); | 143 | void *data); |
| 152 | 144 | ||
| 153 | int pdflush_operation(void (*fn)(unsigned long), unsigned long arg0); | ||
| 154 | int generic_writepages(struct address_space *mapping, | 145 | int generic_writepages(struct address_space *mapping, |
| 155 | struct writeback_control *wbc); | 146 | struct writeback_control *wbc); |
| 156 | int write_cache_pages(struct address_space *mapping, | 147 | int write_cache_pages(struct address_space *mapping, |
| 157 | struct writeback_control *wbc, writepage_t writepage, | 148 | struct writeback_control *wbc, writepage_t writepage, |
| 158 | void *data); | 149 | void *data); |
| 159 | int do_writepages(struct address_space *mapping, struct writeback_control *wbc); | 150 | int do_writepages(struct address_space *mapping, struct writeback_control *wbc); |
| 160 | int sync_page_range(struct inode *inode, struct address_space *mapping, | ||
| 161 | loff_t pos, loff_t count); | ||
| 162 | int sync_page_range_nolock(struct inode *inode, struct address_space *mapping, | ||
| 163 | loff_t pos, loff_t count); | ||
| 164 | void set_page_dirty_balance(struct page *page, int page_mkwrite); | 151 | void set_page_dirty_balance(struct page *page, int page_mkwrite); |
| 165 | void writeback_set_ratelimit(void); | 152 | void writeback_set_ratelimit(void); |
| 166 | 153 | ||
diff --git a/include/linux/x25.h b/include/linux/x25.h index d035e4e87d07..6450a7f12074 100644 --- a/include/linux/x25.h +++ b/include/linux/x25.h | |||
| @@ -25,6 +25,7 @@ | |||
| 25 | #define SIOCX25SENDCALLACCPT (SIOCPROTOPRIVATE + 9) | 25 | #define SIOCX25SENDCALLACCPT (SIOCPROTOPRIVATE + 9) |
| 26 | #define SIOCX25GDTEFACILITIES (SIOCPROTOPRIVATE + 10) | 26 | #define SIOCX25GDTEFACILITIES (SIOCPROTOPRIVATE + 10) |
| 27 | #define SIOCX25SDTEFACILITIES (SIOCPROTOPRIVATE + 11) | 27 | #define SIOCX25SDTEFACILITIES (SIOCPROTOPRIVATE + 11) |
| 28 | #define SIOCX25SCAUSEDIAG (SIOCPROTOPRIVATE + 12) | ||
| 28 | 29 | ||
| 29 | /* | 30 | /* |
| 30 | * Values for {get,set}sockopt. | 31 | * Values for {get,set}sockopt. |
diff --git a/include/linux/xattr.h b/include/linux/xattr.h index d131e352cfe1..5c84af8c5f6f 100644 --- a/include/linux/xattr.h +++ b/include/linux/xattr.h | |||
| @@ -49,6 +49,7 @@ struct xattr_handler { | |||
| 49 | ssize_t xattr_getsecurity(struct inode *, const char *, void *, size_t); | 49 | ssize_t xattr_getsecurity(struct inode *, const char *, void *, size_t); |
| 50 | ssize_t vfs_getxattr(struct dentry *, const char *, void *, size_t); | 50 | ssize_t vfs_getxattr(struct dentry *, const char *, void *, size_t); |
| 51 | ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size); | 51 | ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size); |
| 52 | int __vfs_setxattr_noperm(struct dentry *, const char *, const void *, size_t, int); | ||
| 52 | int vfs_setxattr(struct dentry *, const char *, const void *, size_t, int); | 53 | int vfs_setxattr(struct dentry *, const char *, const void *, size_t, int); |
| 53 | int vfs_removexattr(struct dentry *, const char *); | 54 | int vfs_removexattr(struct dentry *, const char *); |
| 54 | 55 | ||
diff --git a/include/linux/xfrm.h b/include/linux/xfrm.h index 2d4ec15abaca..29e04beb1fc9 100644 --- a/include/linux/xfrm.h +++ b/include/linux/xfrm.h | |||
| @@ -10,8 +10,7 @@ | |||
| 10 | /* Structure to encapsulate addresses. I do not want to use | 10 | /* Structure to encapsulate addresses. I do not want to use |
| 11 | * "standard" structure. My apologies. | 11 | * "standard" structure. My apologies. |
| 12 | */ | 12 | */ |
| 13 | typedef union | 13 | typedef union { |
| 14 | { | ||
| 15 | __be32 a4; | 14 | __be32 a4; |
| 16 | __be32 a6[4]; | 15 | __be32 a6[4]; |
| 17 | } xfrm_address_t; | 16 | } xfrm_address_t; |
| @@ -20,8 +19,7 @@ typedef union | |||
| 20 | * the state by (spi,daddr,ah/esp) or to store information about | 19 | * the state by (spi,daddr,ah/esp) or to store information about |
| 21 | * spi, protocol and tunnel address on output. | 20 | * spi, protocol and tunnel address on output. |
| 22 | */ | 21 | */ |
| 23 | struct xfrm_id | 22 | struct xfrm_id { |
| 24 | { | ||
| 25 | xfrm_address_t daddr; | 23 | xfrm_address_t daddr; |
| 26 | __be32 spi; | 24 | __be32 spi; |
| 27 | __u8 proto; | 25 | __u8 proto; |
| @@ -45,8 +43,7 @@ struct xfrm_sec_ctx { | |||
| 45 | 43 | ||
| 46 | /* Selector, used as selector both on policy rules (SPD) and SAs. */ | 44 | /* Selector, used as selector both on policy rules (SPD) and SAs. */ |
| 47 | 45 | ||
| 48 | struct xfrm_selector | 46 | struct xfrm_selector { |
| 49 | { | ||
| 50 | xfrm_address_t daddr; | 47 | xfrm_address_t daddr; |
| 51 | xfrm_address_t saddr; | 48 | xfrm_address_t saddr; |
| 52 | __be16 dport; | 49 | __be16 dport; |
| @@ -63,8 +60,7 @@ struct xfrm_selector | |||
| 63 | 60 | ||
| 64 | #define XFRM_INF (~(__u64)0) | 61 | #define XFRM_INF (~(__u64)0) |
| 65 | 62 | ||
| 66 | struct xfrm_lifetime_cfg | 63 | struct xfrm_lifetime_cfg { |
| 67 | { | ||
| 68 | __u64 soft_byte_limit; | 64 | __u64 soft_byte_limit; |
| 69 | __u64 hard_byte_limit; | 65 | __u64 hard_byte_limit; |
| 70 | __u64 soft_packet_limit; | 66 | __u64 soft_packet_limit; |
| @@ -75,16 +71,14 @@ struct xfrm_lifetime_cfg | |||
| 75 | __u64 hard_use_expires_seconds; | 71 | __u64 hard_use_expires_seconds; |
| 76 | }; | 72 | }; |
| 77 | 73 | ||
| 78 | struct xfrm_lifetime_cur | 74 | struct xfrm_lifetime_cur { |
| 79 | { | ||
| 80 | __u64 bytes; | 75 | __u64 bytes; |
| 81 | __u64 packets; | 76 | __u64 packets; |
| 82 | __u64 add_time; | 77 | __u64 add_time; |
| 83 | __u64 use_time; | 78 | __u64 use_time; |
| 84 | }; | 79 | }; |
| 85 | 80 | ||
| 86 | struct xfrm_replay_state | 81 | struct xfrm_replay_state { |
| 87 | { | ||
| 88 | __u32 oseq; | 82 | __u32 oseq; |
| 89 | __u32 seq; | 83 | __u32 seq; |
| 90 | __u32 bitmap; | 84 | __u32 bitmap; |
| @@ -96,6 +90,13 @@ struct xfrm_algo { | |||
| 96 | char alg_key[0]; | 90 | char alg_key[0]; |
| 97 | }; | 91 | }; |
| 98 | 92 | ||
| 93 | struct xfrm_algo_auth { | ||
| 94 | char alg_name[64]; | ||
| 95 | unsigned int alg_key_len; /* in bits */ | ||
| 96 | unsigned int alg_trunc_len; /* in bits */ | ||
| 97 | char alg_key[0]; | ||
| 98 | }; | ||
| 99 | |||
| 99 | struct xfrm_algo_aead { | 100 | struct xfrm_algo_aead { |
| 100 | char alg_name[64]; | 101 | char alg_name[64]; |
| 101 | unsigned int alg_key_len; /* in bits */ | 102 | unsigned int alg_key_len; /* in bits */ |
| @@ -109,16 +110,14 @@ struct xfrm_stats { | |||
| 109 | __u32 integrity_failed; | 110 | __u32 integrity_failed; |
| 110 | }; | 111 | }; |
| 111 | 112 | ||
| 112 | enum | 113 | enum { |
| 113 | { | ||
| 114 | XFRM_POLICY_TYPE_MAIN = 0, | 114 | XFRM_POLICY_TYPE_MAIN = 0, |
| 115 | XFRM_POLICY_TYPE_SUB = 1, | 115 | XFRM_POLICY_TYPE_SUB = 1, |
| 116 | XFRM_POLICY_TYPE_MAX = 2, | 116 | XFRM_POLICY_TYPE_MAX = 2, |
| 117 | XFRM_POLICY_TYPE_ANY = 255 | 117 | XFRM_POLICY_TYPE_ANY = 255 |
| 118 | }; | 118 | }; |
| 119 | 119 | ||
| 120 | enum | 120 | enum { |
| 121 | { | ||
| 122 | XFRM_POLICY_IN = 0, | 121 | XFRM_POLICY_IN = 0, |
| 123 | XFRM_POLICY_OUT = 1, | 122 | XFRM_POLICY_OUT = 1, |
| 124 | XFRM_POLICY_FWD = 2, | 123 | XFRM_POLICY_FWD = 2, |
| @@ -126,8 +125,7 @@ enum | |||
| 126 | XFRM_POLICY_MAX = 3 | 125 | XFRM_POLICY_MAX = 3 |
| 127 | }; | 126 | }; |
| 128 | 127 | ||
| 129 | enum | 128 | enum { |
| 130 | { | ||
| 131 | XFRM_SHARE_ANY, /* No limitations */ | 129 | XFRM_SHARE_ANY, /* No limitations */ |
| 132 | XFRM_SHARE_SESSION, /* For this session only */ | 130 | XFRM_SHARE_SESSION, /* For this session only */ |
| 133 | XFRM_SHARE_USER, /* For this user only */ | 131 | XFRM_SHARE_USER, /* For this user only */ |
| @@ -283,6 +281,7 @@ enum xfrm_attr_type_t { | |||
| 283 | XFRMA_MIGRATE, | 281 | XFRMA_MIGRATE, |
| 284 | XFRMA_ALG_AEAD, /* struct xfrm_algo_aead */ | 282 | XFRMA_ALG_AEAD, /* struct xfrm_algo_aead */ |
| 285 | XFRMA_KMADDRESS, /* struct xfrm_user_kmaddress */ | 283 | XFRMA_KMADDRESS, /* struct xfrm_user_kmaddress */ |
| 284 | XFRMA_ALG_AUTH_TRUNC, /* struct xfrm_algo_auth */ | ||
| 286 | __XFRMA_MAX | 285 | __XFRMA_MAX |
| 287 | 286 | ||
| 288 | #define XFRMA_MAX (__XFRMA_MAX - 1) | 287 | #define XFRMA_MAX (__XFRMA_MAX - 1) |
