diff options
Diffstat (limited to 'include/linux')
111 files changed, 1858 insertions, 1023 deletions
diff --git a/include/linux/acpi.h b/include/linux/acpi.h index 3994d7790b23..bcbdd7484e58 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h | |||
| @@ -74,9 +74,10 @@ enum acpi_address_range_id { | |||
| 74 | 74 | ||
| 75 | /* Table Handlers */ | 75 | /* Table Handlers */ |
| 76 | 76 | ||
| 77 | typedef int (*acpi_table_handler) (struct acpi_table_header *table); | 77 | typedef int (*acpi_tbl_table_handler)(struct acpi_table_header *table); |
| 78 | 78 | ||
| 79 | typedef int (*acpi_table_entry_handler) (struct acpi_subtable_header *header, const unsigned long end); | 79 | typedef int (*acpi_tbl_entry_handler)(struct acpi_subtable_header *header, |
| 80 | const unsigned long end); | ||
| 80 | 81 | ||
| 81 | #ifdef CONFIG_ACPI_INITRD_TABLE_OVERRIDE | 82 | #ifdef CONFIG_ACPI_INITRD_TABLE_OVERRIDE |
| 82 | void acpi_initrd_override(void *data, size_t size); | 83 | void acpi_initrd_override(void *data, size_t size); |
| @@ -95,10 +96,14 @@ int acpi_mps_check (void); | |||
| 95 | int acpi_numa_init (void); | 96 | int acpi_numa_init (void); |
| 96 | 97 | ||
| 97 | int acpi_table_init (void); | 98 | int acpi_table_init (void); |
| 98 | int acpi_table_parse (char *id, acpi_table_handler handler); | 99 | int acpi_table_parse(char *id, acpi_tbl_table_handler handler); |
| 99 | int __init acpi_table_parse_entries(char *id, unsigned long table_size, | 100 | int __init acpi_table_parse_entries(char *id, unsigned long table_size, |
| 100 | int entry_id, acpi_table_entry_handler handler, unsigned int max_entries); | 101 | int entry_id, |
| 101 | int acpi_table_parse_madt (enum acpi_madt_type id, acpi_table_entry_handler handler, unsigned int max_entries); | 102 | acpi_tbl_entry_handler handler, |
| 103 | unsigned int max_entries); | ||
| 104 | int acpi_table_parse_madt(enum acpi_madt_type id, | ||
| 105 | acpi_tbl_entry_handler handler, | ||
| 106 | unsigned int max_entries); | ||
| 102 | int acpi_parse_mcfg (struct acpi_table_header *header); | 107 | int acpi_parse_mcfg (struct acpi_table_header *header); |
| 103 | void acpi_table_print_madt_entry (struct acpi_subtable_header *madt); | 108 | void acpi_table_print_madt_entry (struct acpi_subtable_header *madt); |
| 104 | 109 | ||
| @@ -358,8 +363,7 @@ extern acpi_status acpi_pci_osc_control_set(acpi_handle handle, | |||
| 358 | #if defined(CONFIG_ACPI_HOTPLUG_CPU) && \ | 363 | #if defined(CONFIG_ACPI_HOTPLUG_CPU) && \ |
| 359 | (defined(CONFIG_ACPI_HOTPLUG_MEMORY) || \ | 364 | (defined(CONFIG_ACPI_HOTPLUG_MEMORY) || \ |
| 360 | defined(CONFIG_ACPI_HOTPLUG_MEMORY_MODULE)) && \ | 365 | defined(CONFIG_ACPI_HOTPLUG_MEMORY_MODULE)) && \ |
| 361 | (defined(CONFIG_ACPI_CONTAINER) || \ | 366 | defined(CONFIG_ACPI_CONTAINER) |
| 362 | defined(CONFIG_ACPI_CONTAINER_MODULE)) | ||
| 363 | #define ACPI_HOTPLUG_OST | 367 | #define ACPI_HOTPLUG_OST |
| 364 | #endif | 368 | #endif |
| 365 | 369 | ||
| @@ -511,7 +515,7 @@ static inline int acpi_subsys_runtime_suspend(struct device *dev) { return 0; } | |||
| 511 | static inline int acpi_subsys_runtime_resume(struct device *dev) { return 0; } | 515 | static inline int acpi_subsys_runtime_resume(struct device *dev) { return 0; } |
| 512 | #endif | 516 | #endif |
| 513 | 517 | ||
| 514 | #ifdef CONFIG_ACPI_SLEEP | 518 | #if defined(CONFIG_ACPI) && defined(CONFIG_PM_SLEEP) |
| 515 | int acpi_dev_suspend_late(struct device *dev); | 519 | int acpi_dev_suspend_late(struct device *dev); |
| 516 | int acpi_dev_resume_early(struct device *dev); | 520 | int acpi_dev_resume_early(struct device *dev); |
| 517 | int acpi_subsys_prepare(struct device *dev); | 521 | int acpi_subsys_prepare(struct device *dev); |
| @@ -526,9 +530,14 @@ static inline int acpi_subsys_resume_early(struct device *dev) { return 0; } | |||
| 526 | #endif | 530 | #endif |
| 527 | 531 | ||
| 528 | #if defined(CONFIG_ACPI) && defined(CONFIG_PM) | 532 | #if defined(CONFIG_ACPI) && defined(CONFIG_PM) |
| 533 | struct acpi_device *acpi_dev_pm_get_node(struct device *dev); | ||
| 529 | int acpi_dev_pm_attach(struct device *dev, bool power_on); | 534 | int acpi_dev_pm_attach(struct device *dev, bool power_on); |
| 530 | void acpi_dev_pm_detach(struct device *dev, bool power_off); | 535 | void acpi_dev_pm_detach(struct device *dev, bool power_off); |
| 531 | #else | 536 | #else |
| 537 | static inline struct acpi_device *acpi_dev_pm_get_node(struct device *dev) | ||
| 538 | { | ||
| 539 | return NULL; | ||
| 540 | } | ||
| 532 | static inline int acpi_dev_pm_attach(struct device *dev, bool power_on) | 541 | static inline int acpi_dev_pm_attach(struct device *dev, bool power_on) |
| 533 | { | 542 | { |
| 534 | return -ENODEV; | 543 | return -ENODEV; |
diff --git a/include/linux/aer.h b/include/linux/aer.h index 544abdb2238c..ec10e1b24c1c 100644 --- a/include/linux/aer.h +++ b/include/linux/aer.h | |||
| @@ -49,8 +49,8 @@ static inline int pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev) | |||
| 49 | } | 49 | } |
| 50 | #endif | 50 | #endif |
| 51 | 51 | ||
| 52 | extern void cper_print_aer(const char *prefix, int cper_severity, | 52 | extern void cper_print_aer(const char *prefix, struct pci_dev *dev, |
| 53 | struct aer_capability_regs *aer); | 53 | int cper_severity, struct aer_capability_regs *aer); |
| 54 | extern int cper_severity_to_aer(int cper_severity); | 54 | extern int cper_severity_to_aer(int cper_severity); |
| 55 | extern void aer_recover_queue(int domain, unsigned int bus, unsigned int devfn, | 55 | extern void aer_recover_queue(int domain, unsigned int bus, unsigned int devfn, |
| 56 | int severity); | 56 | int severity); |
diff --git a/include/linux/async.h b/include/linux/async.h index 7a24fe9b44b4..a2e3f18b2ad6 100644 --- a/include/linux/async.h +++ b/include/linux/async.h | |||
| @@ -19,8 +19,7 @@ typedef u64 async_cookie_t; | |||
| 19 | typedef void (async_func_ptr) (void *data, async_cookie_t cookie); | 19 | typedef void (async_func_ptr) (void *data, async_cookie_t cookie); |
| 20 | struct async_domain { | 20 | struct async_domain { |
| 21 | struct list_head node; | 21 | struct list_head node; |
| 22 | struct list_head domain; | 22 | struct list_head pending; |
| 23 | int count; | ||
| 24 | unsigned registered:1; | 23 | unsigned registered:1; |
| 25 | }; | 24 | }; |
| 26 | 25 | ||
| @@ -29,8 +28,7 @@ struct async_domain { | |||
| 29 | */ | 28 | */ |
| 30 | #define ASYNC_DOMAIN(_name) \ | 29 | #define ASYNC_DOMAIN(_name) \ |
| 31 | struct async_domain _name = { .node = LIST_HEAD_INIT(_name.node), \ | 30 | struct async_domain _name = { .node = LIST_HEAD_INIT(_name.node), \ |
| 32 | .domain = LIST_HEAD_INIT(_name.domain), \ | 31 | .pending = LIST_HEAD_INIT(_name.pending), \ |
| 33 | .count = 0, \ | ||
| 34 | .registered = 1 } | 32 | .registered = 1 } |
| 35 | 33 | ||
| 36 | /* | 34 | /* |
| @@ -39,8 +37,7 @@ struct async_domain { | |||
| 39 | */ | 37 | */ |
| 40 | #define ASYNC_DOMAIN_EXCLUSIVE(_name) \ | 38 | #define ASYNC_DOMAIN_EXCLUSIVE(_name) \ |
| 41 | struct async_domain _name = { .node = LIST_HEAD_INIT(_name.node), \ | 39 | struct async_domain _name = { .node = LIST_HEAD_INIT(_name.node), \ |
| 42 | .domain = LIST_HEAD_INIT(_name.domain), \ | 40 | .pending = LIST_HEAD_INIT(_name.pending), \ |
| 43 | .count = 0, \ | ||
| 44 | .registered = 0 } | 41 | .registered = 0 } |
| 45 | 42 | ||
| 46 | extern async_cookie_t async_schedule(async_func_ptr *ptr, void *data); | 43 | extern async_cookie_t async_schedule(async_func_ptr *ptr, void *data); |
| @@ -52,4 +49,5 @@ extern void async_synchronize_full_domain(struct async_domain *domain); | |||
| 52 | extern void async_synchronize_cookie(async_cookie_t cookie); | 49 | extern void async_synchronize_cookie(async_cookie_t cookie); |
| 53 | extern void async_synchronize_cookie_domain(async_cookie_t cookie, | 50 | extern void async_synchronize_cookie_domain(async_cookie_t cookie, |
| 54 | struct async_domain *domain); | 51 | struct async_domain *domain); |
| 52 | extern bool current_is_async(void); | ||
| 55 | #endif | 53 | #endif |
diff --git a/include/linux/bcma/bcma_driver_chipcommon.h b/include/linux/bcma/bcma_driver_chipcommon.h index 9a0e3fa3ca95..1d002b58b60b 100644 --- a/include/linux/bcma/bcma_driver_chipcommon.h +++ b/include/linux/bcma/bcma_driver_chipcommon.h | |||
| @@ -27,7 +27,7 @@ | |||
| 27 | #define BCMA_CC_FLASHT_NONE 0x00000000 /* No flash */ | 27 | #define BCMA_CC_FLASHT_NONE 0x00000000 /* No flash */ |
| 28 | #define BCMA_CC_FLASHT_STSER 0x00000100 /* ST serial flash */ | 28 | #define BCMA_CC_FLASHT_STSER 0x00000100 /* ST serial flash */ |
| 29 | #define BCMA_CC_FLASHT_ATSER 0x00000200 /* Atmel serial flash */ | 29 | #define BCMA_CC_FLASHT_ATSER 0x00000200 /* Atmel serial flash */ |
| 30 | #define BCMA_CC_FLASHT_NFLASH 0x00000200 /* NAND flash */ | 30 | #define BCMA_CC_FLASHT_NAND 0x00000300 /* NAND flash */ |
| 31 | #define BCMA_CC_FLASHT_PARA 0x00000700 /* Parallel flash */ | 31 | #define BCMA_CC_FLASHT_PARA 0x00000700 /* Parallel flash */ |
| 32 | #define BCMA_CC_CAP_PLLT 0x00038000 /* PLL Type */ | 32 | #define BCMA_CC_CAP_PLLT 0x00038000 /* PLL Type */ |
| 33 | #define BCMA_PLLTYPE_NONE 0x00000000 | 33 | #define BCMA_PLLTYPE_NONE 0x00000000 |
| @@ -634,4 +634,6 @@ extern void bcma_chipco_regctl_maskset(struct bcma_drv_cc *cc, | |||
| 634 | u32 offset, u32 mask, u32 set); | 634 | u32 offset, u32 mask, u32 set); |
| 635 | extern void bcma_pmu_spuravoid_pllupdate(struct bcma_drv_cc *cc, int spuravoid); | 635 | extern void bcma_pmu_spuravoid_pllupdate(struct bcma_drv_cc *cc, int spuravoid); |
| 636 | 636 | ||
| 637 | extern u32 bcma_pmu_get_bus_clock(struct bcma_drv_cc *cc); | ||
| 638 | |||
| 637 | #endif /* LINUX_BCMA_DRIVER_CC_H_ */ | 639 | #endif /* LINUX_BCMA_DRIVER_CC_H_ */ |
diff --git a/include/linux/bcma/bcma_driver_mips.h b/include/linux/bcma/bcma_driver_mips.h index 0baf8a56b794..fb61f3fb4ddb 100644 --- a/include/linux/bcma/bcma_driver_mips.h +++ b/include/linux/bcma/bcma_driver_mips.h | |||
| @@ -28,6 +28,7 @@ | |||
| 28 | #define BCMA_MIPS_MIPS74K_GPIOEN 0x0048 | 28 | #define BCMA_MIPS_MIPS74K_GPIOEN 0x0048 |
| 29 | #define BCMA_MIPS_MIPS74K_CLKCTLST 0x01E0 | 29 | #define BCMA_MIPS_MIPS74K_CLKCTLST 0x01E0 |
| 30 | 30 | ||
| 31 | #define BCMA_MIPS_OOBSELINA74 0x004 | ||
| 31 | #define BCMA_MIPS_OOBSELOUTA30 0x100 | 32 | #define BCMA_MIPS_OOBSELOUTA30 0x100 |
| 32 | 33 | ||
| 33 | struct bcma_device; | 34 | struct bcma_device; |
| @@ -36,19 +37,23 @@ struct bcma_drv_mips { | |||
| 36 | struct bcma_device *core; | 37 | struct bcma_device *core; |
| 37 | u8 setup_done:1; | 38 | u8 setup_done:1; |
| 38 | u8 early_setup_done:1; | 39 | u8 early_setup_done:1; |
| 39 | unsigned int assigned_irqs; | ||
| 40 | }; | 40 | }; |
| 41 | 41 | ||
| 42 | #ifdef CONFIG_BCMA_DRIVER_MIPS | 42 | #ifdef CONFIG_BCMA_DRIVER_MIPS |
| 43 | extern void bcma_core_mips_init(struct bcma_drv_mips *mcore); | 43 | extern void bcma_core_mips_init(struct bcma_drv_mips *mcore); |
| 44 | extern void bcma_core_mips_early_init(struct bcma_drv_mips *mcore); | 44 | extern void bcma_core_mips_early_init(struct bcma_drv_mips *mcore); |
| 45 | |||
| 46 | extern unsigned int bcma_core_irq(struct bcma_device *core); | ||
| 45 | #else | 47 | #else |
| 46 | static inline void bcma_core_mips_init(struct bcma_drv_mips *mcore) { } | 48 | static inline void bcma_core_mips_init(struct bcma_drv_mips *mcore) { } |
| 47 | static inline void bcma_core_mips_early_init(struct bcma_drv_mips *mcore) { } | 49 | static inline void bcma_core_mips_early_init(struct bcma_drv_mips *mcore) { } |
| 50 | |||
| 51 | static inline unsigned int bcma_core_irq(struct bcma_device *core) | ||
| 52 | { | ||
| 53 | return 0; | ||
| 54 | } | ||
| 48 | #endif | 55 | #endif |
| 49 | 56 | ||
| 50 | extern u32 bcma_cpu_clock(struct bcma_drv_mips *mcore); | 57 | extern u32 bcma_cpu_clock(struct bcma_drv_mips *mcore); |
| 51 | 58 | ||
| 52 | extern unsigned int bcma_core_mips_irq(struct bcma_device *dev); | ||
| 53 | |||
| 54 | #endif /* LINUX_BCMA_DRIVER_MIPS_H_ */ | 59 | #endif /* LINUX_BCMA_DRIVER_MIPS_H_ */ |
diff --git a/include/linux/bcma/bcma_driver_pci.h b/include/linux/bcma/bcma_driver_pci.h index c48d98d27b77..424760f01b9d 100644 --- a/include/linux/bcma/bcma_driver_pci.h +++ b/include/linux/bcma/bcma_driver_pci.h | |||
| @@ -179,6 +179,8 @@ struct pci_dev; | |||
| 179 | #define BCMA_CORE_PCI_CFG_FUN_MASK 7 /* Function mask */ | 179 | #define BCMA_CORE_PCI_CFG_FUN_MASK 7 /* Function mask */ |
| 180 | #define BCMA_CORE_PCI_CFG_OFF_MASK 0xfff /* Register mask */ | 180 | #define BCMA_CORE_PCI_CFG_OFF_MASK 0xfff /* Register mask */ |
| 181 | 181 | ||
| 182 | #define BCMA_CORE_PCI_CFG_DEVCTRL 0xd8 | ||
| 183 | |||
| 182 | /* PCIE Root Capability Register bits (Host mode only) */ | 184 | /* PCIE Root Capability Register bits (Host mode only) */ |
| 183 | #define BCMA_CORE_PCI_RC_CRS_VISIBILITY 0x0001 | 185 | #define BCMA_CORE_PCI_RC_CRS_VISIBILITY 0x0001 |
| 184 | 186 | ||
diff --git a/include/linux/bma150.h b/include/linux/bma150.h index 7911fda23bb4..97ade7cdc870 100644 --- a/include/linux/bma150.h +++ b/include/linux/bma150.h | |||
| @@ -22,6 +22,18 @@ | |||
| 22 | 22 | ||
| 23 | #define BMA150_DRIVER "bma150" | 23 | #define BMA150_DRIVER "bma150" |
| 24 | 24 | ||
| 25 | #define BMA150_RANGE_2G 0 | ||
| 26 | #define BMA150_RANGE_4G 1 | ||
| 27 | #define BMA150_RANGE_8G 2 | ||
| 28 | |||
| 29 | #define BMA150_BW_25HZ 0 | ||
| 30 | #define BMA150_BW_50HZ 1 | ||
| 31 | #define BMA150_BW_100HZ 2 | ||
| 32 | #define BMA150_BW_190HZ 3 | ||
| 33 | #define BMA150_BW_375HZ 4 | ||
| 34 | #define BMA150_BW_750HZ 5 | ||
| 35 | #define BMA150_BW_1500HZ 6 | ||
| 36 | |||
| 25 | struct bma150_cfg { | 37 | struct bma150_cfg { |
| 26 | bool any_motion_int; /* Set to enable any-motion interrupt */ | 38 | bool any_motion_int; /* Set to enable any-motion interrupt */ |
| 27 | bool hg_int; /* Set to enable high-G interrupt */ | 39 | bool hg_int; /* Set to enable high-G interrupt */ |
| @@ -34,8 +46,8 @@ struct bma150_cfg { | |||
| 34 | unsigned char lg_hyst; /* Low-G hysterisis */ | 46 | unsigned char lg_hyst; /* Low-G hysterisis */ |
| 35 | unsigned char lg_dur; /* Low-G duration */ | 47 | unsigned char lg_dur; /* Low-G duration */ |
| 36 | unsigned char lg_thres; /* Low-G threshold */ | 48 | unsigned char lg_thres; /* Low-G threshold */ |
| 37 | unsigned char range; /* BMA0150_RANGE_xxx (in G) */ | 49 | unsigned char range; /* one of BMA0150_RANGE_xxx */ |
| 38 | unsigned char bandwidth; /* BMA0150_BW_xxx (in Hz) */ | 50 | unsigned char bandwidth; /* one of BMA0150_BW_xxx */ |
| 39 | }; | 51 | }; |
| 40 | 52 | ||
| 41 | struct bma150_platform_data { | 53 | struct bma150_platform_data { |
diff --git a/include/linux/can/dev.h b/include/linux/can/dev.h index 2b2fc345afca..fb0ab651a041 100644 --- a/include/linux/can/dev.h +++ b/include/linux/can/dev.h | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | #include <linux/can.h> | 16 | #include <linux/can.h> |
| 17 | #include <linux/can/netlink.h> | 17 | #include <linux/can/netlink.h> |
| 18 | #include <linux/can/error.h> | 18 | #include <linux/can/error.h> |
| 19 | #include <linux/can/led.h> | ||
| 19 | 20 | ||
| 20 | /* | 21 | /* |
| 21 | * CAN mode | 22 | * CAN mode |
| @@ -52,6 +53,13 @@ struct can_priv { | |||
| 52 | 53 | ||
| 53 | unsigned int echo_skb_max; | 54 | unsigned int echo_skb_max; |
| 54 | struct sk_buff **echo_skb; | 55 | struct sk_buff **echo_skb; |
| 56 | |||
| 57 | #ifdef CONFIG_CAN_LEDS | ||
| 58 | struct led_trigger *tx_led_trig; | ||
| 59 | char tx_led_trig_name[CAN_LED_NAME_SZ]; | ||
| 60 | struct led_trigger *rx_led_trig; | ||
| 61 | char rx_led_trig_name[CAN_LED_NAME_SZ]; | ||
| 62 | #endif | ||
| 55 | }; | 63 | }; |
| 56 | 64 | ||
| 57 | /* | 65 | /* |
| @@ -98,6 +106,9 @@ u8 can_len2dlc(u8 len); | |||
| 98 | struct net_device *alloc_candev(int sizeof_priv, unsigned int echo_skb_max); | 106 | struct net_device *alloc_candev(int sizeof_priv, unsigned int echo_skb_max); |
| 99 | void free_candev(struct net_device *dev); | 107 | void free_candev(struct net_device *dev); |
| 100 | 108 | ||
| 109 | /* a candev safe wrapper around netdev_priv */ | ||
| 110 | struct can_priv *safe_candev_priv(struct net_device *dev); | ||
| 111 | |||
| 101 | int open_candev(struct net_device *dev); | 112 | int open_candev(struct net_device *dev); |
| 102 | void close_candev(struct net_device *dev); | 113 | void close_candev(struct net_device *dev); |
| 103 | 114 | ||
diff --git a/include/linux/can/led.h b/include/linux/can/led.h new file mode 100644 index 000000000000..9c1167baf273 --- /dev/null +++ b/include/linux/can/led.h | |||
| @@ -0,0 +1,51 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2012, Fabio Baltieri <fabio.baltieri@gmail.com> | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License version 2 as | ||
| 6 | * published by the Free Software Foundation. | ||
| 7 | */ | ||
| 8 | |||
| 9 | #ifndef CAN_LED_H | ||
| 10 | #define CAN_LED_H | ||
| 11 | |||
| 12 | #include <linux/if.h> | ||
| 13 | #include <linux/leds.h> | ||
| 14 | |||
| 15 | enum can_led_event { | ||
| 16 | CAN_LED_EVENT_OPEN, | ||
| 17 | CAN_LED_EVENT_STOP, | ||
| 18 | CAN_LED_EVENT_TX, | ||
| 19 | CAN_LED_EVENT_RX, | ||
| 20 | }; | ||
| 21 | |||
| 22 | #ifdef CONFIG_CAN_LEDS | ||
| 23 | |||
| 24 | /* keep space for interface name + "-tx"/"-rx" suffix and null terminator */ | ||
| 25 | #define CAN_LED_NAME_SZ (IFNAMSIZ + 4) | ||
| 26 | |||
| 27 | void can_led_event(struct net_device *netdev, enum can_led_event event); | ||
| 28 | void devm_can_led_init(struct net_device *netdev); | ||
| 29 | int __init can_led_notifier_init(void); | ||
| 30 | void __exit can_led_notifier_exit(void); | ||
| 31 | |||
| 32 | #else | ||
| 33 | |||
| 34 | static inline void can_led_event(struct net_device *netdev, | ||
| 35 | enum can_led_event event) | ||
| 36 | { | ||
| 37 | } | ||
| 38 | static inline void devm_can_led_init(struct net_device *netdev) | ||
| 39 | { | ||
| 40 | } | ||
| 41 | static inline int can_led_notifier_init(void) | ||
| 42 | { | ||
| 43 | return 0; | ||
| 44 | } | ||
| 45 | static inline void can_led_notifier_exit(void) | ||
| 46 | { | ||
| 47 | } | ||
| 48 | |||
| 49 | #endif | ||
| 50 | |||
| 51 | #endif | ||
diff --git a/include/linux/can/skb.h b/include/linux/can/skb.h new file mode 100644 index 000000000000..2f0543f7510c --- /dev/null +++ b/include/linux/can/skb.h | |||
| @@ -0,0 +1,45 @@ | |||
| 1 | /* | ||
| 2 | * linux/can/skb.h | ||
| 3 | * | ||
| 4 | * Definitions for the CAN network socket buffer | ||
| 5 | * | ||
| 6 | * Copyright (C) 2012 Oliver Hartkopp <socketcan@hartkopp.net> | ||
| 7 | * | ||
| 8 | */ | ||
| 9 | |||
| 10 | #ifndef CAN_SKB_H | ||
| 11 | #define CAN_SKB_H | ||
| 12 | |||
| 13 | #include <linux/types.h> | ||
| 14 | #include <linux/can.h> | ||
| 15 | |||
| 16 | /* | ||
| 17 | * The struct can_skb_priv is used to transport additional information along | ||
| 18 | * with the stored struct can(fd)_frame that can not be contained in existing | ||
| 19 | * struct sk_buff elements. | ||
| 20 | * N.B. that this information must not be modified in cloned CAN sk_buffs. | ||
| 21 | * To modify the CAN frame content or the struct can_skb_priv content | ||
| 22 | * skb_copy() needs to be used instead of skb_clone(). | ||
| 23 | */ | ||
| 24 | |||
| 25 | /** | ||
| 26 | * struct can_skb_priv - private additional data inside CAN sk_buffs | ||
| 27 | * @ifindex: ifindex of the first interface the CAN frame appeared on | ||
| 28 | * @cf: align to the following CAN frame at skb->data | ||
| 29 | */ | ||
| 30 | struct can_skb_priv { | ||
| 31 | int ifindex; | ||
| 32 | struct can_frame cf[0]; | ||
| 33 | }; | ||
| 34 | |||
| 35 | static inline struct can_skb_priv *can_skb_prv(struct sk_buff *skb) | ||
| 36 | { | ||
| 37 | return (struct can_skb_priv *)(skb->head); | ||
| 38 | } | ||
| 39 | |||
| 40 | static inline void can_skb_reserve(struct sk_buff *skb) | ||
| 41 | { | ||
| 42 | skb_reserve(skb, sizeof(struct can_skb_priv)); | ||
| 43 | } | ||
| 44 | |||
| 45 | #endif /* CAN_SKB_H */ | ||
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h index 7d73905dcba2..900af5964f55 100644 --- a/include/linux/cgroup.h +++ b/include/linux/cgroup.h | |||
| @@ -203,6 +203,7 @@ struct cgroup { | |||
| 203 | 203 | ||
| 204 | /* For RCU-protected deletion */ | 204 | /* For RCU-protected deletion */ |
| 205 | struct rcu_head rcu_head; | 205 | struct rcu_head rcu_head; |
| 206 | struct work_struct free_work; | ||
| 206 | 207 | ||
| 207 | /* List of events which userspace want to receive */ | 208 | /* List of events which userspace want to receive */ |
| 208 | struct list_head event_list; | 209 | struct list_head event_list; |
| @@ -558,6 +559,7 @@ static inline struct cgroup* task_cgroup(struct task_struct *task, | |||
| 558 | 559 | ||
| 559 | struct cgroup *cgroup_next_descendant_pre(struct cgroup *pos, | 560 | struct cgroup *cgroup_next_descendant_pre(struct cgroup *pos, |
| 560 | struct cgroup *cgroup); | 561 | struct cgroup *cgroup); |
| 562 | struct cgroup *cgroup_rightmost_descendant(struct cgroup *pos); | ||
| 561 | 563 | ||
| 562 | /** | 564 | /** |
| 563 | * cgroup_for_each_descendant_pre - pre-order walk of a cgroup's descendants | 565 | * cgroup_for_each_descendant_pre - pre-order walk of a cgroup's descendants |
| @@ -706,7 +708,6 @@ struct cgroup_subsys_state *cgroup_css_from_dir(struct file *f, int id); | |||
| 706 | static inline int cgroup_init_early(void) { return 0; } | 708 | static inline int cgroup_init_early(void) { return 0; } |
| 707 | static inline int cgroup_init(void) { return 0; } | 709 | static inline int cgroup_init(void) { return 0; } |
| 708 | static inline void cgroup_fork(struct task_struct *p) {} | 710 | static inline void cgroup_fork(struct task_struct *p) {} |
| 709 | static inline void cgroup_fork_callbacks(struct task_struct *p) {} | ||
| 710 | static inline void cgroup_post_fork(struct task_struct *p) {} | 711 | static inline void cgroup_post_fork(struct task_struct *p) {} |
| 711 | static inline void cgroup_exit(struct task_struct *p, int callbacks) {} | 712 | static inline void cgroup_exit(struct task_struct *p, int callbacks) {} |
| 712 | 713 | ||
diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index 4989b8a7bed1..7f197d7addb0 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h | |||
| @@ -379,7 +379,13 @@ struct clk_onecell_data { | |||
| 379 | }; | 379 | }; |
| 380 | struct clk *of_clk_src_onecell_get(struct of_phandle_args *clkspec, void *data); | 380 | struct clk *of_clk_src_onecell_get(struct of_phandle_args *clkspec, void *data); |
| 381 | const char *of_clk_get_parent_name(struct device_node *np, int index); | 381 | const char *of_clk_get_parent_name(struct device_node *np, int index); |
| 382 | |||
| 382 | void of_clk_init(const struct of_device_id *matches); | 383 | void of_clk_init(const struct of_device_id *matches); |
| 383 | 384 | ||
| 385 | #define CLK_OF_DECLARE(name, compat, fn) \ | ||
| 386 | static const struct of_device_id __clk_of_table_##name \ | ||
| 387 | __used __section(__clk_of_table) \ | ||
| 388 | = { .compatible = compat, .data = fn }; | ||
| 389 | |||
| 384 | #endif /* CONFIG_COMMON_CLK */ | 390 | #endif /* CONFIG_COMMON_CLK */ |
| 385 | #endif /* CLK_PROVIDER_H */ | 391 | #endif /* CLK_PROVIDER_H */ |
diff --git a/include/linux/clk/sunxi.h b/include/linux/clk/sunxi.h deleted file mode 100644 index e074fdd5a236..000000000000 --- a/include/linux/clk/sunxi.h +++ /dev/null | |||
| @@ -1,22 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2012 Maxime Ripard | ||
| 3 | * | ||
| 4 | * Maxime Ripard <maxime.ripard@free-electrons.com> | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License as published by | ||
| 8 | * the Free Software Foundation; either version 2 of the License, or | ||
| 9 | * (at your option) any later version. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, | ||
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | * GNU General Public License for more details. | ||
| 15 | */ | ||
| 16 | |||
| 17 | #ifndef __LINUX_CLK_SUNXI_H_ | ||
| 18 | #define __LINUX_CLK_SUNXI_H_ | ||
| 19 | |||
| 20 | void __init sunxi_init_clocks(void); | ||
| 21 | |||
| 22 | #endif | ||
diff --git a/include/linux/clockchips.h b/include/linux/clockchips.h index 8a7096fcb01e..66346521cb65 100644 --- a/include/linux/clockchips.h +++ b/include/linux/clockchips.h | |||
| @@ -161,6 +161,15 @@ clockevents_calc_mult_shift(struct clock_event_device *ce, u32 freq, u32 minsec) | |||
| 161 | extern void clockevents_suspend(void); | 161 | extern void clockevents_suspend(void); |
| 162 | extern void clockevents_resume(void); | 162 | extern void clockevents_resume(void); |
| 163 | 163 | ||
| 164 | #ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST | ||
| 165 | #ifdef CONFIG_ARCH_HAS_TICK_BROADCAST | ||
| 166 | extern void tick_broadcast(const struct cpumask *mask); | ||
| 167 | #else | ||
| 168 | #define tick_broadcast NULL | ||
| 169 | #endif | ||
| 170 | extern int tick_receive_broadcast(void); | ||
| 171 | #endif | ||
| 172 | |||
| 164 | #ifdef CONFIG_GENERIC_CLOCKEVENTS | 173 | #ifdef CONFIG_GENERIC_CLOCKEVENTS |
| 165 | extern void clockevents_notify(unsigned long reason, void *arg); | 174 | extern void clockevents_notify(unsigned long reason, void *arg); |
| 166 | #else | 175 | #else |
diff --git a/include/linux/context_tracking.h b/include/linux/context_tracking.h index e24339ccb7f0..b28d161c1091 100644 --- a/include/linux/context_tracking.h +++ b/include/linux/context_tracking.h | |||
| @@ -3,12 +3,40 @@ | |||
| 3 | 3 | ||
| 4 | #ifdef CONFIG_CONTEXT_TRACKING | 4 | #ifdef CONFIG_CONTEXT_TRACKING |
| 5 | #include <linux/sched.h> | 5 | #include <linux/sched.h> |
| 6 | #include <linux/percpu.h> | ||
| 7 | |||
| 8 | struct context_tracking { | ||
| 9 | /* | ||
| 10 | * When active is false, probes are unset in order | ||
| 11 | * to minimize overhead: TIF flags are cleared | ||
| 12 | * and calls to user_enter/exit are ignored. This | ||
| 13 | * may be further optimized using static keys. | ||
| 14 | */ | ||
| 15 | bool active; | ||
| 16 | enum { | ||
| 17 | IN_KERNEL = 0, | ||
| 18 | IN_USER, | ||
| 19 | } state; | ||
| 20 | }; | ||
| 21 | |||
| 22 | DECLARE_PER_CPU(struct context_tracking, context_tracking); | ||
| 23 | |||
| 24 | static inline bool context_tracking_in_user(void) | ||
| 25 | { | ||
| 26 | return __this_cpu_read(context_tracking.state) == IN_USER; | ||
| 27 | } | ||
| 28 | |||
| 29 | static inline bool context_tracking_active(void) | ||
| 30 | { | ||
| 31 | return __this_cpu_read(context_tracking.active); | ||
| 32 | } | ||
| 6 | 33 | ||
| 7 | extern void user_enter(void); | 34 | extern void user_enter(void); |
| 8 | extern void user_exit(void); | 35 | extern void user_exit(void); |
| 9 | extern void context_tracking_task_switch(struct task_struct *prev, | 36 | extern void context_tracking_task_switch(struct task_struct *prev, |
| 10 | struct task_struct *next); | 37 | struct task_struct *next); |
| 11 | #else | 38 | #else |
| 39 | static inline bool context_tracking_in_user(void) { return false; } | ||
| 12 | static inline void user_enter(void) { } | 40 | static inline void user_enter(void) { } |
| 13 | static inline void user_exit(void) { } | 41 | static inline void user_exit(void) { } |
| 14 | static inline void context_tracking_task_switch(struct task_struct *prev, | 42 | static inline void context_tracking_task_switch(struct task_struct *prev, |
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h index a55b88eaf96a..a22944ca0526 100644 --- a/include/linux/cpufreq.h +++ b/include/linux/cpufreq.h | |||
| @@ -89,11 +89,15 @@ struct cpufreq_real_policy { | |||
| 89 | }; | 89 | }; |
| 90 | 90 | ||
| 91 | struct cpufreq_policy { | 91 | struct cpufreq_policy { |
| 92 | cpumask_var_t cpus; /* CPUs requiring sw coordination */ | 92 | /* CPUs sharing clock, require sw coordination */ |
| 93 | cpumask_var_t related_cpus; /* CPUs with any coordination */ | 93 | cpumask_var_t cpus; /* Online CPUs only */ |
| 94 | unsigned int shared_type; /* ANY or ALL affected CPUs | 94 | cpumask_var_t related_cpus; /* Online + Offline CPUs */ |
| 95 | |||
| 96 | unsigned int shared_type; /* ACPI: ANY or ALL affected CPUs | ||
| 95 | should set cpufreq */ | 97 | should set cpufreq */ |
| 96 | unsigned int cpu; /* cpu nr of registered CPU */ | 98 | unsigned int cpu; /* cpu nr of CPU managing this policy */ |
| 99 | unsigned int last_cpu; /* cpu nr of previous CPU that managed | ||
| 100 | * this policy */ | ||
| 97 | struct cpufreq_cpuinfo cpuinfo;/* see above */ | 101 | struct cpufreq_cpuinfo cpuinfo;/* see above */ |
| 98 | 102 | ||
| 99 | unsigned int min; /* in kHz */ | 103 | unsigned int min; /* in kHz */ |
| @@ -112,16 +116,23 @@ struct cpufreq_policy { | |||
| 112 | struct completion kobj_unregister; | 116 | struct completion kobj_unregister; |
| 113 | }; | 117 | }; |
| 114 | 118 | ||
| 115 | #define CPUFREQ_ADJUST (0) | 119 | #define CPUFREQ_ADJUST (0) |
| 116 | #define CPUFREQ_INCOMPATIBLE (1) | 120 | #define CPUFREQ_INCOMPATIBLE (1) |
| 117 | #define CPUFREQ_NOTIFY (2) | 121 | #define CPUFREQ_NOTIFY (2) |
| 118 | #define CPUFREQ_START (3) | 122 | #define CPUFREQ_START (3) |
| 123 | #define CPUFREQ_UPDATE_POLICY_CPU (4) | ||
| 119 | 124 | ||
| 125 | /* Only for ACPI */ | ||
| 120 | #define CPUFREQ_SHARED_TYPE_NONE (0) /* None */ | 126 | #define CPUFREQ_SHARED_TYPE_NONE (0) /* None */ |
| 121 | #define CPUFREQ_SHARED_TYPE_HW (1) /* HW does needed coordination */ | 127 | #define CPUFREQ_SHARED_TYPE_HW (1) /* HW does needed coordination */ |
| 122 | #define CPUFREQ_SHARED_TYPE_ALL (2) /* All dependent CPUs should set freq */ | 128 | #define CPUFREQ_SHARED_TYPE_ALL (2) /* All dependent CPUs should set freq */ |
| 123 | #define CPUFREQ_SHARED_TYPE_ANY (3) /* Freq can be set from any dependent CPU*/ | 129 | #define CPUFREQ_SHARED_TYPE_ANY (3) /* Freq can be set from any dependent CPU*/ |
| 124 | 130 | ||
| 131 | static inline bool policy_is_shared(struct cpufreq_policy *policy) | ||
| 132 | { | ||
| 133 | return cpumask_weight(policy->cpus) > 1; | ||
| 134 | } | ||
| 135 | |||
| 125 | /******************** cpufreq transition notifiers *******************/ | 136 | /******************** cpufreq transition notifiers *******************/ |
| 126 | 137 | ||
| 127 | #define CPUFREQ_PRECHANGE (0) | 138 | #define CPUFREQ_PRECHANGE (0) |
| @@ -173,6 +184,7 @@ static inline unsigned long cpufreq_scale(unsigned long old, u_int div, u_int mu | |||
| 173 | 184 | ||
| 174 | struct cpufreq_governor { | 185 | struct cpufreq_governor { |
| 175 | char name[CPUFREQ_NAME_LEN]; | 186 | char name[CPUFREQ_NAME_LEN]; |
| 187 | int initialized; | ||
| 176 | int (*governor) (struct cpufreq_policy *policy, | 188 | int (*governor) (struct cpufreq_policy *policy, |
| 177 | unsigned int event); | 189 | unsigned int event); |
| 178 | ssize_t (*show_setspeed) (struct cpufreq_policy *policy, | 190 | ssize_t (*show_setspeed) (struct cpufreq_policy *policy, |
| @@ -308,6 +320,9 @@ __ATTR(_name, 0444, show_##_name, NULL) | |||
| 308 | static struct global_attr _name = \ | 320 | static struct global_attr _name = \ |
| 309 | __ATTR(_name, 0644, show_##_name, store_##_name) | 321 | __ATTR(_name, 0644, show_##_name, store_##_name) |
| 310 | 322 | ||
| 323 | struct cpufreq_policy *cpufreq_cpu_get(unsigned int cpu); | ||
| 324 | void cpufreq_cpu_put(struct cpufreq_policy *data); | ||
| 325 | const char *cpufreq_get_current_driver(void); | ||
| 311 | 326 | ||
| 312 | /********************************************************************* | 327 | /********************************************************************* |
| 313 | * CPUFREQ 2.6. INTERFACE * | 328 | * CPUFREQ 2.6. INTERFACE * |
| @@ -397,14 +412,13 @@ int cpufreq_frequency_table_target(struct cpufreq_policy *policy, | |||
| 397 | 412 | ||
| 398 | /* the following 3 funtions are for cpufreq core use only */ | 413 | /* the following 3 funtions are for cpufreq core use only */ |
| 399 | struct cpufreq_frequency_table *cpufreq_frequency_get_table(unsigned int cpu); | 414 | struct cpufreq_frequency_table *cpufreq_frequency_get_table(unsigned int cpu); |
| 400 | struct cpufreq_policy *cpufreq_cpu_get(unsigned int cpu); | ||
| 401 | void cpufreq_cpu_put(struct cpufreq_policy *data); | ||
| 402 | 415 | ||
| 403 | /* the following are really really optional */ | 416 | /* the following are really really optional */ |
| 404 | extern struct freq_attr cpufreq_freq_attr_scaling_available_freqs; | 417 | extern struct freq_attr cpufreq_freq_attr_scaling_available_freqs; |
| 405 | 418 | ||
| 406 | void cpufreq_frequency_table_get_attr(struct cpufreq_frequency_table *table, | 419 | void cpufreq_frequency_table_get_attr(struct cpufreq_frequency_table *table, |
| 407 | unsigned int cpu); | 420 | unsigned int cpu); |
| 421 | void cpufreq_frequency_table_update_policy_cpu(struct cpufreq_policy *policy); | ||
| 408 | 422 | ||
| 409 | void cpufreq_frequency_table_put_attr(unsigned int cpu); | 423 | void cpufreq_frequency_table_put_attr(unsigned int cpu); |
| 410 | #endif /* _LINUX_CPUFREQ_H */ | 424 | #endif /* _LINUX_CPUFREQ_H */ |
diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h index 24cd1037b6d6..480c14dc1ddd 100644 --- a/include/linux/cpuidle.h +++ b/include/linux/cpuidle.h | |||
| @@ -32,8 +32,6 @@ struct cpuidle_driver; | |||
| 32 | ****************************/ | 32 | ****************************/ |
| 33 | 33 | ||
| 34 | struct cpuidle_state_usage { | 34 | struct cpuidle_state_usage { |
| 35 | void *driver_data; | ||
| 36 | |||
| 37 | unsigned long long disable; | 35 | unsigned long long disable; |
| 38 | unsigned long long usage; | 36 | unsigned long long usage; |
| 39 | unsigned long long time; /* in US */ | 37 | unsigned long long time; /* in US */ |
| @@ -62,26 +60,6 @@ struct cpuidle_state { | |||
| 62 | 60 | ||
| 63 | #define CPUIDLE_DRIVER_FLAGS_MASK (0xFFFF0000) | 61 | #define CPUIDLE_DRIVER_FLAGS_MASK (0xFFFF0000) |
| 64 | 62 | ||
| 65 | /** | ||
| 66 | * cpuidle_get_statedata - retrieves private driver state data | ||
| 67 | * @st_usage: the state usage statistics | ||
| 68 | */ | ||
| 69 | static inline void *cpuidle_get_statedata(struct cpuidle_state_usage *st_usage) | ||
| 70 | { | ||
| 71 | return st_usage->driver_data; | ||
| 72 | } | ||
| 73 | |||
| 74 | /** | ||
| 75 | * cpuidle_set_statedata - stores private driver state data | ||
| 76 | * @st_usage: the state usage statistics | ||
| 77 | * @data: the private data | ||
| 78 | */ | ||
| 79 | static inline void | ||
| 80 | cpuidle_set_statedata(struct cpuidle_state_usage *st_usage, void *data) | ||
| 81 | { | ||
| 82 | st_usage->driver_data = data; | ||
| 83 | } | ||
| 84 | |||
| 85 | struct cpuidle_device { | 63 | struct cpuidle_device { |
| 86 | unsigned int registered:1; | 64 | unsigned int registered:1; |
| 87 | unsigned int enabled:1; | 65 | unsigned int enabled:1; |
diff --git a/include/linux/cyclomx.h b/include/linux/cyclomx.h deleted file mode 100644 index b88f7f428e58..000000000000 --- a/include/linux/cyclomx.h +++ /dev/null | |||
| @@ -1,77 +0,0 @@ | |||
| 1 | #ifndef _CYCLOMX_H | ||
| 2 | #define _CYCLOMX_H | ||
| 3 | /* | ||
| 4 | * cyclomx.h Cyclom 2X WAN Link Driver. | ||
| 5 | * User-level API definitions. | ||
| 6 | * | ||
| 7 | * Author: Arnaldo Carvalho de Melo <acme@conectiva.com.br> | ||
| 8 | * | ||
| 9 | * Copyright: (c) 1998-2003 Arnaldo Carvalho de Melo | ||
| 10 | * | ||
| 11 | * Based on wanpipe.h by Gene Kozin <genek@compuserve.com> | ||
| 12 | * | ||
| 13 | * This program is free software; you can redistribute it and/or | ||
| 14 | * modify it under the terms of the GNU General Public License | ||
| 15 | * as published by the Free Software Foundation; either version | ||
| 16 | * 2 of the License, or (at your option) any later version. | ||
| 17 | * ============================================================================ | ||
| 18 | * 2000/07/13 acme remove crap #if KERNEL_VERSION > blah | ||
| 19 | * 2000/01/21 acme rename cyclomx_open to cyclomx_mod_inc_use_count | ||
| 20 | * and cyclomx_close to cyclomx_mod_dec_use_count | ||
| 21 | * 1999/05/19 acme wait_queue_head_t wait_stats(support for 2.3.*) | ||
| 22 | * 1999/01/03 acme judicious use of data types | ||
| 23 | * 1998/12/27 acme cleanup: PACKED not needed | ||
| 24 | * 1998/08/08 acme Version 0.0.1 | ||
| 25 | */ | ||
| 26 | |||
| 27 | #include <linux/wanrouter.h> | ||
| 28 | #include <linux/spinlock.h> | ||
| 29 | |||
| 30 | #ifdef __KERNEL__ | ||
| 31 | /* Kernel Interface */ | ||
| 32 | |||
| 33 | #include <linux/cycx_drv.h> /* Cyclom 2X support module API definitions */ | ||
| 34 | #include <linux/cycx_cfm.h> /* Cyclom 2X firmware module definitions */ | ||
| 35 | #ifdef CONFIG_CYCLOMX_X25 | ||
| 36 | #include <linux/cycx_x25.h> | ||
| 37 | #endif | ||
| 38 | |||
| 39 | /* Adapter Data Space. | ||
| 40 | * This structure is needed because we handle multiple cards, otherwise | ||
| 41 | * static data would do it. | ||
| 42 | */ | ||
| 43 | struct cycx_device { | ||
| 44 | char devname[WAN_DRVNAME_SZ + 1];/* card name */ | ||
| 45 | struct cycx_hw hw; /* hardware configuration */ | ||
| 46 | struct wan_device wandev; /* WAN device data space */ | ||
| 47 | u32 state_tick; /* link state timestamp */ | ||
| 48 | spinlock_t lock; | ||
| 49 | char in_isr; /* interrupt-in-service flag */ | ||
| 50 | char buff_int_mode_unbusy; /* flag for carrying out dev_tint */ | ||
| 51 | wait_queue_head_t wait_stats; /* to wait for the STATS indication */ | ||
| 52 | void __iomem *mbox; /* -> mailbox */ | ||
| 53 | void (*isr)(struct cycx_device* card); /* interrupt service routine */ | ||
| 54 | int (*exec)(struct cycx_device* card, void* u_cmd, void* u_data); | ||
| 55 | union { | ||
| 56 | #ifdef CONFIG_CYCLOMX_X25 | ||
| 57 | struct { /* X.25 specific data */ | ||
| 58 | u32 lo_pvc; | ||
| 59 | u32 hi_pvc; | ||
| 60 | u32 lo_svc; | ||
| 61 | u32 hi_svc; | ||
| 62 | struct cycx_x25_stats stats; | ||
| 63 | spinlock_t lock; | ||
| 64 | u32 connection_keys; | ||
| 65 | } x; | ||
| 66 | #endif | ||
| 67 | } u; | ||
| 68 | }; | ||
| 69 | |||
| 70 | /* Public Functions */ | ||
| 71 | void cycx_set_state(struct cycx_device *card, int state); | ||
| 72 | |||
| 73 | #ifdef CONFIG_CYCLOMX_X25 | ||
| 74 | int cycx_x25_wan_init(struct cycx_device *card, wandev_conf_t *conf); | ||
| 75 | #endif | ||
| 76 | #endif /* __KERNEL__ */ | ||
| 77 | #endif /* _CYCLOMX_H */ | ||
diff --git a/include/linux/cycx_drv.h b/include/linux/cycx_drv.h deleted file mode 100644 index 12fe6b0bfcff..000000000000 --- a/include/linux/cycx_drv.h +++ /dev/null | |||
| @@ -1,64 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * cycx_drv.h CYCX Support Module. Kernel API Definitions. | ||
| 3 | * | ||
| 4 | * Author: Arnaldo Carvalho de Melo <acme@conectiva.com.br> | ||
| 5 | * | ||
| 6 | * Copyright: (c) 1998-2003 Arnaldo Carvalho de Melo | ||
| 7 | * | ||
| 8 | * Based on sdladrv.h by Gene Kozin <genek@compuserve.com> | ||
| 9 | * | ||
| 10 | * This program is free software; you can redistribute it and/or | ||
| 11 | * modify it under the terms of the GNU General Public License | ||
| 12 | * as published by the Free Software Foundation; either version | ||
| 13 | * 2 of the License, or (at your option) any later version. | ||
| 14 | * ============================================================================ | ||
| 15 | * 1999/10/23 acme cycxhw_t cleanup | ||
| 16 | * 1999/01/03 acme more judicious use of data types... | ||
| 17 | * uclong, ucchar, etc deleted, the u8, u16, u32 | ||
| 18 | * types are the portable way to go. | ||
| 19 | * 1999/01/03 acme judicious use of data types... u16, u32, etc | ||
| 20 | * 1998/12/26 acme FIXED_BUFFERS, CONF_OFFSET, | ||
| 21 | * removal of cy_read{bwl} | ||
| 22 | * 1998/08/08 acme Initial version. | ||
| 23 | */ | ||
| 24 | #ifndef _CYCX_DRV_H | ||
| 25 | #define _CYCX_DRV_H | ||
| 26 | |||
| 27 | #define CYCX_WINDOWSIZE 0x4000 /* default dual-port memory window size */ | ||
| 28 | #define GEN_CYCX_INTR 0x02 | ||
| 29 | #define RST_ENABLE 0x04 | ||
| 30 | #define START_CPU 0x06 | ||
| 31 | #define RST_DISABLE 0x08 | ||
| 32 | #define FIXED_BUFFERS 0x08 | ||
| 33 | #define TEST_PATTERN 0xaa55 | ||
| 34 | #define CMD_OFFSET 0x20 | ||
| 35 | #define CONF_OFFSET 0x0380 | ||
| 36 | #define RESET_OFFSET 0x3c00 /* For reset file load */ | ||
| 37 | #define DATA_OFFSET 0x0100 /* For code and data files load */ | ||
| 38 | #define START_OFFSET 0x3ff0 /* 80186 starts here */ | ||
| 39 | |||
| 40 | /** | ||
| 41 | * struct cycx_hw - Adapter hardware configuration | ||
| 42 | * @fwid - firmware ID | ||
| 43 | * @irq - interrupt request level | ||
| 44 | * @dpmbase - dual-port memory base | ||
| 45 | * @dpmsize - dual-port memory size | ||
| 46 | * @reserved - reserved for future use | ||
| 47 | */ | ||
| 48 | struct cycx_hw { | ||
| 49 | u32 fwid; | ||
| 50 | int irq; | ||
| 51 | void __iomem *dpmbase; | ||
| 52 | u32 dpmsize; | ||
| 53 | u32 reserved[5]; | ||
| 54 | }; | ||
| 55 | |||
| 56 | /* Function Prototypes */ | ||
| 57 | extern int cycx_setup(struct cycx_hw *hw, void *sfm, u32 len, unsigned long base); | ||
| 58 | extern int cycx_down(struct cycx_hw *hw); | ||
| 59 | extern int cycx_peek(struct cycx_hw *hw, u32 addr, void *buf, u32 len); | ||
| 60 | extern int cycx_poke(struct cycx_hw *hw, u32 addr, void *buf, u32 len); | ||
| 61 | extern int cycx_exec(void __iomem *addr); | ||
| 62 | |||
| 63 | extern void cycx_intr(struct cycx_hw *hw); | ||
| 64 | #endif /* _CYCX_DRV_H */ | ||
diff --git a/include/linux/device.h b/include/linux/device.h index 43dcda937ddf..001f6637aa47 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
| @@ -21,6 +21,7 @@ | |||
| 21 | #include <linux/compiler.h> | 21 | #include <linux/compiler.h> |
| 22 | #include <linux/types.h> | 22 | #include <linux/types.h> |
| 23 | #include <linux/mutex.h> | 23 | #include <linux/mutex.h> |
| 24 | #include <linux/pinctrl/devinfo.h> | ||
| 24 | #include <linux/pm.h> | 25 | #include <linux/pm.h> |
| 25 | #include <linux/atomic.h> | 26 | #include <linux/atomic.h> |
| 26 | #include <linux/ratelimit.h> | 27 | #include <linux/ratelimit.h> |
| @@ -620,6 +621,8 @@ struct acpi_dev_node { | |||
| 620 | * @pm_domain: Provide callbacks that are executed during system suspend, | 621 | * @pm_domain: Provide callbacks that are executed during system suspend, |
| 621 | * hibernation, system resume and during runtime PM transitions | 622 | * hibernation, system resume and during runtime PM transitions |
| 622 | * along with subsystem-level and driver-level callbacks. | 623 | * along with subsystem-level and driver-level callbacks. |
| 624 | * @pins: For device pin management. | ||
| 625 | * See Documentation/pinctrl.txt for details. | ||
| 623 | * @numa_node: NUMA node this device is close to. | 626 | * @numa_node: NUMA node this device is close to. |
| 624 | * @dma_mask: Dma mask (if dma'ble device). | 627 | * @dma_mask: Dma mask (if dma'ble device). |
| 625 | * @coherent_dma_mask: Like dma_mask, but for alloc_coherent mapping as not all | 628 | * @coherent_dma_mask: Like dma_mask, but for alloc_coherent mapping as not all |
| @@ -672,6 +675,10 @@ struct device { | |||
| 672 | struct dev_pm_info power; | 675 | struct dev_pm_info power; |
| 673 | struct dev_pm_domain *pm_domain; | 676 | struct dev_pm_domain *pm_domain; |
| 674 | 677 | ||
| 678 | #ifdef CONFIG_PINCTRL | ||
| 679 | struct dev_pin_info *pins; | ||
| 680 | #endif | ||
| 681 | |||
| 675 | #ifdef CONFIG_NUMA | 682 | #ifdef CONFIG_NUMA |
| 676 | int numa_node; /* NUMA node this device is close to */ | 683 | int numa_node; /* NUMA node this device is close to */ |
| 677 | #endif | 684 | #endif |
diff --git a/include/linux/elevator.h b/include/linux/elevator.h index c03af7687bb4..186620631750 100644 --- a/include/linux/elevator.h +++ b/include/linux/elevator.h | |||
| @@ -138,6 +138,7 @@ extern void elv_drain_elevator(struct request_queue *); | |||
| 138 | /* | 138 | /* |
| 139 | * io scheduler registration | 139 | * io scheduler registration |
| 140 | */ | 140 | */ |
| 141 | extern void __init load_default_elevator_module(void); | ||
| 141 | extern int elv_register(struct elevator_type *); | 142 | extern int elv_register(struct elevator_type *); |
| 142 | extern void elv_unregister(struct elevator_type *); | 143 | extern void elv_unregister(struct elevator_type *); |
| 143 | 144 | ||
| @@ -206,5 +207,9 @@ enum { | |||
| 206 | INIT_LIST_HEAD(&(rq)->csd.list); \ | 207 | INIT_LIST_HEAD(&(rq)->csd.list); \ |
| 207 | } while (0) | 208 | } while (0) |
| 208 | 209 | ||
| 210 | #else /* CONFIG_BLOCK */ | ||
| 211 | |||
| 212 | static inline void load_default_elevator_module(void) { } | ||
| 213 | |||
| 209 | #endif /* CONFIG_BLOCK */ | 214 | #endif /* CONFIG_BLOCK */ |
| 210 | #endif | 215 | #endif |
diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h index 243eea1e33d8..c623861964e4 100644 --- a/include/linux/etherdevice.h +++ b/include/linux/etherdevice.h | |||
| @@ -40,6 +40,8 @@ extern int eth_header_cache(const struct neighbour *neigh, struct hh_cache *hh, | |||
| 40 | extern void eth_header_cache_update(struct hh_cache *hh, | 40 | extern void eth_header_cache_update(struct hh_cache *hh, |
| 41 | const struct net_device *dev, | 41 | const struct net_device *dev, |
| 42 | const unsigned char *haddr); | 42 | const unsigned char *haddr); |
| 43 | extern int eth_prepare_mac_addr_change(struct net_device *dev, void *p); | ||
| 44 | extern void eth_commit_mac_addr_change(struct net_device *dev, void *p); | ||
| 43 | extern int eth_mac_addr(struct net_device *dev, void *p); | 45 | extern int eth_mac_addr(struct net_device *dev, void *p); |
| 44 | extern int eth_change_mtu(struct net_device *dev, int new_mtu); | 46 | extern int eth_change_mtu(struct net_device *dev, int new_mtu); |
| 45 | extern int eth_validate_addr(struct net_device *dev); | 47 | extern int eth_validate_addr(struct net_device *dev); |
| @@ -192,7 +194,7 @@ static inline void eth_zero_addr(u8 *addr) | |||
| 192 | */ | 194 | */ |
| 193 | static inline void eth_hw_addr_random(struct net_device *dev) | 195 | static inline void eth_hw_addr_random(struct net_device *dev) |
| 194 | { | 196 | { |
| 195 | dev->addr_assign_type |= NET_ADDR_RANDOM; | 197 | dev->addr_assign_type = NET_ADDR_RANDOM; |
| 196 | eth_random_addr(dev->dev_addr); | 198 | eth_random_addr(dev->dev_addr); |
| 197 | } | 199 | } |
| 198 | 200 | ||
diff --git a/include/linux/freezer.h b/include/linux/freezer.h index e4238ceaa4d6..e70df40d84f6 100644 --- a/include/linux/freezer.h +++ b/include/linux/freezer.h | |||
| @@ -13,6 +13,11 @@ extern bool pm_freezing; /* PM freezing in effect */ | |||
| 13 | extern bool pm_nosig_freezing; /* PM nosig freezing in effect */ | 13 | extern bool pm_nosig_freezing; /* PM nosig freezing in effect */ |
| 14 | 14 | ||
| 15 | /* | 15 | /* |
| 16 | * Timeout for stopping processes | ||
| 17 | */ | ||
| 18 | extern unsigned int freeze_timeout_msecs; | ||
| 19 | |||
| 20 | /* | ||
| 16 | * Check if a process has been frozen | 21 | * Check if a process has been frozen |
| 17 | */ | 22 | */ |
| 18 | static inline bool frozen(struct task_struct *p) | 23 | static inline bool frozen(struct task_struct *p) |
diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h index 92691d85c320..e5ca8ef50e9b 100644 --- a/include/linux/ftrace.h +++ b/include/linux/ftrace.h | |||
| @@ -74,7 +74,7 @@ typedef void (*ftrace_func_t)(unsigned long ip, unsigned long parent_ip, | |||
| 74 | * SAVE_REGS - The ftrace_ops wants regs saved at each function called | 74 | * SAVE_REGS - The ftrace_ops wants regs saved at each function called |
| 75 | * and passed to the callback. If this flag is set, but the | 75 | * and passed to the callback. If this flag is set, but the |
| 76 | * architecture does not support passing regs | 76 | * architecture does not support passing regs |
| 77 | * (ARCH_SUPPORTS_FTRACE_SAVE_REGS is not defined), then the | 77 | * (CONFIG_DYNAMIC_FTRACE_WITH_REGS is not defined), then the |
| 78 | * ftrace_ops will fail to register, unless the next flag | 78 | * ftrace_ops will fail to register, unless the next flag |
| 79 | * is set. | 79 | * is set. |
| 80 | * SAVE_REGS_IF_SUPPORTED - This is the same as SAVE_REGS, but if the | 80 | * SAVE_REGS_IF_SUPPORTED - This is the same as SAVE_REGS, but if the |
| @@ -418,7 +418,7 @@ void ftrace_modify_all_code(int command); | |||
| 418 | #endif | 418 | #endif |
| 419 | 419 | ||
| 420 | #ifndef FTRACE_REGS_ADDR | 420 | #ifndef FTRACE_REGS_ADDR |
| 421 | #ifdef ARCH_SUPPORTS_FTRACE_SAVE_REGS | 421 | #ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS |
| 422 | # define FTRACE_REGS_ADDR ((unsigned long)ftrace_regs_caller) | 422 | # define FTRACE_REGS_ADDR ((unsigned long)ftrace_regs_caller) |
| 423 | #else | 423 | #else |
| 424 | # define FTRACE_REGS_ADDR FTRACE_ADDR | 424 | # define FTRACE_REGS_ADDR FTRACE_ADDR |
| @@ -480,7 +480,7 @@ extern int ftrace_make_nop(struct module *mod, | |||
| 480 | */ | 480 | */ |
| 481 | extern int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr); | 481 | extern int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr); |
| 482 | 482 | ||
| 483 | #ifdef ARCH_SUPPORTS_FTRACE_SAVE_REGS | 483 | #ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS |
| 484 | /** | 484 | /** |
| 485 | * ftrace_modify_call - convert from one addr to another (no nop) | 485 | * ftrace_modify_call - convert from one addr to another (no nop) |
| 486 | * @rec: the mcount call site record | 486 | * @rec: the mcount call site record |
diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h index a3d489531d83..13a54d0bdfa8 100644 --- a/include/linux/ftrace_event.h +++ b/include/linux/ftrace_event.h | |||
| @@ -49,7 +49,6 @@ struct trace_entry { | |||
| 49 | unsigned char flags; | 49 | unsigned char flags; |
| 50 | unsigned char preempt_count; | 50 | unsigned char preempt_count; |
| 51 | int pid; | 51 | int pid; |
| 52 | int padding; | ||
| 53 | }; | 52 | }; |
| 54 | 53 | ||
| 55 | #define FTRACE_MAX_EVENT \ | 54 | #define FTRACE_MAX_EVENT \ |
| @@ -84,6 +83,9 @@ struct trace_iterator { | |||
| 84 | long idx; | 83 | long idx; |
| 85 | 84 | ||
| 86 | cpumask_var_t started; | 85 | cpumask_var_t started; |
| 86 | |||
| 87 | /* it's true when current open file is snapshot */ | ||
| 88 | bool snapshot; | ||
| 87 | }; | 89 | }; |
| 88 | 90 | ||
| 89 | enum trace_iter_flags { | 91 | enum trace_iter_flags { |
| @@ -272,7 +274,7 @@ extern int trace_define_field(struct ftrace_event_call *call, const char *type, | |||
| 272 | extern int trace_add_event_call(struct ftrace_event_call *call); | 274 | extern int trace_add_event_call(struct ftrace_event_call *call); |
| 273 | extern void trace_remove_event_call(struct ftrace_event_call *call); | 275 | extern void trace_remove_event_call(struct ftrace_event_call *call); |
| 274 | 276 | ||
| 275 | #define is_signed_type(type) (((type)(-1)) < 0) | 277 | #define is_signed_type(type) (((type)(-1)) < (type)0) |
| 276 | 278 | ||
| 277 | int trace_set_clr_event(const char *system, const char *event, int set); | 279 | int trace_set_clr_event(const char *system, const char *event, int set); |
| 278 | 280 | ||
diff --git a/include/linux/hardirq.h b/include/linux/hardirq.h index 624ef3f45c8e..29eb805ea4a6 100644 --- a/include/linux/hardirq.h +++ b/include/linux/hardirq.h | |||
| @@ -153,7 +153,7 @@ extern void rcu_nmi_exit(void); | |||
| 153 | */ | 153 | */ |
| 154 | #define __irq_enter() \ | 154 | #define __irq_enter() \ |
| 155 | do { \ | 155 | do { \ |
| 156 | vtime_account_irq_enter(current); \ | 156 | account_irq_enter_time(current); \ |
| 157 | add_preempt_count(HARDIRQ_OFFSET); \ | 157 | add_preempt_count(HARDIRQ_OFFSET); \ |
| 158 | trace_hardirq_enter(); \ | 158 | trace_hardirq_enter(); \ |
| 159 | } while (0) | 159 | } while (0) |
| @@ -169,7 +169,7 @@ extern void irq_enter(void); | |||
| 169 | #define __irq_exit() \ | 169 | #define __irq_exit() \ |
| 170 | do { \ | 170 | do { \ |
| 171 | trace_hardirq_exit(); \ | 171 | trace_hardirq_exit(); \ |
| 172 | vtime_account_irq_exit(current); \ | 172 | account_irq_exit_time(current); \ |
| 173 | sub_preempt_count(HARDIRQ_OFFSET); \ | 173 | sub_preempt_count(HARDIRQ_OFFSET); \ |
| 174 | } while (0) | 174 | } while (0) |
| 175 | 175 | ||
| @@ -180,10 +180,10 @@ extern void irq_exit(void); | |||
| 180 | 180 | ||
| 181 | #define nmi_enter() \ | 181 | #define nmi_enter() \ |
| 182 | do { \ | 182 | do { \ |
| 183 | lockdep_off(); \ | ||
| 183 | ftrace_nmi_enter(); \ | 184 | ftrace_nmi_enter(); \ |
| 184 | BUG_ON(in_nmi()); \ | 185 | BUG_ON(in_nmi()); \ |
| 185 | add_preempt_count(NMI_OFFSET + HARDIRQ_OFFSET); \ | 186 | add_preempt_count(NMI_OFFSET + HARDIRQ_OFFSET); \ |
| 186 | lockdep_off(); \ | ||
| 187 | rcu_nmi_enter(); \ | 187 | rcu_nmi_enter(); \ |
| 188 | trace_hardirq_enter(); \ | 188 | trace_hardirq_enter(); \ |
| 189 | } while (0) | 189 | } while (0) |
| @@ -192,10 +192,10 @@ extern void irq_exit(void); | |||
| 192 | do { \ | 192 | do { \ |
| 193 | trace_hardirq_exit(); \ | 193 | trace_hardirq_exit(); \ |
| 194 | rcu_nmi_exit(); \ | 194 | rcu_nmi_exit(); \ |
| 195 | lockdep_on(); \ | ||
| 196 | BUG_ON(!in_nmi()); \ | 195 | BUG_ON(!in_nmi()); \ |
| 197 | sub_preempt_count(NMI_OFFSET + HARDIRQ_OFFSET); \ | 196 | sub_preempt_count(NMI_OFFSET + HARDIRQ_OFFSET); \ |
| 198 | ftrace_nmi_exit(); \ | 197 | ftrace_nmi_exit(); \ |
| 198 | lockdep_on(); \ | ||
| 199 | } while (0) | 199 | } while (0) |
| 200 | 200 | ||
| 201 | #endif /* LINUX_HARDIRQ_H */ | 201 | #endif /* LINUX_HARDIRQ_H */ |
diff --git a/include/linux/hwmon.h b/include/linux/hwmon.h index 82b29ae6ebb0..b2514f70d591 100644 --- a/include/linux/hwmon.h +++ b/include/linux/hwmon.h | |||
| @@ -20,16 +20,4 @@ struct device *hwmon_device_register(struct device *dev); | |||
| 20 | 20 | ||
| 21 | void hwmon_device_unregister(struct device *dev); | 21 | void hwmon_device_unregister(struct device *dev); |
| 22 | 22 | ||
| 23 | /* Scale user input to sensible values */ | ||
| 24 | static inline int SENSORS_LIMIT(long value, long low, long high) | ||
| 25 | { | ||
| 26 | if (value < low) | ||
| 27 | return low; | ||
| 28 | else if (value > high) | ||
| 29 | return high; | ||
| 30 | else | ||
| 31 | return value; | ||
| 32 | } | ||
| 33 | |||
| 34 | #endif | 23 | #endif |
| 35 | |||
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index f0859cc73861..7e24fe0cfbcd 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h | |||
| @@ -151,6 +151,11 @@ | |||
| 151 | /* Mesh Control 802.11s */ | 151 | /* Mesh Control 802.11s */ |
| 152 | #define IEEE80211_QOS_CTL_MESH_CONTROL_PRESENT 0x0100 | 152 | #define IEEE80211_QOS_CTL_MESH_CONTROL_PRESENT 0x0100 |
| 153 | 153 | ||
| 154 | /* Mesh Power Save Level */ | ||
| 155 | #define IEEE80211_QOS_CTL_MESH_PS_LEVEL 0x0200 | ||
| 156 | /* Mesh Receiver Service Period Initiated */ | ||
| 157 | #define IEEE80211_QOS_CTL_RSPI 0x0400 | ||
| 158 | |||
| 154 | /* U-APSD queue for WMM IEs sent by AP */ | 159 | /* U-APSD queue for WMM IEs sent by AP */ |
| 155 | #define IEEE80211_WMM_IE_AP_QOSINFO_UAPSD (1<<7) | 160 | #define IEEE80211_WMM_IE_AP_QOSINFO_UAPSD (1<<7) |
| 156 | #define IEEE80211_WMM_IE_AP_QOSINFO_PARAM_SET_CNT_MASK 0x0f | 161 | #define IEEE80211_WMM_IE_AP_QOSINFO_PARAM_SET_CNT_MASK 0x0f |
| @@ -180,7 +185,7 @@ struct ieee80211_hdr { | |||
| 180 | u8 addr3[6]; | 185 | u8 addr3[6]; |
| 181 | __le16 seq_ctrl; | 186 | __le16 seq_ctrl; |
| 182 | u8 addr4[6]; | 187 | u8 addr4[6]; |
| 183 | } __attribute__ ((packed)); | 188 | } __packed; |
| 184 | 189 | ||
| 185 | struct ieee80211_hdr_3addr { | 190 | struct ieee80211_hdr_3addr { |
| 186 | __le16 frame_control; | 191 | __le16 frame_control; |
| @@ -189,7 +194,7 @@ struct ieee80211_hdr_3addr { | |||
| 189 | u8 addr2[6]; | 194 | u8 addr2[6]; |
| 190 | u8 addr3[6]; | 195 | u8 addr3[6]; |
| 191 | __le16 seq_ctrl; | 196 | __le16 seq_ctrl; |
| 192 | } __attribute__ ((packed)); | 197 | } __packed; |
| 193 | 198 | ||
| 194 | struct ieee80211_qos_hdr { | 199 | struct ieee80211_qos_hdr { |
| 195 | __le16 frame_control; | 200 | __le16 frame_control; |
| @@ -199,7 +204,7 @@ struct ieee80211_qos_hdr { | |||
| 199 | u8 addr3[6]; | 204 | u8 addr3[6]; |
| 200 | __le16 seq_ctrl; | 205 | __le16 seq_ctrl; |
| 201 | __le16 qos_ctrl; | 206 | __le16 qos_ctrl; |
| 202 | } __attribute__ ((packed)); | 207 | } __packed; |
| 203 | 208 | ||
| 204 | /** | 209 | /** |
| 205 | * ieee80211_has_tods - check if IEEE80211_FCTL_TODS is set | 210 | * ieee80211_has_tods - check if IEEE80211_FCTL_TODS is set |
| @@ -576,7 +581,7 @@ struct ieee80211s_hdr { | |||
| 576 | __le32 seqnum; | 581 | __le32 seqnum; |
| 577 | u8 eaddr1[6]; | 582 | u8 eaddr1[6]; |
| 578 | u8 eaddr2[6]; | 583 | u8 eaddr2[6]; |
| 579 | } __attribute__ ((packed)); | 584 | } __packed; |
| 580 | 585 | ||
| 581 | /* Mesh flags */ | 586 | /* Mesh flags */ |
| 582 | #define MESH_FLAGS_AE_A4 0x1 | 587 | #define MESH_FLAGS_AE_A4 0x1 |
| @@ -614,7 +619,7 @@ struct ieee80211_quiet_ie { | |||
| 614 | u8 period; | 619 | u8 period; |
| 615 | __le16 duration; | 620 | __le16 duration; |
| 616 | __le16 offset; | 621 | __le16 offset; |
| 617 | } __attribute__ ((packed)); | 622 | } __packed; |
| 618 | 623 | ||
| 619 | /** | 624 | /** |
| 620 | * struct ieee80211_msrment_ie | 625 | * struct ieee80211_msrment_ie |
| @@ -626,7 +631,7 @@ struct ieee80211_msrment_ie { | |||
| 626 | u8 mode; | 631 | u8 mode; |
| 627 | u8 type; | 632 | u8 type; |
| 628 | u8 request[0]; | 633 | u8 request[0]; |
| 629 | } __attribute__ ((packed)); | 634 | } __packed; |
| 630 | 635 | ||
| 631 | /** | 636 | /** |
| 632 | * struct ieee80211_channel_sw_ie | 637 | * struct ieee80211_channel_sw_ie |
| @@ -637,7 +642,7 @@ struct ieee80211_channel_sw_ie { | |||
| 637 | u8 mode; | 642 | u8 mode; |
| 638 | u8 new_ch_num; | 643 | u8 new_ch_num; |
| 639 | u8 count; | 644 | u8 count; |
| 640 | } __attribute__ ((packed)); | 645 | } __packed; |
| 641 | 646 | ||
| 642 | /** | 647 | /** |
| 643 | * struct ieee80211_tim | 648 | * struct ieee80211_tim |
| @@ -650,7 +655,7 @@ struct ieee80211_tim_ie { | |||
| 650 | u8 bitmap_ctrl; | 655 | u8 bitmap_ctrl; |
| 651 | /* variable size: 1 - 251 bytes */ | 656 | /* variable size: 1 - 251 bytes */ |
| 652 | u8 virtual_map[1]; | 657 | u8 virtual_map[1]; |
| 653 | } __attribute__ ((packed)); | 658 | } __packed; |
| 654 | 659 | ||
| 655 | /** | 660 | /** |
| 656 | * struct ieee80211_meshconf_ie | 661 | * struct ieee80211_meshconf_ie |
| @@ -665,7 +670,7 @@ struct ieee80211_meshconf_ie { | |||
| 665 | u8 meshconf_auth; | 670 | u8 meshconf_auth; |
| 666 | u8 meshconf_form; | 671 | u8 meshconf_form; |
| 667 | u8 meshconf_cap; | 672 | u8 meshconf_cap; |
| 668 | } __attribute__ ((packed)); | 673 | } __packed; |
| 669 | 674 | ||
| 670 | /** | 675 | /** |
| 671 | * enum mesh_config_capab_flags - Mesh Configuration IE capability field flags | 676 | * enum mesh_config_capab_flags - Mesh Configuration IE capability field flags |
| @@ -675,11 +680,14 @@ struct ieee80211_meshconf_ie { | |||
| 675 | * @IEEE80211_MESHCONF_CAPAB_FORWARDING: the STA forwards MSDUs | 680 | * @IEEE80211_MESHCONF_CAPAB_FORWARDING: the STA forwards MSDUs |
| 676 | * @IEEE80211_MESHCONF_CAPAB_TBTT_ADJUSTING: TBTT adjustment procedure | 681 | * @IEEE80211_MESHCONF_CAPAB_TBTT_ADJUSTING: TBTT adjustment procedure |
| 677 | * is ongoing | 682 | * is ongoing |
| 683 | * @IEEE80211_MESHCONF_CAPAB_POWER_SAVE_LEVEL: STA is in deep sleep mode or has | ||
| 684 | * neighbors in deep sleep mode | ||
| 678 | */ | 685 | */ |
| 679 | enum mesh_config_capab_flags { | 686 | enum mesh_config_capab_flags { |
| 680 | IEEE80211_MESHCONF_CAPAB_ACCEPT_PLINKS = 0x01, | 687 | IEEE80211_MESHCONF_CAPAB_ACCEPT_PLINKS = 0x01, |
| 681 | IEEE80211_MESHCONF_CAPAB_FORWARDING = 0x08, | 688 | IEEE80211_MESHCONF_CAPAB_FORWARDING = 0x08, |
| 682 | IEEE80211_MESHCONF_CAPAB_TBTT_ADJUSTING = 0x20, | 689 | IEEE80211_MESHCONF_CAPAB_TBTT_ADJUSTING = 0x20, |
| 690 | IEEE80211_MESHCONF_CAPAB_POWER_SAVE_LEVEL = 0x40, | ||
| 683 | }; | 691 | }; |
| 684 | 692 | ||
| 685 | /** | 693 | /** |
| @@ -695,12 +703,41 @@ struct ieee80211_rann_ie { | |||
| 695 | __le32 rann_seq; | 703 | __le32 rann_seq; |
| 696 | __le32 rann_interval; | 704 | __le32 rann_interval; |
| 697 | __le32 rann_metric; | 705 | __le32 rann_metric; |
| 698 | } __attribute__ ((packed)); | 706 | } __packed; |
| 699 | 707 | ||
| 700 | enum ieee80211_rann_flags { | 708 | enum ieee80211_rann_flags { |
| 701 | RANN_FLAG_IS_GATE = 1 << 0, | 709 | RANN_FLAG_IS_GATE = 1 << 0, |
| 702 | }; | 710 | }; |
| 703 | 711 | ||
| 712 | enum ieee80211_ht_chanwidth_values { | ||
| 713 | IEEE80211_HT_CHANWIDTH_20MHZ = 0, | ||
| 714 | IEEE80211_HT_CHANWIDTH_ANY = 1, | ||
| 715 | }; | ||
| 716 | |||
| 717 | /** | ||
| 718 | * enum ieee80211_opmode_bits - VHT operating mode field bits | ||
| 719 | * @IEEE80211_OPMODE_NOTIF_CHANWIDTH_MASK: channel width mask | ||
| 720 | * @IEEE80211_OPMODE_NOTIF_CHANWIDTH_20MHZ: 20 MHz channel width | ||
| 721 | * @IEEE80211_OPMODE_NOTIF_CHANWIDTH_40MHZ: 40 MHz channel width | ||
| 722 | * @IEEE80211_OPMODE_NOTIF_CHANWIDTH_80MHZ: 80 MHz channel width | ||
| 723 | * @IEEE80211_OPMODE_NOTIF_CHANWIDTH_160MHZ: 160 MHz or 80+80 MHz channel width | ||
| 724 | * @IEEE80211_OPMODE_NOTIF_RX_NSS_MASK: number of spatial streams mask | ||
| 725 | * (the NSS value is the value of this field + 1) | ||
| 726 | * @IEEE80211_OPMODE_NOTIF_RX_NSS_SHIFT: number of spatial streams shift | ||
| 727 | * @IEEE80211_OPMODE_NOTIF_RX_NSS_TYPE_BF: indicates streams in SU-MIMO PPDU | ||
| 728 | * using a beamforming steering matrix | ||
| 729 | */ | ||
| 730 | enum ieee80211_vht_opmode_bits { | ||
| 731 | IEEE80211_OPMODE_NOTIF_CHANWIDTH_MASK = 3, | ||
| 732 | IEEE80211_OPMODE_NOTIF_CHANWIDTH_20MHZ = 0, | ||
| 733 | IEEE80211_OPMODE_NOTIF_CHANWIDTH_40MHZ = 1, | ||
| 734 | IEEE80211_OPMODE_NOTIF_CHANWIDTH_80MHZ = 2, | ||
| 735 | IEEE80211_OPMODE_NOTIF_CHANWIDTH_160MHZ = 3, | ||
| 736 | IEEE80211_OPMODE_NOTIF_RX_NSS_MASK = 0x70, | ||
| 737 | IEEE80211_OPMODE_NOTIF_RX_NSS_SHIFT = 4, | ||
| 738 | IEEE80211_OPMODE_NOTIF_RX_NSS_TYPE_BF = 0x80, | ||
| 739 | }; | ||
| 740 | |||
| 704 | #define WLAN_SA_QUERY_TR_ID_LEN 2 | 741 | #define WLAN_SA_QUERY_TR_ID_LEN 2 |
| 705 | 742 | ||
| 706 | struct ieee80211_mgmt { | 743 | struct ieee80211_mgmt { |
| @@ -717,33 +754,33 @@ struct ieee80211_mgmt { | |||
| 717 | __le16 status_code; | 754 | __le16 status_code; |
| 718 | /* possibly followed by Challenge text */ | 755 | /* possibly followed by Challenge text */ |
| 719 | u8 variable[0]; | 756 | u8 variable[0]; |
| 720 | } __attribute__ ((packed)) auth; | 757 | } __packed auth; |
| 721 | struct { | 758 | struct { |
| 722 | __le16 reason_code; | 759 | __le16 reason_code; |
| 723 | } __attribute__ ((packed)) deauth; | 760 | } __packed deauth; |
| 724 | struct { | 761 | struct { |
| 725 | __le16 capab_info; | 762 | __le16 capab_info; |
| 726 | __le16 listen_interval; | 763 | __le16 listen_interval; |
| 727 | /* followed by SSID and Supported rates */ | 764 | /* followed by SSID and Supported rates */ |
| 728 | u8 variable[0]; | 765 | u8 variable[0]; |
| 729 | } __attribute__ ((packed)) assoc_req; | 766 | } __packed assoc_req; |
| 730 | struct { | 767 | struct { |
| 731 | __le16 capab_info; | 768 | __le16 capab_info; |
| 732 | __le16 status_code; | 769 | __le16 status_code; |
| 733 | __le16 aid; | 770 | __le16 aid; |
| 734 | /* followed by Supported rates */ | 771 | /* followed by Supported rates */ |
| 735 | u8 variable[0]; | 772 | u8 variable[0]; |
| 736 | } __attribute__ ((packed)) assoc_resp, reassoc_resp; | 773 | } __packed assoc_resp, reassoc_resp; |
| 737 | struct { | 774 | struct { |
| 738 | __le16 capab_info; | 775 | __le16 capab_info; |
| 739 | __le16 listen_interval; | 776 | __le16 listen_interval; |
| 740 | u8 current_ap[6]; | 777 | u8 current_ap[6]; |
| 741 | /* followed by SSID and Supported rates */ | 778 | /* followed by SSID and Supported rates */ |
| 742 | u8 variable[0]; | 779 | u8 variable[0]; |
| 743 | } __attribute__ ((packed)) reassoc_req; | 780 | } __packed reassoc_req; |
| 744 | struct { | 781 | struct { |
| 745 | __le16 reason_code; | 782 | __le16 reason_code; |
| 746 | } __attribute__ ((packed)) disassoc; | 783 | } __packed disassoc; |
| 747 | struct { | 784 | struct { |
| 748 | __le64 timestamp; | 785 | __le64 timestamp; |
| 749 | __le16 beacon_int; | 786 | __le16 beacon_int; |
| @@ -751,11 +788,11 @@ struct ieee80211_mgmt { | |||
| 751 | /* followed by some of SSID, Supported rates, | 788 | /* followed by some of SSID, Supported rates, |
| 752 | * FH Params, DS Params, CF Params, IBSS Params, TIM */ | 789 | * FH Params, DS Params, CF Params, IBSS Params, TIM */ |
| 753 | u8 variable[0]; | 790 | u8 variable[0]; |
| 754 | } __attribute__ ((packed)) beacon; | 791 | } __packed beacon; |
| 755 | struct { | 792 | struct { |
| 756 | /* only variable items: SSID, Supported rates */ | 793 | /* only variable items: SSID, Supported rates */ |
| 757 | u8 variable[0]; | 794 | u8 variable[0]; |
| 758 | } __attribute__ ((packed)) probe_req; | 795 | } __packed probe_req; |
| 759 | struct { | 796 | struct { |
| 760 | __le64 timestamp; | 797 | __le64 timestamp; |
| 761 | __le16 beacon_int; | 798 | __le16 beacon_int; |
| @@ -763,7 +800,7 @@ struct ieee80211_mgmt { | |||
| 763 | /* followed by some of SSID, Supported rates, | 800 | /* followed by some of SSID, Supported rates, |
| 764 | * FH Params, DS Params, CF Params, IBSS Params */ | 801 | * FH Params, DS Params, CF Params, IBSS Params */ |
| 765 | u8 variable[0]; | 802 | u8 variable[0]; |
| 766 | } __attribute__ ((packed)) probe_resp; | 803 | } __packed probe_resp; |
| 767 | struct { | 804 | struct { |
| 768 | u8 category; | 805 | u8 category; |
| 769 | union { | 806 | union { |
| @@ -772,65 +809,73 @@ struct ieee80211_mgmt { | |||
| 772 | u8 dialog_token; | 809 | u8 dialog_token; |
| 773 | u8 status_code; | 810 | u8 status_code; |
| 774 | u8 variable[0]; | 811 | u8 variable[0]; |
| 775 | } __attribute__ ((packed)) wme_action; | 812 | } __packed wme_action; |
| 776 | struct{ | 813 | struct{ |
| 777 | u8 action_code; | 814 | u8 action_code; |
| 778 | u8 element_id; | 815 | u8 element_id; |
| 779 | u8 length; | 816 | u8 length; |
| 780 | struct ieee80211_channel_sw_ie sw_elem; | 817 | struct ieee80211_channel_sw_ie sw_elem; |
| 781 | } __attribute__((packed)) chan_switch; | 818 | } __packed chan_switch; |
| 782 | struct{ | 819 | struct{ |
| 783 | u8 action_code; | 820 | u8 action_code; |
| 784 | u8 dialog_token; | 821 | u8 dialog_token; |
| 785 | u8 element_id; | 822 | u8 element_id; |
| 786 | u8 length; | 823 | u8 length; |
| 787 | struct ieee80211_msrment_ie msr_elem; | 824 | struct ieee80211_msrment_ie msr_elem; |
| 788 | } __attribute__((packed)) measurement; | 825 | } __packed measurement; |
| 789 | struct{ | 826 | struct{ |
| 790 | u8 action_code; | 827 | u8 action_code; |
| 791 | u8 dialog_token; | 828 | u8 dialog_token; |
| 792 | __le16 capab; | 829 | __le16 capab; |
| 793 | __le16 timeout; | 830 | __le16 timeout; |
| 794 | __le16 start_seq_num; | 831 | __le16 start_seq_num; |
| 795 | } __attribute__((packed)) addba_req; | 832 | } __packed addba_req; |
| 796 | struct{ | 833 | struct{ |
| 797 | u8 action_code; | 834 | u8 action_code; |
| 798 | u8 dialog_token; | 835 | u8 dialog_token; |
| 799 | __le16 status; | 836 | __le16 status; |
| 800 | __le16 capab; | 837 | __le16 capab; |
| 801 | __le16 timeout; | 838 | __le16 timeout; |
| 802 | } __attribute__((packed)) addba_resp; | 839 | } __packed addba_resp; |
| 803 | struct{ | 840 | struct{ |
| 804 | u8 action_code; | 841 | u8 action_code; |
| 805 | __le16 params; | 842 | __le16 params; |
| 806 | __le16 reason_code; | 843 | __le16 reason_code; |
| 807 | } __attribute__((packed)) delba; | 844 | } __packed delba; |
| 808 | struct { | 845 | struct { |
| 809 | u8 action_code; | 846 | u8 action_code; |
| 810 | u8 variable[0]; | 847 | u8 variable[0]; |
| 811 | } __attribute__((packed)) self_prot; | 848 | } __packed self_prot; |
| 812 | struct{ | 849 | struct{ |
| 813 | u8 action_code; | 850 | u8 action_code; |
| 814 | u8 variable[0]; | 851 | u8 variable[0]; |
| 815 | } __attribute__((packed)) mesh_action; | 852 | } __packed mesh_action; |
| 816 | struct { | 853 | struct { |
| 817 | u8 action; | 854 | u8 action; |
| 818 | u8 trans_id[WLAN_SA_QUERY_TR_ID_LEN]; | 855 | u8 trans_id[WLAN_SA_QUERY_TR_ID_LEN]; |
| 819 | } __attribute__ ((packed)) sa_query; | 856 | } __packed sa_query; |
| 820 | struct { | 857 | struct { |
| 821 | u8 action; | 858 | u8 action; |
| 822 | u8 smps_control; | 859 | u8 smps_control; |
| 823 | } __attribute__ ((packed)) ht_smps; | 860 | } __packed ht_smps; |
| 861 | struct { | ||
| 862 | u8 action_code; | ||
| 863 | u8 chanwidth; | ||
| 864 | } __packed ht_notify_cw; | ||
| 824 | struct { | 865 | struct { |
| 825 | u8 action_code; | 866 | u8 action_code; |
| 826 | u8 dialog_token; | 867 | u8 dialog_token; |
| 827 | __le16 capability; | 868 | __le16 capability; |
| 828 | u8 variable[0]; | 869 | u8 variable[0]; |
| 829 | } __packed tdls_discover_resp; | 870 | } __packed tdls_discover_resp; |
| 871 | struct { | ||
| 872 | u8 action_code; | ||
| 873 | u8 operating_mode; | ||
| 874 | } __packed vht_opmode_notif; | ||
| 830 | } u; | 875 | } u; |
| 831 | } __attribute__ ((packed)) action; | 876 | } __packed action; |
| 832 | } u; | 877 | } u; |
| 833 | } __attribute__ ((packed)); | 878 | } __packed; |
| 834 | 879 | ||
| 835 | /* Supported Rates value encodings in 802.11n-2009 7.3.2.2 */ | 880 | /* Supported Rates value encodings in 802.11n-2009 7.3.2.2 */ |
| 836 | #define BSS_MEMBERSHIP_SELECTOR_HT_PHY 127 | 881 | #define BSS_MEMBERSHIP_SELECTOR_HT_PHY 127 |
| @@ -846,7 +891,7 @@ struct ieee80211_mmie { | |||
| 846 | __le16 key_id; | 891 | __le16 key_id; |
| 847 | u8 sequence_number[6]; | 892 | u8 sequence_number[6]; |
| 848 | u8 mic[8]; | 893 | u8 mic[8]; |
| 849 | } __attribute__ ((packed)); | 894 | } __packed; |
| 850 | 895 | ||
| 851 | struct ieee80211_vendor_ie { | 896 | struct ieee80211_vendor_ie { |
| 852 | u8 element_id; | 897 | u8 element_id; |
| @@ -861,20 +906,20 @@ struct ieee80211_rts { | |||
| 861 | __le16 duration; | 906 | __le16 duration; |
| 862 | u8 ra[6]; | 907 | u8 ra[6]; |
| 863 | u8 ta[6]; | 908 | u8 ta[6]; |
| 864 | } __attribute__ ((packed)); | 909 | } __packed; |
| 865 | 910 | ||
| 866 | struct ieee80211_cts { | 911 | struct ieee80211_cts { |
| 867 | __le16 frame_control; | 912 | __le16 frame_control; |
| 868 | __le16 duration; | 913 | __le16 duration; |
| 869 | u8 ra[6]; | 914 | u8 ra[6]; |
| 870 | } __attribute__ ((packed)); | 915 | } __packed; |
| 871 | 916 | ||
| 872 | struct ieee80211_pspoll { | 917 | struct ieee80211_pspoll { |
| 873 | __le16 frame_control; | 918 | __le16 frame_control; |
| 874 | __le16 aid; | 919 | __le16 aid; |
| 875 | u8 bssid[6]; | 920 | u8 bssid[6]; |
| 876 | u8 ta[6]; | 921 | u8 ta[6]; |
| 877 | } __attribute__ ((packed)); | 922 | } __packed; |
| 878 | 923 | ||
| 879 | /* TDLS */ | 924 | /* TDLS */ |
| 880 | 925 | ||
| @@ -967,7 +1012,7 @@ struct ieee80211_bar { | |||
| 967 | __u8 ta[6]; | 1012 | __u8 ta[6]; |
| 968 | __le16 control; | 1013 | __le16 control; |
| 969 | __le16 start_seq_num; | 1014 | __le16 start_seq_num; |
| 970 | } __attribute__((packed)); | 1015 | } __packed; |
| 971 | 1016 | ||
| 972 | /* 802.11 BAR control masks */ | 1017 | /* 802.11 BAR control masks */ |
| 973 | #define IEEE80211_BAR_CTRL_ACK_POLICY_NORMAL 0x0000 | 1018 | #define IEEE80211_BAR_CTRL_ACK_POLICY_NORMAL 0x0000 |
| @@ -992,7 +1037,7 @@ struct ieee80211_mcs_info { | |||
| 992 | __le16 rx_highest; | 1037 | __le16 rx_highest; |
| 993 | u8 tx_params; | 1038 | u8 tx_params; |
| 994 | u8 reserved[3]; | 1039 | u8 reserved[3]; |
| 995 | } __attribute__((packed)); | 1040 | } __packed; |
| 996 | 1041 | ||
| 997 | /* 802.11n HT capability MSC set */ | 1042 | /* 802.11n HT capability MSC set */ |
| 998 | #define IEEE80211_HT_MCS_RX_HIGHEST_MASK 0x3ff | 1043 | #define IEEE80211_HT_MCS_RX_HIGHEST_MASK 0x3ff |
| @@ -1031,7 +1076,7 @@ struct ieee80211_ht_cap { | |||
| 1031 | __le16 extended_ht_cap_info; | 1076 | __le16 extended_ht_cap_info; |
| 1032 | __le32 tx_BF_cap_info; | 1077 | __le32 tx_BF_cap_info; |
| 1033 | u8 antenna_selection_info; | 1078 | u8 antenna_selection_info; |
| 1034 | } __attribute__ ((packed)); | 1079 | } __packed; |
| 1035 | 1080 | ||
| 1036 | /* 802.11n HT capabilities masks (for cap_info) */ | 1081 | /* 802.11n HT capabilities masks (for cap_info) */ |
| 1037 | #define IEEE80211_HT_CAP_LDPC_CODING 0x0001 | 1082 | #define IEEE80211_HT_CAP_LDPC_CODING 0x0001 |
| @@ -1102,7 +1147,7 @@ struct ieee80211_ht_operation { | |||
| 1102 | __le16 operation_mode; | 1147 | __le16 operation_mode; |
| 1103 | __le16 stbc_param; | 1148 | __le16 stbc_param; |
| 1104 | u8 basic_set[16]; | 1149 | u8 basic_set[16]; |
| 1105 | } __attribute__ ((packed)); | 1150 | } __packed; |
| 1106 | 1151 | ||
| 1107 | /* for ht_param */ | 1152 | /* for ht_param */ |
| 1108 | #define IEEE80211_HT_PARAM_CHA_SEC_OFFSET 0x03 | 1153 | #define IEEE80211_HT_PARAM_CHA_SEC_OFFSET 0x03 |
| @@ -1256,6 +1301,7 @@ struct ieee80211_vht_operation { | |||
| 1256 | #define IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454 0x00000002 | 1301 | #define IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454 0x00000002 |
| 1257 | #define IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ 0x00000004 | 1302 | #define IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ 0x00000004 |
| 1258 | #define IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ 0x00000008 | 1303 | #define IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ 0x00000008 |
| 1304 | #define IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK 0x0000000C | ||
| 1259 | #define IEEE80211_VHT_CAP_RXLDPC 0x00000010 | 1305 | #define IEEE80211_VHT_CAP_RXLDPC 0x00000010 |
| 1260 | #define IEEE80211_VHT_CAP_SHORT_GI_80 0x00000020 | 1306 | #define IEEE80211_VHT_CAP_SHORT_GI_80 0x00000020 |
| 1261 | #define IEEE80211_VHT_CAP_SHORT_GI_160 0x00000040 | 1307 | #define IEEE80211_VHT_CAP_SHORT_GI_160 0x00000040 |
| @@ -1311,16 +1357,21 @@ struct ieee80211_vht_operation { | |||
| 1311 | #define WLAN_CAPABILITY_SPECTRUM_MGMT (1<<8) | 1357 | #define WLAN_CAPABILITY_SPECTRUM_MGMT (1<<8) |
| 1312 | #define WLAN_CAPABILITY_QOS (1<<9) | 1358 | #define WLAN_CAPABILITY_QOS (1<<9) |
| 1313 | #define WLAN_CAPABILITY_SHORT_SLOT_TIME (1<<10) | 1359 | #define WLAN_CAPABILITY_SHORT_SLOT_TIME (1<<10) |
| 1360 | #define WLAN_CAPABILITY_APSD (1<<11) | ||
| 1361 | #define WLAN_CAPABILITY_RADIO_MEASURE (1<<12) | ||
| 1314 | #define WLAN_CAPABILITY_DSSS_OFDM (1<<13) | 1362 | #define WLAN_CAPABILITY_DSSS_OFDM (1<<13) |
| 1363 | #define WLAN_CAPABILITY_DEL_BACK (1<<14) | ||
| 1364 | #define WLAN_CAPABILITY_IMM_BACK (1<<15) | ||
| 1315 | 1365 | ||
| 1316 | /* DMG (60gHz) 802.11ad */ | 1366 | /* DMG (60gHz) 802.11ad */ |
| 1317 | /* type - bits 0..1 */ | 1367 | /* type - bits 0..1 */ |
| 1368 | #define WLAN_CAPABILITY_DMG_TYPE_MASK (3<<0) | ||
| 1318 | #define WLAN_CAPABILITY_DMG_TYPE_IBSS (1<<0) /* Tx by: STA */ | 1369 | #define WLAN_CAPABILITY_DMG_TYPE_IBSS (1<<0) /* Tx by: STA */ |
| 1319 | #define WLAN_CAPABILITY_DMG_TYPE_PBSS (2<<0) /* Tx by: PCP */ | 1370 | #define WLAN_CAPABILITY_DMG_TYPE_PBSS (2<<0) /* Tx by: PCP */ |
| 1320 | #define WLAN_CAPABILITY_DMG_TYPE_AP (3<<0) /* Tx by: AP */ | 1371 | #define WLAN_CAPABILITY_DMG_TYPE_AP (3<<0) /* Tx by: AP */ |
| 1321 | 1372 | ||
| 1322 | #define WLAN_CAPABILITY_DMG_CBAP_ONLY (1<<2) | 1373 | #define WLAN_CAPABILITY_DMG_CBAP_ONLY (1<<2) |
| 1323 | #define WLAN_CAPABILITY_DMG_CBAP_SOURCE (1<<3) | 1374 | #define WLAN_CAPABILITY_DMG_CBAP_SOURCE (1<<3) |
| 1324 | #define WLAN_CAPABILITY_DMG_PRIVACY (1<<4) | 1375 | #define WLAN_CAPABILITY_DMG_PRIVACY (1<<4) |
| 1325 | #define WLAN_CAPABILITY_DMG_ECPAC (1<<5) | 1376 | #define WLAN_CAPABILITY_DMG_ECPAC (1<<5) |
| 1326 | 1377 | ||
| @@ -1576,6 +1627,7 @@ enum ieee80211_eid { | |||
| 1576 | 1627 | ||
| 1577 | WLAN_EID_VHT_CAPABILITY = 191, | 1628 | WLAN_EID_VHT_CAPABILITY = 191, |
| 1578 | WLAN_EID_VHT_OPERATION = 192, | 1629 | WLAN_EID_VHT_OPERATION = 192, |
| 1630 | WLAN_EID_OPMODE_NOTIF = 199, | ||
| 1579 | 1631 | ||
| 1580 | /* 802.11ad */ | 1632 | /* 802.11ad */ |
| 1581 | WLAN_EID_NON_TX_BSSID_CAP = 83, | 1633 | WLAN_EID_NON_TX_BSSID_CAP = 83, |
| @@ -1630,6 +1682,7 @@ enum ieee80211_category { | |||
| 1630 | WLAN_CATEGORY_WMM = 17, | 1682 | WLAN_CATEGORY_WMM = 17, |
| 1631 | WLAN_CATEGORY_FST = 18, | 1683 | WLAN_CATEGORY_FST = 18, |
| 1632 | WLAN_CATEGORY_UNPROT_DMG = 20, | 1684 | WLAN_CATEGORY_UNPROT_DMG = 20, |
| 1685 | WLAN_CATEGORY_VHT = 21, | ||
| 1633 | WLAN_CATEGORY_VENDOR_SPECIFIC_PROTECTED = 126, | 1686 | WLAN_CATEGORY_VENDOR_SPECIFIC_PROTECTED = 126, |
| 1634 | WLAN_CATEGORY_VENDOR_SPECIFIC = 127, | 1687 | WLAN_CATEGORY_VENDOR_SPECIFIC = 127, |
| 1635 | }; | 1688 | }; |
| @@ -1655,6 +1708,13 @@ enum ieee80211_ht_actioncode { | |||
| 1655 | WLAN_HT_ACTION_ASEL_IDX_FEEDBACK = 7, | 1708 | WLAN_HT_ACTION_ASEL_IDX_FEEDBACK = 7, |
| 1656 | }; | 1709 | }; |
| 1657 | 1710 | ||
| 1711 | /* VHT action codes */ | ||
| 1712 | enum ieee80211_vht_actioncode { | ||
| 1713 | WLAN_VHT_ACTION_COMPRESSED_BF = 0, | ||
| 1714 | WLAN_VHT_ACTION_GROUPID_MGMT = 1, | ||
| 1715 | WLAN_VHT_ACTION_OPMODE_NOTIF = 2, | ||
| 1716 | }; | ||
| 1717 | |||
| 1658 | /* Self Protected Action codes */ | 1718 | /* Self Protected Action codes */ |
| 1659 | enum ieee80211_self_protected_actioncode { | 1719 | enum ieee80211_self_protected_actioncode { |
| 1660 | WLAN_SP_RESERVED = 0, | 1720 | WLAN_SP_RESERVED = 0, |
| @@ -1716,6 +1776,8 @@ enum ieee80211_tdls_actioncode { | |||
| 1716 | #define WLAN_EXT_CAPA5_TDLS_ENABLED BIT(5) | 1776 | #define WLAN_EXT_CAPA5_TDLS_ENABLED BIT(5) |
| 1717 | #define WLAN_EXT_CAPA5_TDLS_PROHIBITED BIT(6) | 1777 | #define WLAN_EXT_CAPA5_TDLS_PROHIBITED BIT(6) |
| 1718 | 1778 | ||
| 1779 | #define WLAN_EXT_CAPA8_OPMODE_NOTIF BIT(6) | ||
| 1780 | |||
| 1719 | /* TDLS specific payload type in the LLC/SNAP header */ | 1781 | /* TDLS specific payload type in the LLC/SNAP header */ |
| 1720 | #define WLAN_TDLS_SNAP_RFTYPE 0x2 | 1782 | #define WLAN_TDLS_SNAP_RFTYPE 0x2 |
| 1721 | 1783 | ||
| @@ -1834,14 +1896,14 @@ struct ieee80211_country_ie_triplet { | |||
| 1834 | u8 first_channel; | 1896 | u8 first_channel; |
| 1835 | u8 num_channels; | 1897 | u8 num_channels; |
| 1836 | s8 max_power; | 1898 | s8 max_power; |
| 1837 | } __attribute__ ((packed)) chans; | 1899 | } __packed chans; |
| 1838 | struct { | 1900 | struct { |
| 1839 | u8 reg_extension_id; | 1901 | u8 reg_extension_id; |
| 1840 | u8 reg_class; | 1902 | u8 reg_class; |
| 1841 | u8 coverage_class; | 1903 | u8 coverage_class; |
| 1842 | } __attribute__ ((packed)) ext; | 1904 | } __packed ext; |
| 1843 | }; | 1905 | }; |
| 1844 | } __attribute__ ((packed)); | 1906 | } __packed; |
| 1845 | 1907 | ||
| 1846 | enum ieee80211_timeout_interval_type { | 1908 | enum ieee80211_timeout_interval_type { |
| 1847 | WLAN_TIMEOUT_REASSOC_DEADLINE = 1 /* 802.11r */, | 1909 | WLAN_TIMEOUT_REASSOC_DEADLINE = 1 /* 802.11r */, |
| @@ -1884,7 +1946,10 @@ enum ieee80211_sa_query_action { | |||
| 1884 | /* AKM suite selectors */ | 1946 | /* AKM suite selectors */ |
| 1885 | #define WLAN_AKM_SUITE_8021X 0x000FAC01 | 1947 | #define WLAN_AKM_SUITE_8021X 0x000FAC01 |
| 1886 | #define WLAN_AKM_SUITE_PSK 0x000FAC02 | 1948 | #define WLAN_AKM_SUITE_PSK 0x000FAC02 |
| 1887 | #define WLAN_AKM_SUITE_SAE 0x000FAC08 | 1949 | #define WLAN_AKM_SUITE_8021X_SHA256 0x000FAC05 |
| 1950 | #define WLAN_AKM_SUITE_PSK_SHA256 0x000FAC06 | ||
| 1951 | #define WLAN_AKM_SUITE_TDLS 0x000FAC07 | ||
| 1952 | #define WLAN_AKM_SUITE_SAE 0x000FAC08 | ||
| 1888 | #define WLAN_AKM_SUITE_FT_OVER_SAE 0x000FAC09 | 1953 | #define WLAN_AKM_SUITE_FT_OVER_SAE 0x000FAC09 |
| 1889 | 1954 | ||
| 1890 | #define WLAN_MAX_KEY_LEN 32 | 1955 | #define WLAN_MAX_KEY_LEN 32 |
| @@ -2089,7 +2154,7 @@ static inline unsigned long ieee80211_tu_to_usec(unsigned long tu) | |||
| 2089 | * @tim_len: length of the TIM IE | 2154 | * @tim_len: length of the TIM IE |
| 2090 | * @aid: the AID to look for | 2155 | * @aid: the AID to look for |
| 2091 | */ | 2156 | */ |
| 2092 | static inline bool ieee80211_check_tim(struct ieee80211_tim_ie *tim, | 2157 | static inline bool ieee80211_check_tim(const struct ieee80211_tim_ie *tim, |
| 2093 | u8 tim_len, u16 aid) | 2158 | u8 tim_len, u16 aid) |
| 2094 | { | 2159 | { |
| 2095 | u8 mask; | 2160 | u8 mask; |
diff --git a/include/linux/if_macvlan.h b/include/linux/if_macvlan.h index f65e8d250f7e..84dde1dd1da4 100644 --- a/include/linux/if_macvlan.h +++ b/include/linux/if_macvlan.h | |||
| @@ -52,6 +52,9 @@ struct macvlan_pcpu_stats { | |||
| 52 | */ | 52 | */ |
| 53 | #define MAX_MACVTAP_QUEUES (NR_CPUS < 16 ? NR_CPUS : 16) | 53 | #define MAX_MACVTAP_QUEUES (NR_CPUS < 16 ? NR_CPUS : 16) |
| 54 | 54 | ||
| 55 | #define MACVLAN_MC_FILTER_BITS 8 | ||
| 56 | #define MACVLAN_MC_FILTER_SZ (1 << MACVLAN_MC_FILTER_BITS) | ||
| 57 | |||
| 55 | struct macvlan_dev { | 58 | struct macvlan_dev { |
| 56 | struct net_device *dev; | 59 | struct net_device *dev; |
| 57 | struct list_head list; | 60 | struct list_head list; |
| @@ -59,6 +62,9 @@ struct macvlan_dev { | |||
| 59 | struct macvlan_port *port; | 62 | struct macvlan_port *port; |
| 60 | struct net_device *lowerdev; | 63 | struct net_device *lowerdev; |
| 61 | struct macvlan_pcpu_stats __percpu *pcpu_stats; | 64 | struct macvlan_pcpu_stats __percpu *pcpu_stats; |
| 65 | |||
| 66 | DECLARE_BITMAP(mc_filter, MACVLAN_MC_FILTER_SZ); | ||
| 67 | |||
| 62 | enum macvlan_mode mode; | 68 | enum macvlan_mode mode; |
| 63 | u16 flags; | 69 | u16 flags; |
| 64 | int (*receive)(struct sk_buff *skb); | 70 | int (*receive)(struct sk_buff *skb); |
diff --git a/include/linux/if_team.h b/include/linux/if_team.h index 0245def2aa93..4648d8021244 100644 --- a/include/linux/if_team.h +++ b/include/linux/if_team.h | |||
| @@ -186,6 +186,7 @@ struct team { | |||
| 186 | 186 | ||
| 187 | const struct team_mode *mode; | 187 | const struct team_mode *mode; |
| 188 | struct team_mode_ops ops; | 188 | struct team_mode_ops ops; |
| 189 | bool user_carrier_enabled; | ||
| 189 | bool queue_override_enabled; | 190 | bool queue_override_enabled; |
| 190 | struct list_head *qom_lists; /* array of queue override mapping lists */ | 191 | struct list_head *qom_lists; /* array of queue override mapping lists */ |
| 191 | long mode_priv[TEAM_MODE_PRIV_LONGS]; | 192 | long mode_priv[TEAM_MODE_PRIV_LONGS]; |
diff --git a/include/linux/in6.h b/include/linux/in6.h index 9e2ae26fb598..34edf1f6c9a3 100644 --- a/include/linux/in6.h +++ b/include/linux/in6.h | |||
| @@ -22,6 +22,10 @@ | |||
| 22 | 22 | ||
| 23 | #include <uapi/linux/in6.h> | 23 | #include <uapi/linux/in6.h> |
| 24 | 24 | ||
| 25 | /* IPv6 Wildcard Address (::) and Loopback Address (::1) defined in RFC2553 | ||
| 26 | * NOTE: Be aware the IN6ADDR_* constants and in6addr_* externals are defined | ||
| 27 | * in network byte order, not in host byte order as are the IPv4 equivalents | ||
| 28 | */ | ||
| 25 | extern const struct in6_addr in6addr_any; | 29 | extern const struct in6_addr in6addr_any; |
| 26 | #define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } } | 30 | #define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } } |
| 27 | extern const struct in6_addr in6addr_loopback; | 31 | extern const struct in6_addr in6addr_loopback; |
| @@ -32,4 +36,13 @@ extern const struct in6_addr in6addr_linklocal_allnodes; | |||
| 32 | extern const struct in6_addr in6addr_linklocal_allrouters; | 36 | extern const struct in6_addr in6addr_linklocal_allrouters; |
| 33 | #define IN6ADDR_LINKLOCAL_ALLROUTERS_INIT \ | 37 | #define IN6ADDR_LINKLOCAL_ALLROUTERS_INIT \ |
| 34 | { { { 0xff,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2 } } } | 38 | { { { 0xff,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2 } } } |
| 39 | extern const struct in6_addr in6addr_interfacelocal_allnodes; | ||
| 40 | #define IN6ADDR_INTERFACELOCAL_ALLNODES_INIT \ | ||
| 41 | { { { 0xff,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } } | ||
| 42 | extern const struct in6_addr in6addr_interfacelocal_allrouters; | ||
| 43 | #define IN6ADDR_INTERFACELOCAL_ALLROUTERS_INIT \ | ||
| 44 | { { { 0xff,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2 } } } | ||
| 45 | extern const struct in6_addr in6addr_sitelocal_allrouters; | ||
| 46 | #define IN6ADDR_SITELOCAL_ALLROUTERS_INIT \ | ||
| 47 | { { { 0xff,5,0,0,0,0,0,0,0,0,0,0,0,0,0,2 } } } | ||
| 35 | #endif | 48 | #endif |
diff --git a/include/linux/inetdevice.h b/include/linux/inetdevice.h index a9d828976a77..ea1e3b863890 100644 --- a/include/linux/inetdevice.h +++ b/include/linux/inetdevice.h | |||
| @@ -166,6 +166,12 @@ struct in_ifaddr { | |||
| 166 | unsigned char ifa_flags; | 166 | unsigned char ifa_flags; |
| 167 | unsigned char ifa_prefixlen; | 167 | unsigned char ifa_prefixlen; |
| 168 | char ifa_label[IFNAMSIZ]; | 168 | char ifa_label[IFNAMSIZ]; |
| 169 | |||
| 170 | /* In seconds, relative to tstamp. Expiry is at tstamp + HZ * lft. */ | ||
| 171 | __u32 ifa_valid_lft; | ||
| 172 | __u32 ifa_preferred_lft; | ||
| 173 | unsigned long ifa_cstamp; /* created timestamp */ | ||
| 174 | unsigned long ifa_tstamp; /* updated timestamp */ | ||
| 169 | }; | 175 | }; |
| 170 | 176 | ||
| 171 | extern int register_inetaddr_notifier(struct notifier_block *nb); | 177 | extern int register_inetaddr_notifier(struct notifier_block *nb); |
diff --git a/include/linux/init.h b/include/linux/init.h index 10ed4f436458..861814710d52 100644 --- a/include/linux/init.h +++ b/include/linux/init.h | |||
| @@ -153,6 +153,7 @@ extern unsigned int reset_devices; | |||
| 153 | /* used by init/main.c */ | 153 | /* used by init/main.c */ |
| 154 | void setup_arch(char **); | 154 | void setup_arch(char **); |
| 155 | void prepare_namespace(void); | 155 | void prepare_namespace(void); |
| 156 | void __init load_default_modules(void); | ||
| 156 | 157 | ||
| 157 | extern void (*late_time_init)(void); | 158 | extern void (*late_time_init)(void); |
| 158 | 159 | ||
diff --git a/include/linux/init_task.h b/include/linux/init_task.h index 6d087c5f57f7..5cd0f0949927 100644 --- a/include/linux/init_task.h +++ b/include/linux/init_task.h | |||
| @@ -10,7 +10,9 @@ | |||
| 10 | #include <linux/pid_namespace.h> | 10 | #include <linux/pid_namespace.h> |
| 11 | #include <linux/user_namespace.h> | 11 | #include <linux/user_namespace.h> |
| 12 | #include <linux/securebits.h> | 12 | #include <linux/securebits.h> |
| 13 | #include <linux/seqlock.h> | ||
| 13 | #include <net/net_namespace.h> | 14 | #include <net/net_namespace.h> |
| 15 | #include <linux/sched/rt.h> | ||
| 14 | 16 | ||
| 15 | #ifdef CONFIG_SMP | 17 | #ifdef CONFIG_SMP |
| 16 | # define INIT_PUSHABLE_TASKS(tsk) \ | 18 | # define INIT_PUSHABLE_TASKS(tsk) \ |
| @@ -141,6 +143,15 @@ extern struct task_group root_task_group; | |||
| 141 | # define INIT_PERF_EVENTS(tsk) | 143 | # define INIT_PERF_EVENTS(tsk) |
| 142 | #endif | 144 | #endif |
| 143 | 145 | ||
| 146 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN | ||
| 147 | # define INIT_VTIME(tsk) \ | ||
| 148 | .vtime_seqlock = __SEQLOCK_UNLOCKED(tsk.vtime_seqlock), \ | ||
| 149 | .vtime_snap = 0, \ | ||
| 150 | .vtime_snap_whence = VTIME_SYS, | ||
| 151 | #else | ||
| 152 | # define INIT_VTIME(tsk) | ||
| 153 | #endif | ||
| 154 | |||
| 144 | #define INIT_TASK_COMM "swapper" | 155 | #define INIT_TASK_COMM "swapper" |
| 145 | 156 | ||
| 146 | /* | 157 | /* |
| @@ -210,6 +221,7 @@ extern struct task_group root_task_group; | |||
| 210 | INIT_TRACE_RECURSION \ | 221 | INIT_TRACE_RECURSION \ |
| 211 | INIT_TASK_RCU_PREEMPT(tsk) \ | 222 | INIT_TASK_RCU_PREEMPT(tsk) \ |
| 212 | INIT_CPUSET_SEQ \ | 223 | INIT_CPUSET_SEQ \ |
| 224 | INIT_VTIME(tsk) \ | ||
| 213 | } | 225 | } |
| 214 | 226 | ||
| 215 | 227 | ||
diff --git a/include/linux/input/adxl34x.h b/include/linux/input/adxl34x.h index 57e01a7cb006..010d98175efa 100644 --- a/include/linux/input/adxl34x.h +++ b/include/linux/input/adxl34x.h | |||
| @@ -13,6 +13,8 @@ | |||
| 13 | #ifndef __LINUX_INPUT_ADXL34X_H__ | 13 | #ifndef __LINUX_INPUT_ADXL34X_H__ |
| 14 | #define __LINUX_INPUT_ADXL34X_H__ | 14 | #define __LINUX_INPUT_ADXL34X_H__ |
| 15 | 15 | ||
| 16 | #include <linux/input.h> | ||
| 17 | |||
| 16 | struct adxl34x_platform_data { | 18 | struct adxl34x_platform_data { |
| 17 | 19 | ||
| 18 | /* | 20 | /* |
diff --git a/include/linux/input/tegra_kbc.h b/include/linux/input/tegra_kbc.h deleted file mode 100644 index a13025612939..000000000000 --- a/include/linux/input/tegra_kbc.h +++ /dev/null | |||
| @@ -1,62 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Platform definitions for tegra-kbc keyboard input driver | ||
| 3 | * | ||
| 4 | * Copyright (c) 2010-2011, NVIDIA Corporation. | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License as published by | ||
| 8 | * the Free Software Foundation; either version 2 of the License, or | ||
| 9 | * (at your option) any later version. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, but WITHOUT | ||
| 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
| 14 | * more details. | ||
| 15 | * | ||
| 16 | * You should have received a copy of the GNU General Public License along | ||
| 17 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
| 19 | */ | ||
| 20 | |||
| 21 | #ifndef ASMARM_ARCH_TEGRA_KBC_H | ||
| 22 | #define ASMARM_ARCH_TEGRA_KBC_H | ||
| 23 | |||
| 24 | #include <linux/types.h> | ||
| 25 | #include <linux/input/matrix_keypad.h> | ||
| 26 | |||
| 27 | #define KBC_MAX_GPIO 24 | ||
| 28 | #define KBC_MAX_KPENT 8 | ||
| 29 | |||
| 30 | #define KBC_MAX_ROW 16 | ||
| 31 | #define KBC_MAX_COL 8 | ||
| 32 | #define KBC_MAX_KEY (KBC_MAX_ROW * KBC_MAX_COL) | ||
| 33 | |||
| 34 | enum tegra_pin_type { | ||
| 35 | PIN_CFG_IGNORE, | ||
| 36 | PIN_CFG_COL, | ||
| 37 | PIN_CFG_ROW, | ||
| 38 | }; | ||
| 39 | |||
| 40 | struct tegra_kbc_pin_cfg { | ||
| 41 | enum tegra_pin_type type; | ||
| 42 | unsigned char num; | ||
| 43 | }; | ||
| 44 | |||
| 45 | struct tegra_kbc_wake_key { | ||
| 46 | u8 row:4; | ||
| 47 | u8 col:4; | ||
| 48 | }; | ||
| 49 | |||
| 50 | struct tegra_kbc_platform_data { | ||
| 51 | unsigned int debounce_cnt; | ||
| 52 | unsigned int repeat_cnt; | ||
| 53 | |||
| 54 | struct tegra_kbc_pin_cfg pin_cfg[KBC_MAX_GPIO]; | ||
| 55 | const struct matrix_keymap_data *keymap_data; | ||
| 56 | |||
| 57 | u32 wakeup_key; | ||
| 58 | bool wakeup; | ||
| 59 | bool use_fn_map; | ||
| 60 | bool use_ghost_filter; | ||
| 61 | }; | ||
| 62 | #endif | ||
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h index faed1e357dd6..850e95bc766c 100644 --- a/include/linux/ipv6.h +++ b/include/linux/ipv6.h | |||
| @@ -77,11 +77,6 @@ static inline struct ipv6hdr *ipipv6_hdr(const struct sk_buff *skb) | |||
| 77 | return (struct ipv6hdr *)skb_transport_header(skb); | 77 | return (struct ipv6hdr *)skb_transport_header(skb); |
| 78 | } | 78 | } |
| 79 | 79 | ||
| 80 | static inline __u8 ipv6_tclass(const struct ipv6hdr *iph) | ||
| 81 | { | ||
| 82 | return (ntohl(*(__be32 *)iph) >> 20) & 0xff; | ||
| 83 | } | ||
| 84 | |||
| 85 | /* | 80 | /* |
| 86 | This structure contains results of exthdrs parsing | 81 | This structure contains results of exthdrs parsing |
| 87 | as offsets from skb->nh. | 82 | as offsets from skb->nh. |
| @@ -89,7 +84,7 @@ static inline __u8 ipv6_tclass(const struct ipv6hdr *iph) | |||
| 89 | 84 | ||
| 90 | struct inet6_skb_parm { | 85 | struct inet6_skb_parm { |
| 91 | int iif; | 86 | int iif; |
| 92 | __u16 ra; | 87 | __be16 ra; |
| 93 | __u16 hop; | 88 | __u16 hop; |
| 94 | __u16 dst0; | 89 | __u16 dst0; |
| 95 | __u16 srcrt; | 90 | __u16 srcrt; |
| @@ -105,6 +100,7 @@ struct inet6_skb_parm { | |||
| 105 | #define IP6SKB_XFRM_TRANSFORMED 1 | 100 | #define IP6SKB_XFRM_TRANSFORMED 1 |
| 106 | #define IP6SKB_FORWARDED 2 | 101 | #define IP6SKB_FORWARDED 2 |
| 107 | #define IP6SKB_REROUTED 4 | 102 | #define IP6SKB_REROUTED 4 |
| 103 | #define IP6SKB_ROUTERALERT 8 | ||
| 108 | }; | 104 | }; |
| 109 | 105 | ||
| 110 | #define IP6CB(skb) ((struct inet6_skb_parm*)((skb)->cb)) | 106 | #define IP6CB(skb) ((struct inet6_skb_parm*)((skb)->cb)) |
| @@ -218,7 +214,7 @@ struct ipv6_pinfo { | |||
| 218 | 214 | ||
| 219 | struct ipv6_mc_socklist __rcu *ipv6_mc_list; | 215 | struct ipv6_mc_socklist __rcu *ipv6_mc_list; |
| 220 | struct ipv6_ac_socklist *ipv6_ac_list; | 216 | struct ipv6_ac_socklist *ipv6_ac_list; |
| 221 | struct ipv6_fl_socklist *ipv6_fl_list; | 217 | struct ipv6_fl_socklist __rcu *ipv6_fl_list; |
| 222 | 218 | ||
| 223 | struct ipv6_txoptions *opt; | 219 | struct ipv6_txoptions *opt; |
| 224 | struct sk_buff *pktoptions; | 220 | struct sk_buff *pktoptions; |
diff --git a/include/linux/irq.h b/include/linux/irq.h index fdf2c4a238cc..bc4e06611958 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h | |||
| @@ -509,8 +509,11 @@ static inline void irq_set_percpu_devid_flags(unsigned int irq) | |||
| 509 | 509 | ||
| 510 | /* Handle dynamic irq creation and destruction */ | 510 | /* Handle dynamic irq creation and destruction */ |
| 511 | extern unsigned int create_irq_nr(unsigned int irq_want, int node); | 511 | extern unsigned int create_irq_nr(unsigned int irq_want, int node); |
| 512 | extern unsigned int __create_irqs(unsigned int from, unsigned int count, | ||
| 513 | int node); | ||
| 512 | extern int create_irq(void); | 514 | extern int create_irq(void); |
| 513 | extern void destroy_irq(unsigned int irq); | 515 | extern void destroy_irq(unsigned int irq); |
| 516 | extern void destroy_irqs(unsigned int irq, unsigned int count); | ||
| 514 | 517 | ||
| 515 | /* | 518 | /* |
| 516 | * Dynamic irq helper functions. Obsolete. Use irq_alloc_desc* and | 519 | * Dynamic irq helper functions. Obsolete. Use irq_alloc_desc* and |
| @@ -528,6 +531,8 @@ extern int irq_set_handler_data(unsigned int irq, void *data); | |||
| 528 | extern int irq_set_chip_data(unsigned int irq, void *data); | 531 | extern int irq_set_chip_data(unsigned int irq, void *data); |
| 529 | extern int irq_set_irq_type(unsigned int irq, unsigned int type); | 532 | extern int irq_set_irq_type(unsigned int irq, unsigned int type); |
| 530 | extern int irq_set_msi_desc(unsigned int irq, struct msi_desc *entry); | 533 | extern int irq_set_msi_desc(unsigned int irq, struct msi_desc *entry); |
| 534 | extern int irq_set_msi_desc_off(unsigned int irq_base, unsigned int irq_offset, | ||
| 535 | struct msi_desc *entry); | ||
| 531 | extern struct irq_data *irq_get_irq_data(unsigned int irq); | 536 | extern struct irq_data *irq_get_irq_data(unsigned int irq); |
| 532 | 537 | ||
| 533 | static inline struct irq_chip *irq_get_chip(unsigned int irq) | 538 | static inline struct irq_chip *irq_get_chip(unsigned int irq) |
| @@ -590,6 +595,9 @@ int __irq_alloc_descs(int irq, unsigned int from, unsigned int cnt, int node, | |||
| 590 | #define irq_alloc_desc_from(from, node) \ | 595 | #define irq_alloc_desc_from(from, node) \ |
| 591 | irq_alloc_descs(-1, from, 1, node) | 596 | irq_alloc_descs(-1, from, 1, node) |
| 592 | 597 | ||
| 598 | #define irq_alloc_descs_from(from, cnt, node) \ | ||
| 599 | irq_alloc_descs(-1, from, cnt, node) | ||
| 600 | |||
| 593 | void irq_free_descs(unsigned int irq, unsigned int cnt); | 601 | void irq_free_descs(unsigned int irq, unsigned int cnt); |
| 594 | int irq_reserve_irqs(unsigned int from, unsigned int cnt); | 602 | int irq_reserve_irqs(unsigned int from, unsigned int cnt); |
| 595 | 603 | ||
diff --git a/include/linux/irq_work.h b/include/linux/irq_work.h index 6a9e8f5399e2..f5dbce50466e 100644 --- a/include/linux/irq_work.h +++ b/include/linux/irq_work.h | |||
| @@ -3,6 +3,20 @@ | |||
| 3 | 3 | ||
| 4 | #include <linux/llist.h> | 4 | #include <linux/llist.h> |
| 5 | 5 | ||
| 6 | /* | ||
| 7 | * An entry can be in one of four states: | ||
| 8 | * | ||
| 9 | * free NULL, 0 -> {claimed} : free to be used | ||
| 10 | * claimed NULL, 3 -> {pending} : claimed to be enqueued | ||
| 11 | * pending next, 3 -> {busy} : queued, pending callback | ||
| 12 | * busy NULL, 2 -> {free, claimed} : callback in progress, can be claimed | ||
| 13 | */ | ||
| 14 | |||
| 15 | #define IRQ_WORK_PENDING 1UL | ||
| 16 | #define IRQ_WORK_BUSY 2UL | ||
| 17 | #define IRQ_WORK_FLAGS 3UL | ||
| 18 | #define IRQ_WORK_LAZY 4UL /* Doesn't want IPI, wait for tick */ | ||
| 19 | |||
| 6 | struct irq_work { | 20 | struct irq_work { |
| 7 | unsigned long flags; | 21 | unsigned long flags; |
| 8 | struct llist_node llnode; | 22 | struct llist_node llnode; |
| @@ -16,8 +30,14 @@ void init_irq_work(struct irq_work *work, void (*func)(struct irq_work *)) | |||
| 16 | work->func = func; | 30 | work->func = func; |
| 17 | } | 31 | } |
| 18 | 32 | ||
| 19 | bool irq_work_queue(struct irq_work *work); | 33 | void irq_work_queue(struct irq_work *work); |
| 20 | void irq_work_run(void); | 34 | void irq_work_run(void); |
| 21 | void irq_work_sync(struct irq_work *work); | 35 | void irq_work_sync(struct irq_work *work); |
| 22 | 36 | ||
| 37 | #ifdef CONFIG_IRQ_WORK | ||
| 38 | bool irq_work_needs_cpu(void); | ||
| 39 | #else | ||
| 40 | static bool irq_work_needs_cpu(void) { return false; } | ||
| 41 | #endif | ||
| 42 | |||
| 23 | #endif /* _LINUX_IRQ_WORK_H */ | 43 | #endif /* _LINUX_IRQ_WORK_H */ |
diff --git a/include/linux/kernel_stat.h b/include/linux/kernel_stat.h index 66b70780e910..ed5f6ed6eb77 100644 --- a/include/linux/kernel_stat.h +++ b/include/linux/kernel_stat.h | |||
| @@ -127,7 +127,7 @@ extern void account_system_time(struct task_struct *, int, cputime_t, cputime_t) | |||
| 127 | extern void account_steal_time(cputime_t); | 127 | extern void account_steal_time(cputime_t); |
| 128 | extern void account_idle_time(cputime_t); | 128 | extern void account_idle_time(cputime_t); |
| 129 | 129 | ||
| 130 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | 130 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE |
| 131 | static inline void account_process_tick(struct task_struct *tsk, int user) | 131 | static inline void account_process_tick(struct task_struct *tsk, int user) |
| 132 | { | 132 | { |
| 133 | vtime_account_user(tsk); | 133 | vtime_account_user(tsk); |
diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h index 23755ba42abc..4b6ef4d33cc2 100644 --- a/include/linux/kprobes.h +++ b/include/linux/kprobes.h | |||
| @@ -49,16 +49,6 @@ | |||
| 49 | #define KPROBE_REENTER 0x00000004 | 49 | #define KPROBE_REENTER 0x00000004 |
| 50 | #define KPROBE_HIT_SSDONE 0x00000008 | 50 | #define KPROBE_HIT_SSDONE 0x00000008 |
| 51 | 51 | ||
| 52 | /* | ||
| 53 | * If function tracer is enabled and the arch supports full | ||
| 54 | * passing of pt_regs to function tracing, then kprobes can | ||
| 55 | * optimize on top of function tracing. | ||
| 56 | */ | ||
| 57 | #if defined(CONFIG_FUNCTION_TRACER) && defined(ARCH_SUPPORTS_FTRACE_SAVE_REGS) \ | ||
| 58 | && defined(ARCH_SUPPORTS_KPROBES_ON_FTRACE) | ||
| 59 | # define KPROBES_CAN_USE_FTRACE | ||
| 60 | #endif | ||
| 61 | |||
| 62 | /* Attach to insert probes on any functions which should be ignored*/ | 52 | /* Attach to insert probes on any functions which should be ignored*/ |
| 63 | #define __kprobes __attribute__((__section__(".kprobes.text"))) | 53 | #define __kprobes __attribute__((__section__(".kprobes.text"))) |
| 64 | 54 | ||
| @@ -316,7 +306,7 @@ extern int proc_kprobes_optimization_handler(struct ctl_table *table, | |||
| 316 | #endif | 306 | #endif |
| 317 | 307 | ||
| 318 | #endif /* CONFIG_OPTPROBES */ | 308 | #endif /* CONFIG_OPTPROBES */ |
| 319 | #ifdef KPROBES_CAN_USE_FTRACE | 309 | #ifdef CONFIG_KPROBES_ON_FTRACE |
| 320 | extern void kprobe_ftrace_handler(unsigned long ip, unsigned long parent_ip, | 310 | extern void kprobe_ftrace_handler(unsigned long ip, unsigned long parent_ip, |
| 321 | struct ftrace_ops *ops, struct pt_regs *regs); | 311 | struct ftrace_ops *ops, struct pt_regs *regs); |
| 322 | extern int arch_prepare_kprobe_ftrace(struct kprobe *p); | 312 | extern int arch_prepare_kprobe_ftrace(struct kprobe *p); |
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 2c497ab0d03d..b7996a768eb2 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h | |||
| @@ -22,6 +22,7 @@ | |||
| 22 | #include <linux/rcupdate.h> | 22 | #include <linux/rcupdate.h> |
| 23 | #include <linux/ratelimit.h> | 23 | #include <linux/ratelimit.h> |
| 24 | #include <linux/err.h> | 24 | #include <linux/err.h> |
| 25 | #include <linux/irqflags.h> | ||
| 25 | #include <asm/signal.h> | 26 | #include <asm/signal.h> |
| 26 | 27 | ||
| 27 | #include <linux/kvm.h> | 28 | #include <linux/kvm.h> |
| @@ -740,15 +741,52 @@ static inline int kvm_deassign_device(struct kvm *kvm, | |||
| 740 | } | 741 | } |
| 741 | #endif /* CONFIG_IOMMU_API */ | 742 | #endif /* CONFIG_IOMMU_API */ |
| 742 | 743 | ||
| 743 | static inline void kvm_guest_enter(void) | 744 | static inline void __guest_enter(void) |
| 744 | { | 745 | { |
| 745 | BUG_ON(preemptible()); | ||
| 746 | /* | 746 | /* |
| 747 | * This is running in ioctl context so we can avoid | 747 | * This is running in ioctl context so we can avoid |
| 748 | * the call to vtime_account() with its unnecessary idle check. | 748 | * the call to vtime_account() with its unnecessary idle check. |
| 749 | */ | 749 | */ |
| 750 | vtime_account_system_irqsafe(current); | 750 | vtime_account_system(current); |
| 751 | current->flags |= PF_VCPU; | 751 | current->flags |= PF_VCPU; |
| 752 | } | ||
| 753 | |||
| 754 | static inline void __guest_exit(void) | ||
| 755 | { | ||
| 756 | /* | ||
| 757 | * This is running in ioctl context so we can avoid | ||
| 758 | * the call to vtime_account() with its unnecessary idle check. | ||
| 759 | */ | ||
| 760 | vtime_account_system(current); | ||
| 761 | current->flags &= ~PF_VCPU; | ||
| 762 | } | ||
| 763 | |||
| 764 | #ifdef CONFIG_CONTEXT_TRACKING | ||
| 765 | extern void guest_enter(void); | ||
| 766 | extern void guest_exit(void); | ||
| 767 | |||
| 768 | #else /* !CONFIG_CONTEXT_TRACKING */ | ||
| 769 | static inline void guest_enter(void) | ||
| 770 | { | ||
| 771 | __guest_enter(); | ||
| 772 | } | ||
| 773 | |||
| 774 | static inline void guest_exit(void) | ||
| 775 | { | ||
| 776 | __guest_exit(); | ||
| 777 | } | ||
| 778 | #endif /* !CONFIG_CONTEXT_TRACKING */ | ||
| 779 | |||
| 780 | static inline void kvm_guest_enter(void) | ||
| 781 | { | ||
| 782 | unsigned long flags; | ||
| 783 | |||
| 784 | BUG_ON(preemptible()); | ||
| 785 | |||
| 786 | local_irq_save(flags); | ||
| 787 | guest_enter(); | ||
| 788 | local_irq_restore(flags); | ||
| 789 | |||
| 752 | /* KVM does not hold any references to rcu protected data when it | 790 | /* KVM does not hold any references to rcu protected data when it |
| 753 | * switches CPU into a guest mode. In fact switching to a guest mode | 791 | * switches CPU into a guest mode. In fact switching to a guest mode |
| 754 | * is very similar to exiting to userspase from rcu point of view. In | 792 | * is very similar to exiting to userspase from rcu point of view. In |
| @@ -761,12 +799,11 @@ static inline void kvm_guest_enter(void) | |||
| 761 | 799 | ||
| 762 | static inline void kvm_guest_exit(void) | 800 | static inline void kvm_guest_exit(void) |
| 763 | { | 801 | { |
| 764 | /* | 802 | unsigned long flags; |
| 765 | * This is running in ioctl context so we can avoid | 803 | |
| 766 | * the call to vtime_account() with its unnecessary idle check. | 804 | local_irq_save(flags); |
| 767 | */ | 805 | guest_exit(); |
| 768 | vtime_account_system_irqsafe(current); | 806 | local_irq_restore(flags); |
| 769 | current->flags &= ~PF_VCPU; | ||
| 770 | } | 807 | } |
| 771 | 808 | ||
| 772 | /* | 809 | /* |
diff --git a/include/linux/libps2.h b/include/linux/libps2.h index 79603a6c356f..4ad06e824f76 100644 --- a/include/linux/libps2.h +++ b/include/linux/libps2.h | |||
| @@ -36,7 +36,7 @@ struct ps2dev { | |||
| 36 | wait_queue_head_t wait; | 36 | wait_queue_head_t wait; |
| 37 | 37 | ||
| 38 | unsigned long flags; | 38 | unsigned long flags; |
| 39 | unsigned char cmdbuf[6]; | 39 | unsigned char cmdbuf[8]; |
| 40 | unsigned char cmdcnt; | 40 | unsigned char cmdcnt; |
| 41 | unsigned char nak; | 41 | unsigned char nak; |
| 42 | }; | 42 | }; |
diff --git a/include/linux/mailbox.h b/include/linux/mailbox.h new file mode 100644 index 000000000000..5161f63ec1c8 --- /dev/null +++ b/include/linux/mailbox.h | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | /* | ||
| 2 | * This program is free software; you can redistribute it and/or modify it | ||
| 3 | * under the terms and conditions of the GNU General Public License, | ||
| 4 | * version 2, as published by the Free Software Foundation. | ||
| 5 | * | ||
| 6 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
| 7 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 8 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
| 9 | * more details. | ||
| 10 | * | ||
| 11 | * You should have received a copy of the GNU General Public License along with | ||
| 12 | * this program. If not, see <http://www.gnu.org/licenses/>. | ||
| 13 | */ | ||
| 14 | |||
| 15 | int pl320_ipc_transmit(u32 *data); | ||
| 16 | int pl320_ipc_register_notifier(struct notifier_block *nb); | ||
| 17 | int pl320_ipc_unregister_notifier(struct notifier_block *nb); | ||
diff --git a/include/linux/mfd/abx500.h b/include/linux/mfd/abx500.h index e53dcfeaee69..80e3b8683a84 100644 --- a/include/linux/mfd/abx500.h +++ b/include/linux/mfd/abx500.h | |||
| @@ -131,7 +131,7 @@ struct abx500_maxim_parameters { | |||
| 131 | * @nominal_voltage: Nominal voltage of the battery in mV | 131 | * @nominal_voltage: Nominal voltage of the battery in mV |
| 132 | * @termination_vol: max voltage upto which battery can be charged | 132 | * @termination_vol: max voltage upto which battery can be charged |
| 133 | * @termination_curr battery charging termination current in mA | 133 | * @termination_curr battery charging termination current in mA |
| 134 | * @recharge_vol battery voltage limit that will trigger a new | 134 | * @recharge_cap battery capacity limit that will trigger a new |
| 135 | * full charging cycle in the case where maintenan- | 135 | * full charging cycle in the case where maintenan- |
| 136 | * -ce charging has been disabled | 136 | * -ce charging has been disabled |
| 137 | * @normal_cur_lvl: charger current in normal state in mA | 137 | * @normal_cur_lvl: charger current in normal state in mA |
| @@ -160,7 +160,7 @@ struct abx500_battery_type { | |||
| 160 | int nominal_voltage; | 160 | int nominal_voltage; |
| 161 | int termination_vol; | 161 | int termination_vol; |
| 162 | int termination_curr; | 162 | int termination_curr; |
| 163 | int recharge_vol; | 163 | int recharge_cap; |
| 164 | int normal_cur_lvl; | 164 | int normal_cur_lvl; |
| 165 | int normal_vol_lvl; | 165 | int normal_vol_lvl; |
| 166 | int maint_a_cur_lvl; | 166 | int maint_a_cur_lvl; |
| @@ -224,6 +224,7 @@ struct abx500_bm_charger_parameters { | |||
| 224 | * @bkup_bat_v voltage which we charge the backup battery with | 224 | * @bkup_bat_v voltage which we charge the backup battery with |
| 225 | * @bkup_bat_i current which we charge the backup battery with | 225 | * @bkup_bat_i current which we charge the backup battery with |
| 226 | * @no_maintenance indicates that maintenance charging is disabled | 226 | * @no_maintenance indicates that maintenance charging is disabled |
| 227 | * @capacity_scaling indicates whether capacity scaling is to be used | ||
| 227 | * @abx500_adc_therm placement of thermistor, batctrl or battemp adc | 228 | * @abx500_adc_therm placement of thermistor, batctrl or battemp adc |
| 228 | * @chg_unknown_bat flag to enable charging of unknown batteries | 229 | * @chg_unknown_bat flag to enable charging of unknown batteries |
| 229 | * @enable_overshoot flag to enable VBAT overshoot control | 230 | * @enable_overshoot flag to enable VBAT overshoot control |
| @@ -253,7 +254,11 @@ struct abx500_bm_data { | |||
| 253 | int usb_safety_tmr_h; | 254 | int usb_safety_tmr_h; |
| 254 | int bkup_bat_v; | 255 | int bkup_bat_v; |
| 255 | int bkup_bat_i; | 256 | int bkup_bat_i; |
| 257 | bool autopower_cfg; | ||
| 258 | bool ac_enabled; | ||
| 259 | bool usb_enabled; | ||
| 256 | bool no_maintenance; | 260 | bool no_maintenance; |
| 261 | bool capacity_scaling; | ||
| 257 | bool chg_unknown_bat; | 262 | bool chg_unknown_bat; |
| 258 | bool enable_overshoot; | 263 | bool enable_overshoot; |
| 259 | bool auto_trig; | 264 | bool auto_trig; |
| @@ -277,9 +282,9 @@ enum { | |||
| 277 | NTC_INTERNAL, | 282 | NTC_INTERNAL, |
| 278 | }; | 283 | }; |
| 279 | 284 | ||
| 280 | int bmdevs_of_probe(struct device *dev, | 285 | int ab8500_bm_of_probe(struct device *dev, |
| 281 | struct device_node *np, | 286 | struct device_node *np, |
| 282 | struct abx500_bm_data **battery); | 287 | struct abx500_bm_data *bm); |
| 283 | 288 | ||
| 284 | int abx500_set_register_interruptible(struct device *dev, u8 bank, u8 reg, | 289 | int abx500_set_register_interruptible(struct device *dev, u8 bank, u8 reg, |
| 285 | u8 value); | 290 | u8 value); |
diff --git a/include/linux/mfd/abx500/ab8500-bm.h b/include/linux/mfd/abx500/ab8500-bm.h index 9bd037df97d9..8d35bfe164c8 100644 --- a/include/linux/mfd/abx500/ab8500-bm.h +++ b/include/linux/mfd/abx500/ab8500-bm.h | |||
| @@ -23,6 +23,7 @@ | |||
| 23 | * Bank : 0x5 | 23 | * Bank : 0x5 |
| 24 | */ | 24 | */ |
| 25 | #define AB8500_USB_LINE_STAT_REG 0x80 | 25 | #define AB8500_USB_LINE_STAT_REG 0x80 |
| 26 | #define AB8500_USB_LINK1_STAT_REG 0x94 | ||
| 26 | 27 | ||
| 27 | /* | 28 | /* |
| 28 | * Charger / status register offfsets | 29 | * Charger / status register offfsets |
| @@ -225,6 +226,8 @@ | |||
| 225 | /* BatCtrl Current Source Constants */ | 226 | /* BatCtrl Current Source Constants */ |
| 226 | #define BAT_CTRL_7U_ENA 0x01 | 227 | #define BAT_CTRL_7U_ENA 0x01 |
| 227 | #define BAT_CTRL_20U_ENA 0x02 | 228 | #define BAT_CTRL_20U_ENA 0x02 |
| 229 | #define BAT_CTRL_18U_ENA 0x01 | ||
| 230 | #define BAT_CTRL_16U_ENA 0x02 | ||
| 228 | #define BAT_CTRL_CMP_ENA 0x04 | 231 | #define BAT_CTRL_CMP_ENA 0x04 |
| 229 | #define FORCE_BAT_CTRL_CMP_HIGH 0x08 | 232 | #define FORCE_BAT_CTRL_CMP_HIGH 0x08 |
| 230 | #define BAT_CTRL_PULL_UP_ENA 0x10 | 233 | #define BAT_CTRL_PULL_UP_ENA 0x10 |
| @@ -355,6 +358,7 @@ struct ab8500_bm_charger_parameters { | |||
| 355 | * @bkup_bat_v voltage which we charge the backup battery with | 358 | * @bkup_bat_v voltage which we charge the backup battery with |
| 356 | * @bkup_bat_i current which we charge the backup battery with | 359 | * @bkup_bat_i current which we charge the backup battery with |
| 357 | * @no_maintenance indicates that maintenance charging is disabled | 360 | * @no_maintenance indicates that maintenance charging is disabled |
| 361 | * @capacity_scaling indicates whether capacity scaling is to be used | ||
| 358 | * @adc_therm placement of thermistor, batctrl or battemp adc | 362 | * @adc_therm placement of thermistor, batctrl or battemp adc |
| 359 | * @chg_unknown_bat flag to enable charging of unknown batteries | 363 | * @chg_unknown_bat flag to enable charging of unknown batteries |
| 360 | * @enable_overshoot flag to enable VBAT overshoot control | 364 | * @enable_overshoot flag to enable VBAT overshoot control |
| @@ -383,6 +387,7 @@ struct ab8500_bm_data { | |||
| 383 | int bkup_bat_v; | 387 | int bkup_bat_v; |
| 384 | int bkup_bat_i; | 388 | int bkup_bat_i; |
| 385 | bool no_maintenance; | 389 | bool no_maintenance; |
| 390 | bool capacity_scaling; | ||
| 386 | bool chg_unknown_bat; | 391 | bool chg_unknown_bat; |
| 387 | bool enable_overshoot; | 392 | bool enable_overshoot; |
| 388 | enum abx500_adc_therm adc_therm; | 393 | enum abx500_adc_therm adc_therm; |
| @@ -399,26 +404,6 @@ struct ab8500_bm_data { | |||
| 399 | const struct ab8500_fg_parameters *fg_params; | 404 | const struct ab8500_fg_parameters *fg_params; |
| 400 | }; | 405 | }; |
| 401 | 406 | ||
| 402 | struct ab8500_charger_platform_data { | ||
| 403 | char **supplied_to; | ||
| 404 | size_t num_supplicants; | ||
| 405 | bool autopower_cfg; | ||
| 406 | }; | ||
| 407 | |||
| 408 | struct ab8500_btemp_platform_data { | ||
| 409 | char **supplied_to; | ||
| 410 | size_t num_supplicants; | ||
| 411 | }; | ||
| 412 | |||
| 413 | struct ab8500_fg_platform_data { | ||
| 414 | char **supplied_to; | ||
| 415 | size_t num_supplicants; | ||
| 416 | }; | ||
| 417 | |||
| 418 | struct ab8500_chargalg_platform_data { | ||
| 419 | char **supplied_to; | ||
| 420 | size_t num_supplicants; | ||
| 421 | }; | ||
| 422 | struct ab8500_btemp; | 407 | struct ab8500_btemp; |
| 423 | struct ab8500_gpadc; | 408 | struct ab8500_gpadc; |
| 424 | struct ab8500_fg; | 409 | struct ab8500_fg; |
| @@ -434,20 +419,10 @@ struct ab8500_fg *ab8500_fg_get(void); | |||
| 434 | int ab8500_fg_inst_curr_blocking(struct ab8500_fg *dev); | 419 | int ab8500_fg_inst_curr_blocking(struct ab8500_fg *dev); |
| 435 | int ab8500_fg_inst_curr_start(struct ab8500_fg *di); | 420 | int ab8500_fg_inst_curr_start(struct ab8500_fg *di); |
| 436 | int ab8500_fg_inst_curr_finalize(struct ab8500_fg *di, int *res); | 421 | int ab8500_fg_inst_curr_finalize(struct ab8500_fg *di, int *res); |
| 422 | int ab8500_fg_inst_curr_started(struct ab8500_fg *di); | ||
| 437 | int ab8500_fg_inst_curr_done(struct ab8500_fg *di); | 423 | int ab8500_fg_inst_curr_done(struct ab8500_fg *di); |
| 438 | 424 | ||
| 439 | #else | 425 | #else |
| 440 | static struct abx500_bm_data ab8500_bm_data; | 426 | static struct abx500_bm_data ab8500_bm_data; |
| 441 | |||
| 442 | static inline int ab8500_fg_inst_curr_start(struct ab8500_fg *di) | ||
| 443 | { | ||
| 444 | return -ENODEV; | ||
| 445 | } | ||
| 446 | |||
| 447 | static inline int ab8500_fg_inst_curr_finalize(struct ab8500_fg *di, int *res) | ||
| 448 | { | ||
| 449 | return -ENODEV; | ||
| 450 | } | ||
| 451 | |||
| 452 | #endif | 427 | #endif |
| 453 | #endif /* _AB8500_BM_H */ | 428 | #endif /* _AB8500_BM_H */ |
diff --git a/include/linux/mfd/abx500/ab8500-gpio.h b/include/linux/mfd/abx500/ab8500-gpio.h index 2387c207ea86..172b2f201ae0 100644 --- a/include/linux/mfd/abx500/ab8500-gpio.h +++ b/include/linux/mfd/abx500/ab8500-gpio.h | |||
| @@ -14,10 +14,20 @@ | |||
| 14 | * registers. | 14 | * registers. |
| 15 | */ | 15 | */ |
| 16 | 16 | ||
| 17 | struct ab8500_gpio_platform_data { | 17 | struct abx500_gpio_platform_data { |
| 18 | int gpio_base; | 18 | int gpio_base; |
| 19 | u32 irq_base; | 19 | }; |
| 20 | u8 config_reg[8]; | 20 | |
| 21 | enum abx500_gpio_pull_updown { | ||
| 22 | ABX500_GPIO_PULL_DOWN = 0x0, | ||
| 23 | ABX500_GPIO_PULL_NONE = 0x1, | ||
| 24 | ABX500_GPIO_PULL_UP = 0x3, | ||
| 25 | }; | ||
| 26 | |||
| 27 | enum abx500_gpio_vinsel { | ||
| 28 | ABX500_GPIO_VINSEL_VBAT = 0x0, | ||
| 29 | ABX500_GPIO_VINSEL_VIN_1V8 = 0x1, | ||
| 30 | ABX500_GPIO_VINSEL_VDD_BIF = 0x2, | ||
| 21 | }; | 31 | }; |
| 22 | 32 | ||
| 23 | #endif /* _AB8500_GPIO_H */ | 33 | #endif /* _AB8500_GPIO_H */ |
diff --git a/include/linux/mfd/abx500/ab8500.h b/include/linux/mfd/abx500/ab8500.h index 1cb5698b4d76..fc0534483c72 100644 --- a/include/linux/mfd/abx500/ab8500.h +++ b/include/linux/mfd/abx500/ab8500.h | |||
| @@ -24,7 +24,7 @@ enum ab8500_version { | |||
| 24 | AB8500_VERSION_AB8500 = 0x0, | 24 | AB8500_VERSION_AB8500 = 0x0, |
| 25 | AB8500_VERSION_AB8505 = 0x1, | 25 | AB8500_VERSION_AB8505 = 0x1, |
| 26 | AB8500_VERSION_AB9540 = 0x2, | 26 | AB8500_VERSION_AB9540 = 0x2, |
| 27 | AB8500_VERSION_AB8540 = 0x3, | 27 | AB8500_VERSION_AB8540 = 0x4, |
| 28 | AB8500_VERSION_UNDEFINED, | 28 | AB8500_VERSION_UNDEFINED, |
| 29 | }; | 29 | }; |
| 30 | 30 | ||
| @@ -32,6 +32,7 @@ enum ab8500_version { | |||
| 32 | #define AB8500_CUTEARLY 0x00 | 32 | #define AB8500_CUTEARLY 0x00 |
| 33 | #define AB8500_CUT1P0 0x10 | 33 | #define AB8500_CUT1P0 0x10 |
| 34 | #define AB8500_CUT1P1 0x11 | 34 | #define AB8500_CUT1P1 0x11 |
| 35 | #define AB8500_CUT1P2 0x12 /* Only valid for AB8540 */ | ||
| 35 | #define AB8500_CUT2P0 0x20 | 36 | #define AB8500_CUT2P0 0x20 |
| 36 | #define AB8500_CUT3P0 0x30 | 37 | #define AB8500_CUT3P0 0x30 |
| 37 | #define AB8500_CUT3P3 0x33 | 38 | #define AB8500_CUT3P3 0x33 |
| @@ -39,6 +40,7 @@ enum ab8500_version { | |||
| 39 | /* | 40 | /* |
| 40 | * AB8500 bank addresses | 41 | * AB8500 bank addresses |
| 41 | */ | 42 | */ |
| 43 | #define AB8500_M_FSM_RANK 0x0 | ||
| 42 | #define AB8500_SYS_CTRL1_BLOCK 0x1 | 44 | #define AB8500_SYS_CTRL1_BLOCK 0x1 |
| 43 | #define AB8500_SYS_CTRL2_BLOCK 0x2 | 45 | #define AB8500_SYS_CTRL2_BLOCK 0x2 |
| 44 | #define AB8500_REGU_CTRL1 0x3 | 46 | #define AB8500_REGU_CTRL1 0x3 |
| @@ -58,6 +60,7 @@ enum ab8500_version { | |||
| 58 | #define AB8500_DEVELOPMENT 0x11 | 60 | #define AB8500_DEVELOPMENT 0x11 |
| 59 | #define AB8500_DEBUG 0x12 | 61 | #define AB8500_DEBUG 0x12 |
| 60 | #define AB8500_PROD_TEST 0x13 | 62 | #define AB8500_PROD_TEST 0x13 |
| 63 | #define AB8500_STE_TEST 0x14 | ||
| 61 | #define AB8500_OTP_EMUL 0x15 | 64 | #define AB8500_OTP_EMUL 0x15 |
| 62 | 65 | ||
| 63 | /* | 66 | /* |
| @@ -65,11 +68,11 @@ enum ab8500_version { | |||
| 65 | * Values used to index into array ab8500_irq_regoffset[] defined in | 68 | * Values used to index into array ab8500_irq_regoffset[] defined in |
| 66 | * drivers/mdf/ab8500-core.c | 69 | * drivers/mdf/ab8500-core.c |
| 67 | */ | 70 | */ |
| 68 | /* Definitions for AB8500 and AB9540 */ | 71 | /* Definitions for AB8500, AB9540 and AB8540 */ |
| 69 | /* ab8500_irq_regoffset[0] -> IT[Source|Latch|Mask]1 */ | 72 | /* ab8500_irq_regoffset[0] -> IT[Source|Latch|Mask]1 */ |
| 70 | #define AB8500_INT_MAIN_EXT_CH_NOT_OK 0 /* not 8505/9540 */ | 73 | #define AB8500_INT_MAIN_EXT_CH_NOT_OK 0 /* not 8505/9540 */ |
| 71 | #define AB8500_INT_UN_PLUG_TV_DET 1 /* not 8505/9540 */ | 74 | #define AB8500_INT_UN_PLUG_TV_DET 1 /* not 8505/9540/8540 */ |
| 72 | #define AB8500_INT_PLUG_TV_DET 2 /* not 8505/9540 */ | 75 | #define AB8500_INT_PLUG_TV_DET 2 /* not 8505/9540/8540 */ |
| 73 | #define AB8500_INT_TEMP_WARM 3 | 76 | #define AB8500_INT_TEMP_WARM 3 |
| 74 | #define AB8500_INT_PON_KEY2DB_F 4 | 77 | #define AB8500_INT_PON_KEY2DB_F 4 |
| 75 | #define AB8500_INT_PON_KEY2DB_R 5 | 78 | #define AB8500_INT_PON_KEY2DB_R 5 |
| @@ -77,18 +80,19 @@ enum ab8500_version { | |||
| 77 | #define AB8500_INT_PON_KEY1DB_R 7 | 80 | #define AB8500_INT_PON_KEY1DB_R 7 |
| 78 | /* ab8500_irq_regoffset[1] -> IT[Source|Latch|Mask]2 */ | 81 | /* ab8500_irq_regoffset[1] -> IT[Source|Latch|Mask]2 */ |
| 79 | #define AB8500_INT_BATT_OVV 8 | 82 | #define AB8500_INT_BATT_OVV 8 |
| 80 | #define AB8500_INT_MAIN_CH_UNPLUG_DET 10 /* not 8505 */ | 83 | #define AB8500_INT_MAIN_CH_UNPLUG_DET 10 /* not 8505/8540 */ |
| 81 | #define AB8500_INT_MAIN_CH_PLUG_DET 11 /* not 8505 */ | 84 | #define AB8500_INT_MAIN_CH_PLUG_DET 11 /* not 8505/8540 */ |
| 82 | #define AB8500_INT_VBUS_DET_F 14 | 85 | #define AB8500_INT_VBUS_DET_F 14 |
| 83 | #define AB8500_INT_VBUS_DET_R 15 | 86 | #define AB8500_INT_VBUS_DET_R 15 |
| 84 | /* ab8500_irq_regoffset[2] -> IT[Source|Latch|Mask]3 */ | 87 | /* ab8500_irq_regoffset[2] -> IT[Source|Latch|Mask]3 */ |
| 85 | #define AB8500_INT_VBUS_CH_DROP_END 16 | 88 | #define AB8500_INT_VBUS_CH_DROP_END 16 |
| 86 | #define AB8500_INT_RTC_60S 17 | 89 | #define AB8500_INT_RTC_60S 17 |
| 87 | #define AB8500_INT_RTC_ALARM 18 | 90 | #define AB8500_INT_RTC_ALARM 18 |
| 91 | #define AB8540_INT_BIF_INT 19 | ||
| 88 | #define AB8500_INT_BAT_CTRL_INDB 20 | 92 | #define AB8500_INT_BAT_CTRL_INDB 20 |
| 89 | #define AB8500_INT_CH_WD_EXP 21 | 93 | #define AB8500_INT_CH_WD_EXP 21 |
| 90 | #define AB8500_INT_VBUS_OVV 22 | 94 | #define AB8500_INT_VBUS_OVV 22 |
| 91 | #define AB8500_INT_MAIN_CH_DROP_END 23 /* not 8505/9540 */ | 95 | #define AB8500_INT_MAIN_CH_DROP_END 23 /* not 8505/9540/8540 */ |
| 92 | /* ab8500_irq_regoffset[3] -> IT[Source|Latch|Mask]4 */ | 96 | /* ab8500_irq_regoffset[3] -> IT[Source|Latch|Mask]4 */ |
| 93 | #define AB8500_INT_CCN_CONV_ACC 24 | 97 | #define AB8500_INT_CCN_CONV_ACC 24 |
| 94 | #define AB8500_INT_INT_AUD 25 | 98 | #define AB8500_INT_INT_AUD 25 |
| @@ -99,7 +103,7 @@ enum ab8500_version { | |||
| 99 | #define AB8500_INT_BUP_CHG_NOT_OK 30 | 103 | #define AB8500_INT_BUP_CHG_NOT_OK 30 |
| 100 | #define AB8500_INT_BUP_CHG_OK 31 | 104 | #define AB8500_INT_BUP_CHG_OK 31 |
| 101 | /* ab8500_irq_regoffset[4] -> IT[Source|Latch|Mask]5 */ | 105 | /* ab8500_irq_regoffset[4] -> IT[Source|Latch|Mask]5 */ |
| 102 | #define AB8500_INT_GP_HW_ADC_CONV_END 32 /* not 8505 */ | 106 | #define AB8500_INT_GP_HW_ADC_CONV_END 32 /* not 8505/8540 */ |
| 103 | #define AB8500_INT_ACC_DETECT_1DB_F 33 | 107 | #define AB8500_INT_ACC_DETECT_1DB_F 33 |
| 104 | #define AB8500_INT_ACC_DETECT_1DB_R 34 | 108 | #define AB8500_INT_ACC_DETECT_1DB_R 34 |
| 105 | #define AB8500_INT_ACC_DETECT_22DB_F 35 | 109 | #define AB8500_INT_ACC_DETECT_22DB_F 35 |
| @@ -108,23 +112,23 @@ enum ab8500_version { | |||
| 108 | #define AB8500_INT_ACC_DETECT_21DB_R 38 | 112 | #define AB8500_INT_ACC_DETECT_21DB_R 38 |
| 109 | #define AB8500_INT_GP_SW_ADC_CONV_END 39 | 113 | #define AB8500_INT_GP_SW_ADC_CONV_END 39 |
| 110 | /* ab8500_irq_regoffset[5] -> IT[Source|Latch|Mask]7 */ | 114 | /* ab8500_irq_regoffset[5] -> IT[Source|Latch|Mask]7 */ |
| 111 | #define AB8500_INT_GPIO6R 40 /* not 8505/9540 */ | 115 | #define AB8500_INT_GPIO6R 40 /* not 8505/9540/8540 */ |
| 112 | #define AB8500_INT_GPIO7R 41 /* not 8505/9540 */ | 116 | #define AB8500_INT_GPIO7R 41 /* not 8505/9540/8540 */ |
| 113 | #define AB8500_INT_GPIO8R 42 /* not 8505/9540 */ | 117 | #define AB8500_INT_GPIO8R 42 /* not 8505/9540/8540 */ |
| 114 | #define AB8500_INT_GPIO9R 43 /* not 8505/9540 */ | 118 | #define AB8500_INT_GPIO9R 43 /* not 8505/9540/8540 */ |
| 115 | #define AB8500_INT_GPIO10R 44 | 119 | #define AB8500_INT_GPIO10R 44 /* not 8540 */ |
| 116 | #define AB8500_INT_GPIO11R 45 | 120 | #define AB8500_INT_GPIO11R 45 /* not 8540 */ |
| 117 | #define AB8500_INT_GPIO12R 46 /* not 8505 */ | 121 | #define AB8500_INT_GPIO12R 46 /* not 8505/8540 */ |
| 118 | #define AB8500_INT_GPIO13R 47 | 122 | #define AB8500_INT_GPIO13R 47 /* not 8540 */ |
| 119 | /* ab8500_irq_regoffset[6] -> IT[Source|Latch|Mask]8 */ | 123 | /* ab8500_irq_regoffset[6] -> IT[Source|Latch|Mask]8 */ |
| 120 | #define AB8500_INT_GPIO24R 48 /* not 8505 */ | 124 | #define AB8500_INT_GPIO24R 48 /* not 8505/8540 */ |
| 121 | #define AB8500_INT_GPIO25R 49 /* not 8505 */ | 125 | #define AB8500_INT_GPIO25R 49 /* not 8505/8540 */ |
| 122 | #define AB8500_INT_GPIO36R 50 /* not 8505/9540 */ | 126 | #define AB8500_INT_GPIO36R 50 /* not 8505/9540/8540 */ |
| 123 | #define AB8500_INT_GPIO37R 51 /* not 8505/9540 */ | 127 | #define AB8500_INT_GPIO37R 51 /* not 8505/9540/8540 */ |
| 124 | #define AB8500_INT_GPIO38R 52 /* not 8505/9540 */ | 128 | #define AB8500_INT_GPIO38R 52 /* not 8505/9540/8540 */ |
| 125 | #define AB8500_INT_GPIO39R 53 /* not 8505/9540 */ | 129 | #define AB8500_INT_GPIO39R 53 /* not 8505/9540/8540 */ |
| 126 | #define AB8500_INT_GPIO40R 54 | 130 | #define AB8500_INT_GPIO40R 54 /* not 8540 */ |
| 127 | #define AB8500_INT_GPIO41R 55 | 131 | #define AB8500_INT_GPIO41R 55 /* not 8540 */ |
| 128 | /* ab8500_irq_regoffset[7] -> IT[Source|Latch|Mask]9 */ | 132 | /* ab8500_irq_regoffset[7] -> IT[Source|Latch|Mask]9 */ |
| 129 | #define AB8500_INT_GPIO6F 56 /* not 8505/9540 */ | 133 | #define AB8500_INT_GPIO6F 56 /* not 8505/9540 */ |
| 130 | #define AB8500_INT_GPIO7F 57 /* not 8505/9540 */ | 134 | #define AB8500_INT_GPIO7F 57 /* not 8505/9540 */ |
| @@ -135,14 +139,14 @@ enum ab8500_version { | |||
| 135 | #define AB8500_INT_GPIO12F 62 /* not 8505 */ | 139 | #define AB8500_INT_GPIO12F 62 /* not 8505 */ |
| 136 | #define AB8500_INT_GPIO13F 63 | 140 | #define AB8500_INT_GPIO13F 63 |
| 137 | /* ab8500_irq_regoffset[8] -> IT[Source|Latch|Mask]10 */ | 141 | /* ab8500_irq_regoffset[8] -> IT[Source|Latch|Mask]10 */ |
| 138 | #define AB8500_INT_GPIO24F 64 /* not 8505 */ | 142 | #define AB8500_INT_GPIO24F 64 /* not 8505/8540 */ |
| 139 | #define AB8500_INT_GPIO25F 65 /* not 8505 */ | 143 | #define AB8500_INT_GPIO25F 65 /* not 8505/8540 */ |
| 140 | #define AB8500_INT_GPIO36F 66 /* not 8505/9540 */ | 144 | #define AB8500_INT_GPIO36F 66 /* not 8505/9540/8540 */ |
| 141 | #define AB8500_INT_GPIO37F 67 /* not 8505/9540 */ | 145 | #define AB8500_INT_GPIO37F 67 /* not 8505/9540/8540 */ |
| 142 | #define AB8500_INT_GPIO38F 68 /* not 8505/9540 */ | 146 | #define AB8500_INT_GPIO38F 68 /* not 8505/9540/8540 */ |
| 143 | #define AB8500_INT_GPIO39F 69 /* not 8505/9540 */ | 147 | #define AB8500_INT_GPIO39F 69 /* not 8505/9540/8540 */ |
| 144 | #define AB8500_INT_GPIO40F 70 | 148 | #define AB8500_INT_GPIO40F 70 /* not 8540 */ |
| 145 | #define AB8500_INT_GPIO41F 71 | 149 | #define AB8500_INT_GPIO41F 71 /* not 8540 */ |
| 146 | /* ab8500_irq_regoffset[9] -> IT[Source|Latch|Mask]12 */ | 150 | /* ab8500_irq_regoffset[9] -> IT[Source|Latch|Mask]12 */ |
| 147 | #define AB8500_INT_ADP_SOURCE_ERROR 72 | 151 | #define AB8500_INT_ADP_SOURCE_ERROR 72 |
| 148 | #define AB8500_INT_ADP_SINK_ERROR 73 | 152 | #define AB8500_INT_ADP_SINK_ERROR 73 |
| @@ -160,42 +164,44 @@ enum ab8500_version { | |||
| 160 | #define AB8500_INT_SRP_DETECT 88 | 164 | #define AB8500_INT_SRP_DETECT 88 |
| 161 | #define AB8500_INT_USB_CHARGER_NOT_OKR 89 | 165 | #define AB8500_INT_USB_CHARGER_NOT_OKR 89 |
| 162 | #define AB8500_INT_ID_WAKEUP_R 90 | 166 | #define AB8500_INT_ID_WAKEUP_R 90 |
| 167 | #define AB8500_INT_ID_DET_PLUGR 91 /* 8505/9540 cut2.0 */ | ||
| 163 | #define AB8500_INT_ID_DET_R1R 92 | 168 | #define AB8500_INT_ID_DET_R1R 92 |
| 164 | #define AB8500_INT_ID_DET_R2R 93 | 169 | #define AB8500_INT_ID_DET_R2R 93 |
| 165 | #define AB8500_INT_ID_DET_R3R 94 | 170 | #define AB8500_INT_ID_DET_R3R 94 |
| 166 | #define AB8500_INT_ID_DET_R4R 95 | 171 | #define AB8500_INT_ID_DET_R4R 95 |
| 167 | /* ab8500_irq_regoffset[12] -> IT[Source|Latch|Mask]21 */ | 172 | /* ab8500_irq_regoffset[12] -> IT[Source|Latch|Mask]21 */ |
| 168 | #define AB8500_INT_ID_WAKEUP_F 96 | 173 | #define AB8500_INT_ID_WAKEUP_F 96 /* not 8505/9540 */ |
| 169 | #define AB8500_INT_ID_DET_R1F 98 | 174 | #define AB8500_INT_ID_DET_PLUGF 97 /* 8505/9540 cut2.0 */ |
| 170 | #define AB8500_INT_ID_DET_R2F 99 | 175 | #define AB8500_INT_ID_DET_R1F 98 /* not 8505/9540 */ |
| 171 | #define AB8500_INT_ID_DET_R3F 100 | 176 | #define AB8500_INT_ID_DET_R2F 99 /* not 8505/9540 */ |
| 172 | #define AB8500_INT_ID_DET_R4F 101 | 177 | #define AB8500_INT_ID_DET_R3F 100 /* not 8505/9540 */ |
| 173 | #define AB8500_INT_CHAUTORESTARTAFTSEC 102 | 178 | #define AB8500_INT_ID_DET_R4F 101 /* not 8505/9540 */ |
| 179 | #define AB8500_INT_CHAUTORESTARTAFTSEC 102 /* not 8505/9540 */ | ||
| 174 | #define AB8500_INT_CHSTOPBYSEC 103 | 180 | #define AB8500_INT_CHSTOPBYSEC 103 |
| 175 | /* ab8500_irq_regoffset[13] -> IT[Source|Latch|Mask]22 */ | 181 | /* ab8500_irq_regoffset[13] -> IT[Source|Latch|Mask]22 */ |
| 176 | #define AB8500_INT_USB_CH_TH_PROT_F 104 | 182 | #define AB8500_INT_USB_CH_TH_PROT_F 104 |
| 177 | #define AB8500_INT_USB_CH_TH_PROT_R 105 | 183 | #define AB8500_INT_USB_CH_TH_PROT_R 105 |
| 178 | #define AB8500_INT_MAIN_CH_TH_PROT_F 106 /* not 8505/9540 */ | 184 | #define AB8500_INT_MAIN_CH_TH_PROT_F 106 /* not 8505/9540 */ |
| 179 | #define AB8500_INT_MAIN_CH_TH_PROT_R 107 /* not 8505/9540 */ | 185 | #define AB8500_INT_MAIN_CH_TH_PROT_R 107 /* not 8505/9540 */ |
| 180 | #define AB8500_INT_CHCURLIMNOHSCHIRP 109 | 186 | #define AB8500_INT_CHCURLIMNOHSCHIRP 109 |
| 181 | #define AB8500_INT_CHCURLIMHSCHIRP 110 | 187 | #define AB8500_INT_CHCURLIMHSCHIRP 110 |
| 182 | #define AB8500_INT_XTAL32K_KO 111 | 188 | #define AB8500_INT_XTAL32K_KO 111 |
| 183 | 189 | ||
| 184 | /* Definitions for AB9540 */ | 190 | /* Definitions for AB9540 / AB8505 */ |
| 185 | /* ab8500_irq_regoffset[14] -> IT[Source|Latch|Mask]13 */ | 191 | /* ab8500_irq_regoffset[14] -> IT[Source|Latch|Mask]13 */ |
| 186 | #define AB9540_INT_GPIO50R 113 | 192 | #define AB9540_INT_GPIO50R 113 /* not 8540 */ |
| 187 | #define AB9540_INT_GPIO51R 114 /* not 8505 */ | 193 | #define AB9540_INT_GPIO51R 114 /* not 8505/8540 */ |
| 188 | #define AB9540_INT_GPIO52R 115 | 194 | #define AB9540_INT_GPIO52R 115 /* not 8540 */ |
| 189 | #define AB9540_INT_GPIO53R 116 | 195 | #define AB9540_INT_GPIO53R 116 /* not 8540 */ |
| 190 | #define AB9540_INT_GPIO54R 117 /* not 8505 */ | 196 | #define AB9540_INT_GPIO54R 117 /* not 8505/8540 */ |
| 191 | #define AB9540_INT_IEXT_CH_RF_BFN_R 118 | 197 | #define AB9540_INT_IEXT_CH_RF_BFN_R 118 |
| 192 | #define AB9540_INT_IEXT_CH_RF_BFN_F 119 | ||
| 193 | /* ab8500_irq_regoffset[15] -> IT[Source|Latch|Mask]14 */ | 198 | /* ab8500_irq_regoffset[15] -> IT[Source|Latch|Mask]14 */ |
| 194 | #define AB9540_INT_GPIO50F 121 | 199 | #define AB9540_INT_GPIO50F 121 /* not 8540 */ |
| 195 | #define AB9540_INT_GPIO51F 122 /* not 8505 */ | 200 | #define AB9540_INT_GPIO51F 122 /* not 8505/8540 */ |
| 196 | #define AB9540_INT_GPIO52F 123 | 201 | #define AB9540_INT_GPIO52F 123 /* not 8540 */ |
| 197 | #define AB9540_INT_GPIO53F 124 | 202 | #define AB9540_INT_GPIO53F 124 /* not 8540 */ |
| 198 | #define AB9540_INT_GPIO54F 125 /* not 8505 */ | 203 | #define AB9540_INT_GPIO54F 125 /* not 8505/8540 */ |
| 204 | #define AB9540_INT_IEXT_CH_RF_BFN_F 126 | ||
| 199 | /* ab8500_irq_regoffset[16] -> IT[Source|Latch|Mask]25 */ | 205 | /* ab8500_irq_regoffset[16] -> IT[Source|Latch|Mask]25 */ |
| 200 | #define AB8505_INT_KEYSTUCK 128 | 206 | #define AB8505_INT_KEYSTUCK 128 |
| 201 | #define AB8505_INT_IKR 129 | 207 | #define AB8505_INT_IKR 129 |
| @@ -204,6 +210,87 @@ enum ab8500_version { | |||
| 204 | #define AB8505_INT_KEYDEGLITCH 132 | 210 | #define AB8505_INT_KEYDEGLITCH 132 |
| 205 | #define AB8505_INT_MODPWRSTATUSF 134 | 211 | #define AB8505_INT_MODPWRSTATUSF 134 |
| 206 | #define AB8505_INT_MODPWRSTATUSR 135 | 212 | #define AB8505_INT_MODPWRSTATUSR 135 |
| 213 | /* ab8500_irq_regoffset[17] -> IT[Source|Latch|Mask]6 */ | ||
| 214 | #define AB8500_INT_HOOK_DET_NEG_F 138 | ||
| 215 | #define AB8500_INT_HOOK_DET_NEG_R 139 | ||
| 216 | #define AB8500_INT_HOOK_DET_POS_F 140 | ||
| 217 | #define AB8500_INT_HOOK_DET_POS_R 141 | ||
| 218 | #define AB8500_INT_PLUG_DET_COMP_F 142 | ||
| 219 | #define AB8500_INT_PLUG_DET_COMP_R 143 | ||
| 220 | /* ab8500_irq_regoffset[18] -> IT[Source|Latch|Mask]23 */ | ||
| 221 | #define AB8505_INT_COLL 144 | ||
| 222 | #define AB8505_INT_RESERR 145 | ||
| 223 | #define AB8505_INT_FRAERR 146 | ||
| 224 | #define AB8505_INT_COMERR 147 | ||
| 225 | #define AB8505_INT_SPDSET 148 | ||
| 226 | #define AB8505_INT_DSENT 149 | ||
| 227 | #define AB8505_INT_DREC 150 | ||
| 228 | #define AB8505_INT_ACC_INT 151 | ||
| 229 | /* ab8500_irq_regoffset[19] -> IT[Source|Latch|Mask]24 */ | ||
| 230 | #define AB8505_INT_NOPINT 152 | ||
| 231 | /* ab8540_irq_regoffset[20] -> IT[Source|Latch|Mask]26 */ | ||
| 232 | #define AB8540_INT_IDPLUGDETCOMPF 160 | ||
| 233 | #define AB8540_INT_IDPLUGDETCOMPR 161 | ||
| 234 | #define AB8540_INT_FMDETCOMPLOF 162 | ||
| 235 | #define AB8540_INT_FMDETCOMPLOR 163 | ||
| 236 | #define AB8540_INT_FMDETCOMPHIF 164 | ||
| 237 | #define AB8540_INT_FMDETCOMPHIR 165 | ||
| 238 | #define AB8540_INT_ID5VDETCOMPF 166 | ||
| 239 | #define AB8540_INT_ID5VDETCOMPR 167 | ||
| 240 | /* ab8540_irq_regoffset[21] -> IT[Source|Latch|Mask]27 */ | ||
| 241 | #define AB8540_INT_GPIO43F 168 | ||
| 242 | #define AB8540_INT_GPIO43R 169 | ||
| 243 | #define AB8540_INT_GPIO44F 170 | ||
| 244 | #define AB8540_INT_GPIO44R 171 | ||
| 245 | #define AB8540_INT_KEYPOSDETCOMPF 172 | ||
| 246 | #define AB8540_INT_KEYPOSDETCOMPR 173 | ||
| 247 | #define AB8540_INT_KEYNEGDETCOMPF 174 | ||
| 248 | #define AB8540_INT_KEYNEGDETCOMPR 175 | ||
| 249 | /* ab8540_irq_regoffset[22] -> IT[Source|Latch|Mask]28 */ | ||
| 250 | #define AB8540_INT_GPIO1VBATF 176 | ||
| 251 | #define AB8540_INT_GPIO1VBATR 177 | ||
| 252 | #define AB8540_INT_GPIO2VBATF 178 | ||
| 253 | #define AB8540_INT_GPIO2VBATR 179 | ||
| 254 | #define AB8540_INT_GPIO3VBATF 180 | ||
| 255 | #define AB8540_INT_GPIO3VBATR 181 | ||
| 256 | #define AB8540_INT_GPIO4VBATF 182 | ||
| 257 | #define AB8540_INT_GPIO4VBATR 183 | ||
| 258 | /* ab8540_irq_regoffset[23] -> IT[Source|Latch|Mask]29 */ | ||
| 259 | #define AB8540_INT_SYSCLKREQ2F 184 | ||
| 260 | #define AB8540_INT_SYSCLKREQ2R 185 | ||
| 261 | #define AB8540_INT_SYSCLKREQ3F 186 | ||
| 262 | #define AB8540_INT_SYSCLKREQ3R 187 | ||
| 263 | #define AB8540_INT_SYSCLKREQ4F 188 | ||
| 264 | #define AB8540_INT_SYSCLKREQ4R 189 | ||
| 265 | #define AB8540_INT_SYSCLKREQ5F 190 | ||
| 266 | #define AB8540_INT_SYSCLKREQ5R 191 | ||
| 267 | /* ab8540_irq_regoffset[24] -> IT[Source|Latch|Mask]30 */ | ||
| 268 | #define AB8540_INT_PWMOUT1F 192 | ||
| 269 | #define AB8540_INT_PWMOUT1R 193 | ||
| 270 | #define AB8540_INT_PWMCTRL0F 194 | ||
| 271 | #define AB8540_INT_PWMCTRL0R 195 | ||
| 272 | #define AB8540_INT_PWMCTRL1F 196 | ||
| 273 | #define AB8540_INT_PWMCTRL1R 197 | ||
| 274 | #define AB8540_INT_SYSCLKREQ6F 198 | ||
| 275 | #define AB8540_INT_SYSCLKREQ6R 199 | ||
| 276 | /* ab8540_irq_regoffset[25] -> IT[Source|Latch|Mask]31 */ | ||
| 277 | #define AB8540_INT_PWMEXTVIBRA1F 200 | ||
| 278 | #define AB8540_INT_PWMEXTVIBRA1R 201 | ||
| 279 | #define AB8540_INT_PWMEXTVIBRA2F 202 | ||
| 280 | #define AB8540_INT_PWMEXTVIBRA2R 203 | ||
| 281 | #define AB8540_INT_PWMOUT2F 204 | ||
| 282 | #define AB8540_INT_PWMOUT2R 205 | ||
| 283 | #define AB8540_INT_PWMOUT3F 206 | ||
| 284 | #define AB8540_INT_PWMOUT3R 207 | ||
| 285 | /* ab8540_irq_regoffset[26] -> IT[Source|Latch|Mask]32 */ | ||
| 286 | #define AB8540_INT_ADDATA2F 208 | ||
| 287 | #define AB8540_INT_ADDATA2R 209 | ||
| 288 | #define AB8540_INT_DADATA2F 210 | ||
| 289 | #define AB8540_INT_DADATA2R 211 | ||
| 290 | #define AB8540_INT_FSYNC2F 212 | ||
| 291 | #define AB8540_INT_FSYNC2R 213 | ||
| 292 | #define AB8540_INT_BITCLK2F 214 | ||
| 293 | #define AB8540_INT_BITCLK2R 215 | ||
| 207 | 294 | ||
| 208 | /* | 295 | /* |
| 209 | * AB8500_AB9540_NR_IRQS is used when configuring the IRQ numbers for the | 296 | * AB8500_AB9540_NR_IRQS is used when configuring the IRQ numbers for the |
| @@ -213,13 +300,24 @@ enum ab8500_version { | |||
| 213 | * which is larger. | 300 | * which is larger. |
| 214 | */ | 301 | */ |
| 215 | #define AB8500_NR_IRQS 112 | 302 | #define AB8500_NR_IRQS 112 |
| 216 | #define AB8505_NR_IRQS 136 | 303 | #define AB8505_NR_IRQS 153 |
| 217 | #define AB9540_NR_IRQS 136 | 304 | #define AB9540_NR_IRQS 153 |
| 305 | #define AB8540_NR_IRQS 216 | ||
| 218 | /* This is set to the roof of any AB8500 chip variant IRQ counts */ | 306 | /* This is set to the roof of any AB8500 chip variant IRQ counts */ |
| 219 | #define AB8500_MAX_NR_IRQS AB9540_NR_IRQS | 307 | #define AB8500_MAX_NR_IRQS AB8540_NR_IRQS |
| 220 | 308 | ||
| 221 | #define AB8500_NUM_IRQ_REGS 14 | 309 | #define AB8500_NUM_IRQ_REGS 14 |
| 222 | #define AB9540_NUM_IRQ_REGS 17 | 310 | #define AB9540_NUM_IRQ_REGS 20 |
| 311 | #define AB8540_NUM_IRQ_REGS 27 | ||
| 312 | |||
| 313 | /* Turn On Status Event */ | ||
| 314 | #define AB8500_POR_ON_VBAT 0x01 | ||
| 315 | #define AB8500_POW_KEY_1_ON 0x02 | ||
| 316 | #define AB8500_POW_KEY_2_ON 0x04 | ||
| 317 | #define AB8500_RTC_ALARM 0x08 | ||
| 318 | #define AB8500_MAIN_CH_DET 0x10 | ||
| 319 | #define AB8500_VBUS_DET 0x20 | ||
| 320 | #define AB8500_USB_ID_DET 0x40 | ||
| 223 | 321 | ||
| 224 | /** | 322 | /** |
| 225 | * struct ab8500 - ab8500 internal structure | 323 | * struct ab8500 - ab8500 internal structure |
| @@ -287,7 +385,7 @@ struct ab8500_platform_data { | |||
| 287 | struct ab8500_regulator_reg_init *regulator_reg_init; | 385 | struct ab8500_regulator_reg_init *regulator_reg_init; |
| 288 | int num_regulator; | 386 | int num_regulator; |
| 289 | struct regulator_init_data *regulator; | 387 | struct regulator_init_data *regulator; |
| 290 | struct ab8500_gpio_platform_data *gpio; | 388 | struct abx500_gpio_platform_data *gpio; |
| 291 | struct ab8500_codec_platform_data *codec; | 389 | struct ab8500_codec_platform_data *codec; |
| 292 | }; | 390 | }; |
| 293 | 391 | ||
| @@ -335,10 +433,79 @@ static inline int is_ab8500_2p0_or_earlier(struct ab8500 *ab) | |||
| 335 | return (is_ab8500(ab) && (ab->chip_id <= AB8500_CUT2P0)); | 433 | return (is_ab8500(ab) && (ab->chip_id <= AB8500_CUT2P0)); |
| 336 | } | 434 | } |
| 337 | 435 | ||
| 436 | static inline int is_ab8500_3p3_or_earlier(struct ab8500 *ab) | ||
| 437 | { | ||
| 438 | return (is_ab8500(ab) && (ab->chip_id <= AB8500_CUT3P3)); | ||
| 439 | } | ||
| 440 | |||
| 338 | /* exclude also ab8505, ab9540... */ | 441 | /* exclude also ab8505, ab9540... */ |
| 339 | static inline int is_ab8500_2p0(struct ab8500 *ab) | 442 | static inline int is_ab8500_2p0(struct ab8500 *ab) |
| 340 | { | 443 | { |
| 341 | return (is_ab8500(ab) && (ab->chip_id == AB8500_CUT2P0)); | 444 | return (is_ab8500(ab) && (ab->chip_id == AB8500_CUT2P0)); |
| 342 | } | 445 | } |
| 343 | 446 | ||
| 447 | static inline int is_ab8505_1p0_or_earlier(struct ab8500 *ab) | ||
| 448 | { | ||
| 449 | return (is_ab8505(ab) && (ab->chip_id <= AB8500_CUT1P0)); | ||
| 450 | } | ||
| 451 | |||
| 452 | static inline int is_ab8505_2p0(struct ab8500 *ab) | ||
| 453 | { | ||
| 454 | return (is_ab8505(ab) && (ab->chip_id == AB8500_CUT2P0)); | ||
| 455 | } | ||
| 456 | |||
| 457 | static inline int is_ab9540_1p0_or_earlier(struct ab8500 *ab) | ||
| 458 | { | ||
| 459 | return (is_ab9540(ab) && (ab->chip_id <= AB8500_CUT1P0)); | ||
| 460 | } | ||
| 461 | |||
| 462 | static inline int is_ab9540_2p0(struct ab8500 *ab) | ||
| 463 | { | ||
| 464 | return (is_ab9540(ab) && (ab->chip_id == AB8500_CUT2P0)); | ||
| 465 | } | ||
| 466 | |||
| 467 | /* | ||
| 468 | * Be careful, the marketing name for this chip is 2.1 | ||
| 469 | * but the value read from the chip is 3.0 (0x30) | ||
| 470 | */ | ||
| 471 | static inline int is_ab9540_3p0(struct ab8500 *ab) | ||
| 472 | { | ||
| 473 | return (is_ab9540(ab) && (ab->chip_id == AB8500_CUT3P0)); | ||
| 474 | } | ||
| 475 | |||
| 476 | static inline int is_ab8540_1p0_or_earlier(struct ab8500 *ab) | ||
| 477 | { | ||
| 478 | return is_ab8540(ab) && (ab->chip_id <= AB8500_CUT1P0); | ||
| 479 | } | ||
| 480 | |||
| 481 | static inline int is_ab8540_1p1_or_earlier(struct ab8500 *ab) | ||
| 482 | { | ||
| 483 | return is_ab8540(ab) && (ab->chip_id <= AB8500_CUT1P1); | ||
| 484 | } | ||
| 485 | |||
| 486 | static inline int is_ab8540_1p2_or_earlier(struct ab8500 *ab) | ||
| 487 | { | ||
| 488 | return is_ab8540(ab) && (ab->chip_id <= AB8500_CUT1P2); | ||
| 489 | } | ||
| 490 | |||
| 491 | static inline int is_ab8540_2p0_or_earlier(struct ab8500 *ab) | ||
| 492 | { | ||
| 493 | return is_ab8540(ab) && (ab->chip_id <= AB8500_CUT2P0); | ||
| 494 | } | ||
| 495 | |||
| 496 | static inline int is_ab8540_2p0(struct ab8500 *ab) | ||
| 497 | { | ||
| 498 | return is_ab8540(ab) && (ab->chip_id == AB8500_CUT2P0); | ||
| 499 | } | ||
| 500 | |||
| 501 | static inline int is_ab8505_2p0_earlier(struct ab8500 *ab) | ||
| 502 | { | ||
| 503 | return (is_ab8505(ab) && (ab->chip_id < AB8500_CUT2P0)); | ||
| 504 | } | ||
| 505 | |||
| 506 | static inline int is_ab9540_2p0_or_earlier(struct ab8500 *ab) | ||
| 507 | { | ||
| 508 | return (is_ab9540(ab) && (ab->chip_id < AB8500_CUT2P0)); | ||
| 509 | } | ||
| 510 | |||
| 344 | #endif /* MFD_AB8500_H */ | 511 | #endif /* MFD_AB8500_H */ |
diff --git a/include/linux/mfd/abx500/ux500_chargalg.h b/include/linux/mfd/abx500/ux500_chargalg.h index 9b07725750c9..d43ac0f35526 100644 --- a/include/linux/mfd/abx500/ux500_chargalg.h +++ b/include/linux/mfd/abx500/ux500_chargalg.h | |||
| @@ -27,12 +27,17 @@ struct ux500_charger_ops { | |||
| 27 | * @ops ux500 charger operations | 27 | * @ops ux500 charger operations |
| 28 | * @max_out_volt maximum output charger voltage in mV | 28 | * @max_out_volt maximum output charger voltage in mV |
| 29 | * @max_out_curr maximum output charger current in mA | 29 | * @max_out_curr maximum output charger current in mA |
| 30 | * @enabled indicates if this charger is used or not | ||
| 31 | * @external external charger unit (pm2xxx) | ||
| 30 | */ | 32 | */ |
| 31 | struct ux500_charger { | 33 | struct ux500_charger { |
| 32 | struct power_supply psy; | 34 | struct power_supply psy; |
| 33 | struct ux500_charger_ops ops; | 35 | struct ux500_charger_ops ops; |
| 34 | int max_out_volt; | 36 | int max_out_volt; |
| 35 | int max_out_curr; | 37 | int max_out_curr; |
| 38 | int wdt_refresh; | ||
| 39 | bool enabled; | ||
| 40 | bool external; | ||
| 36 | }; | 41 | }; |
| 37 | 42 | ||
| 38 | #endif | 43 | #endif |
diff --git a/include/linux/mfd/samsung/core.h b/include/linux/mfd/samsung/core.h index b50c38f8bc48..f0f4de3b4ccc 100644 --- a/include/linux/mfd/samsung/core.h +++ b/include/linux/mfd/samsung/core.h | |||
| @@ -26,6 +26,7 @@ enum sec_device_type { | |||
| 26 | /** | 26 | /** |
| 27 | * struct sec_pmic_dev - s5m87xx master device for sub-drivers | 27 | * struct sec_pmic_dev - s5m87xx master device for sub-drivers |
| 28 | * @dev: master device of the chip (can be used to access platform data) | 28 | * @dev: master device of the chip (can be used to access platform data) |
| 29 | * @pdata: pointer to private data used to pass platform data to child | ||
| 29 | * @i2c: i2c client private data for regulator | 30 | * @i2c: i2c client private data for regulator |
| 30 | * @rtc: i2c client private data for rtc | 31 | * @rtc: i2c client private data for rtc |
| 31 | * @iolock: mutex for serializing io access | 32 | * @iolock: mutex for serializing io access |
| @@ -39,6 +40,7 @@ enum sec_device_type { | |||
| 39 | */ | 40 | */ |
| 40 | struct sec_pmic_dev { | 41 | struct sec_pmic_dev { |
| 41 | struct device *dev; | 42 | struct device *dev; |
| 43 | struct sec_platform_data *pdata; | ||
| 42 | struct regmap *regmap; | 44 | struct regmap *regmap; |
| 43 | struct i2c_client *i2c; | 45 | struct i2c_client *i2c; |
| 44 | struct i2c_client *rtc; | 46 | struct i2c_client *rtc; |
| @@ -82,11 +84,11 @@ struct sec_platform_data { | |||
| 82 | 84 | ||
| 83 | int buck_gpios[3]; | 85 | int buck_gpios[3]; |
| 84 | int buck_ds[3]; | 86 | int buck_ds[3]; |
| 85 | int buck2_voltage[8]; | 87 | unsigned int buck2_voltage[8]; |
| 86 | bool buck2_gpiodvs; | 88 | bool buck2_gpiodvs; |
| 87 | int buck3_voltage[8]; | 89 | unsigned int buck3_voltage[8]; |
| 88 | bool buck3_gpiodvs; | 90 | bool buck3_gpiodvs; |
| 89 | int buck4_voltage[8]; | 91 | unsigned int buck4_voltage[8]; |
| 90 | bool buck4_gpiodvs; | 92 | bool buck4_gpiodvs; |
| 91 | 93 | ||
| 92 | int buck_set1; | 94 | int buck_set1; |
| @@ -127,6 +129,7 @@ struct sec_platform_data { | |||
| 127 | struct sec_regulator_data { | 129 | struct sec_regulator_data { |
| 128 | int id; | 130 | int id; |
| 129 | struct regulator_init_data *initdata; | 131 | struct regulator_init_data *initdata; |
| 132 | struct device_node *reg_node; | ||
| 130 | }; | 133 | }; |
| 131 | 134 | ||
| 132 | /* | 135 | /* |
| @@ -136,7 +139,7 @@ struct sec_regulator_data { | |||
| 136 | */ | 139 | */ |
| 137 | struct sec_opmode_data { | 140 | struct sec_opmode_data { |
| 138 | int id; | 141 | int id; |
| 139 | int mode; | 142 | unsigned int mode; |
| 140 | }; | 143 | }; |
| 141 | 144 | ||
| 142 | /* | 145 | /* |
diff --git a/include/linux/micrel_phy.h b/include/linux/micrel_phy.h index adfe8c058f29..9dbb41a4e250 100644 --- a/include/linux/micrel_phy.h +++ b/include/linux/micrel_phy.h | |||
| @@ -21,8 +21,15 @@ | |||
| 21 | #define PHY_ID_KSZ8021 0x00221555 | 21 | #define PHY_ID_KSZ8021 0x00221555 |
| 22 | #define PHY_ID_KSZ8041 0x00221510 | 22 | #define PHY_ID_KSZ8041 0x00221510 |
| 23 | #define PHY_ID_KSZ8051 0x00221550 | 23 | #define PHY_ID_KSZ8051 0x00221550 |
| 24 | /* both for ks8001 Rev. A/B, and for ks8721 Rev 3. */ | 24 | /* same id: ks8001 Rev. A/B, and ks8721 Rev 3. */ |
| 25 | #define PHY_ID_KSZ8001 0x0022161A | 25 | #define PHY_ID_KSZ8001 0x0022161A |
| 26 | /* same id: KS8081, KS8091 */ | ||
| 27 | #define PHY_ID_KSZ8081 0x00221560 | ||
| 28 | #define PHY_ID_KSZ8061 0x00221570 | ||
| 29 | #define PHY_ID_KSZ9031 0x00221620 | ||
| 30 | |||
| 31 | #define PHY_ID_KSZ886X 0x00221430 | ||
| 32 | #define PHY_ID_KSZ8863 0x00221435 | ||
| 26 | 33 | ||
| 27 | /* struct phy_device dev_flags definitions */ | 34 | /* struct phy_device dev_flags definitions */ |
| 28 | #define MICREL_PHY_50MHZ_CLK 0x00000001 | 35 | #define MICREL_PHY_50MHZ_CLK 0x00000001 |
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h index 20ea939c22a6..6d48fce06b4a 100644 --- a/include/linux/mlx4/device.h +++ b/include/linux/mlx4/device.h | |||
| @@ -150,7 +150,8 @@ enum { | |||
| 150 | MLX4_DEV_CAP_FLAG2_RSS = 1LL << 0, | 150 | MLX4_DEV_CAP_FLAG2_RSS = 1LL << 0, |
| 151 | MLX4_DEV_CAP_FLAG2_RSS_TOP = 1LL << 1, | 151 | MLX4_DEV_CAP_FLAG2_RSS_TOP = 1LL << 1, |
| 152 | MLX4_DEV_CAP_FLAG2_RSS_XOR = 1LL << 2, | 152 | MLX4_DEV_CAP_FLAG2_RSS_XOR = 1LL << 2, |
| 153 | MLX4_DEV_CAP_FLAG2_FS_EN = 1LL << 3 | 153 | MLX4_DEV_CAP_FLAG2_FS_EN = 1LL << 3, |
| 154 | MLX4_DEV_CAP_FLAGS2_REASSIGN_MAC_EN = 1LL << 4 | ||
| 154 | }; | 155 | }; |
| 155 | 156 | ||
| 156 | enum { | 157 | enum { |
| @@ -955,9 +956,8 @@ int mlx4_SET_MCAST_FLTR(struct mlx4_dev *dev, u8 port, u64 mac, u64 clear, u8 mo | |||
| 955 | 956 | ||
| 956 | int mlx4_register_mac(struct mlx4_dev *dev, u8 port, u64 mac); | 957 | int mlx4_register_mac(struct mlx4_dev *dev, u8 port, u64 mac); |
| 957 | void mlx4_unregister_mac(struct mlx4_dev *dev, u8 port, u64 mac); | 958 | void mlx4_unregister_mac(struct mlx4_dev *dev, u8 port, u64 mac); |
| 958 | int mlx4_replace_mac(struct mlx4_dev *dev, u8 port, int qpn, u64 new_mac); | 959 | int mlx4_get_base_qpn(struct mlx4_dev *dev, u8 port); |
| 959 | int mlx4_get_eth_qp(struct mlx4_dev *dev, u8 port, u64 mac, int *qpn); | 960 | int __mlx4_replace_mac(struct mlx4_dev *dev, u8 port, int qpn, u64 new_mac); |
| 960 | void mlx4_put_eth_qp(struct mlx4_dev *dev, u8 port, u64 mac, int qpn); | ||
| 961 | void mlx4_set_stats_bitmap(struct mlx4_dev *dev, u64 *stats_bitmap); | 961 | void mlx4_set_stats_bitmap(struct mlx4_dev *dev, u64 *stats_bitmap); |
| 962 | int mlx4_SET_PORT_general(struct mlx4_dev *dev, u8 port, int mtu, | 962 | int mlx4_SET_PORT_general(struct mlx4_dev *dev, u8 port, int mtu, |
| 963 | u8 pptx, u8 pfctx, u8 pprx, u8 pfcrx); | 963 | u8 pptx, u8 pfctx, u8 pprx, u8 pfcrx); |
diff --git a/include/linux/mroute.h b/include/linux/mroute.h index ea00d9162ee5..79aaa9fc1a15 100644 --- a/include/linux/mroute.h +++ b/include/linux/mroute.h | |||
| @@ -9,7 +9,7 @@ | |||
| 9 | #ifdef CONFIG_IP_MROUTE | 9 | #ifdef CONFIG_IP_MROUTE |
| 10 | static inline int ip_mroute_opt(int opt) | 10 | static inline int ip_mroute_opt(int opt) |
| 11 | { | 11 | { |
| 12 | return (opt >= MRT_BASE) && (opt <= MRT_BASE + 10); | 12 | return (opt >= MRT_BASE) && (opt <= MRT_MAX); |
| 13 | } | 13 | } |
| 14 | #else | 14 | #else |
| 15 | static inline int ip_mroute_opt(int opt) | 15 | static inline int ip_mroute_opt(int opt) |
diff --git a/include/linux/mroute6.h b/include/linux/mroute6.h index a223561ba12e..66982e764051 100644 --- a/include/linux/mroute6.h +++ b/include/linux/mroute6.h | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | #ifdef CONFIG_IPV6_MROUTE | 10 | #ifdef CONFIG_IPV6_MROUTE |
| 11 | static inline int ip6_mroute_opt(int opt) | 11 | static inline int ip6_mroute_opt(int opt) |
| 12 | { | 12 | { |
| 13 | return (opt >= MRT6_BASE) && (opt <= MRT6_BASE + 10); | 13 | return (opt >= MRT6_BASE) && (opt <= MRT6_MAX); |
| 14 | } | 14 | } |
| 15 | #else | 15 | #else |
| 16 | static inline int ip6_mroute_opt(int opt) | 16 | static inline int ip6_mroute_opt(int opt) |
diff --git a/include/linux/netdev_features.h b/include/linux/netdev_features.h index 5ac32123035a..3dd39340430e 100644 --- a/include/linux/netdev_features.h +++ b/include/linux/netdev_features.h | |||
| @@ -41,7 +41,7 @@ enum { | |||
| 41 | NETIF_F_TSO_ECN_BIT, /* ... TCP ECN support */ | 41 | NETIF_F_TSO_ECN_BIT, /* ... TCP ECN support */ |
| 42 | NETIF_F_TSO6_BIT, /* ... TCPv6 segmentation */ | 42 | NETIF_F_TSO6_BIT, /* ... TCPv6 segmentation */ |
| 43 | NETIF_F_FSO_BIT, /* ... FCoE segmentation */ | 43 | NETIF_F_FSO_BIT, /* ... FCoE segmentation */ |
| 44 | NETIF_F_GSO_RESERVED1, /* ... free (fill GSO_MASK to 8 bits) */ | 44 | NETIF_F_GSO_GRE_BIT, /* ... GRE with TSO */ |
| 45 | /**/NETIF_F_GSO_LAST, /* [can't be last bit, see GSO_MASK] */ | 45 | /**/NETIF_F_GSO_LAST, /* [can't be last bit, see GSO_MASK] */ |
| 46 | NETIF_F_GSO_RESERVED2 /* ... free (fill GSO_MASK to 8 bits) */ | 46 | NETIF_F_GSO_RESERVED2 /* ... free (fill GSO_MASK to 8 bits) */ |
| 47 | = NETIF_F_GSO_LAST, | 47 | = NETIF_F_GSO_LAST, |
| @@ -102,6 +102,7 @@ enum { | |||
| 102 | #define NETIF_F_VLAN_CHALLENGED __NETIF_F(VLAN_CHALLENGED) | 102 | #define NETIF_F_VLAN_CHALLENGED __NETIF_F(VLAN_CHALLENGED) |
| 103 | #define NETIF_F_RXFCS __NETIF_F(RXFCS) | 103 | #define NETIF_F_RXFCS __NETIF_F(RXFCS) |
| 104 | #define NETIF_F_RXALL __NETIF_F(RXALL) | 104 | #define NETIF_F_RXALL __NETIF_F(RXALL) |
| 105 | #define NETIF_F_GRE_GSO __NETIF_F(GSO_GRE) | ||
| 105 | 106 | ||
| 106 | /* Features valid for ethtool to change */ | 107 | /* Features valid for ethtool to change */ |
| 107 | /* = all defined minus driver/device-class-related */ | 108 | /* = all defined minus driver/device-class-related */ |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 9ef07d0868b6..b3d00fa4b314 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
| @@ -67,6 +67,8 @@ extern void netdev_set_default_ethtool_ops(struct net_device *dev, | |||
| 67 | #define NET_ADDR_PERM 0 /* address is permanent (default) */ | 67 | #define NET_ADDR_PERM 0 /* address is permanent (default) */ |
| 68 | #define NET_ADDR_RANDOM 1 /* address is generated randomly */ | 68 | #define NET_ADDR_RANDOM 1 /* address is generated randomly */ |
| 69 | #define NET_ADDR_STOLEN 2 /* address is stolen from other device */ | 69 | #define NET_ADDR_STOLEN 2 /* address is stolen from other device */ |
| 70 | #define NET_ADDR_SET 3 /* address is set using | ||
| 71 | * dev_set_mac_address() */ | ||
| 70 | 72 | ||
| 71 | /* Backlog congestion levels */ | 73 | /* Backlog congestion levels */ |
| 72 | #define NET_RX_SUCCESS 0 /* keep 'em coming, baby */ | 74 | #define NET_RX_SUCCESS 0 /* keep 'em coming, baby */ |
| @@ -859,8 +861,7 @@ struct netdev_fcoe_hbainfo { | |||
| 859 | * flow_id is a flow ID to be passed to rps_may_expire_flow() later. | 861 | * flow_id is a flow ID to be passed to rps_may_expire_flow() later. |
| 860 | * Return the filter ID on success, or a negative error code. | 862 | * Return the filter ID on success, or a negative error code. |
| 861 | * | 863 | * |
| 862 | * Slave management functions (for bridge, bonding, etc). User should | 864 | * Slave management functions (for bridge, bonding, etc). |
| 863 | * call netdev_set_master() to set dev->master properly. | ||
| 864 | * int (*ndo_add_slave)(struct net_device *dev, struct net_device *slave_dev); | 865 | * int (*ndo_add_slave)(struct net_device *dev, struct net_device *slave_dev); |
| 865 | * Called to make another netdev an underling. | 866 | * Called to make another netdev an underling. |
| 866 | * | 867 | * |
| @@ -883,7 +884,8 @@ struct netdev_fcoe_hbainfo { | |||
| 883 | * struct net_device *dev, | 884 | * struct net_device *dev, |
| 884 | * const unsigned char *addr, u16 flags) | 885 | * const unsigned char *addr, u16 flags) |
| 885 | * Adds an FDB entry to dev for addr. | 886 | * Adds an FDB entry to dev for addr. |
| 886 | * int (*ndo_fdb_del)(struct ndmsg *ndm, struct net_device *dev, | 887 | * int (*ndo_fdb_del)(struct ndmsg *ndm, struct nlattr *tb[], |
| 888 | * struct net_device *dev, | ||
| 887 | * const unsigned char *addr) | 889 | * const unsigned char *addr) |
| 888 | * Deletes the FDB entry from dev coresponding to addr. | 890 | * Deletes the FDB entry from dev coresponding to addr. |
| 889 | * int (*ndo_fdb_dump)(struct sk_buff *skb, struct netlink_callback *cb, | 891 | * int (*ndo_fdb_dump)(struct sk_buff *skb, struct netlink_callback *cb, |
| @@ -894,6 +896,14 @@ struct netdev_fcoe_hbainfo { | |||
| 894 | * int (*ndo_bridge_setlink)(struct net_device *dev, struct nlmsghdr *nlh) | 896 | * int (*ndo_bridge_setlink)(struct net_device *dev, struct nlmsghdr *nlh) |
| 895 | * int (*ndo_bridge_getlink)(struct sk_buff *skb, u32 pid, u32 seq, | 897 | * int (*ndo_bridge_getlink)(struct sk_buff *skb, u32 pid, u32 seq, |
| 896 | * struct net_device *dev) | 898 | * struct net_device *dev) |
| 899 | * | ||
| 900 | * int (*ndo_change_carrier)(struct net_device *dev, bool new_carrier); | ||
| 901 | * Called to change device carrier. Soft-devices (like dummy, team, etc) | ||
| 902 | * which do not represent real hardware may define this to allow their | ||
| 903 | * userspace components to manage their virtual carrier state. Devices | ||
| 904 | * that determine carrier state from physical hardware properties (eg | ||
| 905 | * network cables) or protocol-dependent mechanisms (eg | ||
| 906 | * USB_CDC_NOTIFY_NETWORK_CONNECTION) should NOT implement this function. | ||
| 897 | */ | 907 | */ |
| 898 | struct net_device_ops { | 908 | struct net_device_ops { |
| 899 | int (*ndo_init)(struct net_device *dev); | 909 | int (*ndo_init)(struct net_device *dev); |
| @@ -999,6 +1009,7 @@ struct net_device_ops { | |||
| 999 | const unsigned char *addr, | 1009 | const unsigned char *addr, |
| 1000 | u16 flags); | 1010 | u16 flags); |
| 1001 | int (*ndo_fdb_del)(struct ndmsg *ndm, | 1011 | int (*ndo_fdb_del)(struct ndmsg *ndm, |
| 1012 | struct nlattr *tb[], | ||
| 1002 | struct net_device *dev, | 1013 | struct net_device *dev, |
| 1003 | const unsigned char *addr); | 1014 | const unsigned char *addr); |
| 1004 | int (*ndo_fdb_dump)(struct sk_buff *skb, | 1015 | int (*ndo_fdb_dump)(struct sk_buff *skb, |
| @@ -1010,7 +1021,12 @@ struct net_device_ops { | |||
| 1010 | struct nlmsghdr *nlh); | 1021 | struct nlmsghdr *nlh); |
| 1011 | int (*ndo_bridge_getlink)(struct sk_buff *skb, | 1022 | int (*ndo_bridge_getlink)(struct sk_buff *skb, |
| 1012 | u32 pid, u32 seq, | 1023 | u32 pid, u32 seq, |
| 1013 | struct net_device *dev); | 1024 | struct net_device *dev, |
| 1025 | u32 filter_mask); | ||
| 1026 | int (*ndo_bridge_dellink)(struct net_device *dev, | ||
| 1027 | struct nlmsghdr *nlh); | ||
| 1028 | int (*ndo_change_carrier)(struct net_device *dev, | ||
| 1029 | bool new_carrier); | ||
| 1014 | }; | 1030 | }; |
| 1015 | 1031 | ||
| 1016 | /* | 1032 | /* |
| @@ -1161,9 +1177,7 @@ struct net_device { | |||
| 1161 | * avoid dirtying this cache line. | 1177 | * avoid dirtying this cache line. |
| 1162 | */ | 1178 | */ |
| 1163 | 1179 | ||
| 1164 | struct net_device *master; /* Pointer to master device of a group, | 1180 | struct list_head upper_dev_list; /* List of upper devices */ |
| 1165 | * which this device is member of. | ||
| 1166 | */ | ||
| 1167 | 1181 | ||
| 1168 | /* Interface address info used in eth_type_trans() */ | 1182 | /* Interface address info used in eth_type_trans() */ |
| 1169 | unsigned char *dev_addr; /* hw address, (before bcast | 1183 | unsigned char *dev_addr; /* hw address, (before bcast |
| @@ -1263,7 +1277,7 @@ struct net_device { | |||
| 1263 | void (*destructor)(struct net_device *dev); | 1277 | void (*destructor)(struct net_device *dev); |
| 1264 | 1278 | ||
| 1265 | #ifdef CONFIG_NETPOLL | 1279 | #ifdef CONFIG_NETPOLL |
| 1266 | struct netpoll_info *npinfo; | 1280 | struct netpoll_info __rcu *npinfo; |
| 1267 | #endif | 1281 | #endif |
| 1268 | 1282 | ||
| 1269 | #ifdef CONFIG_NET_NS | 1283 | #ifdef CONFIG_NET_NS |
| @@ -1277,9 +1291,12 @@ struct net_device { | |||
| 1277 | struct pcpu_lstats __percpu *lstats; /* loopback stats */ | 1291 | struct pcpu_lstats __percpu *lstats; /* loopback stats */ |
| 1278 | struct pcpu_tstats __percpu *tstats; /* tunnel stats */ | 1292 | struct pcpu_tstats __percpu *tstats; /* tunnel stats */ |
| 1279 | struct pcpu_dstats __percpu *dstats; /* dummy stats */ | 1293 | struct pcpu_dstats __percpu *dstats; /* dummy stats */ |
| 1294 | struct pcpu_vstats __percpu *vstats; /* veth stats */ | ||
| 1280 | }; | 1295 | }; |
| 1281 | /* GARP */ | 1296 | /* GARP */ |
| 1282 | struct garp_port __rcu *garp_port; | 1297 | struct garp_port __rcu *garp_port; |
| 1298 | /* MRP */ | ||
| 1299 | struct mrp_port __rcu *mrp_port; | ||
| 1283 | 1300 | ||
| 1284 | /* class/net/name entry */ | 1301 | /* class/net/name entry */ |
| 1285 | struct device dev; | 1302 | struct device dev; |
| @@ -1396,6 +1413,7 @@ static inline void netdev_for_each_tx_queue(struct net_device *dev, | |||
| 1396 | 1413 | ||
| 1397 | extern struct netdev_queue *netdev_pick_tx(struct net_device *dev, | 1414 | extern struct netdev_queue *netdev_pick_tx(struct net_device *dev, |
| 1398 | struct sk_buff *skb); | 1415 | struct sk_buff *skb); |
| 1416 | extern u16 __netdev_pick_tx(struct net_device *dev, struct sk_buff *skb); | ||
| 1399 | 1417 | ||
| 1400 | /* | 1418 | /* |
| 1401 | * Net namespace inlines | 1419 | * Net namespace inlines |
| @@ -2095,6 +2113,18 @@ static inline void netif_wake_subqueue(struct net_device *dev, u16 queue_index) | |||
| 2095 | __netif_schedule(txq->qdisc); | 2113 | __netif_schedule(txq->qdisc); |
| 2096 | } | 2114 | } |
| 2097 | 2115 | ||
| 2116 | #ifdef CONFIG_XPS | ||
| 2117 | extern int netif_set_xps_queue(struct net_device *dev, struct cpumask *mask, | ||
| 2118 | u16 index); | ||
| 2119 | #else | ||
| 2120 | static inline int netif_set_xps_queue(struct net_device *dev, | ||
| 2121 | struct cpumask *mask, | ||
| 2122 | u16 index) | ||
| 2123 | { | ||
| 2124 | return 0; | ||
| 2125 | } | ||
| 2126 | #endif | ||
| 2127 | |||
| 2098 | /* | 2128 | /* |
| 2099 | * Returns a Tx hash for the given packet when dev->real_num_tx_queues is used | 2129 | * Returns a Tx hash for the given packet when dev->real_num_tx_queues is used |
| 2100 | * as a distribution range limit for the returned value. | 2130 | * as a distribution range limit for the returned value. |
| @@ -2197,6 +2227,8 @@ extern int dev_set_mtu(struct net_device *, int); | |||
| 2197 | extern void dev_set_group(struct net_device *, int); | 2227 | extern void dev_set_group(struct net_device *, int); |
| 2198 | extern int dev_set_mac_address(struct net_device *, | 2228 | extern int dev_set_mac_address(struct net_device *, |
| 2199 | struct sockaddr *); | 2229 | struct sockaddr *); |
| 2230 | extern int dev_change_carrier(struct net_device *, | ||
| 2231 | bool new_carrier); | ||
| 2200 | extern int dev_hard_start_xmit(struct sk_buff *skb, | 2232 | extern int dev_hard_start_xmit(struct sk_buff *skb, |
| 2201 | struct net_device *dev, | 2233 | struct net_device *dev, |
| 2202 | struct netdev_queue *txq); | 2234 | struct netdev_queue *txq); |
| @@ -2614,7 +2646,6 @@ extern void netdev_notify_peers(struct net_device *dev); | |||
| 2614 | extern void netdev_features_change(struct net_device *dev); | 2646 | extern void netdev_features_change(struct net_device *dev); |
| 2615 | /* Load a device via the kmod */ | 2647 | /* Load a device via the kmod */ |
| 2616 | extern void dev_load(struct net *net, const char *name); | 2648 | extern void dev_load(struct net *net, const char *name); |
| 2617 | extern void dev_mcast_init(void); | ||
| 2618 | extern struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev, | 2649 | extern struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev, |
| 2619 | struct rtnl_link_stats64 *storage); | 2650 | struct rtnl_link_stats64 *storage); |
| 2620 | extern void netdev_stats_to_stats64(struct rtnl_link_stats64 *stats64, | 2651 | extern void netdev_stats_to_stats64(struct rtnl_link_stats64 *stats64, |
| @@ -2624,12 +2655,30 @@ extern int netdev_max_backlog; | |||
| 2624 | extern int netdev_tstamp_prequeue; | 2655 | extern int netdev_tstamp_prequeue; |
| 2625 | extern int weight_p; | 2656 | extern int weight_p; |
| 2626 | extern int bpf_jit_enable; | 2657 | extern int bpf_jit_enable; |
| 2627 | extern int netdev_set_master(struct net_device *dev, struct net_device *master); | 2658 | |
| 2628 | extern int netdev_set_bond_master(struct net_device *dev, | 2659 | extern bool netdev_has_upper_dev(struct net_device *dev, |
| 2629 | struct net_device *master); | 2660 | struct net_device *upper_dev); |
| 2661 | extern bool netdev_has_any_upper_dev(struct net_device *dev); | ||
| 2662 | extern struct net_device *netdev_master_upper_dev_get(struct net_device *dev); | ||
| 2663 | extern struct net_device *netdev_master_upper_dev_get_rcu(struct net_device *dev); | ||
| 2664 | extern int netdev_upper_dev_link(struct net_device *dev, | ||
| 2665 | struct net_device *upper_dev); | ||
| 2666 | extern int netdev_master_upper_dev_link(struct net_device *dev, | ||
| 2667 | struct net_device *upper_dev); | ||
| 2668 | extern void netdev_upper_dev_unlink(struct net_device *dev, | ||
| 2669 | struct net_device *upper_dev); | ||
| 2630 | extern int skb_checksum_help(struct sk_buff *skb); | 2670 | extern int skb_checksum_help(struct sk_buff *skb); |
| 2631 | extern struct sk_buff *skb_gso_segment(struct sk_buff *skb, | 2671 | extern struct sk_buff *__skb_gso_segment(struct sk_buff *skb, |
| 2632 | netdev_features_t features); | 2672 | netdev_features_t features, bool tx_path); |
| 2673 | extern struct sk_buff *skb_mac_gso_segment(struct sk_buff *skb, | ||
| 2674 | netdev_features_t features); | ||
| 2675 | |||
| 2676 | static inline | ||
| 2677 | struct sk_buff *skb_gso_segment(struct sk_buff *skb, netdev_features_t features) | ||
| 2678 | { | ||
| 2679 | return __skb_gso_segment(skb, features, true); | ||
| 2680 | } | ||
| 2681 | |||
| 2633 | #ifdef CONFIG_BUG | 2682 | #ifdef CONFIG_BUG |
| 2634 | extern void netdev_rx_csum_fault(struct net_device *dev); | 2683 | extern void netdev_rx_csum_fault(struct net_device *dev); |
| 2635 | #else | 2684 | #else |
| @@ -2642,9 +2691,9 @@ extern void net_enable_timestamp(void); | |||
| 2642 | extern void net_disable_timestamp(void); | 2691 | extern void net_disable_timestamp(void); |
| 2643 | 2692 | ||
| 2644 | #ifdef CONFIG_PROC_FS | 2693 | #ifdef CONFIG_PROC_FS |
| 2645 | extern void *dev_seq_start(struct seq_file *seq, loff_t *pos); | 2694 | extern int __init dev_proc_init(void); |
| 2646 | extern void *dev_seq_next(struct seq_file *seq, void *v, loff_t *pos); | 2695 | #else |
| 2647 | extern void dev_seq_stop(struct seq_file *seq, void *v); | 2696 | #define dev_proc_init() 0 |
| 2648 | #endif | 2697 | #endif |
| 2649 | 2698 | ||
| 2650 | extern int netdev_class_create_file(struct class_attribute *class_attr); | 2699 | extern int netdev_class_create_file(struct class_attribute *class_attr); |
| @@ -2846,4 +2895,34 @@ do { \ | |||
| 2846 | }) | 2895 | }) |
| 2847 | #endif | 2896 | #endif |
| 2848 | 2897 | ||
| 2898 | /* | ||
| 2899 | * The list of packet types we will receive (as opposed to discard) | ||
| 2900 | * and the routines to invoke. | ||
| 2901 | * | ||
| 2902 | * Why 16. Because with 16 the only overlap we get on a hash of the | ||
| 2903 | * low nibble of the protocol value is RARP/SNAP/X.25. | ||
| 2904 | * | ||
| 2905 | * NOTE: That is no longer true with the addition of VLAN tags. Not | ||
| 2906 | * sure which should go first, but I bet it won't make much | ||
| 2907 | * difference if we are running VLANs. The good news is that | ||
| 2908 | * this protocol won't be in the list unless compiled in, so | ||
| 2909 | * the average user (w/out VLANs) will not be adversely affected. | ||
| 2910 | * --BLG | ||
| 2911 | * | ||
| 2912 | * 0800 IP | ||
| 2913 | * 8100 802.1Q VLAN | ||
| 2914 | * 0001 802.3 | ||
| 2915 | * 0002 AX.25 | ||
| 2916 | * 0004 802.2 | ||
| 2917 | * 8035 RARP | ||
| 2918 | * 0005 SNAP | ||
| 2919 | * 0805 X.25 | ||
| 2920 | * 0806 ARP | ||
| 2921 | * 8137 IPX | ||
| 2922 | * 0009 Localtalk | ||
| 2923 | * 86DD IPv6 | ||
| 2924 | */ | ||
| 2925 | #define PTYPE_HASH_SIZE (16) | ||
| 2926 | #define PTYPE_HASH_MASK (PTYPE_HASH_SIZE - 1) | ||
| 2927 | |||
| 2849 | #endif /* _LINUX_NETDEVICE_H */ | 2928 | #endif /* _LINUX_NETDEVICE_H */ |
diff --git a/include/linux/netfilter/nf_conntrack_sip.h b/include/linux/netfilter/nf_conntrack_sip.h index 387bdd02945d..ba7f571a2b1c 100644 --- a/include/linux/netfilter/nf_conntrack_sip.h +++ b/include/linux/netfilter/nf_conntrack_sip.h | |||
| @@ -4,12 +4,15 @@ | |||
| 4 | 4 | ||
| 5 | #include <net/netfilter/nf_conntrack_expect.h> | 5 | #include <net/netfilter/nf_conntrack_expect.h> |
| 6 | 6 | ||
| 7 | #include <linux/types.h> | ||
| 8 | |||
| 7 | #define SIP_PORT 5060 | 9 | #define SIP_PORT 5060 |
| 8 | #define SIP_TIMEOUT 3600 | 10 | #define SIP_TIMEOUT 3600 |
| 9 | 11 | ||
| 10 | struct nf_ct_sip_master { | 12 | struct nf_ct_sip_master { |
| 11 | unsigned int register_cseq; | 13 | unsigned int register_cseq; |
| 12 | unsigned int invite_cseq; | 14 | unsigned int invite_cseq; |
| 15 | __be16 forced_dport; | ||
| 13 | }; | 16 | }; |
| 14 | 17 | ||
| 15 | enum sip_expectation_classes { | 18 | enum sip_expectation_classes { |
diff --git a/include/linux/netfilter/nfnetlink.h b/include/linux/netfilter/nfnetlink.h index 4966ddec039b..ecbb8e495912 100644 --- a/include/linux/netfilter/nfnetlink.h +++ b/include/linux/netfilter/nfnetlink.h | |||
| @@ -34,8 +34,8 @@ extern int nfnetlink_send(struct sk_buff *skb, struct net *net, u32 pid, unsigne | |||
| 34 | extern int nfnetlink_set_err(struct net *net, u32 pid, u32 group, int error); | 34 | extern int nfnetlink_set_err(struct net *net, u32 pid, u32 group, int error); |
| 35 | extern int nfnetlink_unicast(struct sk_buff *skb, struct net *net, u_int32_t pid, int flags); | 35 | extern int nfnetlink_unicast(struct sk_buff *skb, struct net *net, u_int32_t pid, int flags); |
| 36 | 36 | ||
| 37 | extern void nfnl_lock(void); | 37 | extern void nfnl_lock(__u8 subsys_id); |
| 38 | extern void nfnl_unlock(void); | 38 | extern void nfnl_unlock(__u8 subsys_id); |
| 39 | 39 | ||
| 40 | #define MODULE_ALIAS_NFNL_SUBSYS(subsys) \ | 40 | #define MODULE_ALIAS_NFNL_SUBSYS(subsys) \ |
| 41 | MODULE_ALIAS("nfnetlink-subsys-" __stringify(subsys)) | 41 | MODULE_ALIAS("nfnetlink-subsys-" __stringify(subsys)) |
diff --git a/include/linux/netpoll.h b/include/linux/netpoll.h index 66d5379c305e..9d7d8c64f7c8 100644 --- a/include/linux/netpoll.h +++ b/include/linux/netpoll.h | |||
| @@ -12,28 +12,38 @@ | |||
| 12 | #include <linux/rcupdate.h> | 12 | #include <linux/rcupdate.h> |
| 13 | #include <linux/list.h> | 13 | #include <linux/list.h> |
| 14 | 14 | ||
| 15 | union inet_addr { | ||
| 16 | __u32 all[4]; | ||
| 17 | __be32 ip; | ||
| 18 | __be32 ip6[4]; | ||
| 19 | struct in_addr in; | ||
| 20 | struct in6_addr in6; | ||
| 21 | }; | ||
| 22 | |||
| 15 | struct netpoll { | 23 | struct netpoll { |
| 16 | struct net_device *dev; | 24 | struct net_device *dev; |
| 17 | char dev_name[IFNAMSIZ]; | 25 | char dev_name[IFNAMSIZ]; |
| 18 | const char *name; | 26 | const char *name; |
| 19 | void (*rx_hook)(struct netpoll *, int, char *, int); | 27 | void (*rx_hook)(struct netpoll *, int, char *, int); |
| 20 | 28 | ||
| 21 | __be32 local_ip, remote_ip; | 29 | union inet_addr local_ip, remote_ip; |
| 30 | bool ipv6; | ||
| 22 | u16 local_port, remote_port; | 31 | u16 local_port, remote_port; |
| 23 | u8 remote_mac[ETH_ALEN]; | 32 | u8 remote_mac[ETH_ALEN]; |
| 24 | 33 | ||
| 25 | struct list_head rx; /* rx_np list element */ | 34 | struct list_head rx; /* rx_np list element */ |
| 26 | struct rcu_head rcu; | 35 | struct work_struct cleanup_work; |
| 27 | }; | 36 | }; |
| 28 | 37 | ||
| 29 | struct netpoll_info { | 38 | struct netpoll_info { |
| 30 | atomic_t refcnt; | 39 | atomic_t refcnt; |
| 31 | 40 | ||
| 32 | int rx_flags; | 41 | unsigned long rx_flags; |
| 33 | spinlock_t rx_lock; | 42 | spinlock_t rx_lock; |
| 43 | struct mutex dev_lock; | ||
| 34 | struct list_head rx_np; /* netpolls that registered an rx_hook */ | 44 | struct list_head rx_np; /* netpolls that registered an rx_hook */ |
| 35 | 45 | ||
| 36 | struct sk_buff_head arp_tx; /* list of arp requests to reply to */ | 46 | struct sk_buff_head neigh_tx; /* list of neigh requests to reply to */ |
| 37 | struct sk_buff_head txq; | 47 | struct sk_buff_head txq; |
| 38 | 48 | ||
| 39 | struct delayed_work tx_work; | 49 | struct delayed_work tx_work; |
| @@ -42,6 +52,14 @@ struct netpoll_info { | |||
| 42 | struct rcu_head rcu; | 52 | struct rcu_head rcu; |
| 43 | }; | 53 | }; |
| 44 | 54 | ||
| 55 | #ifdef CONFIG_NETPOLL | ||
| 56 | extern int netpoll_rx_disable(struct net_device *dev); | ||
| 57 | extern void netpoll_rx_enable(struct net_device *dev); | ||
| 58 | #else | ||
| 59 | static inline int netpoll_rx_disable(struct net_device *dev) { return 0; } | ||
| 60 | static inline void netpoll_rx_enable(struct net_device *dev) { return; } | ||
| 61 | #endif | ||
| 62 | |||
| 45 | void netpoll_send_udp(struct netpoll *np, const char *msg, int len); | 63 | void netpoll_send_udp(struct netpoll *np, const char *msg, int len); |
| 46 | void netpoll_print_options(struct netpoll *np); | 64 | void netpoll_print_options(struct netpoll *np); |
| 47 | int netpoll_parse_options(struct netpoll *np, char *opt); | 65 | int netpoll_parse_options(struct netpoll *np, char *opt); |
| @@ -50,7 +68,7 @@ int netpoll_setup(struct netpoll *np); | |||
| 50 | int netpoll_trap(void); | 68 | int netpoll_trap(void); |
| 51 | void netpoll_set_trap(int trap); | 69 | void netpoll_set_trap(int trap); |
| 52 | void __netpoll_cleanup(struct netpoll *np); | 70 | void __netpoll_cleanup(struct netpoll *np); |
| 53 | void __netpoll_free_rcu(struct netpoll *np); | 71 | void __netpoll_free_async(struct netpoll *np); |
| 54 | void netpoll_cleanup(struct netpoll *np); | 72 | void netpoll_cleanup(struct netpoll *np); |
| 55 | int __netpoll_rx(struct sk_buff *skb, struct netpoll_info *npinfo); | 73 | int __netpoll_rx(struct sk_buff *skb, struct netpoll_info *npinfo); |
| 56 | void netpoll_send_skb_on_dev(struct netpoll *np, struct sk_buff *skb, | 74 | void netpoll_send_skb_on_dev(struct netpoll *np, struct sk_buff *skb, |
diff --git a/include/linux/of.h b/include/linux/of.h index 5ebcc5c8e423..a0f129284948 100644 --- a/include/linux/of.h +++ b/include/linux/of.h | |||
| @@ -92,7 +92,7 @@ static inline void of_node_put(struct device_node *node) { } | |||
| 92 | extern struct device_node *of_allnodes; | 92 | extern struct device_node *of_allnodes; |
| 93 | extern struct device_node *of_chosen; | 93 | extern struct device_node *of_chosen; |
| 94 | extern struct device_node *of_aliases; | 94 | extern struct device_node *of_aliases; |
| 95 | extern rwlock_t devtree_lock; | 95 | extern raw_spinlock_t devtree_lock; |
| 96 | 96 | ||
| 97 | static inline bool of_have_populated_dt(void) | 97 | static inline bool of_have_populated_dt(void) |
| 98 | { | 98 | { |
| @@ -160,7 +160,7 @@ static inline unsigned long of_read_ulong(const __be32 *cell, int size) | |||
| 160 | 160 | ||
| 161 | #define OF_BAD_ADDR ((u64)-1) | 161 | #define OF_BAD_ADDR ((u64)-1) |
| 162 | 162 | ||
| 163 | static inline const char* of_node_full_name(struct device_node *np) | 163 | static inline const char *of_node_full_name(const struct device_node *np) |
| 164 | { | 164 | { |
| 165 | return np ? np->full_name : "<no-node>"; | 165 | return np ? np->full_name : "<no-node>"; |
| 166 | } | 166 | } |
| @@ -277,6 +277,8 @@ extern struct device_node *of_parse_phandle(const struct device_node *np, | |||
| 277 | extern int of_parse_phandle_with_args(const struct device_node *np, | 277 | extern int of_parse_phandle_with_args(const struct device_node *np, |
| 278 | const char *list_name, const char *cells_name, int index, | 278 | const char *list_name, const char *cells_name, int index, |
| 279 | struct of_phandle_args *out_args); | 279 | struct of_phandle_args *out_args); |
| 280 | extern int of_count_phandle_with_args(const struct device_node *np, | ||
| 281 | const char *list_name, const char *cells_name); | ||
| 280 | 282 | ||
| 281 | extern void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align)); | 283 | extern void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align)); |
| 282 | extern int of_alias_get_id(struct device_node *np, const char *stem); | 284 | extern int of_alias_get_id(struct device_node *np, const char *stem); |
| @@ -467,6 +469,13 @@ static inline int of_parse_phandle_with_args(struct device_node *np, | |||
| 467 | return -ENOSYS; | 469 | return -ENOSYS; |
| 468 | } | 470 | } |
| 469 | 471 | ||
| 472 | static inline int of_count_phandle_with_args(struct device_node *np, | ||
| 473 | const char *list_name, | ||
| 474 | const char *cells_name) | ||
| 475 | { | ||
| 476 | return -ENOSYS; | ||
| 477 | } | ||
| 478 | |||
| 470 | static inline int of_alias_get_id(struct device_node *np, const char *stem) | 479 | static inline int of_alias_get_id(struct device_node *np, const char *stem) |
| 471 | { | 480 | { |
| 472 | return -ENOSYS; | 481 | return -ENOSYS; |
diff --git a/include/linux/of_gpio.h b/include/linux/of_gpio.h index c454f5796747..a83dc6f5008e 100644 --- a/include/linux/of_gpio.h +++ b/include/linux/of_gpio.h | |||
| @@ -50,9 +50,6 @@ static inline struct of_mm_gpio_chip *to_of_mm_gpio_chip(struct gpio_chip *gc) | |||
| 50 | extern int of_get_named_gpio_flags(struct device_node *np, | 50 | extern int of_get_named_gpio_flags(struct device_node *np, |
| 51 | const char *list_name, int index, enum of_gpio_flags *flags); | 51 | const char *list_name, int index, enum of_gpio_flags *flags); |
| 52 | 52 | ||
| 53 | extern unsigned int of_gpio_named_count(struct device_node *np, | ||
| 54 | const char* propname); | ||
| 55 | |||
| 56 | extern int of_mm_gpiochip_add(struct device_node *np, | 53 | extern int of_mm_gpiochip_add(struct device_node *np, |
| 57 | struct of_mm_gpio_chip *mm_gc); | 54 | struct of_mm_gpio_chip *mm_gc); |
| 58 | 55 | ||
| @@ -71,12 +68,6 @@ static inline int of_get_named_gpio_flags(struct device_node *np, | |||
| 71 | return -ENOSYS; | 68 | return -ENOSYS; |
| 72 | } | 69 | } |
| 73 | 70 | ||
| 74 | static inline unsigned int of_gpio_named_count(struct device_node *np, | ||
| 75 | const char* propname) | ||
| 76 | { | ||
| 77 | return 0; | ||
| 78 | } | ||
| 79 | |||
| 80 | static inline int of_gpio_simple_xlate(struct gpio_chip *gc, | 71 | static inline int of_gpio_simple_xlate(struct gpio_chip *gc, |
| 81 | const struct of_phandle_args *gpiospec, | 72 | const struct of_phandle_args *gpiospec, |
| 82 | u32 *flags) | 73 | u32 *flags) |
| @@ -90,22 +81,37 @@ static inline void of_gpiochip_remove(struct gpio_chip *gc) { } | |||
| 90 | #endif /* CONFIG_OF_GPIO */ | 81 | #endif /* CONFIG_OF_GPIO */ |
| 91 | 82 | ||
| 92 | /** | 83 | /** |
| 93 | * of_gpio_count - Count GPIOs for a device | 84 | * of_gpio_named_count() - Count GPIOs for a device |
| 94 | * @np: device node to count GPIOs for | 85 | * @np: device node to count GPIOs for |
| 86 | * @propname: property name containing gpio specifier(s) | ||
| 95 | * | 87 | * |
| 96 | * The function returns the count of GPIOs specified for a node. | 88 | * The function returns the count of GPIOs specified for a node. |
| 89 | * Note that the empty GPIO specifiers count too. Returns either | ||
| 90 | * Number of gpios defined in property, | ||
| 91 | * -EINVAL for an incorrectly formed gpios property, or | ||
| 92 | * -ENOENT for a missing gpios property | ||
| 97 | * | 93 | * |
| 98 | * Note that the empty GPIO specifiers counts too. For example, | 94 | * Example: |
| 99 | * | ||
| 100 | * gpios = <0 | 95 | * gpios = <0 |
| 101 | * &pio1 1 2 | 96 | * &gpio1 1 2 |
| 102 | * 0 | 97 | * 0 |
| 103 | * &pio2 3 4>; | 98 | * &gpio2 3 4>; |
| 99 | * | ||
| 100 | * The above example defines four GPIOs, two of which are not specified. | ||
| 101 | * This function will return '4' | ||
| 102 | */ | ||
| 103 | static inline int of_gpio_named_count(struct device_node *np, const char* propname) | ||
| 104 | { | ||
| 105 | return of_count_phandle_with_args(np, propname, "#gpio-cells"); | ||
| 106 | } | ||
| 107 | |||
| 108 | /** | ||
| 109 | * of_gpio_count() - Count GPIOs for a device | ||
| 110 | * @np: device node to count GPIOs for | ||
| 104 | * | 111 | * |
| 105 | * defines four GPIOs (so this function will return 4), two of which | 112 | * Same as of_gpio_named_count, but hard coded to use the 'gpios' property |
| 106 | * are not specified. | ||
| 107 | */ | 113 | */ |
| 108 | static inline unsigned int of_gpio_count(struct device_node *np) | 114 | static inline int of_gpio_count(struct device_node *np) |
| 109 | { | 115 | { |
| 110 | return of_gpio_named_count(np, "gpios"); | 116 | return of_gpio_named_count(np, "gpios"); |
| 111 | } | 117 | } |
diff --git a/include/linux/pci.h b/include/linux/pci.h index 15472d691ee6..6fa4dd2a3b9e 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
| @@ -1101,6 +1101,12 @@ static inline int pci_enable_msi_block(struct pci_dev *dev, unsigned int nvec) | |||
| 1101 | return -1; | 1101 | return -1; |
| 1102 | } | 1102 | } |
| 1103 | 1103 | ||
| 1104 | static inline int | ||
| 1105 | pci_enable_msi_block_auto(struct pci_dev *dev, unsigned int *maxvec) | ||
| 1106 | { | ||
| 1107 | return -1; | ||
| 1108 | } | ||
| 1109 | |||
| 1104 | static inline void pci_msi_shutdown(struct pci_dev *dev) | 1110 | static inline void pci_msi_shutdown(struct pci_dev *dev) |
| 1105 | { } | 1111 | { } |
| 1106 | static inline void pci_disable_msi(struct pci_dev *dev) | 1112 | static inline void pci_disable_msi(struct pci_dev *dev) |
| @@ -1132,6 +1138,7 @@ static inline int pci_msi_enabled(void) | |||
| 1132 | } | 1138 | } |
| 1133 | #else | 1139 | #else |
| 1134 | extern int pci_enable_msi_block(struct pci_dev *dev, unsigned int nvec); | 1140 | extern int pci_enable_msi_block(struct pci_dev *dev, unsigned int nvec); |
| 1141 | extern int pci_enable_msi_block_auto(struct pci_dev *dev, unsigned int *maxvec); | ||
| 1135 | extern void pci_msi_shutdown(struct pci_dev *dev); | 1142 | extern void pci_msi_shutdown(struct pci_dev *dev); |
| 1136 | extern void pci_disable_msi(struct pci_dev *dev); | 1143 | extern void pci_disable_msi(struct pci_dev *dev); |
| 1137 | extern int pci_msix_table_size(struct pci_dev *dev); | 1144 | extern int pci_msix_table_size(struct pci_dev *dev); |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 0eb65796bcb9..907e7e56fa4b 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -2127,6 +2127,7 @@ | |||
| 2127 | #define PCI_DEVICE_ID_TIGON3_5754M 0x1672 | 2127 | #define PCI_DEVICE_ID_TIGON3_5754M 0x1672 |
| 2128 | #define PCI_DEVICE_ID_TIGON3_5755M 0x1673 | 2128 | #define PCI_DEVICE_ID_TIGON3_5755M 0x1673 |
| 2129 | #define PCI_DEVICE_ID_TIGON3_5756 0x1674 | 2129 | #define PCI_DEVICE_ID_TIGON3_5756 0x1674 |
| 2130 | #define PCI_DEVICE_ID_TIGON3_5750 0x1676 | ||
| 2130 | #define PCI_DEVICE_ID_TIGON3_5751 0x1677 | 2131 | #define PCI_DEVICE_ID_TIGON3_5751 0x1677 |
| 2131 | #define PCI_DEVICE_ID_TIGON3_5715 0x1678 | 2132 | #define PCI_DEVICE_ID_TIGON3_5715 0x1678 |
| 2132 | #define PCI_DEVICE_ID_TIGON3_5715S 0x1679 | 2133 | #define PCI_DEVICE_ID_TIGON3_5715S 0x1679 |
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index 6bfb2faa0b19..e47ee462c2f2 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h | |||
| @@ -135,16 +135,21 @@ struct hw_perf_event { | |||
| 135 | struct { /* software */ | 135 | struct { /* software */ |
| 136 | struct hrtimer hrtimer; | 136 | struct hrtimer hrtimer; |
| 137 | }; | 137 | }; |
| 138 | struct { /* tracepoint */ | ||
| 139 | struct task_struct *tp_target; | ||
| 140 | /* for tp_event->class */ | ||
| 141 | struct list_head tp_list; | ||
| 142 | }; | ||
| 138 | #ifdef CONFIG_HAVE_HW_BREAKPOINT | 143 | #ifdef CONFIG_HAVE_HW_BREAKPOINT |
| 139 | struct { /* breakpoint */ | 144 | struct { /* breakpoint */ |
| 140 | struct arch_hw_breakpoint info; | ||
| 141 | struct list_head bp_list; | ||
| 142 | /* | 145 | /* |
| 143 | * Crufty hack to avoid the chicken and egg | 146 | * Crufty hack to avoid the chicken and egg |
| 144 | * problem hw_breakpoint has with context | 147 | * problem hw_breakpoint has with context |
| 145 | * creation and event initalization. | 148 | * creation and event initalization. |
| 146 | */ | 149 | */ |
| 147 | struct task_struct *bp_target; | 150 | struct task_struct *bp_target; |
| 151 | struct arch_hw_breakpoint info; | ||
| 152 | struct list_head bp_list; | ||
| 148 | }; | 153 | }; |
| 149 | #endif | 154 | #endif |
| 150 | }; | 155 | }; |
| @@ -817,6 +822,17 @@ do { \ | |||
| 817 | } while (0) | 822 | } while (0) |
| 818 | 823 | ||
| 819 | 824 | ||
| 825 | struct perf_pmu_events_attr { | ||
| 826 | struct device_attribute attr; | ||
| 827 | u64 id; | ||
| 828 | }; | ||
| 829 | |||
| 830 | #define PMU_EVENT_ATTR(_name, _var, _id, _show) \ | ||
| 831 | static struct perf_pmu_events_attr _var = { \ | ||
| 832 | .attr = __ATTR(_name, 0444, _show, NULL), \ | ||
| 833 | .id = _id, \ | ||
| 834 | }; | ||
| 835 | |||
| 820 | #define PMU_FORMAT_ATTR(_name, _format) \ | 836 | #define PMU_FORMAT_ATTR(_name, _format) \ |
| 821 | static ssize_t \ | 837 | static ssize_t \ |
| 822 | _name##_show(struct device *dev, \ | 838 | _name##_show(struct device *dev, \ |
diff --git a/include/linux/phy.h b/include/linux/phy.h index 93b3cf77f564..33999adbf8c8 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h | |||
| @@ -506,13 +506,13 @@ struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45); | |||
| 506 | int phy_device_register(struct phy_device *phy); | 506 | int phy_device_register(struct phy_device *phy); |
| 507 | int phy_init_hw(struct phy_device *phydev); | 507 | int phy_init_hw(struct phy_device *phydev); |
| 508 | struct phy_device * phy_attach(struct net_device *dev, | 508 | struct phy_device * phy_attach(struct net_device *dev, |
| 509 | const char *bus_id, u32 flags, phy_interface_t interface); | 509 | const char *bus_id, phy_interface_t interface); |
| 510 | struct phy_device *phy_find_first(struct mii_bus *bus); | 510 | struct phy_device *phy_find_first(struct mii_bus *bus); |
| 511 | int phy_connect_direct(struct net_device *dev, struct phy_device *phydev, | 511 | int phy_connect_direct(struct net_device *dev, struct phy_device *phydev, |
| 512 | void (*handler)(struct net_device *), u32 flags, | 512 | void (*handler)(struct net_device *), |
| 513 | phy_interface_t interface); | 513 | phy_interface_t interface); |
| 514 | struct phy_device * phy_connect(struct net_device *dev, const char *bus_id, | 514 | struct phy_device * phy_connect(struct net_device *dev, const char *bus_id, |
| 515 | void (*handler)(struct net_device *), u32 flags, | 515 | void (*handler)(struct net_device *), |
| 516 | phy_interface_t interface); | 516 | phy_interface_t interface); |
| 517 | void phy_disconnect(struct phy_device *phydev); | 517 | void phy_disconnect(struct phy_device *phydev); |
| 518 | void phy_detach(struct phy_device *phydev); | 518 | void phy_detach(struct phy_device *phydev); |
diff --git a/include/linux/pinctrl/devinfo.h b/include/linux/pinctrl/devinfo.h new file mode 100644 index 000000000000..6e5f8a985ea7 --- /dev/null +++ b/include/linux/pinctrl/devinfo.h | |||
| @@ -0,0 +1,45 @@ | |||
| 1 | /* | ||
| 2 | * Per-device information from the pin control system. | ||
| 3 | * This is the stuff that get included into the device | ||
| 4 | * core. | ||
| 5 | * | ||
| 6 | * Copyright (C) 2012 ST-Ericsson SA | ||
| 7 | * Written on behalf of Linaro for ST-Ericsson | ||
| 8 | * This interface is used in the core to keep track of pins. | ||
| 9 | * | ||
| 10 | * Author: Linus Walleij <linus.walleij@linaro.org> | ||
| 11 | * | ||
| 12 | * License terms: GNU General Public License (GPL) version 2 | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef PINCTRL_DEVINFO_H | ||
| 16 | #define PINCTRL_DEVINFO_H | ||
| 17 | |||
| 18 | #ifdef CONFIG_PINCTRL | ||
| 19 | |||
| 20 | /* The device core acts as a consumer toward pinctrl */ | ||
| 21 | #include <linux/pinctrl/consumer.h> | ||
| 22 | |||
| 23 | /** | ||
| 24 | * struct dev_pin_info - pin state container for devices | ||
| 25 | * @p: pinctrl handle for the containing device | ||
| 26 | * @default_state: the default state for the handle, if found | ||
| 27 | */ | ||
| 28 | struct dev_pin_info { | ||
| 29 | struct pinctrl *p; | ||
| 30 | struct pinctrl_state *default_state; | ||
| 31 | }; | ||
| 32 | |||
| 33 | extern int pinctrl_bind_pins(struct device *dev); | ||
| 34 | |||
| 35 | #else | ||
| 36 | |||
| 37 | /* Stubs if we're not using pinctrl */ | ||
| 38 | |||
| 39 | static inline int pinctrl_bind_pins(struct device *dev) | ||
| 40 | { | ||
| 41 | return 0; | ||
| 42 | } | ||
| 43 | |||
| 44 | #endif /* CONFIG_PINCTRL */ | ||
| 45 | #endif /* PINCTRL_DEVINFO_H */ | ||
diff --git a/include/linux/pinctrl/pinconf-generic.h b/include/linux/pinctrl/pinconf-generic.h index 47a1bdd88878..72474e18f1e0 100644 --- a/include/linux/pinctrl/pinconf-generic.h +++ b/include/linux/pinctrl/pinconf-generic.h | |||
| @@ -46,7 +46,11 @@ | |||
| 46 | * @PIN_CONFIG_DRIVE_OPEN_SOURCE: the pin will be driven with open source | 46 | * @PIN_CONFIG_DRIVE_OPEN_SOURCE: the pin will be driven with open source |
| 47 | * (open emitter). Sending this config will enabale open drain mode, the | 47 | * (open emitter). Sending this config will enabale open drain mode, the |
| 48 | * argument is ignored. | 48 | * argument is ignored. |
| 49 | * @PIN_CONFIG_INPUT_SCHMITT_DISABLE: disable schmitt-trigger mode on the pin. | 49 | * @PIN_CONFIG_DRIVE_STRENGTH: the pin will output the current passed as |
| 50 | * argument. The argument is in mA. | ||
| 51 | * @PIN_CONFIG_INPUT_SCHMITT_ENABLE: control schmitt-trigger mode on the pin. | ||
| 52 | * If the argument != 0, schmitt-trigger mode is enabled. If it's 0, | ||
| 53 | * schmitt-trigger mode is disabled. | ||
| 50 | * @PIN_CONFIG_INPUT_SCHMITT: this will configure an input pin to run in | 54 | * @PIN_CONFIG_INPUT_SCHMITT: this will configure an input pin to run in |
| 51 | * schmitt-trigger mode. If the schmitt-trigger has adjustable hysteresis, | 55 | * schmitt-trigger mode. If the schmitt-trigger has adjustable hysteresis, |
| 52 | * the threshold value is given on a custom format as argument when | 56 | * the threshold value is given on a custom format as argument when |
| @@ -58,10 +62,15 @@ | |||
| 58 | * @PIN_CONFIG_POWER_SOURCE: if the pin can select between different power | 62 | * @PIN_CONFIG_POWER_SOURCE: if the pin can select between different power |
| 59 | * supplies, the argument to this parameter (on a custom format) tells | 63 | * supplies, the argument to this parameter (on a custom format) tells |
| 60 | * the driver which alternative power source to use. | 64 | * the driver which alternative power source to use. |
| 65 | * @PIN_CONFIG_SLEW_RATE: if the pin can select slew rate, the argument to | ||
| 66 | * this parameter (on a custom format) tells the driver which alternative | ||
| 67 | * slew rate to use. | ||
| 61 | * @PIN_CONFIG_LOW_POWER_MODE: this will configure the pin for low power | 68 | * @PIN_CONFIG_LOW_POWER_MODE: this will configure the pin for low power |
| 62 | * operation, if several modes of operation are supported these can be | 69 | * operation, if several modes of operation are supported these can be |
| 63 | * passed in the argument on a custom form, else just use argument 1 | 70 | * passed in the argument on a custom form, else just use argument 1 |
| 64 | * to indicate low power mode, argument 0 turns low power mode off. | 71 | * to indicate low power mode, argument 0 turns low power mode off. |
| 72 | * @PIN_CONFIG_OUTPUT: this will configure the pin in output, use argument | ||
| 73 | * 1 to indicate high level, argument 0 to indicate low level. | ||
| 65 | * @PIN_CONFIG_END: this is the last enumerator for pin configurations, if | 74 | * @PIN_CONFIG_END: this is the last enumerator for pin configurations, if |
| 66 | * you need to pass in custom configurations to the pin controller, use | 75 | * you need to pass in custom configurations to the pin controller, use |
| 67 | * PIN_CONFIG_END+1 as the base offset. | 76 | * PIN_CONFIG_END+1 as the base offset. |
| @@ -74,11 +83,14 @@ enum pin_config_param { | |||
| 74 | PIN_CONFIG_DRIVE_PUSH_PULL, | 83 | PIN_CONFIG_DRIVE_PUSH_PULL, |
| 75 | PIN_CONFIG_DRIVE_OPEN_DRAIN, | 84 | PIN_CONFIG_DRIVE_OPEN_DRAIN, |
| 76 | PIN_CONFIG_DRIVE_OPEN_SOURCE, | 85 | PIN_CONFIG_DRIVE_OPEN_SOURCE, |
| 77 | PIN_CONFIG_INPUT_SCHMITT_DISABLE, | 86 | PIN_CONFIG_DRIVE_STRENGTH, |
| 87 | PIN_CONFIG_INPUT_SCHMITT_ENABLE, | ||
| 78 | PIN_CONFIG_INPUT_SCHMITT, | 88 | PIN_CONFIG_INPUT_SCHMITT, |
| 79 | PIN_CONFIG_INPUT_DEBOUNCE, | 89 | PIN_CONFIG_INPUT_DEBOUNCE, |
| 80 | PIN_CONFIG_POWER_SOURCE, | 90 | PIN_CONFIG_POWER_SOURCE, |
| 91 | PIN_CONFIG_SLEW_RATE, | ||
| 81 | PIN_CONFIG_LOW_POWER_MODE, | 92 | PIN_CONFIG_LOW_POWER_MODE, |
| 93 | PIN_CONFIG_OUTPUT, | ||
| 82 | PIN_CONFIG_END = 0x7FFF, | 94 | PIN_CONFIG_END = 0x7FFF, |
| 83 | }; | 95 | }; |
| 84 | 96 | ||
diff --git a/include/linux/pinctrl/pinctrl.h b/include/linux/pinctrl/pinctrl.h index 04d6700d99af..778804df293f 100644 --- a/include/linux/pinctrl/pinctrl.h +++ b/include/linux/pinctrl/pinctrl.h | |||
| @@ -154,6 +154,7 @@ struct pinctrl_dev *of_pinctrl_get(struct device_node *np) | |||
| 154 | #endif /* CONFIG_OF */ | 154 | #endif /* CONFIG_OF */ |
| 155 | 155 | ||
| 156 | extern const char *pinctrl_dev_get_name(struct pinctrl_dev *pctldev); | 156 | extern const char *pinctrl_dev_get_name(struct pinctrl_dev *pctldev); |
| 157 | extern const char *pinctrl_dev_get_devname(struct pinctrl_dev *pctldev); | ||
| 157 | extern void *pinctrl_dev_get_drvdata(struct pinctrl_dev *pctldev); | 158 | extern void *pinctrl_dev_get_drvdata(struct pinctrl_dev *pctldev); |
| 158 | #else | 159 | #else |
| 159 | 160 | ||
diff --git a/include/linux/platform_data/cpsw.h b/include/linux/platform_data/cpsw.h index 24368a2e8b87..798fb80b024b 100644 --- a/include/linux/platform_data/cpsw.h +++ b/include/linux/platform_data/cpsw.h | |||
| @@ -21,6 +21,8 @@ struct cpsw_slave_data { | |||
| 21 | char phy_id[MII_BUS_ID_SIZE]; | 21 | char phy_id[MII_BUS_ID_SIZE]; |
| 22 | int phy_if; | 22 | int phy_if; |
| 23 | u8 mac_addr[ETH_ALEN]; | 23 | u8 mac_addr[ETH_ALEN]; |
| 24 | u16 dual_emac_res_vlan; /* Reserved VLAN for DualEMAC */ | ||
| 25 | |||
| 24 | }; | 26 | }; |
| 25 | 27 | ||
| 26 | struct cpsw_platform_data { | 28 | struct cpsw_platform_data { |
| @@ -35,6 +37,8 @@ struct cpsw_platform_data { | |||
| 35 | u32 bd_ram_size; /*buffer descriptor ram size */ | 37 | u32 bd_ram_size; /*buffer descriptor ram size */ |
| 36 | u32 rx_descs; /* Number of Rx Descriptios */ | 38 | u32 rx_descs; /* Number of Rx Descriptios */ |
| 37 | u32 mac_control; /* Mac control register */ | 39 | u32 mac_control; /* Mac control register */ |
| 40 | u16 default_vlan; /* Def VLAN for ALE lookup in VLAN aware mode*/ | ||
| 41 | bool dual_emac; /* Enable Dual EMAC mode */ | ||
| 38 | }; | 42 | }; |
| 39 | 43 | ||
| 40 | #endif /* __CPSW_H__ */ | 44 | #endif /* __CPSW_H__ */ |
diff --git a/include/linux/platform_data/lp8755.h b/include/linux/platform_data/lp8755.h new file mode 100644 index 000000000000..a7fd0776c9bf --- /dev/null +++ b/include/linux/platform_data/lp8755.h | |||
| @@ -0,0 +1,71 @@ | |||
| 1 | /* | ||
| 2 | * LP8755 High Performance Power Management Unit Driver:System Interface Driver | ||
| 3 | * | ||
| 4 | * Copyright (C) 2012 Texas Instruments | ||
| 5 | * | ||
| 6 | * Author: Daniel(Geon Si) Jeong <daniel.jeong@ti.com> | ||
| 7 | * G.Shark Jeong <gshark.jeong@gmail.com> | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or modify | ||
| 10 | * it under the terms of the GNU General Public License version 2 as | ||
| 11 | * published by the Free Software Foundation. | ||
| 12 | * | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef _LP8755_H | ||
| 16 | #define _LP8755_H | ||
| 17 | |||
| 18 | #include <linux/regulator/consumer.h> | ||
| 19 | |||
| 20 | #define LP8755_NAME "lp8755-regulator" | ||
| 21 | /* | ||
| 22 | *PWR FAULT : power fault detected | ||
| 23 | *OCP : over current protect activated | ||
| 24 | *OVP : over voltage protect activated | ||
| 25 | *TEMP_WARN : thermal warning | ||
| 26 | *TEMP_SHDN : thermal shutdonw detected | ||
| 27 | *I_LOAD : current measured | ||
| 28 | */ | ||
| 29 | #define LP8755_EVENT_PWR_FAULT REGULATOR_EVENT_FAIL | ||
| 30 | #define LP8755_EVENT_OCP REGULATOR_EVENT_OVER_CURRENT | ||
| 31 | #define LP8755_EVENT_OVP 0x10000 | ||
| 32 | #define LP8755_EVENT_TEMP_WARN 0x2000 | ||
| 33 | #define LP8755_EVENT_TEMP_SHDN REGULATOR_EVENT_OVER_TEMP | ||
| 34 | #define LP8755_EVENT_I_LOAD 0x40000 | ||
| 35 | |||
| 36 | enum lp8755_bucks { | ||
| 37 | LP8755_BUCK0 = 0, | ||
| 38 | LP8755_BUCK1, | ||
| 39 | LP8755_BUCK2, | ||
| 40 | LP8755_BUCK3, | ||
| 41 | LP8755_BUCK4, | ||
| 42 | LP8755_BUCK5, | ||
| 43 | LP8755_BUCK_MAX, | ||
| 44 | }; | ||
| 45 | |||
| 46 | /** | ||
| 47 | * multiphase configuration options | ||
| 48 | */ | ||
| 49 | enum lp8755_mphase_config { | ||
| 50 | MPHASE_CONF0, | ||
| 51 | MPHASE_CONF1, | ||
| 52 | MPHASE_CONF2, | ||
| 53 | MPHASE_CONF3, | ||
| 54 | MPHASE_CONF4, | ||
| 55 | MPHASE_CONF5, | ||
| 56 | MPHASE_CONF6, | ||
| 57 | MPHASE_CONF7, | ||
| 58 | MPHASE_CONF8, | ||
| 59 | MPHASE_CONF_MAX | ||
| 60 | }; | ||
| 61 | |||
| 62 | /** | ||
| 63 | * struct lp8755_platform_data | ||
| 64 | * @mphase_type : Multiphase Switcher Configurations. | ||
| 65 | * @buck_data : buck0~6 init voltage in uV | ||
| 66 | */ | ||
| 67 | struct lp8755_platform_data { | ||
| 68 | int mphase; | ||
| 69 | struct regulator_init_data *buck_data[LP8755_BUCK_MAX]; | ||
| 70 | }; | ||
| 71 | #endif | ||
diff --git a/include/linux/platform_data/max6697.h b/include/linux/platform_data/max6697.h new file mode 100644 index 000000000000..ed9d3b3daf02 --- /dev/null +++ b/include/linux/platform_data/max6697.h | |||
| @@ -0,0 +1,36 @@ | |||
| 1 | /* | ||
| 2 | * max6697.h | ||
| 3 | * Copyright (c) 2012 Guenter Roeck <linux@roeck-us.net> | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify | ||
| 6 | * it under the terms of the GNU General Public License version 2 as | ||
| 7 | * published by the Free Software Foundation. | ||
| 8 | */ | ||
| 9 | |||
| 10 | #ifndef MAX6697_H | ||
| 11 | #define MAX6697_H | ||
| 12 | |||
| 13 | #include <linux/types.h> | ||
| 14 | |||
| 15 | /* | ||
| 16 | * For all bit masks: | ||
| 17 | * bit 0: local temperature | ||
| 18 | * bit 1..7: remote temperatures | ||
| 19 | */ | ||
| 20 | struct max6697_platform_data { | ||
| 21 | bool smbus_timeout_disable; /* set to disable SMBus timeouts */ | ||
| 22 | bool extended_range_enable; /* set to enable extended temp range */ | ||
| 23 | bool beta_compensation; /* set to enable beta compensation */ | ||
| 24 | u8 alert_mask; /* set bit to 1 to disable alert */ | ||
| 25 | u8 over_temperature_mask; /* set bit to 1 to disable */ | ||
| 26 | u8 resistance_cancellation; /* set bit to 0 to disable | ||
| 27 | * bit mask for MAX6581, | ||
| 28 | * boolean for other chips | ||
| 29 | */ | ||
| 30 | u8 ideality_mask; /* set bit to 0 to disable */ | ||
| 31 | u8 ideality_value; /* transistor ideality as per | ||
| 32 | * MAX6581 datasheet | ||
| 33 | */ | ||
| 34 | }; | ||
| 35 | |||
| 36 | #endif /* MAX6697_H */ | ||
diff --git a/include/linux/platform_data/microread.h b/include/linux/platform_data/microread.h new file mode 100644 index 000000000000..cfda59b226ee --- /dev/null +++ b/include/linux/platform_data/microread.h | |||
| @@ -0,0 +1,35 @@ | |||
| 1 | /* | ||
| 2 | * Driver include for the PN544 NFC chip. | ||
| 3 | * | ||
| 4 | * Copyright (C) 2011 Tieto Poland | ||
| 5 | * Copyright (C) 2012 Intel Corporation. All rights reserved. | ||
| 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 | * This program is distributed in the hope that it will be useful, | ||
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | * GNU General Public License for more details. | ||
| 15 | * | ||
| 16 | * You should have received a copy of the GNU General Public License | ||
| 17 | * along with this program; if not, write to the Free Software | ||
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 19 | */ | ||
| 20 | |||
| 21 | #ifndef _MICROREAD_H | ||
| 22 | #define _MICROREAD_H | ||
| 23 | |||
| 24 | #include <linux/i2c.h> | ||
| 25 | |||
| 26 | #define MICROREAD_DRIVER_NAME "microread" | ||
| 27 | |||
| 28 | /* board config platform data for microread */ | ||
| 29 | struct microread_nfc_platform_data { | ||
| 30 | unsigned int rst_gpio; | ||
| 31 | unsigned int irq_gpio; | ||
| 32 | unsigned int ioh_gpio; | ||
| 33 | }; | ||
| 34 | |||
| 35 | #endif /* _MICROREAD_H */ | ||
diff --git a/include/linux/platform_data/spi-omap2-mcspi.h b/include/linux/platform_data/spi-omap2-mcspi.h index a65572d53211..c100456eab17 100644 --- a/include/linux/platform_data/spi-omap2-mcspi.h +++ b/include/linux/platform_data/spi-omap2-mcspi.h | |||
| @@ -22,6 +22,9 @@ struct omap2_mcspi_dev_attr { | |||
| 22 | 22 | ||
| 23 | struct omap2_mcspi_device_config { | 23 | struct omap2_mcspi_device_config { |
| 24 | unsigned turbo_mode:1; | 24 | unsigned turbo_mode:1; |
| 25 | |||
| 26 | /* toggle chip select after every word */ | ||
| 27 | unsigned cs_per_word:1; | ||
| 25 | }; | 28 | }; |
| 26 | 29 | ||
| 27 | #endif | 30 | #endif |
diff --git a/include/linux/pm.h b/include/linux/pm.h index 03d7bb145311..97bcf23e045a 100644 --- a/include/linux/pm.h +++ b/include/linux/pm.h | |||
| @@ -31,7 +31,6 @@ | |||
| 31 | /* | 31 | /* |
| 32 | * Callbacks for platform drivers to implement. | 32 | * Callbacks for platform drivers to implement. |
| 33 | */ | 33 | */ |
| 34 | extern void (*pm_idle)(void); | ||
| 35 | extern void (*pm_power_off)(void); | 34 | extern void (*pm_power_off)(void); |
| 36 | extern void (*pm_power_off_prepare)(void); | 35 | extern void (*pm_power_off_prepare)(void); |
| 37 | 36 | ||
diff --git a/include/linux/pm2301_charger.h b/include/linux/pm2301_charger.h new file mode 100644 index 000000000000..fc3f026922ae --- /dev/null +++ b/include/linux/pm2301_charger.h | |||
| @@ -0,0 +1,61 @@ | |||
| 1 | /* | ||
| 2 | * PM2301 charger driver. | ||
| 3 | * | ||
| 4 | * Copyright (C) 2012 ST Ericsson Corporation | ||
| 5 | * | ||
| 6 | * Contact: Olivier LAUNAY (olivier.launay@stericsson.com | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or | ||
| 9 | * modify it under the terms of the GNU General Public License | ||
| 10 | * version 2 as 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 | #ifndef __LINUX_PM2301_H | ||
| 24 | #define __LINUX_PM2301_H | ||
| 25 | |||
| 26 | /** | ||
| 27 | * struct pm2xxx_bm_charger_parameters - Charger specific parameters | ||
| 28 | * @ac_volt_max: maximum allowed AC charger voltage in mV | ||
| 29 | * @ac_curr_max: maximum allowed AC charger current in mA | ||
| 30 | */ | ||
| 31 | struct pm2xxx_bm_charger_parameters { | ||
| 32 | int ac_volt_max; | ||
| 33 | int ac_curr_max; | ||
| 34 | }; | ||
| 35 | |||
| 36 | /** | ||
| 37 | * struct pm2xxx_bm_data - pm2xxx battery management data | ||
| 38 | * @enable_overshoot flag to enable VBAT overshoot control | ||
| 39 | * @chg_params charger parameters | ||
| 40 | */ | ||
| 41 | struct pm2xxx_bm_data { | ||
| 42 | bool enable_overshoot; | ||
| 43 | const struct pm2xxx_bm_charger_parameters *chg_params; | ||
| 44 | }; | ||
| 45 | |||
| 46 | struct pm2xxx_charger_platform_data { | ||
| 47 | char **supplied_to; | ||
| 48 | size_t num_supplicants; | ||
| 49 | int i2c_bus; | ||
| 50 | const char *label; | ||
| 51 | int irq_number; | ||
| 52 | unsigned int lpn_gpio; | ||
| 53 | int irq_type; | ||
| 54 | }; | ||
| 55 | |||
| 56 | struct pm2xxx_platform_data { | ||
| 57 | struct pm2xxx_charger_platform_data *wall_charger; | ||
| 58 | struct pm2xxx_bm_data *battery; | ||
| 59 | }; | ||
| 60 | |||
| 61 | #endif /* __LINUX_PM2301_H */ | ||
diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h index f271860c78d5..c785c215abfc 100644 --- a/include/linux/pm_runtime.h +++ b/include/linux/pm_runtime.h | |||
| @@ -80,6 +80,12 @@ static inline bool pm_runtime_suspended(struct device *dev) | |||
| 80 | && !dev->power.disable_depth; | 80 | && !dev->power.disable_depth; |
| 81 | } | 81 | } |
| 82 | 82 | ||
| 83 | static inline bool pm_runtime_active(struct device *dev) | ||
| 84 | { | ||
| 85 | return dev->power.runtime_status == RPM_ACTIVE | ||
| 86 | || dev->power.disable_depth; | ||
| 87 | } | ||
| 88 | |||
| 83 | static inline bool pm_runtime_status_suspended(struct device *dev) | 89 | static inline bool pm_runtime_status_suspended(struct device *dev) |
| 84 | { | 90 | { |
| 85 | return dev->power.runtime_status == RPM_SUSPENDED; | 91 | return dev->power.runtime_status == RPM_SUSPENDED; |
| @@ -132,6 +138,7 @@ static inline void pm_runtime_put_noidle(struct device *dev) {} | |||
| 132 | static inline bool device_run_wake(struct device *dev) { return false; } | 138 | static inline bool device_run_wake(struct device *dev) { return false; } |
| 133 | static inline void device_set_run_wake(struct device *dev, bool enable) {} | 139 | static inline void device_set_run_wake(struct device *dev, bool enable) {} |
| 134 | static inline bool pm_runtime_suspended(struct device *dev) { return false; } | 140 | static inline bool pm_runtime_suspended(struct device *dev) { return false; } |
| 141 | static inline bool pm_runtime_active(struct device *dev) { return true; } | ||
| 135 | static inline bool pm_runtime_status_suspended(struct device *dev) { return false; } | 142 | static inline bool pm_runtime_status_suspended(struct device *dev) { return false; } |
| 136 | static inline bool pm_runtime_enabled(struct device *dev) { return false; } | 143 | static inline bool pm_runtime_enabled(struct device *dev) { return false; } |
| 137 | 144 | ||
diff --git a/include/linux/power/bq2415x_charger.h b/include/linux/power/bq2415x_charger.h index 97a1665eaeaf..8dcc0f46fc0a 100644 --- a/include/linux/power/bq2415x_charger.h +++ b/include/linux/power/bq2415x_charger.h | |||
| @@ -75,7 +75,8 @@ | |||
| 75 | 75 | ||
| 76 | /* Supported modes with maximal current limit */ | 76 | /* Supported modes with maximal current limit */ |
| 77 | enum bq2415x_mode { | 77 | enum bq2415x_mode { |
| 78 | BQ2415X_MODE_NONE, /* unknown or no charger (100mA) */ | 78 | BQ2415X_MODE_OFF, /* offline mode (charger disabled) */ |
| 79 | BQ2415X_MODE_NONE, /* unknown charger (100mA) */ | ||
| 79 | BQ2415X_MODE_HOST_CHARGER, /* usb host/hub charger (500mA) */ | 80 | BQ2415X_MODE_HOST_CHARGER, /* usb host/hub charger (500mA) */ |
| 80 | BQ2415X_MODE_DEDICATED_CHARGER, /* dedicated charger (unlimited) */ | 81 | BQ2415X_MODE_DEDICATED_CHARGER, /* dedicated charger (unlimited) */ |
| 81 | BQ2415X_MODE_BOOST, /* boost mode (charging disabled) */ | 82 | BQ2415X_MODE_BOOST, /* boost mode (charging disabled) */ |
diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h index 1f0ab90aff00..25c0982eb9b1 100644 --- a/include/linux/power_supply.h +++ b/include/linux/power_supply.h | |||
| @@ -54,6 +54,8 @@ enum { | |||
| 54 | POWER_SUPPLY_HEALTH_OVERVOLTAGE, | 54 | POWER_SUPPLY_HEALTH_OVERVOLTAGE, |
| 55 | POWER_SUPPLY_HEALTH_UNSPEC_FAILURE, | 55 | POWER_SUPPLY_HEALTH_UNSPEC_FAILURE, |
| 56 | POWER_SUPPLY_HEALTH_COLD, | 56 | POWER_SUPPLY_HEALTH_COLD, |
| 57 | POWER_SUPPLY_HEALTH_WATCHDOG_TIMER_EXPIRE, | ||
| 58 | POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE, | ||
| 57 | }; | 59 | }; |
| 58 | 60 | ||
| 59 | enum { | 61 | enum { |
diff --git a/include/linux/printk.h b/include/linux/printk.h index 9afc01e5a0a6..86c4b6294713 100644 --- a/include/linux/printk.h +++ b/include/linux/printk.h | |||
| @@ -98,9 +98,6 @@ int no_printk(const char *fmt, ...) | |||
| 98 | extern asmlinkage __printf(1, 2) | 98 | extern asmlinkage __printf(1, 2) |
| 99 | void early_printk(const char *fmt, ...); | 99 | void early_printk(const char *fmt, ...); |
| 100 | 100 | ||
| 101 | extern int printk_needs_cpu(int cpu); | ||
| 102 | extern void printk_tick(void); | ||
| 103 | |||
| 104 | #ifdef CONFIG_PRINTK | 101 | #ifdef CONFIG_PRINTK |
| 105 | asmlinkage __printf(5, 0) | 102 | asmlinkage __printf(5, 0) |
| 106 | int vprintk_emit(int facility, int level, | 103 | int vprintk_emit(int facility, int level, |
diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h index 32676b35d2f5..d0a1f2ca1c3f 100644 --- a/include/linux/proc_fs.h +++ b/include/linux/proc_fs.h | |||
| @@ -171,9 +171,6 @@ static inline struct proc_dir_entry *create_proc_read_entry(const char *name, | |||
| 171 | return res; | 171 | return res; |
| 172 | } | 172 | } |
| 173 | 173 | ||
| 174 | extern struct proc_dir_entry *proc_net_fops_create(struct net *net, | ||
| 175 | const char *name, umode_t mode, const struct file_operations *fops); | ||
| 176 | extern void proc_net_remove(struct net *net, const char *name); | ||
| 177 | extern struct proc_dir_entry *proc_net_mkdir(struct net *net, const char *name, | 174 | extern struct proc_dir_entry *proc_net_mkdir(struct net *net, const char *name, |
| 178 | struct proc_dir_entry *parent); | 175 | struct proc_dir_entry *parent); |
| 179 | 176 | ||
| @@ -184,21 +181,15 @@ extern int proc_alloc_inum(unsigned int *pino); | |||
| 184 | extern void proc_free_inum(unsigned int inum); | 181 | extern void proc_free_inum(unsigned int inum); |
| 185 | #else | 182 | #else |
| 186 | 183 | ||
| 187 | #define proc_net_fops_create(net, name, mode, fops) ({ (void)(mode), NULL; }) | ||
| 188 | static inline void proc_net_remove(struct net *net, const char *name) {} | ||
| 189 | |||
| 190 | static inline void proc_flush_task(struct task_struct *task) | 184 | static inline void proc_flush_task(struct task_struct *task) |
| 191 | { | 185 | { |
| 192 | } | 186 | } |
| 193 | 187 | ||
| 194 | static inline struct proc_dir_entry *create_proc_entry(const char *name, | 188 | static inline struct proc_dir_entry *create_proc_entry(const char *name, |
| 195 | umode_t mode, struct proc_dir_entry *parent) { return NULL; } | 189 | umode_t mode, struct proc_dir_entry *parent) { return NULL; } |
| 196 | static inline struct proc_dir_entry *proc_create(const char *name, | 190 | |
| 197 | umode_t mode, struct proc_dir_entry *parent, | 191 | #define proc_create(name, mode, parent, fops) ({ (void)(mode), NULL; }) |
| 198 | const struct file_operations *proc_fops) | 192 | |
| 199 | { | ||
| 200 | return NULL; | ||
| 201 | } | ||
| 202 | static inline struct proc_dir_entry *proc_create_data(const char *name, | 193 | static inline struct proc_dir_entry *proc_create_data(const char *name, |
| 203 | umode_t mode, struct proc_dir_entry *parent, | 194 | umode_t mode, struct proc_dir_entry *parent, |
| 204 | const struct file_operations *proc_fops, void *data) | 195 | const struct file_operations *proc_fops, void *data) |
diff --git a/include/linux/profile.h b/include/linux/profile.h index a0fc32279fc0..21123902366d 100644 --- a/include/linux/profile.h +++ b/include/linux/profile.h | |||
| @@ -82,9 +82,6 @@ int task_handoff_unregister(struct notifier_block * n); | |||
| 82 | int profile_event_register(enum profile_type, struct notifier_block * n); | 82 | int profile_event_register(enum profile_type, struct notifier_block * n); |
| 83 | int profile_event_unregister(enum profile_type, struct notifier_block * n); | 83 | int profile_event_unregister(enum profile_type, struct notifier_block * n); |
| 84 | 84 | ||
| 85 | int register_timer_hook(int (*hook)(struct pt_regs *)); | ||
| 86 | void unregister_timer_hook(int (*hook)(struct pt_regs *)); | ||
| 87 | |||
| 88 | struct pt_regs; | 85 | struct pt_regs; |
| 89 | 86 | ||
| 90 | #else | 87 | #else |
| @@ -135,16 +132,6 @@ static inline int profile_event_unregister(enum profile_type t, struct notifier_ | |||
| 135 | #define profile_handoff_task(a) (0) | 132 | #define profile_handoff_task(a) (0) |
| 136 | #define profile_munmap(a) do { } while (0) | 133 | #define profile_munmap(a) do { } while (0) |
| 137 | 134 | ||
| 138 | static inline int register_timer_hook(int (*hook)(struct pt_regs *)) | ||
| 139 | { | ||
| 140 | return -ENOSYS; | ||
| 141 | } | ||
| 142 | |||
| 143 | static inline void unregister_timer_hook(int (*hook)(struct pt_regs *)) | ||
| 144 | { | ||
| 145 | return; | ||
| 146 | } | ||
| 147 | |||
| 148 | #endif /* CONFIG_PROFILING */ | 135 | #endif /* CONFIG_PROFILING */ |
| 149 | 136 | ||
| 150 | #endif /* _LINUX_PROFILE_H */ | 137 | #endif /* _LINUX_PROFILE_H */ |
diff --git a/include/linux/pxa2xx_ssp.h b/include/linux/pxa2xx_ssp.h index f36632061c66..467cc6307b62 100644 --- a/include/linux/pxa2xx_ssp.h +++ b/include/linux/pxa2xx_ssp.h | |||
| @@ -155,6 +155,14 @@ | |||
| 155 | #define SSACD_ACDS(x) ((x) << 0) /* Audio clock divider select */ | 155 | #define SSACD_ACDS(x) ((x) << 0) /* Audio clock divider select */ |
| 156 | #define SSACD_SCDX8 (1 << 7) /* SYSCLK division ratio select */ | 156 | #define SSACD_SCDX8 (1 << 7) /* SYSCLK division ratio select */ |
| 157 | 157 | ||
| 158 | /* LPSS SSP */ | ||
| 159 | #define SSITF 0x44 /* TX FIFO trigger level */ | ||
| 160 | #define SSITF_TxLoThresh(x) (((x) - 1) << 8) | ||
| 161 | #define SSITF_TxHiThresh(x) ((x) - 1) | ||
| 162 | |||
| 163 | #define SSIRF 0x48 /* RX FIFO trigger level */ | ||
| 164 | #define SSIRF_RxThresh(x) ((x) - 1) | ||
| 165 | |||
| 158 | enum pxa_ssp_type { | 166 | enum pxa_ssp_type { |
| 159 | SSP_UNDEFINED = 0, | 167 | SSP_UNDEFINED = 0, |
| 160 | PXA25x_SSP, /* pxa 210, 250, 255, 26x */ | 168 | PXA25x_SSP, /* pxa 210, 250, 255, 26x */ |
| @@ -164,6 +172,7 @@ enum pxa_ssp_type { | |||
| 164 | PXA168_SSP, | 172 | PXA168_SSP, |
| 165 | PXA910_SSP, | 173 | PXA910_SSP, |
| 166 | CE4100_SSP, | 174 | CE4100_SSP, |
| 175 | LPSS_SSP, | ||
| 167 | }; | 176 | }; |
| 168 | 177 | ||
| 169 | struct ssp_device { | 178 | struct ssp_device { |
| @@ -206,6 +215,15 @@ static inline u32 pxa_ssp_read_reg(struct ssp_device *dev, u32 reg) | |||
| 206 | return __raw_readl(dev->mmio_base + reg); | 215 | return __raw_readl(dev->mmio_base + reg); |
| 207 | } | 216 | } |
| 208 | 217 | ||
| 218 | #ifdef CONFIG_ARCH_PXA | ||
| 209 | struct ssp_device *pxa_ssp_request(int port, const char *label); | 219 | struct ssp_device *pxa_ssp_request(int port, const char *label); |
| 210 | void pxa_ssp_free(struct ssp_device *); | 220 | void pxa_ssp_free(struct ssp_device *); |
| 221 | #else | ||
| 222 | static inline struct ssp_device *pxa_ssp_request(int port, const char *label) | ||
| 223 | { | ||
| 224 | return NULL; | ||
| 225 | } | ||
| 226 | static inline void pxa_ssp_free(struct ssp_device *ssp) {} | ||
| 227 | #endif | ||
| 228 | |||
| 211 | #endif | 229 | #endif |
diff --git a/include/linux/random.h b/include/linux/random.h index d9846088c2c5..347ce553a306 100644 --- a/include/linux/random.h +++ b/include/linux/random.h | |||
| @@ -74,4 +74,10 @@ static inline int arch_get_random_int(unsigned int *v) | |||
| 74 | } | 74 | } |
| 75 | #endif | 75 | #endif |
| 76 | 76 | ||
| 77 | /* Pseudo random number generator from numerical recipes. */ | ||
| 78 | static inline u32 next_pseudo_random32(u32 seed) | ||
| 79 | { | ||
| 80 | return seed * 1664525 + 1013904223; | ||
| 81 | } | ||
| 82 | |||
| 77 | #endif /* _LINUX_RANDOM_H */ | 83 | #endif /* _LINUX_RANDOM_H */ |
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index 275aa3f1062d..b758ce17b309 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h | |||
| @@ -53,7 +53,10 @@ extern int rcutorture_runnable; /* for sysctl */ | |||
| 53 | extern void rcutorture_record_test_transition(void); | 53 | extern void rcutorture_record_test_transition(void); |
| 54 | extern void rcutorture_record_progress(unsigned long vernum); | 54 | extern void rcutorture_record_progress(unsigned long vernum); |
| 55 | extern void do_trace_rcu_torture_read(char *rcutorturename, | 55 | extern void do_trace_rcu_torture_read(char *rcutorturename, |
| 56 | struct rcu_head *rhp); | 56 | struct rcu_head *rhp, |
| 57 | unsigned long secs, | ||
| 58 | unsigned long c_old, | ||
| 59 | unsigned long c); | ||
| 57 | #else | 60 | #else |
| 58 | static inline void rcutorture_record_test_transition(void) | 61 | static inline void rcutorture_record_test_transition(void) |
| 59 | { | 62 | { |
| @@ -63,9 +66,13 @@ static inline void rcutorture_record_progress(unsigned long vernum) | |||
| 63 | } | 66 | } |
| 64 | #ifdef CONFIG_RCU_TRACE | 67 | #ifdef CONFIG_RCU_TRACE |
| 65 | extern void do_trace_rcu_torture_read(char *rcutorturename, | 68 | extern void do_trace_rcu_torture_read(char *rcutorturename, |
| 66 | struct rcu_head *rhp); | 69 | struct rcu_head *rhp, |
| 70 | unsigned long secs, | ||
| 71 | unsigned long c_old, | ||
| 72 | unsigned long c); | ||
| 67 | #else | 73 | #else |
| 68 | #define do_trace_rcu_torture_read(rcutorturename, rhp) do { } while (0) | 74 | #define do_trace_rcu_torture_read(rcutorturename, rhp, secs, c_old, c) \ |
| 75 | do { } while (0) | ||
| 69 | #endif | 76 | #endif |
| 70 | #endif | 77 | #endif |
| 71 | 78 | ||
| @@ -749,7 +756,7 @@ static inline void rcu_preempt_sleep_check(void) | |||
| 749 | * preemptible RCU implementations (TREE_PREEMPT_RCU and TINY_PREEMPT_RCU) | 756 | * preemptible RCU implementations (TREE_PREEMPT_RCU and TINY_PREEMPT_RCU) |
| 750 | * in CONFIG_PREEMPT kernel builds, RCU read-side critical sections may | 757 | * in CONFIG_PREEMPT kernel builds, RCU read-side critical sections may |
| 751 | * be preempted, but explicit blocking is illegal. Finally, in preemptible | 758 | * be preempted, but explicit blocking is illegal. Finally, in preemptible |
| 752 | * RCU implementations in real-time (CONFIG_PREEMPT_RT) kernel builds, | 759 | * RCU implementations in real-time (with -rt patchset) kernel builds, |
| 753 | * RCU read-side critical sections may be preempted and they may also | 760 | * RCU read-side critical sections may be preempted and they may also |
| 754 | * block, but only when acquiring spinlocks that are subject to priority | 761 | * block, but only when acquiring spinlocks that are subject to priority |
| 755 | * inheritance. | 762 | * inheritance. |
diff --git a/include/linux/regmap.h b/include/linux/regmap.h index b7e95bf942c9..bf77dfdabef9 100644 --- a/include/linux/regmap.h +++ b/include/linux/regmap.h | |||
| @@ -28,7 +28,8 @@ struct regmap_range_cfg; | |||
| 28 | enum regcache_type { | 28 | enum regcache_type { |
| 29 | REGCACHE_NONE, | 29 | REGCACHE_NONE, |
| 30 | REGCACHE_RBTREE, | 30 | REGCACHE_RBTREE, |
| 31 | REGCACHE_COMPRESSED | 31 | REGCACHE_COMPRESSED, |
| 32 | REGCACHE_FLAT, | ||
| 32 | }; | 33 | }; |
| 33 | 34 | ||
| 34 | /** | 35 | /** |
| @@ -127,7 +128,18 @@ typedef void (*regmap_unlock)(void *); | |||
| 127 | * @lock_arg: this field is passed as the only argument of lock/unlock | 128 | * @lock_arg: this field is passed as the only argument of lock/unlock |
| 128 | * functions (ignored in case regular lock/unlock functions | 129 | * functions (ignored in case regular lock/unlock functions |
| 129 | * are not overridden). | 130 | * are not overridden). |
| 130 | * | 131 | * @reg_read: Optional callback that if filled will be used to perform |
| 132 | * all the reads from the registers. Should only be provided for | ||
| 133 | * devices whos read operation cannot be represented as a simple read | ||
| 134 | * operation on a bus such as SPI, I2C, etc. Most of the devices do | ||
| 135 | * not need this. | ||
| 136 | * @reg_write: Same as above for writing. | ||
| 137 | * @fast_io: Register IO is fast. Use a spinlock instead of a mutex | ||
| 138 | * to perform locking. This field is ignored if custom lock/unlock | ||
| 139 | * functions are used (see fields lock/unlock of struct regmap_config). | ||
| 140 | * This field is a duplicate of a similar file in | ||
| 141 | * 'struct regmap_bus' and serves exact same purpose. | ||
| 142 | * Use it only for "no-bus" cases. | ||
| 131 | * @max_register: Optional, specifies the maximum valid register index. | 143 | * @max_register: Optional, specifies the maximum valid register index. |
| 132 | * @wr_table: Optional, points to a struct regmap_access_table specifying | 144 | * @wr_table: Optional, points to a struct regmap_access_table specifying |
| 133 | * valid ranges for write access. | 145 | * valid ranges for write access. |
| @@ -177,6 +189,11 @@ struct regmap_config { | |||
| 177 | regmap_unlock unlock; | 189 | regmap_unlock unlock; |
| 178 | void *lock_arg; | 190 | void *lock_arg; |
| 179 | 191 | ||
| 192 | int (*reg_read)(void *context, unsigned int reg, unsigned int *val); | ||
| 193 | int (*reg_write)(void *context, unsigned int reg, unsigned int val); | ||
| 194 | |||
| 195 | bool fast_io; | ||
| 196 | |||
| 180 | unsigned int max_register; | 197 | unsigned int max_register; |
| 181 | const struct regmap_access_table *wr_table; | 198 | const struct regmap_access_table *wr_table; |
| 182 | const struct regmap_access_table *rd_table; | 199 | const struct regmap_access_table *rd_table; |
| @@ -235,14 +252,21 @@ struct regmap_range_cfg { | |||
| 235 | unsigned int window_len; | 252 | unsigned int window_len; |
| 236 | }; | 253 | }; |
| 237 | 254 | ||
| 255 | struct regmap_async; | ||
| 256 | |||
| 238 | typedef int (*regmap_hw_write)(void *context, const void *data, | 257 | typedef int (*regmap_hw_write)(void *context, const void *data, |
| 239 | size_t count); | 258 | size_t count); |
| 240 | typedef int (*regmap_hw_gather_write)(void *context, | 259 | typedef int (*regmap_hw_gather_write)(void *context, |
| 241 | const void *reg, size_t reg_len, | 260 | const void *reg, size_t reg_len, |
| 242 | const void *val, size_t val_len); | 261 | const void *val, size_t val_len); |
| 262 | typedef int (*regmap_hw_async_write)(void *context, | ||
| 263 | const void *reg, size_t reg_len, | ||
| 264 | const void *val, size_t val_len, | ||
| 265 | struct regmap_async *async); | ||
| 243 | typedef int (*regmap_hw_read)(void *context, | 266 | typedef int (*regmap_hw_read)(void *context, |
| 244 | const void *reg_buf, size_t reg_size, | 267 | const void *reg_buf, size_t reg_size, |
| 245 | void *val_buf, size_t val_size); | 268 | void *val_buf, size_t val_size); |
| 269 | typedef struct regmap_async *(*regmap_hw_async_alloc)(void); | ||
| 246 | typedef void (*regmap_hw_free_context)(void *context); | 270 | typedef void (*regmap_hw_free_context)(void *context); |
| 247 | 271 | ||
| 248 | /** | 272 | /** |
| @@ -255,8 +279,11 @@ typedef void (*regmap_hw_free_context)(void *context); | |||
| 255 | * @write: Write operation. | 279 | * @write: Write operation. |
| 256 | * @gather_write: Write operation with split register/value, return -ENOTSUPP | 280 | * @gather_write: Write operation with split register/value, return -ENOTSUPP |
| 257 | * if not implemented on a given device. | 281 | * if not implemented on a given device. |
| 282 | * @async_write: Write operation which completes asynchronously, optional and | ||
| 283 | * must serialise with respect to non-async I/O. | ||
| 258 | * @read: Read operation. Data is returned in the buffer used to transmit | 284 | * @read: Read operation. Data is returned in the buffer used to transmit |
| 259 | * data. | 285 | * data. |
| 286 | * @async_alloc: Allocate a regmap_async() structure. | ||
| 260 | * @read_flag_mask: Mask to be set in the top byte of the register when doing | 287 | * @read_flag_mask: Mask to be set in the top byte of the register when doing |
| 261 | * a read. | 288 | * a read. |
| 262 | * @reg_format_endian_default: Default endianness for formatted register | 289 | * @reg_format_endian_default: Default endianness for formatted register |
| @@ -265,13 +292,16 @@ typedef void (*regmap_hw_free_context)(void *context); | |||
| 265 | * @val_format_endian_default: Default endianness for formatted register | 292 | * @val_format_endian_default: Default endianness for formatted register |
| 266 | * values. Used when the regmap_config specifies DEFAULT. If this is | 293 | * values. Used when the regmap_config specifies DEFAULT. If this is |
| 267 | * DEFAULT, BIG is assumed. | 294 | * DEFAULT, BIG is assumed. |
| 295 | * @async_size: Size of struct used for async work. | ||
| 268 | */ | 296 | */ |
| 269 | struct regmap_bus { | 297 | struct regmap_bus { |
| 270 | bool fast_io; | 298 | bool fast_io; |
| 271 | regmap_hw_write write; | 299 | regmap_hw_write write; |
| 272 | regmap_hw_gather_write gather_write; | 300 | regmap_hw_gather_write gather_write; |
| 301 | regmap_hw_async_write async_write; | ||
| 273 | regmap_hw_read read; | 302 | regmap_hw_read read; |
| 274 | regmap_hw_free_context free_context; | 303 | regmap_hw_free_context free_context; |
| 304 | regmap_hw_async_alloc async_alloc; | ||
| 275 | u8 read_flag_mask; | 305 | u8 read_flag_mask; |
| 276 | enum regmap_endian reg_format_endian_default; | 306 | enum regmap_endian reg_format_endian_default; |
| 277 | enum regmap_endian val_format_endian_default; | 307 | enum regmap_endian val_format_endian_default; |
| @@ -285,9 +315,9 @@ struct regmap *regmap_init_i2c(struct i2c_client *i2c, | |||
| 285 | const struct regmap_config *config); | 315 | const struct regmap_config *config); |
| 286 | struct regmap *regmap_init_spi(struct spi_device *dev, | 316 | struct regmap *regmap_init_spi(struct spi_device *dev, |
| 287 | const struct regmap_config *config); | 317 | const struct regmap_config *config); |
| 288 | struct regmap *regmap_init_mmio(struct device *dev, | 318 | struct regmap *regmap_init_mmio_clk(struct device *dev, const char *clk_id, |
| 289 | void __iomem *regs, | 319 | void __iomem *regs, |
| 290 | const struct regmap_config *config); | 320 | const struct regmap_config *config); |
| 291 | 321 | ||
| 292 | struct regmap *devm_regmap_init(struct device *dev, | 322 | struct regmap *devm_regmap_init(struct device *dev, |
| 293 | const struct regmap_bus *bus, | 323 | const struct regmap_bus *bus, |
| @@ -297,9 +327,44 @@ struct regmap *devm_regmap_init_i2c(struct i2c_client *i2c, | |||
| 297 | const struct regmap_config *config); | 327 | const struct regmap_config *config); |
| 298 | struct regmap *devm_regmap_init_spi(struct spi_device *dev, | 328 | struct regmap *devm_regmap_init_spi(struct spi_device *dev, |
| 299 | const struct regmap_config *config); | 329 | const struct regmap_config *config); |
| 300 | struct regmap *devm_regmap_init_mmio(struct device *dev, | 330 | struct regmap *devm_regmap_init_mmio_clk(struct device *dev, const char *clk_id, |
| 301 | void __iomem *regs, | 331 | void __iomem *regs, |
| 302 | const struct regmap_config *config); | 332 | const struct regmap_config *config); |
| 333 | |||
| 334 | /** | ||
| 335 | * regmap_init_mmio(): Initialise register map | ||
| 336 | * | ||
| 337 | * @dev: Device that will be interacted with | ||
| 338 | * @regs: Pointer to memory-mapped IO region | ||
| 339 | * @config: Configuration for register map | ||
| 340 | * | ||
| 341 | * The return value will be an ERR_PTR() on error or a valid pointer to | ||
| 342 | * a struct regmap. | ||
| 343 | */ | ||
| 344 | static inline struct regmap *regmap_init_mmio(struct device *dev, | ||
| 345 | void __iomem *regs, | ||
| 346 | const struct regmap_config *config) | ||
| 347 | { | ||
| 348 | return regmap_init_mmio_clk(dev, NULL, regs, config); | ||
| 349 | } | ||
| 350 | |||
| 351 | /** | ||
| 352 | * devm_regmap_init_mmio(): Initialise managed register map | ||
| 353 | * | ||
| 354 | * @dev: Device that will be interacted with | ||
| 355 | * @regs: Pointer to memory-mapped IO region | ||
| 356 | * @config: Configuration for register map | ||
| 357 | * | ||
| 358 | * The return value will be an ERR_PTR() on error or a valid pointer | ||
| 359 | * to a struct regmap. The regmap will be automatically freed by the | ||
| 360 | * device management code. | ||
| 361 | */ | ||
| 362 | static inline struct regmap *devm_regmap_init_mmio(struct device *dev, | ||
| 363 | void __iomem *regs, | ||
| 364 | const struct regmap_config *config) | ||
| 365 | { | ||
| 366 | return devm_regmap_init_mmio_clk(dev, NULL, regs, config); | ||
| 367 | } | ||
| 303 | 368 | ||
| 304 | void regmap_exit(struct regmap *map); | 369 | void regmap_exit(struct regmap *map); |
| 305 | int regmap_reinit_cache(struct regmap *map, | 370 | int regmap_reinit_cache(struct regmap *map, |
| @@ -310,6 +375,8 @@ int regmap_raw_write(struct regmap *map, unsigned int reg, | |||
| 310 | const void *val, size_t val_len); | 375 | const void *val, size_t val_len); |
| 311 | int regmap_bulk_write(struct regmap *map, unsigned int reg, const void *val, | 376 | int regmap_bulk_write(struct regmap *map, unsigned int reg, const void *val, |
| 312 | size_t val_count); | 377 | size_t val_count); |
| 378 | int regmap_raw_write_async(struct regmap *map, unsigned int reg, | ||
| 379 | const void *val, size_t val_len); | ||
| 313 | int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val); | 380 | int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val); |
| 314 | int regmap_raw_read(struct regmap *map, unsigned int reg, | 381 | int regmap_raw_read(struct regmap *map, unsigned int reg, |
| 315 | void *val, size_t val_len); | 382 | void *val, size_t val_len); |
| @@ -321,6 +388,7 @@ int regmap_update_bits_check(struct regmap *map, unsigned int reg, | |||
| 321 | unsigned int mask, unsigned int val, | 388 | unsigned int mask, unsigned int val, |
| 322 | bool *change); | 389 | bool *change); |
| 323 | int regmap_get_val_bytes(struct regmap *map); | 390 | int regmap_get_val_bytes(struct regmap *map); |
| 391 | int regmap_async_complete(struct regmap *map); | ||
| 324 | 392 | ||
| 325 | int regcache_sync(struct regmap *map); | 393 | int regcache_sync(struct regmap *map); |
| 326 | int regcache_sync_region(struct regmap *map, unsigned int min, | 394 | int regcache_sync_region(struct regmap *map, unsigned int min, |
| @@ -381,6 +449,7 @@ struct regmap_irq_chip { | |||
| 381 | unsigned int wake_base; | 449 | unsigned int wake_base; |
| 382 | unsigned int irq_reg_stride; | 450 | unsigned int irq_reg_stride; |
| 383 | unsigned int mask_invert; | 451 | unsigned int mask_invert; |
| 452 | unsigned int wake_invert; | ||
| 384 | bool runtime_pm; | 453 | bool runtime_pm; |
| 385 | 454 | ||
| 386 | int num_regs; | 455 | int num_regs; |
| @@ -422,6 +491,13 @@ static inline int regmap_raw_write(struct regmap *map, unsigned int reg, | |||
| 422 | return -EINVAL; | 491 | return -EINVAL; |
| 423 | } | 492 | } |
| 424 | 493 | ||
| 494 | static inline int regmap_raw_write_async(struct regmap *map, unsigned int reg, | ||
| 495 | const void *val, size_t val_len) | ||
| 496 | { | ||
| 497 | WARN_ONCE(1, "regmap API is disabled"); | ||
| 498 | return -EINVAL; | ||
| 499 | } | ||
| 500 | |||
| 425 | static inline int regmap_bulk_write(struct regmap *map, unsigned int reg, | 501 | static inline int regmap_bulk_write(struct regmap *map, unsigned int reg, |
| 426 | const void *val, size_t val_count) | 502 | const void *val, size_t val_count) |
| 427 | { | 503 | { |
| @@ -500,6 +576,11 @@ static inline void regcache_mark_dirty(struct regmap *map) | |||
| 500 | WARN_ONCE(1, "regmap API is disabled"); | 576 | WARN_ONCE(1, "regmap API is disabled"); |
| 501 | } | 577 | } |
| 502 | 578 | ||
| 579 | static inline void regmap_async_complete(struct regmap *map) | ||
| 580 | { | ||
| 581 | WARN_ONCE(1, "regmap API is disabled"); | ||
| 582 | } | ||
| 583 | |||
| 503 | static inline int regmap_register_patch(struct regmap *map, | 584 | static inline int regmap_register_patch(struct regmap *map, |
| 504 | const struct reg_default *regs, | 585 | const struct reg_default *regs, |
| 505 | int num_regs) | 586 | int num_regs) |
diff --git a/include/linux/regulator/driver.h b/include/linux/regulator/driver.h index d10bb0f39c5e..23070fd83872 100644 --- a/include/linux/regulator/driver.h +++ b/include/linux/regulator/driver.h | |||
| @@ -193,6 +193,10 @@ enum regulator_type { | |||
| 193 | * | 193 | * |
| 194 | * @vsel_reg: Register for selector when using regulator_regmap_X_voltage_ | 194 | * @vsel_reg: Register for selector when using regulator_regmap_X_voltage_ |
| 195 | * @vsel_mask: Mask for register bitfield used for selector | 195 | * @vsel_mask: Mask for register bitfield used for selector |
| 196 | * @apply_reg: Register for initiate voltage change on the output when | ||
| 197 | * using regulator_set_voltage_sel_regmap | ||
| 198 | * @apply_bit: Register bitfield used for initiate voltage change on the | ||
| 199 | * output when using regulator_set_voltage_sel_regmap | ||
| 196 | * @enable_reg: Register for control when using regmap enable/disable ops | 200 | * @enable_reg: Register for control when using regmap enable/disable ops |
| 197 | * @enable_mask: Mask for control when using regmap enable/disable ops | 201 | * @enable_mask: Mask for control when using regmap enable/disable ops |
| 198 | * | 202 | * |
| @@ -218,6 +222,8 @@ struct regulator_desc { | |||
| 218 | 222 | ||
| 219 | unsigned int vsel_reg; | 223 | unsigned int vsel_reg; |
| 220 | unsigned int vsel_mask; | 224 | unsigned int vsel_mask; |
| 225 | unsigned int apply_reg; | ||
| 226 | unsigned int apply_bit; | ||
| 221 | unsigned int enable_reg; | 227 | unsigned int enable_reg; |
| 222 | unsigned int enable_mask; | 228 | unsigned int enable_mask; |
| 223 | unsigned int bypass_reg; | 229 | unsigned int bypass_reg; |
diff --git a/include/linux/ring_buffer.h b/include/linux/ring_buffer.h index 519777e3fa01..1342e69542f3 100644 --- a/include/linux/ring_buffer.h +++ b/include/linux/ring_buffer.h | |||
| @@ -167,6 +167,7 @@ unsigned long ring_buffer_entries_cpu(struct ring_buffer *buffer, int cpu); | |||
| 167 | unsigned long ring_buffer_overrun_cpu(struct ring_buffer *buffer, int cpu); | 167 | unsigned long ring_buffer_overrun_cpu(struct ring_buffer *buffer, int cpu); |
| 168 | unsigned long ring_buffer_commit_overrun_cpu(struct ring_buffer *buffer, int cpu); | 168 | unsigned long ring_buffer_commit_overrun_cpu(struct ring_buffer *buffer, int cpu); |
| 169 | unsigned long ring_buffer_dropped_events_cpu(struct ring_buffer *buffer, int cpu); | 169 | unsigned long ring_buffer_dropped_events_cpu(struct ring_buffer *buffer, int cpu); |
| 170 | unsigned long ring_buffer_read_events_cpu(struct ring_buffer *buffer, int cpu); | ||
| 170 | 171 | ||
| 171 | u64 ring_buffer_time_stamp(struct ring_buffer *buffer, int cpu); | 172 | u64 ring_buffer_time_stamp(struct ring_buffer *buffer, int cpu); |
| 172 | void ring_buffer_normalize_time_stamp(struct ring_buffer *buffer, | 173 | void ring_buffer_normalize_time_stamp(struct ring_buffer *buffer, |
diff --git a/include/linux/rtc.h b/include/linux/rtc.h index 9531845c419f..11d05f9fe8b6 100644 --- a/include/linux/rtc.h +++ b/include/linux/rtc.h | |||
| @@ -138,6 +138,7 @@ extern void rtc_device_unregister(struct rtc_device *rtc); | |||
| 138 | extern int rtc_read_time(struct rtc_device *rtc, struct rtc_time *tm); | 138 | extern int rtc_read_time(struct rtc_device *rtc, struct rtc_time *tm); |
| 139 | extern int rtc_set_time(struct rtc_device *rtc, struct rtc_time *tm); | 139 | extern int rtc_set_time(struct rtc_device *rtc, struct rtc_time *tm); |
| 140 | extern int rtc_set_mmss(struct rtc_device *rtc, unsigned long secs); | 140 | extern int rtc_set_mmss(struct rtc_device *rtc, unsigned long secs); |
| 141 | extern int rtc_set_ntp_time(struct timespec now); | ||
| 141 | int __rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm); | 142 | int __rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm); |
| 142 | extern int rtc_read_alarm(struct rtc_device *rtc, | 143 | extern int rtc_read_alarm(struct rtc_device *rtc, |
| 143 | struct rtc_wkalrm *alrm); | 144 | struct rtc_wkalrm *alrm); |
diff --git a/include/linux/sched.h b/include/linux/sched.h index d2112477ff5e..e4112aad2964 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -304,19 +304,6 @@ static inline void lockup_detector_init(void) | |||
| 304 | } | 304 | } |
| 305 | #endif | 305 | #endif |
| 306 | 306 | ||
| 307 | #ifdef CONFIG_DETECT_HUNG_TASK | ||
| 308 | extern unsigned int sysctl_hung_task_panic; | ||
| 309 | extern unsigned long sysctl_hung_task_check_count; | ||
| 310 | extern unsigned long sysctl_hung_task_timeout_secs; | ||
| 311 | extern unsigned long sysctl_hung_task_warnings; | ||
| 312 | extern int proc_dohung_task_timeout_secs(struct ctl_table *table, int write, | ||
| 313 | void __user *buffer, | ||
| 314 | size_t *lenp, loff_t *ppos); | ||
| 315 | #else | ||
| 316 | /* Avoid need for ifdefs elsewhere in the code */ | ||
| 317 | enum { sysctl_hung_task_timeout_secs = 0 }; | ||
| 318 | #endif | ||
| 319 | |||
| 320 | /* Attach to any functions which should be ignored in wchan output. */ | 307 | /* Attach to any functions which should be ignored in wchan output. */ |
| 321 | #define __sched __attribute__((__section__(".sched.text"))) | 308 | #define __sched __attribute__((__section__(".sched.text"))) |
| 322 | 309 | ||
| @@ -338,23 +325,6 @@ extern int mutex_spin_on_owner(struct mutex *lock, struct task_struct *owner); | |||
| 338 | struct nsproxy; | 325 | struct nsproxy; |
| 339 | struct user_namespace; | 326 | struct user_namespace; |
| 340 | 327 | ||
| 341 | /* | ||
| 342 | * Default maximum number of active map areas, this limits the number of vmas | ||
| 343 | * per mm struct. Users can overwrite this number by sysctl but there is a | ||
| 344 | * problem. | ||
| 345 | * | ||
| 346 | * When a program's coredump is generated as ELF format, a section is created | ||
| 347 | * per a vma. In ELF, the number of sections is represented in unsigned short. | ||
| 348 | * This means the number of sections should be smaller than 65535 at coredump. | ||
| 349 | * Because the kernel adds some informative sections to a image of program at | ||
| 350 | * generating coredump, we need some margin. The number of extra sections is | ||
| 351 | * 1-3 now and depends on arch. We use "5" as safe margin, here. | ||
| 352 | */ | ||
| 353 | #define MAPCOUNT_ELF_CORE_MARGIN (5) | ||
| 354 | #define DEFAULT_MAX_MAP_COUNT (USHRT_MAX - MAPCOUNT_ELF_CORE_MARGIN) | ||
| 355 | |||
| 356 | extern int sysctl_max_map_count; | ||
| 357 | |||
| 358 | #include <linux/aio.h> | 328 | #include <linux/aio.h> |
| 359 | 329 | ||
| 360 | #ifdef CONFIG_MMU | 330 | #ifdef CONFIG_MMU |
| @@ -1194,6 +1164,7 @@ struct sched_entity { | |||
| 1194 | /* rq "owned" by this entity/group: */ | 1164 | /* rq "owned" by this entity/group: */ |
| 1195 | struct cfs_rq *my_q; | 1165 | struct cfs_rq *my_q; |
| 1196 | #endif | 1166 | #endif |
| 1167 | |||
| 1197 | /* | 1168 | /* |
| 1198 | * Load-tracking only depends on SMP, FAIR_GROUP_SCHED dependency below may be | 1169 | * Load-tracking only depends on SMP, FAIR_GROUP_SCHED dependency below may be |
| 1199 | * removed when useful for applications beyond shares distribution (e.g. | 1170 | * removed when useful for applications beyond shares distribution (e.g. |
| @@ -1208,6 +1179,7 @@ struct sched_entity { | |||
| 1208 | struct sched_rt_entity { | 1179 | struct sched_rt_entity { |
| 1209 | struct list_head run_list; | 1180 | struct list_head run_list; |
| 1210 | unsigned long timeout; | 1181 | unsigned long timeout; |
| 1182 | unsigned long watchdog_stamp; | ||
| 1211 | unsigned int time_slice; | 1183 | unsigned int time_slice; |
| 1212 | 1184 | ||
| 1213 | struct sched_rt_entity *back; | 1185 | struct sched_rt_entity *back; |
| @@ -1220,11 +1192,6 @@ struct sched_rt_entity { | |||
| 1220 | #endif | 1192 | #endif |
| 1221 | }; | 1193 | }; |
| 1222 | 1194 | ||
| 1223 | /* | ||
| 1224 | * default timeslice is 100 msecs (used only for SCHED_RR tasks). | ||
| 1225 | * Timeslices get refilled after they expire. | ||
| 1226 | */ | ||
| 1227 | #define RR_TIMESLICE (100 * HZ / 1000) | ||
| 1228 | 1195 | ||
| 1229 | struct rcu_node; | 1196 | struct rcu_node; |
| 1230 | 1197 | ||
| @@ -1368,6 +1335,15 @@ struct task_struct { | |||
| 1368 | #ifndef CONFIG_VIRT_CPU_ACCOUNTING | 1335 | #ifndef CONFIG_VIRT_CPU_ACCOUNTING |
| 1369 | struct cputime prev_cputime; | 1336 | struct cputime prev_cputime; |
| 1370 | #endif | 1337 | #endif |
| 1338 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN | ||
| 1339 | seqlock_t vtime_seqlock; | ||
| 1340 | unsigned long long vtime_snap; | ||
| 1341 | enum { | ||
| 1342 | VTIME_SLEEPING = 0, | ||
| 1343 | VTIME_USER, | ||
| 1344 | VTIME_SYS, | ||
| 1345 | } vtime_snap_whence; | ||
| 1346 | #endif | ||
| 1371 | unsigned long nvcsw, nivcsw; /* context switch counts */ | 1347 | unsigned long nvcsw, nivcsw; /* context switch counts */ |
| 1372 | struct timespec start_time; /* monotonic time */ | 1348 | struct timespec start_time; /* monotonic time */ |
| 1373 | struct timespec real_start_time; /* boot based time */ | 1349 | struct timespec real_start_time; /* boot based time */ |
| @@ -1622,37 +1598,6 @@ static inline void set_numabalancing_state(bool enabled) | |||
| 1622 | } | 1598 | } |
| 1623 | #endif | 1599 | #endif |
| 1624 | 1600 | ||
| 1625 | /* | ||
| 1626 | * Priority of a process goes from 0..MAX_PRIO-1, valid RT | ||
| 1627 | * priority is 0..MAX_RT_PRIO-1, and SCHED_NORMAL/SCHED_BATCH | ||
| 1628 | * tasks are in the range MAX_RT_PRIO..MAX_PRIO-1. Priority | ||
| 1629 | * values are inverted: lower p->prio value means higher priority. | ||
| 1630 | * | ||
| 1631 | * The MAX_USER_RT_PRIO value allows the actual maximum | ||
| 1632 | * RT priority to be separate from the value exported to | ||
| 1633 | * user-space. This allows kernel threads to set their | ||
| 1634 | * priority to a value higher than any user task. Note: | ||
| 1635 | * MAX_RT_PRIO must not be smaller than MAX_USER_RT_PRIO. | ||
| 1636 | */ | ||
| 1637 | |||
| 1638 | #define MAX_USER_RT_PRIO 100 | ||
| 1639 | #define MAX_RT_PRIO MAX_USER_RT_PRIO | ||
| 1640 | |||
| 1641 | #define MAX_PRIO (MAX_RT_PRIO + 40) | ||
| 1642 | #define DEFAULT_PRIO (MAX_RT_PRIO + 20) | ||
| 1643 | |||
| 1644 | static inline int rt_prio(int prio) | ||
| 1645 | { | ||
| 1646 | if (unlikely(prio < MAX_RT_PRIO)) | ||
| 1647 | return 1; | ||
| 1648 | return 0; | ||
| 1649 | } | ||
| 1650 | |||
| 1651 | static inline int rt_task(struct task_struct *p) | ||
| 1652 | { | ||
| 1653 | return rt_prio(p->prio); | ||
| 1654 | } | ||
| 1655 | |||
| 1656 | static inline struct pid *task_pid(struct task_struct *task) | 1601 | static inline struct pid *task_pid(struct task_struct *task) |
| 1657 | { | 1602 | { |
| 1658 | return task->pids[PIDTYPE_PID].pid; | 1603 | return task->pids[PIDTYPE_PID].pid; |
| @@ -1792,6 +1737,37 @@ static inline void put_task_struct(struct task_struct *t) | |||
| 1792 | __put_task_struct(t); | 1737 | __put_task_struct(t); |
| 1793 | } | 1738 | } |
| 1794 | 1739 | ||
| 1740 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN | ||
| 1741 | extern void task_cputime(struct task_struct *t, | ||
| 1742 | cputime_t *utime, cputime_t *stime); | ||
| 1743 | extern void task_cputime_scaled(struct task_struct *t, | ||
| 1744 | cputime_t *utimescaled, cputime_t *stimescaled); | ||
| 1745 | extern cputime_t task_gtime(struct task_struct *t); | ||
| 1746 | #else | ||
| 1747 | static inline void task_cputime(struct task_struct *t, | ||
| 1748 | cputime_t *utime, cputime_t *stime) | ||
| 1749 | { | ||
| 1750 | if (utime) | ||
| 1751 | *utime = t->utime; | ||
| 1752 | if (stime) | ||
| 1753 | *stime = t->stime; | ||
| 1754 | } | ||
| 1755 | |||
| 1756 | static inline void task_cputime_scaled(struct task_struct *t, | ||
| 1757 | cputime_t *utimescaled, | ||
| 1758 | cputime_t *stimescaled) | ||
| 1759 | { | ||
| 1760 | if (utimescaled) | ||
| 1761 | *utimescaled = t->utimescaled; | ||
| 1762 | if (stimescaled) | ||
| 1763 | *stimescaled = t->stimescaled; | ||
| 1764 | } | ||
| 1765 | |||
| 1766 | static inline cputime_t task_gtime(struct task_struct *t) | ||
| 1767 | { | ||
| 1768 | return t->gtime; | ||
| 1769 | } | ||
| 1770 | #endif | ||
| 1795 | extern void task_cputime_adjusted(struct task_struct *p, cputime_t *ut, cputime_t *st); | 1771 | extern void task_cputime_adjusted(struct task_struct *p, cputime_t *ut, cputime_t *st); |
| 1796 | extern void thread_group_cputime_adjusted(struct task_struct *p, cputime_t *ut, cputime_t *st); | 1772 | extern void thread_group_cputime_adjusted(struct task_struct *p, cputime_t *ut, cputime_t *st); |
| 1797 | 1773 | ||
| @@ -2033,58 +2009,7 @@ extern void wake_up_idle_cpu(int cpu); | |||
| 2033 | static inline void wake_up_idle_cpu(int cpu) { } | 2009 | static inline void wake_up_idle_cpu(int cpu) { } |
| 2034 | #endif | 2010 | #endif |
| 2035 | 2011 | ||
| 2036 | extern unsigned int sysctl_sched_latency; | ||
| 2037 | extern unsigned int sysctl_sched_min_granularity; | ||
| 2038 | extern unsigned int sysctl_sched_wakeup_granularity; | ||
| 2039 | extern unsigned int sysctl_sched_child_runs_first; | ||
| 2040 | |||
| 2041 | enum sched_tunable_scaling { | ||
| 2042 | SCHED_TUNABLESCALING_NONE, | ||
| 2043 | SCHED_TUNABLESCALING_LOG, | ||
| 2044 | SCHED_TUNABLESCALING_LINEAR, | ||
| 2045 | SCHED_TUNABLESCALING_END, | ||
| 2046 | }; | ||
| 2047 | extern enum sched_tunable_scaling sysctl_sched_tunable_scaling; | ||
| 2048 | |||
| 2049 | extern unsigned int sysctl_numa_balancing_scan_delay; | ||
| 2050 | extern unsigned int sysctl_numa_balancing_scan_period_min; | ||
| 2051 | extern unsigned int sysctl_numa_balancing_scan_period_max; | ||
| 2052 | extern unsigned int sysctl_numa_balancing_scan_period_reset; | ||
| 2053 | extern unsigned int sysctl_numa_balancing_scan_size; | ||
| 2054 | extern unsigned int sysctl_numa_balancing_settle_count; | ||
| 2055 | |||
| 2056 | #ifdef CONFIG_SCHED_DEBUG | ||
| 2057 | extern unsigned int sysctl_sched_migration_cost; | ||
| 2058 | extern unsigned int sysctl_sched_nr_migrate; | ||
| 2059 | extern unsigned int sysctl_sched_time_avg; | ||
| 2060 | extern unsigned int sysctl_timer_migration; | ||
| 2061 | extern unsigned int sysctl_sched_shares_window; | ||
| 2062 | |||
| 2063 | int sched_proc_update_handler(struct ctl_table *table, int write, | ||
| 2064 | void __user *buffer, size_t *length, | ||
| 2065 | loff_t *ppos); | ||
| 2066 | #endif | ||
| 2067 | #ifdef CONFIG_SCHED_DEBUG | ||
| 2068 | static inline unsigned int get_sysctl_timer_migration(void) | ||
| 2069 | { | ||
| 2070 | return sysctl_timer_migration; | ||
| 2071 | } | ||
| 2072 | #else | ||
| 2073 | static inline unsigned int get_sysctl_timer_migration(void) | ||
| 2074 | { | ||
| 2075 | return 1; | ||
| 2076 | } | ||
| 2077 | #endif | ||
| 2078 | extern unsigned int sysctl_sched_rt_period; | ||
| 2079 | extern int sysctl_sched_rt_runtime; | ||
| 2080 | |||
| 2081 | int sched_rt_handler(struct ctl_table *table, int write, | ||
| 2082 | void __user *buffer, size_t *lenp, | ||
| 2083 | loff_t *ppos); | ||
| 2084 | |||
| 2085 | #ifdef CONFIG_SCHED_AUTOGROUP | 2012 | #ifdef CONFIG_SCHED_AUTOGROUP |
| 2086 | extern unsigned int sysctl_sched_autogroup_enabled; | ||
| 2087 | |||
| 2088 | extern void sched_autogroup_create_attach(struct task_struct *p); | 2013 | extern void sched_autogroup_create_attach(struct task_struct *p); |
| 2089 | extern void sched_autogroup_detach(struct task_struct *p); | 2014 | extern void sched_autogroup_detach(struct task_struct *p); |
| 2090 | extern void sched_autogroup_fork(struct signal_struct *sig); | 2015 | extern void sched_autogroup_fork(struct signal_struct *sig); |
| @@ -2100,30 +2025,6 @@ static inline void sched_autogroup_fork(struct signal_struct *sig) { } | |||
| 2100 | static inline void sched_autogroup_exit(struct signal_struct *sig) { } | 2025 | static inline void sched_autogroup_exit(struct signal_struct *sig) { } |
| 2101 | #endif | 2026 | #endif |
| 2102 | 2027 | ||
| 2103 | #ifdef CONFIG_CFS_BANDWIDTH | ||
| 2104 | extern unsigned int sysctl_sched_cfs_bandwidth_slice; | ||
| 2105 | #endif | ||
| 2106 | |||
| 2107 | #ifdef CONFIG_RT_MUTEXES | ||
| 2108 | extern int rt_mutex_getprio(struct task_struct *p); | ||
| 2109 | extern void rt_mutex_setprio(struct task_struct *p, int prio); | ||
| 2110 | extern void rt_mutex_adjust_pi(struct task_struct *p); | ||
| 2111 | static inline bool tsk_is_pi_blocked(struct task_struct *tsk) | ||
| 2112 | { | ||
| 2113 | return tsk->pi_blocked_on != NULL; | ||
| 2114 | } | ||
| 2115 | #else | ||
| 2116 | static inline int rt_mutex_getprio(struct task_struct *p) | ||
| 2117 | { | ||
| 2118 | return p->normal_prio; | ||
| 2119 | } | ||
| 2120 | # define rt_mutex_adjust_pi(p) do { } while (0) | ||
| 2121 | static inline bool tsk_is_pi_blocked(struct task_struct *tsk) | ||
| 2122 | { | ||
| 2123 | return false; | ||
| 2124 | } | ||
| 2125 | #endif | ||
| 2126 | |||
| 2127 | extern bool yield_to(struct task_struct *p, bool preempt); | 2028 | extern bool yield_to(struct task_struct *p, bool preempt); |
| 2128 | extern void set_user_nice(struct task_struct *p, long nice); | 2029 | extern void set_user_nice(struct task_struct *p, long nice); |
| 2129 | extern int task_prio(const struct task_struct *p); | 2030 | extern int task_prio(const struct task_struct *p); |
| @@ -2753,14 +2654,15 @@ static inline void set_task_cpu(struct task_struct *p, unsigned int cpu) | |||
| 2753 | extern long sched_setaffinity(pid_t pid, const struct cpumask *new_mask); | 2654 | extern long sched_setaffinity(pid_t pid, const struct cpumask *new_mask); |
| 2754 | extern long sched_getaffinity(pid_t pid, struct cpumask *mask); | 2655 | extern long sched_getaffinity(pid_t pid, struct cpumask *mask); |
| 2755 | 2656 | ||
| 2756 | extern void normalize_rt_tasks(void); | ||
| 2757 | |||
| 2758 | #ifdef CONFIG_CGROUP_SCHED | 2657 | #ifdef CONFIG_CGROUP_SCHED |
| 2759 | 2658 | ||
| 2760 | extern struct task_group root_task_group; | 2659 | extern struct task_group root_task_group; |
| 2761 | 2660 | ||
| 2762 | extern struct task_group *sched_create_group(struct task_group *parent); | 2661 | extern struct task_group *sched_create_group(struct task_group *parent); |
| 2662 | extern void sched_online_group(struct task_group *tg, | ||
| 2663 | struct task_group *parent); | ||
| 2763 | extern void sched_destroy_group(struct task_group *tg); | 2664 | extern void sched_destroy_group(struct task_group *tg); |
| 2665 | extern void sched_offline_group(struct task_group *tg); | ||
| 2764 | extern void sched_move_task(struct task_struct *tsk); | 2666 | extern void sched_move_task(struct task_struct *tsk); |
| 2765 | #ifdef CONFIG_FAIR_GROUP_SCHED | 2667 | #ifdef CONFIG_FAIR_GROUP_SCHED |
| 2766 | extern int sched_group_set_shares(struct task_group *tg, unsigned long shares); | 2668 | extern int sched_group_set_shares(struct task_group *tg, unsigned long shares); |
diff --git a/include/linux/sched/rt.h b/include/linux/sched/rt.h new file mode 100644 index 000000000000..94e19ea28fc3 --- /dev/null +++ b/include/linux/sched/rt.h | |||
| @@ -0,0 +1,58 @@ | |||
| 1 | #ifndef _SCHED_RT_H | ||
| 2 | #define _SCHED_RT_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * Priority of a process goes from 0..MAX_PRIO-1, valid RT | ||
| 6 | * priority is 0..MAX_RT_PRIO-1, and SCHED_NORMAL/SCHED_BATCH | ||
| 7 | * tasks are in the range MAX_RT_PRIO..MAX_PRIO-1. Priority | ||
| 8 | * values are inverted: lower p->prio value means higher priority. | ||
| 9 | * | ||
| 10 | * The MAX_USER_RT_PRIO value allows the actual maximum | ||
| 11 | * RT priority to be separate from the value exported to | ||
| 12 | * user-space. This allows kernel threads to set their | ||
| 13 | * priority to a value higher than any user task. Note: | ||
| 14 | * MAX_RT_PRIO must not be smaller than MAX_USER_RT_PRIO. | ||
| 15 | */ | ||
| 16 | |||
| 17 | #define MAX_USER_RT_PRIO 100 | ||
| 18 | #define MAX_RT_PRIO MAX_USER_RT_PRIO | ||
| 19 | |||
| 20 | #define MAX_PRIO (MAX_RT_PRIO + 40) | ||
| 21 | #define DEFAULT_PRIO (MAX_RT_PRIO + 20) | ||
| 22 | |||
| 23 | static inline int rt_prio(int prio) | ||
| 24 | { | ||
| 25 | if (unlikely(prio < MAX_RT_PRIO)) | ||
| 26 | return 1; | ||
| 27 | return 0; | ||
| 28 | } | ||
| 29 | |||
| 30 | static inline int rt_task(struct task_struct *p) | ||
| 31 | { | ||
| 32 | return rt_prio(p->prio); | ||
| 33 | } | ||
| 34 | |||
| 35 | #ifdef CONFIG_RT_MUTEXES | ||
| 36 | extern int rt_mutex_getprio(struct task_struct *p); | ||
| 37 | extern void rt_mutex_setprio(struct task_struct *p, int prio); | ||
| 38 | extern void rt_mutex_adjust_pi(struct task_struct *p); | ||
| 39 | static inline bool tsk_is_pi_blocked(struct task_struct *tsk) | ||
| 40 | { | ||
| 41 | return tsk->pi_blocked_on != NULL; | ||
| 42 | } | ||
| 43 | #else | ||
| 44 | static inline int rt_mutex_getprio(struct task_struct *p) | ||
| 45 | { | ||
| 46 | return p->normal_prio; | ||
| 47 | } | ||
| 48 | # define rt_mutex_adjust_pi(p) do { } while (0) | ||
| 49 | static inline bool tsk_is_pi_blocked(struct task_struct *tsk) | ||
| 50 | { | ||
| 51 | return false; | ||
| 52 | } | ||
| 53 | #endif | ||
| 54 | |||
| 55 | extern void normalize_rt_tasks(void); | ||
| 56 | |||
| 57 | |||
| 58 | #endif /* _SCHED_RT_H */ | ||
diff --git a/include/linux/sched/sysctl.h b/include/linux/sched/sysctl.h new file mode 100644 index 000000000000..d2bb0ae979d0 --- /dev/null +++ b/include/linux/sched/sysctl.h | |||
| @@ -0,0 +1,110 @@ | |||
| 1 | #ifndef _SCHED_SYSCTL_H | ||
| 2 | #define _SCHED_SYSCTL_H | ||
| 3 | |||
| 4 | #ifdef CONFIG_DETECT_HUNG_TASK | ||
| 5 | extern unsigned int sysctl_hung_task_panic; | ||
| 6 | extern unsigned long sysctl_hung_task_check_count; | ||
| 7 | extern unsigned long sysctl_hung_task_timeout_secs; | ||
| 8 | extern unsigned long sysctl_hung_task_warnings; | ||
| 9 | extern int proc_dohung_task_timeout_secs(struct ctl_table *table, int write, | ||
| 10 | void __user *buffer, | ||
| 11 | size_t *lenp, loff_t *ppos); | ||
| 12 | #else | ||
| 13 | /* Avoid need for ifdefs elsewhere in the code */ | ||
| 14 | enum { sysctl_hung_task_timeout_secs = 0 }; | ||
| 15 | #endif | ||
| 16 | |||
| 17 | /* | ||
| 18 | * Default maximum number of active map areas, this limits the number of vmas | ||
| 19 | * per mm struct. Users can overwrite this number by sysctl but there is a | ||
| 20 | * problem. | ||
| 21 | * | ||
| 22 | * When a program's coredump is generated as ELF format, a section is created | ||
| 23 | * per a vma. In ELF, the number of sections is represented in unsigned short. | ||
| 24 | * This means the number of sections should be smaller than 65535 at coredump. | ||
| 25 | * Because the kernel adds some informative sections to a image of program at | ||
| 26 | * generating coredump, we need some margin. The number of extra sections is | ||
| 27 | * 1-3 now and depends on arch. We use "5" as safe margin, here. | ||
| 28 | */ | ||
| 29 | #define MAPCOUNT_ELF_CORE_MARGIN (5) | ||
| 30 | #define DEFAULT_MAX_MAP_COUNT (USHRT_MAX - MAPCOUNT_ELF_CORE_MARGIN) | ||
| 31 | |||
| 32 | extern int sysctl_max_map_count; | ||
| 33 | |||
| 34 | extern unsigned int sysctl_sched_latency; | ||
| 35 | extern unsigned int sysctl_sched_min_granularity; | ||
| 36 | extern unsigned int sysctl_sched_wakeup_granularity; | ||
| 37 | extern unsigned int sysctl_sched_child_runs_first; | ||
| 38 | |||
| 39 | enum sched_tunable_scaling { | ||
| 40 | SCHED_TUNABLESCALING_NONE, | ||
| 41 | SCHED_TUNABLESCALING_LOG, | ||
| 42 | SCHED_TUNABLESCALING_LINEAR, | ||
| 43 | SCHED_TUNABLESCALING_END, | ||
| 44 | }; | ||
| 45 | extern enum sched_tunable_scaling sysctl_sched_tunable_scaling; | ||
| 46 | |||
| 47 | extern unsigned int sysctl_numa_balancing_scan_delay; | ||
| 48 | extern unsigned int sysctl_numa_balancing_scan_period_min; | ||
| 49 | extern unsigned int sysctl_numa_balancing_scan_period_max; | ||
| 50 | extern unsigned int sysctl_numa_balancing_scan_period_reset; | ||
| 51 | extern unsigned int sysctl_numa_balancing_scan_size; | ||
| 52 | extern unsigned int sysctl_numa_balancing_settle_count; | ||
| 53 | |||
| 54 | #ifdef CONFIG_SCHED_DEBUG | ||
| 55 | extern unsigned int sysctl_sched_migration_cost; | ||
| 56 | extern unsigned int sysctl_sched_nr_migrate; | ||
| 57 | extern unsigned int sysctl_sched_time_avg; | ||
| 58 | extern unsigned int sysctl_timer_migration; | ||
| 59 | extern unsigned int sysctl_sched_shares_window; | ||
| 60 | |||
| 61 | int sched_proc_update_handler(struct ctl_table *table, int write, | ||
| 62 | void __user *buffer, size_t *length, | ||
| 63 | loff_t *ppos); | ||
| 64 | #endif | ||
| 65 | #ifdef CONFIG_SCHED_DEBUG | ||
| 66 | static inline unsigned int get_sysctl_timer_migration(void) | ||
| 67 | { | ||
| 68 | return sysctl_timer_migration; | ||
| 69 | } | ||
| 70 | #else | ||
| 71 | static inline unsigned int get_sysctl_timer_migration(void) | ||
| 72 | { | ||
| 73 | return 1; | ||
| 74 | } | ||
| 75 | #endif | ||
| 76 | |||
| 77 | /* | ||
| 78 | * control realtime throttling: | ||
| 79 | * | ||
| 80 | * /proc/sys/kernel/sched_rt_period_us | ||
| 81 | * /proc/sys/kernel/sched_rt_runtime_us | ||
| 82 | */ | ||
| 83 | extern unsigned int sysctl_sched_rt_period; | ||
| 84 | extern int sysctl_sched_rt_runtime; | ||
| 85 | |||
| 86 | #ifdef CONFIG_CFS_BANDWIDTH | ||
| 87 | extern unsigned int sysctl_sched_cfs_bandwidth_slice; | ||
| 88 | #endif | ||
| 89 | |||
| 90 | #ifdef CONFIG_SCHED_AUTOGROUP | ||
| 91 | extern unsigned int sysctl_sched_autogroup_enabled; | ||
| 92 | #endif | ||
| 93 | |||
| 94 | /* | ||
| 95 | * default timeslice is 100 msecs (used only for SCHED_RR tasks). | ||
| 96 | * Timeslices get refilled after they expire. | ||
| 97 | */ | ||
| 98 | #define RR_TIMESLICE (100 * HZ / 1000) | ||
| 99 | |||
| 100 | extern int sched_rr_timeslice; | ||
| 101 | |||
| 102 | extern int sched_rr_handler(struct ctl_table *table, int write, | ||
| 103 | void __user *buffer, size_t *lenp, | ||
| 104 | loff_t *ppos); | ||
| 105 | |||
| 106 | extern int sched_rt_handler(struct ctl_table *table, int write, | ||
| 107 | void __user *buffer, size_t *lenp, | ||
| 108 | loff_t *ppos); | ||
| 109 | |||
| 110 | #endif /* _SCHED_SYSCTL_H */ | ||
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 320e976d5ab8..821c7f45d2a7 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
| @@ -230,6 +230,13 @@ enum { | |||
| 230 | 230 | ||
| 231 | /* generate wifi status information (where possible) */ | 231 | /* generate wifi status information (where possible) */ |
| 232 | SKBTX_WIFI_STATUS = 1 << 4, | 232 | SKBTX_WIFI_STATUS = 1 << 4, |
| 233 | |||
| 234 | /* This indicates at least one fragment might be overwritten | ||
| 235 | * (as in vmsplice(), sendfile() ...) | ||
| 236 | * If we need to compute a TX checksum, we'll need to copy | ||
| 237 | * all frags to avoid possible bad checksum | ||
| 238 | */ | ||
| 239 | SKBTX_SHARED_FRAG = 1 << 5, | ||
| 233 | }; | 240 | }; |
| 234 | 241 | ||
| 235 | /* | 242 | /* |
| @@ -307,6 +314,8 @@ enum { | |||
| 307 | SKB_GSO_TCPV6 = 1 << 4, | 314 | SKB_GSO_TCPV6 = 1 << 4, |
| 308 | 315 | ||
| 309 | SKB_GSO_FCOE = 1 << 5, | 316 | SKB_GSO_FCOE = 1 << 5, |
| 317 | |||
| 318 | SKB_GSO_GRE = 1 << 6, | ||
| 310 | }; | 319 | }; |
| 311 | 320 | ||
| 312 | #if BITS_PER_LONG > 32 | 321 | #if BITS_PER_LONG > 32 |
| @@ -797,6 +806,16 @@ static inline int skb_cloned(const struct sk_buff *skb) | |||
| 797 | (atomic_read(&skb_shinfo(skb)->dataref) & SKB_DATAREF_MASK) != 1; | 806 | (atomic_read(&skb_shinfo(skb)->dataref) & SKB_DATAREF_MASK) != 1; |
| 798 | } | 807 | } |
| 799 | 808 | ||
| 809 | static inline int skb_unclone(struct sk_buff *skb, gfp_t pri) | ||
| 810 | { | ||
| 811 | might_sleep_if(pri & __GFP_WAIT); | ||
| 812 | |||
| 813 | if (skb_cloned(skb)) | ||
| 814 | return pskb_expand_head(skb, 0, 0, pri); | ||
| 815 | |||
| 816 | return 0; | ||
| 817 | } | ||
| 818 | |||
| 800 | /** | 819 | /** |
| 801 | * skb_header_cloned - is the header a clone | 820 | * skb_header_cloned - is the header a clone |
| 802 | * @skb: buffer to check | 821 | * @skb: buffer to check |
| @@ -1492,6 +1511,11 @@ static inline void skb_set_inner_network_header(struct sk_buff *skb, | |||
| 1492 | skb->inner_network_header += offset; | 1511 | skb->inner_network_header += offset; |
| 1493 | } | 1512 | } |
| 1494 | 1513 | ||
| 1514 | static inline bool skb_transport_header_was_set(const struct sk_buff *skb) | ||
| 1515 | { | ||
| 1516 | return skb->transport_header != ~0U; | ||
| 1517 | } | ||
| 1518 | |||
| 1495 | static inline unsigned char *skb_transport_header(const struct sk_buff *skb) | 1519 | static inline unsigned char *skb_transport_header(const struct sk_buff *skb) |
| 1496 | { | 1520 | { |
| 1497 | return skb->head + skb->transport_header; | 1521 | return skb->head + skb->transport_header; |
| @@ -1580,6 +1604,11 @@ static inline void skb_set_inner_network_header(struct sk_buff *skb, | |||
| 1580 | skb->inner_network_header = skb->data + offset; | 1604 | skb->inner_network_header = skb->data + offset; |
| 1581 | } | 1605 | } |
| 1582 | 1606 | ||
| 1607 | static inline bool skb_transport_header_was_set(const struct sk_buff *skb) | ||
| 1608 | { | ||
| 1609 | return skb->transport_header != NULL; | ||
| 1610 | } | ||
| 1611 | |||
| 1583 | static inline unsigned char *skb_transport_header(const struct sk_buff *skb) | 1612 | static inline unsigned char *skb_transport_header(const struct sk_buff *skb) |
| 1584 | { | 1613 | { |
| 1585 | return skb->transport_header; | 1614 | return skb->transport_header; |
| @@ -1815,6 +1844,10 @@ static inline void __skb_queue_purge(struct sk_buff_head *list) | |||
| 1815 | kfree_skb(skb); | 1844 | kfree_skb(skb); |
| 1816 | } | 1845 | } |
| 1817 | 1846 | ||
| 1847 | #define NETDEV_FRAG_PAGE_MAX_ORDER get_order(32768) | ||
| 1848 | #define NETDEV_FRAG_PAGE_MAX_SIZE (PAGE_SIZE << NETDEV_FRAG_PAGE_MAX_ORDER) | ||
| 1849 | #define NETDEV_PAGECNT_MAX_BIAS NETDEV_FRAG_PAGE_MAX_SIZE | ||
| 1850 | |||
| 1818 | extern void *netdev_alloc_frag(unsigned int fragsz); | 1851 | extern void *netdev_alloc_frag(unsigned int fragsz); |
| 1819 | 1852 | ||
| 1820 | extern struct sk_buff *__netdev_alloc_skb(struct net_device *dev, | 1853 | extern struct sk_buff *__netdev_alloc_skb(struct net_device *dev, |
| @@ -2191,6 +2224,19 @@ static inline int skb_linearize(struct sk_buff *skb) | |||
| 2191 | } | 2224 | } |
| 2192 | 2225 | ||
| 2193 | /** | 2226 | /** |
| 2227 | * skb_has_shared_frag - can any frag be overwritten | ||
| 2228 | * @skb: buffer to test | ||
| 2229 | * | ||
| 2230 | * Return true if the skb has at least one frag that might be modified | ||
| 2231 | * by an external entity (as in vmsplice()/sendfile()) | ||
| 2232 | */ | ||
| 2233 | static inline bool skb_has_shared_frag(const struct sk_buff *skb) | ||
| 2234 | { | ||
| 2235 | return skb_is_nonlinear(skb) && | ||
| 2236 | skb_shinfo(skb)->tx_flags & SKBTX_SHARED_FRAG; | ||
| 2237 | } | ||
| 2238 | |||
| 2239 | /** | ||
| 2194 | * skb_linearize_cow - make sure skb is linear and writable | 2240 | * skb_linearize_cow - make sure skb is linear and writable |
| 2195 | * @skb: buffer to process | 2241 | * @skb: buffer to process |
| 2196 | * | 2242 | * |
| @@ -2688,6 +2734,21 @@ static inline struct sec_path *skb_sec_path(struct sk_buff *skb) | |||
| 2688 | } | 2734 | } |
| 2689 | #endif | 2735 | #endif |
| 2690 | 2736 | ||
| 2737 | /* Keeps track of mac header offset relative to skb->head. | ||
| 2738 | * It is useful for TSO of Tunneling protocol. e.g. GRE. | ||
| 2739 | * For non-tunnel skb it points to skb_mac_header() and for | ||
| 2740 | * tunnel skb it points to outer mac header. */ | ||
| 2741 | struct skb_gso_cb { | ||
| 2742 | int mac_offset; | ||
| 2743 | }; | ||
| 2744 | #define SKB_GSO_CB(skb) ((struct skb_gso_cb *)(skb)->cb) | ||
| 2745 | |||
| 2746 | static inline int skb_tnl_header_len(const struct sk_buff *inner_skb) | ||
| 2747 | { | ||
| 2748 | return (skb_mac_header(inner_skb) - inner_skb->head) - | ||
| 2749 | SKB_GSO_CB(inner_skb)->mac_offset; | ||
| 2750 | } | ||
| 2751 | |||
| 2691 | static inline bool skb_is_gso(const struct sk_buff *skb) | 2752 | static inline bool skb_is_gso(const struct sk_buff *skb) |
| 2692 | { | 2753 | { |
| 2693 | return skb_shinfo(skb)->gso_size; | 2754 | return skb_shinfo(skb)->gso_size; |
diff --git a/include/linux/smpboot.h b/include/linux/smpboot.h index e0106d8581d3..c65dee059913 100644 --- a/include/linux/smpboot.h +++ b/include/linux/smpboot.h | |||
| @@ -14,6 +14,8 @@ struct smpboot_thread_data; | |||
| 14 | * @thread_should_run: Check whether the thread should run or not. Called with | 14 | * @thread_should_run: Check whether the thread should run or not. Called with |
| 15 | * preemption disabled. | 15 | * preemption disabled. |
| 16 | * @thread_fn: The associated thread function | 16 | * @thread_fn: The associated thread function |
| 17 | * @create: Optional setup function, called when the thread gets | ||
| 18 | * created (Not called from the thread context) | ||
| 17 | * @setup: Optional setup function, called when the thread gets | 19 | * @setup: Optional setup function, called when the thread gets |
| 18 | * operational the first time | 20 | * operational the first time |
| 19 | * @cleanup: Optional cleanup function, called when the thread | 21 | * @cleanup: Optional cleanup function, called when the thread |
| @@ -22,6 +24,7 @@ struct smpboot_thread_data; | |||
| 22 | * parked (cpu offline) | 24 | * parked (cpu offline) |
| 23 | * @unpark: Optional unpark function, called when the thread is | 25 | * @unpark: Optional unpark function, called when the thread is |
| 24 | * unparked (cpu online) | 26 | * unparked (cpu online) |
| 27 | * @selfparking: Thread is not parked by the park function. | ||
| 25 | * @thread_comm: The base name of the thread | 28 | * @thread_comm: The base name of the thread |
| 26 | */ | 29 | */ |
| 27 | struct smp_hotplug_thread { | 30 | struct smp_hotplug_thread { |
| @@ -29,10 +32,12 @@ struct smp_hotplug_thread { | |||
| 29 | struct list_head list; | 32 | struct list_head list; |
| 30 | int (*thread_should_run)(unsigned int cpu); | 33 | int (*thread_should_run)(unsigned int cpu); |
| 31 | void (*thread_fn)(unsigned int cpu); | 34 | void (*thread_fn)(unsigned int cpu); |
| 35 | void (*create)(unsigned int cpu); | ||
| 32 | void (*setup)(unsigned int cpu); | 36 | void (*setup)(unsigned int cpu); |
| 33 | void (*cleanup)(unsigned int cpu, bool online); | 37 | void (*cleanup)(unsigned int cpu, bool online); |
| 34 | void (*park)(unsigned int cpu); | 38 | void (*park)(unsigned int cpu); |
| 35 | void (*unpark)(unsigned int cpu); | 39 | void (*unpark)(unsigned int cpu); |
| 40 | bool selfparking; | ||
| 36 | const char *thread_comm; | 41 | const char *thread_comm; |
| 37 | }; | 42 | }; |
| 38 | 43 | ||
diff --git a/include/linux/socket.h b/include/linux/socket.h index 9a546ff853dc..2b9f74b0ffea 100644 --- a/include/linux/socket.h +++ b/include/linux/socket.h | |||
| @@ -178,7 +178,8 @@ struct ucred { | |||
| 178 | #define AF_CAIF 37 /* CAIF sockets */ | 178 | #define AF_CAIF 37 /* CAIF sockets */ |
| 179 | #define AF_ALG 38 /* Algorithm sockets */ | 179 | #define AF_ALG 38 /* Algorithm sockets */ |
| 180 | #define AF_NFC 39 /* NFC sockets */ | 180 | #define AF_NFC 39 /* NFC sockets */ |
| 181 | #define AF_MAX 40 /* For now.. */ | 181 | #define AF_VSOCK 40 /* vSockets */ |
| 182 | #define AF_MAX 41 /* For now.. */ | ||
| 182 | 183 | ||
| 183 | /* Protocol families, same as address families. */ | 184 | /* Protocol families, same as address families. */ |
| 184 | #define PF_UNSPEC AF_UNSPEC | 185 | #define PF_UNSPEC AF_UNSPEC |
| @@ -221,6 +222,7 @@ struct ucred { | |||
| 221 | #define PF_CAIF AF_CAIF | 222 | #define PF_CAIF AF_CAIF |
| 222 | #define PF_ALG AF_ALG | 223 | #define PF_ALG AF_ALG |
| 223 | #define PF_NFC AF_NFC | 224 | #define PF_NFC AF_NFC |
| 225 | #define PF_VSOCK AF_VSOCK | ||
| 224 | #define PF_MAX AF_MAX | 226 | #define PF_MAX AF_MAX |
| 225 | 227 | ||
| 226 | /* Maximum queue length specifiable by listen. */ | 228 | /* Maximum queue length specifiable by listen. */ |
diff --git a/include/linux/spi/pxa2xx_spi.h b/include/linux/spi/pxa2xx_spi.h index c73d1445c77e..82d5111cd0c2 100644 --- a/include/linux/spi/pxa2xx_spi.h +++ b/include/linux/spi/pxa2xx_spi.h | |||
| @@ -28,6 +28,15 @@ struct pxa2xx_spi_master { | |||
| 28 | u32 clock_enable; | 28 | u32 clock_enable; |
| 29 | u16 num_chipselect; | 29 | u16 num_chipselect; |
| 30 | u8 enable_dma; | 30 | u8 enable_dma; |
| 31 | |||
| 32 | /* DMA engine specific config */ | ||
| 33 | int rx_chan_id; | ||
| 34 | int tx_chan_id; | ||
| 35 | int rx_slave_id; | ||
| 36 | int tx_slave_id; | ||
| 37 | |||
| 38 | /* For non-PXA arches */ | ||
| 39 | struct ssp_device ssp; | ||
| 31 | }; | 40 | }; |
| 32 | 41 | ||
| 33 | /* spi_board_info.controller_data for SPI slave devices, | 42 | /* spi_board_info.controller_data for SPI slave devices, |
| @@ -35,6 +44,7 @@ struct pxa2xx_spi_master { | |||
| 35 | */ | 44 | */ |
| 36 | struct pxa2xx_spi_chip { | 45 | struct pxa2xx_spi_chip { |
| 37 | u8 tx_threshold; | 46 | u8 tx_threshold; |
| 47 | u8 tx_hi_threshold; | ||
| 38 | u8 rx_threshold; | 48 | u8 rx_threshold; |
| 39 | u8 dma_burst_size; | 49 | u8 dma_burst_size; |
| 40 | u32 timeout; | 50 | u32 timeout; |
| @@ -50,103 +60,5 @@ struct pxa2xx_spi_chip { | |||
| 50 | 60 | ||
| 51 | extern void pxa2xx_set_spi_info(unsigned id, struct pxa2xx_spi_master *info); | 61 | extern void pxa2xx_set_spi_info(unsigned id, struct pxa2xx_spi_master *info); |
| 52 | 62 | ||
| 53 | #else | ||
| 54 | /* | ||
| 55 | * This is the implemtation for CE4100 on x86. ARM defines them in mach/ or | ||
| 56 | * plat/ include path. | ||
| 57 | * The CE4100 does not provide DMA support. This bits are here to let the driver | ||
| 58 | * compile and will never be used. Maybe we get DMA support at a later point in | ||
| 59 | * time. | ||
| 60 | */ | ||
| 61 | |||
| 62 | #define DCSR(n) (n) | ||
| 63 | #define DSADR(n) (n) | ||
| 64 | #define DTADR(n) (n) | ||
| 65 | #define DCMD(n) (n) | ||
| 66 | #define DRCMR(n) (n) | ||
| 67 | |||
| 68 | #define DCSR_RUN (1 << 31) /* Run Bit */ | ||
| 69 | #define DCSR_NODESC (1 << 30) /* No-Descriptor Fetch */ | ||
| 70 | #define DCSR_STOPIRQEN (1 << 29) /* Stop Interrupt Enable */ | ||
| 71 | #define DCSR_REQPEND (1 << 8) /* Request Pending (read-only) */ | ||
| 72 | #define DCSR_STOPSTATE (1 << 3) /* Stop State (read-only) */ | ||
| 73 | #define DCSR_ENDINTR (1 << 2) /* End Interrupt */ | ||
| 74 | #define DCSR_STARTINTR (1 << 1) /* Start Interrupt */ | ||
| 75 | #define DCSR_BUSERR (1 << 0) /* Bus Error Interrupt */ | ||
| 76 | |||
| 77 | #define DCSR_EORIRQEN (1 << 28) /* End of Receive Interrupt Enable */ | ||
| 78 | #define DCSR_EORJMPEN (1 << 27) /* Jump to next descriptor on EOR */ | ||
| 79 | #define DCSR_EORSTOPEN (1 << 26) /* STOP on an EOR */ | ||
| 80 | #define DCSR_SETCMPST (1 << 25) /* Set Descriptor Compare Status */ | ||
| 81 | #define DCSR_CLRCMPST (1 << 24) /* Clear Descriptor Compare Status */ | ||
| 82 | #define DCSR_CMPST (1 << 10) /* The Descriptor Compare Status */ | ||
| 83 | #define DCSR_EORINTR (1 << 9) /* The end of Receive */ | ||
| 84 | |||
| 85 | #define DRCMR_MAPVLD (1 << 7) /* Map Valid */ | ||
| 86 | #define DRCMR_CHLNUM 0x1f /* mask for Channel Number */ | ||
| 87 | |||
| 88 | #define DDADR_DESCADDR 0xfffffff0 /* Address of next descriptor */ | ||
| 89 | #define DDADR_STOP (1 << 0) /* Stop */ | ||
| 90 | |||
| 91 | #define DCMD_INCSRCADDR (1 << 31) /* Source Address Increment Setting. */ | ||
| 92 | #define DCMD_INCTRGADDR (1 << 30) /* Target Address Increment Setting. */ | ||
| 93 | #define DCMD_FLOWSRC (1 << 29) /* Flow Control by the source. */ | ||
| 94 | #define DCMD_FLOWTRG (1 << 28) /* Flow Control by the target. */ | ||
| 95 | #define DCMD_STARTIRQEN (1 << 22) /* Start Interrupt Enable */ | ||
| 96 | #define DCMD_ENDIRQEN (1 << 21) /* End Interrupt Enable */ | ||
| 97 | #define DCMD_ENDIAN (1 << 18) /* Device Endian-ness. */ | ||
| 98 | #define DCMD_BURST8 (1 << 16) /* 8 byte burst */ | ||
| 99 | #define DCMD_BURST16 (2 << 16) /* 16 byte burst */ | ||
| 100 | #define DCMD_BURST32 (3 << 16) /* 32 byte burst */ | ||
| 101 | #define DCMD_WIDTH1 (1 << 14) /* 1 byte width */ | ||
| 102 | #define DCMD_WIDTH2 (2 << 14) /* 2 byte width (HalfWord) */ | ||
| 103 | #define DCMD_WIDTH4 (3 << 14) /* 4 byte width (Word) */ | ||
| 104 | #define DCMD_LENGTH 0x01fff /* length mask (max = 8K - 1) */ | ||
| 105 | |||
| 106 | /* | ||
| 107 | * Descriptor structure for PXA's DMA engine | ||
| 108 | * Note: this structure must always be aligned to a 16-byte boundary. | ||
| 109 | */ | ||
| 110 | |||
| 111 | typedef enum { | ||
| 112 | DMA_PRIO_HIGH = 0, | ||
| 113 | DMA_PRIO_MEDIUM = 1, | ||
| 114 | DMA_PRIO_LOW = 2 | ||
| 115 | } pxa_dma_prio; | ||
| 116 | |||
| 117 | /* | ||
| 118 | * DMA registration | ||
| 119 | */ | ||
| 120 | |||
| 121 | static inline int pxa_request_dma(char *name, | ||
| 122 | pxa_dma_prio prio, | ||
| 123 | void (*irq_handler)(int, void *), | ||
| 124 | void *data) | ||
| 125 | { | ||
| 126 | return -ENODEV; | ||
| 127 | } | ||
| 128 | |||
| 129 | static inline void pxa_free_dma(int dma_ch) | ||
| 130 | { | ||
| 131 | } | ||
| 132 | |||
| 133 | /* | ||
| 134 | * The CE4100 does not have the clk framework implemented and SPI clock can | ||
| 135 | * not be switched on/off or the divider changed. | ||
| 136 | */ | ||
| 137 | static inline void clk_disable(struct clk *clk) | ||
| 138 | { | ||
| 139 | } | ||
| 140 | |||
| 141 | static inline int clk_enable(struct clk *clk) | ||
| 142 | { | ||
| 143 | return 0; | ||
| 144 | } | ||
| 145 | |||
| 146 | static inline unsigned long clk_get_rate(struct clk *clk) | ||
| 147 | { | ||
| 148 | return 3686400; | ||
| 149 | } | ||
| 150 | |||
| 151 | #endif | 63 | #endif |
| 152 | #endif | 64 | #endif |
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h index f62918946d86..30e9c50a5e20 100644 --- a/include/linux/spi/spi.h +++ b/include/linux/spi/spi.h | |||
| @@ -57,6 +57,8 @@ extern struct bus_type spi_bus_type; | |||
| 57 | * @modalias: Name of the driver to use with this device, or an alias | 57 | * @modalias: Name of the driver to use with this device, or an alias |
| 58 | * for that name. This appears in the sysfs "modalias" attribute | 58 | * for that name. This appears in the sysfs "modalias" attribute |
| 59 | * for driver coldplugging, and in uevents used for hotplugging | 59 | * for driver coldplugging, and in uevents used for hotplugging |
| 60 | * @cs_gpio: gpio number of the chipselect line (optional, -EINVAL when | ||
| 61 | * when not using a GPIO line) | ||
| 60 | * | 62 | * |
| 61 | * A @spi_device is used to interchange data between an SPI slave | 63 | * A @spi_device is used to interchange data between an SPI slave |
| 62 | * (usually a discrete chip) and CPU memory. | 64 | * (usually a discrete chip) and CPU memory. |
| @@ -258,6 +260,9 @@ static inline void spi_unregister_driver(struct spi_driver *sdrv) | |||
| 258 | * @unprepare_transfer_hardware: there are currently no more messages on the | 260 | * @unprepare_transfer_hardware: there are currently no more messages on the |
| 259 | * queue so the subsystem notifies the driver that it may relax the | 261 | * queue so the subsystem notifies the driver that it may relax the |
| 260 | * hardware by issuing this call | 262 | * hardware by issuing this call |
| 263 | * @cs_gpios: Array of GPIOs to use as chip select lines; one per CS | ||
| 264 | * number. Any individual value may be -EINVAL for CS lines that | ||
| 265 | * are not GPIOs (driven by the SPI controller itself). | ||
| 261 | * | 266 | * |
| 262 | * Each SPI master controller can communicate with one or more @spi_device | 267 | * Each SPI master controller can communicate with one or more @spi_device |
| 263 | * children. These make a small bus, sharing MOSI, MISO and SCK signals | 268 | * children. These make a small bus, sharing MOSI, MISO and SCK signals |
diff --git a/include/linux/spi/spi_gpio.h b/include/linux/spi/spi_gpio.h index 369b3d7d5b95..1634ce31c06d 100644 --- a/include/linux/spi/spi_gpio.h +++ b/include/linux/spi/spi_gpio.h | |||
| @@ -62,8 +62,8 @@ | |||
| 62 | */ | 62 | */ |
| 63 | struct spi_gpio_platform_data { | 63 | struct spi_gpio_platform_data { |
| 64 | unsigned sck; | 64 | unsigned sck; |
| 65 | unsigned mosi; | 65 | unsigned long mosi; |
| 66 | unsigned miso; | 66 | unsigned long miso; |
| 67 | 67 | ||
| 68 | u16 num_chipselect; | 68 | u16 num_chipselect; |
| 69 | }; | 69 | }; |
diff --git a/include/linux/srcu.h b/include/linux/srcu.h index 6eb691b08358..04f4121a23ae 100644 --- a/include/linux/srcu.h +++ b/include/linux/srcu.h | |||
| @@ -151,30 +151,14 @@ void srcu_barrier(struct srcu_struct *sp); | |||
| 151 | * Checks debug_lockdep_rcu_enabled() to prevent false positives during boot | 151 | * Checks debug_lockdep_rcu_enabled() to prevent false positives during boot |
| 152 | * and while lockdep is disabled. | 152 | * and while lockdep is disabled. |
| 153 | * | 153 | * |
| 154 | * Note that if the CPU is in the idle loop from an RCU point of view | 154 | * Note that SRCU is based on its own statemachine and it doesn't |
| 155 | * (ie: that we are in the section between rcu_idle_enter() and | 155 | * relies on normal RCU, it can be called from the CPU which |
| 156 | * rcu_idle_exit()) then srcu_read_lock_held() returns false even if | 156 | * is in the idle loop from an RCU point of view or offline. |
| 157 | * the CPU did an srcu_read_lock(). The reason for this is that RCU | ||
| 158 | * ignores CPUs that are in such a section, considering these as in | ||
| 159 | * extended quiescent state, so such a CPU is effectively never in an | ||
| 160 | * RCU read-side critical section regardless of what RCU primitives it | ||
| 161 | * invokes. This state of affairs is required --- we need to keep an | ||
| 162 | * RCU-free window in idle where the CPU may possibly enter into low | ||
| 163 | * power mode. This way we can notice an extended quiescent state to | ||
| 164 | * other CPUs that started a grace period. Otherwise we would delay any | ||
| 165 | * grace period as long as we run in the idle task. | ||
| 166 | * | ||
| 167 | * Similarly, we avoid claiming an SRCU read lock held if the current | ||
| 168 | * CPU is offline. | ||
| 169 | */ | 157 | */ |
| 170 | static inline int srcu_read_lock_held(struct srcu_struct *sp) | 158 | static inline int srcu_read_lock_held(struct srcu_struct *sp) |
| 171 | { | 159 | { |
| 172 | if (!debug_lockdep_rcu_enabled()) | 160 | if (!debug_lockdep_rcu_enabled()) |
| 173 | return 1; | 161 | return 1; |
| 174 | if (rcu_is_cpu_idle()) | ||
| 175 | return 0; | ||
| 176 | if (!rcu_lockdep_current_cpu_online()) | ||
| 177 | return 0; | ||
| 178 | return lock_is_held(&sp->dep_map); | 162 | return lock_is_held(&sp->dep_map); |
| 179 | } | 163 | } |
| 180 | 164 | ||
| @@ -236,8 +220,6 @@ static inline int srcu_read_lock(struct srcu_struct *sp) __acquires(sp) | |||
| 236 | int retval = __srcu_read_lock(sp); | 220 | int retval = __srcu_read_lock(sp); |
| 237 | 221 | ||
| 238 | rcu_lock_acquire(&(sp)->dep_map); | 222 | rcu_lock_acquire(&(sp)->dep_map); |
| 239 | rcu_lockdep_assert(!rcu_is_cpu_idle(), | ||
| 240 | "srcu_read_lock() used illegally while idle"); | ||
| 241 | return retval; | 223 | return retval; |
| 242 | } | 224 | } |
| 243 | 225 | ||
| @@ -251,8 +233,6 @@ static inline int srcu_read_lock(struct srcu_struct *sp) __acquires(sp) | |||
| 251 | static inline void srcu_read_unlock(struct srcu_struct *sp, int idx) | 233 | static inline void srcu_read_unlock(struct srcu_struct *sp, int idx) |
| 252 | __releases(sp) | 234 | __releases(sp) |
| 253 | { | 235 | { |
| 254 | rcu_lockdep_assert(!rcu_is_cpu_idle(), | ||
| 255 | "srcu_read_unlock() used illegally while idle"); | ||
| 256 | rcu_lock_release(&(sp)->dep_map); | 236 | rcu_lock_release(&(sp)->dep_map); |
| 257 | __srcu_read_unlock(sp, idx); | 237 | __srcu_read_unlock(sp, idx); |
| 258 | } | 238 | } |
diff --git a/include/linux/ssb/ssb_driver_gige.h b/include/linux/ssb/ssb_driver_gige.h index 6d92a92573df..86a12b0cb239 100644 --- a/include/linux/ssb/ssb_driver_gige.h +++ b/include/linux/ssb/ssb_driver_gige.h | |||
| @@ -97,21 +97,16 @@ static inline bool ssb_gige_must_flush_posted_writes(struct pci_dev *pdev) | |||
| 97 | return 0; | 97 | return 0; |
| 98 | } | 98 | } |
| 99 | 99 | ||
| 100 | #ifdef CONFIG_BCM47XX | ||
| 101 | #include <bcm47xx_nvram.h> | ||
| 102 | /* Get the device MAC address */ | 100 | /* Get the device MAC address */ |
| 103 | static inline void ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr) | 101 | static inline int ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr) |
| 104 | { | ||
| 105 | char buf[20]; | ||
| 106 | if (bcm47xx_nvram_getenv("et0macaddr", buf, sizeof(buf)) < 0) | ||
| 107 | return; | ||
| 108 | bcm47xx_nvram_parse_macaddr(buf, macaddr); | ||
| 109 | } | ||
| 110 | #else | ||
| 111 | static inline void ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr) | ||
| 112 | { | 102 | { |
| 103 | struct ssb_gige *dev = pdev_to_ssb_gige(pdev); | ||
| 104 | if (!dev) | ||
| 105 | return -ENODEV; | ||
| 106 | |||
| 107 | memcpy(macaddr, dev->dev->bus->sprom.et0mac, 6); | ||
| 108 | return 0; | ||
| 113 | } | 109 | } |
| 114 | #endif | ||
| 115 | 110 | ||
| 116 | extern int ssb_gige_pcibios_plat_dev_init(struct ssb_device *sdev, | 111 | extern int ssb_gige_pcibios_plat_dev_init(struct ssb_device *sdev, |
| 117 | struct pci_dev *pdev); | 112 | struct pci_dev *pdev); |
| @@ -175,6 +170,10 @@ static inline bool ssb_gige_must_flush_posted_writes(struct pci_dev *pdev) | |||
| 175 | { | 170 | { |
| 176 | return 0; | 171 | return 0; |
| 177 | } | 172 | } |
| 173 | static inline int ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr) | ||
| 174 | { | ||
| 175 | return -ENODEV; | ||
| 176 | } | ||
| 178 | 177 | ||
| 179 | #endif /* CONFIG_SSB_DRIVER_GIGE */ | 178 | #endif /* CONFIG_SSB_DRIVER_GIGE */ |
| 180 | #endif /* LINUX_SSB_DRIVER_GIGE_H_ */ | 179 | #endif /* LINUX_SSB_DRIVER_GIGE_H_ */ |
diff --git a/include/linux/ssb/ssb_driver_mips.h b/include/linux/ssb/ssb_driver_mips.h index 07a9c7a2e088..afe79d40a99e 100644 --- a/include/linux/ssb/ssb_driver_mips.h +++ b/include/linux/ssb/ssb_driver_mips.h | |||
| @@ -45,6 +45,11 @@ void ssb_mipscore_init(struct ssb_mipscore *mcore) | |||
| 45 | { | 45 | { |
| 46 | } | 46 | } |
| 47 | 47 | ||
| 48 | static inline unsigned int ssb_mips_irq(struct ssb_device *dev) | ||
| 49 | { | ||
| 50 | return 0; | ||
| 51 | } | ||
| 52 | |||
| 48 | #endif /* CONFIG_SSB_DRIVER_MIPS */ | 53 | #endif /* CONFIG_SSB_DRIVER_MIPS */ |
| 49 | 54 | ||
| 50 | #endif /* LINUX_SSB_MIPSCORE_H_ */ | 55 | #endif /* LINUX_SSB_MIPSCORE_H_ */ |
diff --git a/include/linux/suspend.h b/include/linux/suspend.h index 0c808d7fa579..d4e3f16d5e89 100644 --- a/include/linux/suspend.h +++ b/include/linux/suspend.h | |||
| @@ -34,8 +34,10 @@ static inline void pm_restore_console(void) | |||
| 34 | typedef int __bitwise suspend_state_t; | 34 | typedef int __bitwise suspend_state_t; |
| 35 | 35 | ||
| 36 | #define PM_SUSPEND_ON ((__force suspend_state_t) 0) | 36 | #define PM_SUSPEND_ON ((__force suspend_state_t) 0) |
| 37 | #define PM_SUSPEND_STANDBY ((__force suspend_state_t) 1) | 37 | #define PM_SUSPEND_FREEZE ((__force suspend_state_t) 1) |
| 38 | #define PM_SUSPEND_STANDBY ((__force suspend_state_t) 2) | ||
| 38 | #define PM_SUSPEND_MEM ((__force suspend_state_t) 3) | 39 | #define PM_SUSPEND_MEM ((__force suspend_state_t) 3) |
| 40 | #define PM_SUSPEND_MIN PM_SUSPEND_FREEZE | ||
| 39 | #define PM_SUSPEND_MAX ((__force suspend_state_t) 4) | 41 | #define PM_SUSPEND_MAX ((__force suspend_state_t) 4) |
| 40 | 42 | ||
| 41 | enum suspend_stat_step { | 43 | enum suspend_stat_step { |
| @@ -192,6 +194,7 @@ struct platform_suspend_ops { | |||
| 192 | */ | 194 | */ |
| 193 | extern void suspend_set_ops(const struct platform_suspend_ops *ops); | 195 | extern void suspend_set_ops(const struct platform_suspend_ops *ops); |
| 194 | extern int suspend_valid_only_mem(suspend_state_t state); | 196 | extern int suspend_valid_only_mem(suspend_state_t state); |
| 197 | extern void freeze_wake(void); | ||
| 195 | 198 | ||
| 196 | /** | 199 | /** |
| 197 | * arch_suspend_disable_irqs - disable IRQs for suspend | 200 | * arch_suspend_disable_irqs - disable IRQs for suspend |
| @@ -217,6 +220,7 @@ extern int pm_suspend(suspend_state_t state); | |||
| 217 | 220 | ||
| 218 | static inline void suspend_set_ops(const struct platform_suspend_ops *ops) {} | 221 | static inline void suspend_set_ops(const struct platform_suspend_ops *ops) {} |
| 219 | static inline int pm_suspend(suspend_state_t state) { return -ENOSYS; } | 222 | static inline int pm_suspend(suspend_state_t state) { return -ENOSYS; } |
| 223 | static inline void freeze_wake(void) {} | ||
| 220 | #endif /* !CONFIG_SUSPEND */ | 224 | #endif /* !CONFIG_SUSPEND */ |
| 221 | 225 | ||
| 222 | /* struct pbe is used for creating lists of pages that should be restored | 226 | /* struct pbe is used for creating lists of pages that should be restored |
diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h index 381f06db2fe5..e2cee22f578a 100644 --- a/include/linux/sysfs.h +++ b/include/linux/sysfs.h | |||
| @@ -181,6 +181,10 @@ int sysfs_merge_group(struct kobject *kobj, | |||
| 181 | const struct attribute_group *grp); | 181 | const struct attribute_group *grp); |
| 182 | void sysfs_unmerge_group(struct kobject *kobj, | 182 | void sysfs_unmerge_group(struct kobject *kobj, |
| 183 | const struct attribute_group *grp); | 183 | const struct attribute_group *grp); |
| 184 | int sysfs_add_link_to_group(struct kobject *kobj, const char *group_name, | ||
| 185 | struct kobject *target, const char *link_name); | ||
| 186 | void sysfs_remove_link_from_group(struct kobject *kobj, const char *group_name, | ||
| 187 | const char *link_name); | ||
| 184 | 188 | ||
| 185 | void sysfs_notify(struct kobject *kobj, const char *dir, const char *attr); | 189 | void sysfs_notify(struct kobject *kobj, const char *dir, const char *attr); |
| 186 | void sysfs_notify_dirent(struct sysfs_dirent *sd); | 190 | void sysfs_notify_dirent(struct sysfs_dirent *sd); |
| @@ -326,6 +330,18 @@ static inline void sysfs_unmerge_group(struct kobject *kobj, | |||
| 326 | { | 330 | { |
| 327 | } | 331 | } |
| 328 | 332 | ||
| 333 | static inline int sysfs_add_link_to_group(struct kobject *kobj, | ||
| 334 | const char *group_name, struct kobject *target, | ||
| 335 | const char *link_name) | ||
| 336 | { | ||
| 337 | return 0; | ||
| 338 | } | ||
| 339 | |||
| 340 | static inline void sysfs_remove_link_from_group(struct kobject *kobj, | ||
| 341 | const char *group_name, const char *link_name) | ||
| 342 | { | ||
| 343 | } | ||
| 344 | |||
| 329 | static inline void sysfs_notify(struct kobject *kobj, const char *dir, | 345 | static inline void sysfs_notify(struct kobject *kobj, const char *dir, |
| 330 | const char *attr) | 346 | const char *attr) |
| 331 | { | 347 | { |
diff --git a/include/linux/tcp.h b/include/linux/tcp.h index 4e1d2283e3cc..f28408c07dc2 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h | |||
| @@ -162,6 +162,8 @@ struct tcp_sock { | |||
| 162 | u32 rcv_tstamp; /* timestamp of last received ACK (for keepalives) */ | 162 | u32 rcv_tstamp; /* timestamp of last received ACK (for keepalives) */ |
| 163 | u32 lsndtime; /* timestamp of last sent data packet (for restart window) */ | 163 | u32 lsndtime; /* timestamp of last sent data packet (for restart window) */ |
| 164 | 164 | ||
| 165 | u32 tsoffset; /* timestamp offset */ | ||
| 166 | |||
| 165 | struct list_head tsq_node; /* anchor in tsq_tasklet.head list */ | 167 | struct list_head tsq_node; /* anchor in tsq_tasklet.head list */ |
| 166 | unsigned long tsq_flags; | 168 | unsigned long tsq_flags; |
| 167 | 169 | ||
| @@ -246,7 +248,6 @@ struct tcp_sock { | |||
| 246 | u32 sacked_out; /* SACK'd packets */ | 248 | u32 sacked_out; /* SACK'd packets */ |
| 247 | u32 fackets_out; /* FACK'd packets */ | 249 | u32 fackets_out; /* FACK'd packets */ |
| 248 | u32 tso_deferred; | 250 | u32 tso_deferred; |
| 249 | u32 bytes_acked; /* Appropriate Byte Counting - RFC3465 */ | ||
| 250 | 251 | ||
| 251 | /* from STCP, retrans queue hinting */ | 252 | /* from STCP, retrans queue hinting */ |
| 252 | struct sk_buff* lost_skb_hint; | 253 | struct sk_buff* lost_skb_hint; |
| @@ -354,6 +355,7 @@ struct tcp_timewait_sock { | |||
| 354 | u32 tw_rcv_nxt; | 355 | u32 tw_rcv_nxt; |
| 355 | u32 tw_snd_nxt; | 356 | u32 tw_snd_nxt; |
| 356 | u32 tw_rcv_wnd; | 357 | u32 tw_rcv_wnd; |
| 358 | u32 tw_ts_offset; | ||
| 357 | u32 tw_ts_recent; | 359 | u32 tw_ts_recent; |
| 358 | long tw_ts_recent_stamp; | 360 | long tw_ts_recent_stamp; |
| 359 | #ifdef CONFIG_TCP_MD5SIG | 361 | #ifdef CONFIG_TCP_MD5SIG |
diff --git a/include/linux/tick.h b/include/linux/tick.h index 1a6567b48492..553272e6af55 100644 --- a/include/linux/tick.h +++ b/include/linux/tick.h | |||
| @@ -8,6 +8,8 @@ | |||
| 8 | 8 | ||
| 9 | #include <linux/clockchips.h> | 9 | #include <linux/clockchips.h> |
| 10 | #include <linux/irqflags.h> | 10 | #include <linux/irqflags.h> |
| 11 | #include <linux/percpu.h> | ||
| 12 | #include <linux/hrtimer.h> | ||
| 11 | 13 | ||
| 12 | #ifdef CONFIG_GENERIC_CLOCKEVENTS | 14 | #ifdef CONFIG_GENERIC_CLOCKEVENTS |
| 13 | 15 | ||
| @@ -122,13 +124,26 @@ static inline int tick_oneshot_mode_active(void) { return 0; } | |||
| 122 | #endif /* !CONFIG_GENERIC_CLOCKEVENTS */ | 124 | #endif /* !CONFIG_GENERIC_CLOCKEVENTS */ |
| 123 | 125 | ||
| 124 | # ifdef CONFIG_NO_HZ | 126 | # ifdef CONFIG_NO_HZ |
| 127 | DECLARE_PER_CPU(struct tick_sched, tick_cpu_sched); | ||
| 128 | |||
| 129 | static inline int tick_nohz_tick_stopped(void) | ||
| 130 | { | ||
| 131 | return __this_cpu_read(tick_cpu_sched.tick_stopped); | ||
| 132 | } | ||
| 133 | |||
| 125 | extern void tick_nohz_idle_enter(void); | 134 | extern void tick_nohz_idle_enter(void); |
| 126 | extern void tick_nohz_idle_exit(void); | 135 | extern void tick_nohz_idle_exit(void); |
| 127 | extern void tick_nohz_irq_exit(void); | 136 | extern void tick_nohz_irq_exit(void); |
| 128 | extern ktime_t tick_nohz_get_sleep_length(void); | 137 | extern ktime_t tick_nohz_get_sleep_length(void); |
| 129 | extern u64 get_cpu_idle_time_us(int cpu, u64 *last_update_time); | 138 | extern u64 get_cpu_idle_time_us(int cpu, u64 *last_update_time); |
| 130 | extern u64 get_cpu_iowait_time_us(int cpu, u64 *last_update_time); | 139 | extern u64 get_cpu_iowait_time_us(int cpu, u64 *last_update_time); |
| 131 | # else | 140 | |
| 141 | # else /* !CONFIG_NO_HZ */ | ||
| 142 | static inline int tick_nohz_tick_stopped(void) | ||
| 143 | { | ||
| 144 | return 0; | ||
| 145 | } | ||
| 146 | |||
| 132 | static inline void tick_nohz_idle_enter(void) { } | 147 | static inline void tick_nohz_idle_enter(void) { } |
| 133 | static inline void tick_nohz_idle_exit(void) { } | 148 | static inline void tick_nohz_idle_exit(void) { } |
| 134 | 149 | ||
diff --git a/include/linux/time.h b/include/linux/time.h index 4d358e9d10f1..a3ab6a814a9c 100644 --- a/include/linux/time.h +++ b/include/linux/time.h | |||
| @@ -115,8 +115,20 @@ static inline bool timespec_valid_strict(const struct timespec *ts) | |||
| 115 | return true; | 115 | return true; |
| 116 | } | 116 | } |
| 117 | 117 | ||
| 118 | extern bool persistent_clock_exist; | ||
| 119 | |||
| 120 | #ifdef ALWAYS_USE_PERSISTENT_CLOCK | ||
| 121 | #define has_persistent_clock() true | ||
| 122 | #else | ||
| 123 | static inline bool has_persistent_clock(void) | ||
| 124 | { | ||
| 125 | return persistent_clock_exist; | ||
| 126 | } | ||
| 127 | #endif | ||
| 128 | |||
| 118 | extern void read_persistent_clock(struct timespec *ts); | 129 | extern void read_persistent_clock(struct timespec *ts); |
| 119 | extern void read_boot_clock(struct timespec *ts); | 130 | extern void read_boot_clock(struct timespec *ts); |
| 131 | extern int persistent_clock_is_local; | ||
| 120 | extern int update_persistent_clock(struct timespec now); | 132 | extern int update_persistent_clock(struct timespec now); |
| 121 | void timekeeping_init(void); | 133 | void timekeeping_init(void); |
| 122 | extern int timekeeping_suspended; | 134 | extern int timekeeping_suspended; |
| @@ -158,6 +170,7 @@ extern int do_setitimer(int which, struct itimerval *value, | |||
| 158 | struct itimerval *ovalue); | 170 | struct itimerval *ovalue); |
| 159 | extern unsigned int alarm_setitimer(unsigned int seconds); | 171 | extern unsigned int alarm_setitimer(unsigned int seconds); |
| 160 | extern int do_getitimer(int which, struct itimerval *value); | 172 | extern int do_getitimer(int which, struct itimerval *value); |
| 173 | extern int __getnstimeofday(struct timespec *tv); | ||
| 161 | extern void getnstimeofday(struct timespec *tv); | 174 | extern void getnstimeofday(struct timespec *tv); |
| 162 | extern void getrawmonotonic(struct timespec *ts); | 175 | extern void getrawmonotonic(struct timespec *ts); |
| 163 | extern void getnstime_raw_and_real(struct timespec *ts_raw, | 176 | extern void getnstime_raw_and_real(struct timespec *ts_raw, |
diff --git a/include/linux/tsacct_kern.h b/include/linux/tsacct_kern.h index 44893e5ec8f7..3251965bf4cc 100644 --- a/include/linux/tsacct_kern.h +++ b/include/linux/tsacct_kern.h | |||
| @@ -23,12 +23,15 @@ static inline void bacct_add_tsk(struct user_namespace *user_ns, | |||
| 23 | #ifdef CONFIG_TASK_XACCT | 23 | #ifdef CONFIG_TASK_XACCT |
| 24 | extern void xacct_add_tsk(struct taskstats *stats, struct task_struct *p); | 24 | extern void xacct_add_tsk(struct taskstats *stats, struct task_struct *p); |
| 25 | extern void acct_update_integrals(struct task_struct *tsk); | 25 | extern void acct_update_integrals(struct task_struct *tsk); |
| 26 | extern void acct_account_cputime(struct task_struct *tsk); | ||
| 26 | extern void acct_clear_integrals(struct task_struct *tsk); | 27 | extern void acct_clear_integrals(struct task_struct *tsk); |
| 27 | #else | 28 | #else |
| 28 | static inline void xacct_add_tsk(struct taskstats *stats, struct task_struct *p) | 29 | static inline void xacct_add_tsk(struct taskstats *stats, struct task_struct *p) |
| 29 | {} | 30 | {} |
| 30 | static inline void acct_update_integrals(struct task_struct *tsk) | 31 | static inline void acct_update_integrals(struct task_struct *tsk) |
| 31 | {} | 32 | {} |
| 33 | static inline void acct_account_cputime(struct task_struct *tsk) | ||
| 34 | {} | ||
| 32 | static inline void acct_clear_integrals(struct task_struct *tsk) | 35 | static inline void acct_clear_integrals(struct task_struct *tsk) |
| 33 | {} | 36 | {} |
| 34 | #endif /* CONFIG_TASK_XACCT */ | 37 | #endif /* CONFIG_TASK_XACCT */ |
diff --git a/include/linux/uprobes.h b/include/linux/uprobes.h index 4f628a6fc5b4..02b83db8e2c5 100644 --- a/include/linux/uprobes.h +++ b/include/linux/uprobes.h | |||
| @@ -35,13 +35,20 @@ struct inode; | |||
| 35 | # include <asm/uprobes.h> | 35 | # include <asm/uprobes.h> |
| 36 | #endif | 36 | #endif |
| 37 | 37 | ||
| 38 | #define UPROBE_HANDLER_REMOVE 1 | ||
| 39 | #define UPROBE_HANDLER_MASK 1 | ||
| 40 | |||
| 41 | enum uprobe_filter_ctx { | ||
| 42 | UPROBE_FILTER_REGISTER, | ||
| 43 | UPROBE_FILTER_UNREGISTER, | ||
| 44 | UPROBE_FILTER_MMAP, | ||
| 45 | }; | ||
| 46 | |||
| 38 | struct uprobe_consumer { | 47 | struct uprobe_consumer { |
| 39 | int (*handler)(struct uprobe_consumer *self, struct pt_regs *regs); | 48 | int (*handler)(struct uprobe_consumer *self, struct pt_regs *regs); |
| 40 | /* | 49 | bool (*filter)(struct uprobe_consumer *self, |
| 41 | * filter is optional; If a filter exists, handler is run | 50 | enum uprobe_filter_ctx ctx, |
| 42 | * if and only if filter returns true. | 51 | struct mm_struct *mm); |
| 43 | */ | ||
| 44 | bool (*filter)(struct uprobe_consumer *self, struct task_struct *task); | ||
| 45 | 52 | ||
| 46 | struct uprobe_consumer *next; | 53 | struct uprobe_consumer *next; |
| 47 | }; | 54 | }; |
| @@ -94,6 +101,7 @@ extern int __weak set_swbp(struct arch_uprobe *aup, struct mm_struct *mm, unsign | |||
| 94 | extern int __weak set_orig_insn(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr); | 101 | extern int __weak set_orig_insn(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr); |
| 95 | extern bool __weak is_swbp_insn(uprobe_opcode_t *insn); | 102 | extern bool __weak is_swbp_insn(uprobe_opcode_t *insn); |
| 96 | extern int uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); | 103 | extern int uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); |
| 104 | extern int uprobe_apply(struct inode *inode, loff_t offset, struct uprobe_consumer *uc, bool); | ||
| 97 | extern void uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); | 105 | extern void uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); |
| 98 | extern int uprobe_mmap(struct vm_area_struct *vma); | 106 | extern int uprobe_mmap(struct vm_area_struct *vma); |
| 99 | extern void uprobe_munmap(struct vm_area_struct *vma, unsigned long start, unsigned long end); | 107 | extern void uprobe_munmap(struct vm_area_struct *vma, unsigned long start, unsigned long end); |
| @@ -117,6 +125,11 @@ uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc) | |||
| 117 | { | 125 | { |
| 118 | return -ENOSYS; | 126 | return -ENOSYS; |
| 119 | } | 127 | } |
| 128 | static inline int | ||
| 129 | uprobe_apply(struct inode *inode, loff_t offset, struct uprobe_consumer *uc, bool add) | ||
| 130 | { | ||
| 131 | return -ENOSYS; | ||
| 132 | } | ||
| 120 | static inline void | 133 | static inline void |
| 121 | uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consumer *uc) | 134 | uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consumer *uc) |
| 122 | { | 135 | { |
diff --git a/include/linux/vtime.h b/include/linux/vtime.h index ae30ab58431a..71a5782d8c59 100644 --- a/include/linux/vtime.h +++ b/include/linux/vtime.h | |||
| @@ -6,15 +6,46 @@ struct task_struct; | |||
| 6 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | 6 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING |
| 7 | extern void vtime_task_switch(struct task_struct *prev); | 7 | extern void vtime_task_switch(struct task_struct *prev); |
| 8 | extern void vtime_account_system(struct task_struct *tsk); | 8 | extern void vtime_account_system(struct task_struct *tsk); |
| 9 | extern void vtime_account_system_irqsafe(struct task_struct *tsk); | ||
| 10 | extern void vtime_account_idle(struct task_struct *tsk); | 9 | extern void vtime_account_idle(struct task_struct *tsk); |
| 11 | extern void vtime_account_user(struct task_struct *tsk); | 10 | extern void vtime_account_user(struct task_struct *tsk); |
| 12 | extern void vtime_account(struct task_struct *tsk); | 11 | extern void vtime_account_irq_enter(struct task_struct *tsk); |
| 13 | #else | 12 | |
| 13 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE | ||
| 14 | static inline bool vtime_accounting_enabled(void) { return true; } | ||
| 15 | #endif | ||
| 16 | |||
| 17 | #else /* !CONFIG_VIRT_CPU_ACCOUNTING */ | ||
| 18 | |||
| 14 | static inline void vtime_task_switch(struct task_struct *prev) { } | 19 | static inline void vtime_task_switch(struct task_struct *prev) { } |
| 15 | static inline void vtime_account_system(struct task_struct *tsk) { } | 20 | static inline void vtime_account_system(struct task_struct *tsk) { } |
| 16 | static inline void vtime_account_system_irqsafe(struct task_struct *tsk) { } | 21 | static inline void vtime_account_user(struct task_struct *tsk) { } |
| 17 | static inline void vtime_account(struct task_struct *tsk) { } | 22 | static inline void vtime_account_irq_enter(struct task_struct *tsk) { } |
| 23 | static inline bool vtime_accounting_enabled(void) { return false; } | ||
| 24 | #endif | ||
| 25 | |||
| 26 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN | ||
| 27 | extern void arch_vtime_task_switch(struct task_struct *tsk); | ||
| 28 | extern void vtime_account_irq_exit(struct task_struct *tsk); | ||
| 29 | extern bool vtime_accounting_enabled(void); | ||
| 30 | extern void vtime_user_enter(struct task_struct *tsk); | ||
| 31 | static inline void vtime_user_exit(struct task_struct *tsk) | ||
| 32 | { | ||
| 33 | vtime_account_user(tsk); | ||
| 34 | } | ||
| 35 | extern void vtime_guest_enter(struct task_struct *tsk); | ||
| 36 | extern void vtime_guest_exit(struct task_struct *tsk); | ||
| 37 | extern void vtime_init_idle(struct task_struct *tsk); | ||
| 38 | #else | ||
| 39 | static inline void vtime_account_irq_exit(struct task_struct *tsk) | ||
| 40 | { | ||
| 41 | /* On hard|softirq exit we always account to hard|softirq cputime */ | ||
| 42 | vtime_account_system(tsk); | ||
| 43 | } | ||
| 44 | static inline void vtime_user_enter(struct task_struct *tsk) { } | ||
| 45 | static inline void vtime_user_exit(struct task_struct *tsk) { } | ||
| 46 | static inline void vtime_guest_enter(struct task_struct *tsk) { } | ||
| 47 | static inline void vtime_guest_exit(struct task_struct *tsk) { } | ||
| 48 | static inline void vtime_init_idle(struct task_struct *tsk) { } | ||
| 18 | #endif | 49 | #endif |
| 19 | 50 | ||
| 20 | #ifdef CONFIG_IRQ_TIME_ACCOUNTING | 51 | #ifdef CONFIG_IRQ_TIME_ACCOUNTING |
| @@ -23,25 +54,15 @@ extern void irqtime_account_irq(struct task_struct *tsk); | |||
| 23 | static inline void irqtime_account_irq(struct task_struct *tsk) { } | 54 | static inline void irqtime_account_irq(struct task_struct *tsk) { } |
| 24 | #endif | 55 | #endif |
| 25 | 56 | ||
| 26 | static inline void vtime_account_irq_enter(struct task_struct *tsk) | 57 | static inline void account_irq_enter_time(struct task_struct *tsk) |
| 27 | { | 58 | { |
| 28 | /* | 59 | vtime_account_irq_enter(tsk); |
| 29 | * Hardirq can interrupt idle task anytime. So we need vtime_account() | ||
| 30 | * that performs the idle check in CONFIG_VIRT_CPU_ACCOUNTING. | ||
| 31 | * Softirq can also interrupt idle task directly if it calls | ||
| 32 | * local_bh_enable(). Such case probably don't exist but we never know. | ||
| 33 | * Ksoftirqd is not concerned because idle time is flushed on context | ||
| 34 | * switch. Softirqs in the end of hardirqs are also not a problem because | ||
| 35 | * the idle time is flushed on hardirq time already. | ||
| 36 | */ | ||
| 37 | vtime_account(tsk); | ||
| 38 | irqtime_account_irq(tsk); | 60 | irqtime_account_irq(tsk); |
| 39 | } | 61 | } |
| 40 | 62 | ||
| 41 | static inline void vtime_account_irq_exit(struct task_struct *tsk) | 63 | static inline void account_irq_exit_time(struct task_struct *tsk) |
| 42 | { | 64 | { |
| 43 | /* On hard|softirq exit we always account to hard|softirq cputime */ | 65 | vtime_account_irq_exit(tsk); |
| 44 | vtime_account_system(tsk); | ||
| 45 | irqtime_account_irq(tsk); | 66 | irqtime_account_irq(tsk); |
| 46 | } | 67 | } |
| 47 | 68 | ||
diff --git a/include/linux/wanrouter.h b/include/linux/wanrouter.h index cec4b4159767..8198a63cf459 100644 --- a/include/linux/wanrouter.h +++ b/include/linux/wanrouter.h | |||
| @@ -1,129 +1,10 @@ | |||
| 1 | /***************************************************************************** | 1 | /* |
| 2 | * wanrouter.h Definitions for the WAN Multiprotocol Router Module. | 2 | * wanrouter.h Legacy declarations kept around until X25 is removed |
| 3 | * This module provides API and common services for WAN Link | 3 | */ |
| 4 | * Drivers and is completely hardware-independent. | 4 | |
| 5 | * | ||
| 6 | * Author: Nenad Corbic <ncorbic@sangoma.com> | ||
| 7 | * Gideon Hack | ||
| 8 | * Additions: Arnaldo Melo | ||
| 9 | * | ||
| 10 | * Copyright: (c) 1995-2000 Sangoma Technologies Inc. | ||
| 11 | * | ||
| 12 | * This program is free software; you can redistribute it and/or | ||
| 13 | * modify it under the terms of the GNU General Public License | ||
| 14 | * as published by the Free Software Foundation; either version | ||
| 15 | * 2 of the License, or (at your option) any later version. | ||
| 16 | * ============================================================================ | ||
| 17 | * Jul 21, 2000 Nenad Corbic Added WAN_FT1_READY State | ||
| 18 | * Feb 24, 2000 Nenad Corbic Added support for socket based x25api | ||
| 19 | * Jan 28, 2000 Nenad Corbic Added support for the ASYNC protocol. | ||
| 20 | * Oct 04, 1999 Nenad Corbic Updated for 2.1.0 release | ||
| 21 | * Jun 02, 1999 Gideon Hack Added support for the S514 adapter. | ||
| 22 | * May 23, 1999 Arnaldo Melo Added local_addr to wanif_conf_t | ||
| 23 | * WAN_DISCONNECTING state added | ||
| 24 | * Jul 20, 1998 David Fong Added Inverse ARP options to 'wanif_conf_t' | ||
| 25 | * Jun 12, 1998 David Fong Added Cisco HDLC support. | ||
| 26 | * Dec 16, 1997 Jaspreet Singh Moved 'enable_IPX' and 'network_number' to | ||
| 27 | * 'wanif_conf_t' | ||
| 28 | * Dec 05, 1997 Jaspreet Singh Added 'pap', 'chap' to 'wanif_conf_t' | ||
| 29 | * Added 'authenticator' to 'wan_ppp_conf_t' | ||
| 30 | * Nov 06, 1997 Jaspreet Singh Changed Router Driver version to 1.1 from 1.0 | ||
| 31 | * Oct 20, 1997 Jaspreet Singh Added 'cir','bc','be' and 'mc' to 'wanif_conf_t' | ||
| 32 | * Added 'enable_IPX' and 'network_number' to | ||
| 33 | * 'wan_device_t'. Also added defines for | ||
| 34 | * UDP PACKET TYPE, Interrupt test, critical values | ||
| 35 | * for RACE conditions. | ||
| 36 | * Oct 05, 1997 Jaspreet Singh Added 'dlci_num' and 'dlci[100]' to | ||
| 37 | * 'wan_fr_conf_t' to configure a list of dlci(s) | ||
| 38 | * for a NODE | ||
| 39 | * Jul 07, 1997 Jaspreet Singh Added 'ttl' to 'wandev_conf_t' & 'wan_device_t' | ||
| 40 | * May 29, 1997 Jaspreet Singh Added 'tx_int_enabled' to 'wan_device_t' | ||
| 41 | * May 21, 1997 Jaspreet Singh Added 'udp_port' to 'wan_device_t' | ||
| 42 | * Apr 25, 1997 Farhan Thawar Added 'udp_port' to 'wandev_conf_t' | ||
| 43 | * Jan 16, 1997 Gene Kozin router_devlist made public | ||
| 44 | * Jan 02, 1997 Gene Kozin Initial version (based on wanpipe.h). | ||
| 45 | *****************************************************************************/ | ||
| 46 | #ifndef _ROUTER_H | 5 | #ifndef _ROUTER_H |
| 47 | #define _ROUTER_H | 6 | #define _ROUTER_H |
| 48 | 7 | ||
| 49 | #include <uapi/linux/wanrouter.h> | 8 | #include <uapi/linux/wanrouter.h> |
| 50 | 9 | ||
| 51 | /****** Kernel Interface ****************************************************/ | ||
| 52 | |||
| 53 | #include <linux/fs.h> /* support for device drivers */ | ||
| 54 | #include <linux/proc_fs.h> /* proc filesystem pragmatics */ | ||
| 55 | #include <linux/netdevice.h> /* support for network drivers */ | ||
| 56 | #include <linux/spinlock.h> /* Support for SMP Locking */ | ||
| 57 | |||
| 58 | /*---------------------------------------------------------------------------- | ||
| 59 | * WAN device data space. | ||
| 60 | */ | ||
| 61 | struct wan_device { | ||
| 62 | unsigned magic; /* magic number */ | ||
| 63 | char* name; /* -> WAN device name (ASCIIZ) */ | ||
| 64 | void* private; /* -> driver private data */ | ||
| 65 | unsigned config_id; /* Configuration ID */ | ||
| 66 | /****** hardware configuration ******/ | ||
| 67 | unsigned ioport; /* adapter I/O port base #1 */ | ||
| 68 | char S514_cpu_no[1]; /* PCI CPU Number */ | ||
| 69 | unsigned char S514_slot_no; /* PCI Slot Number */ | ||
| 70 | unsigned long maddr; /* dual-port memory address */ | ||
| 71 | unsigned msize; /* dual-port memory size */ | ||
| 72 | int irq; /* interrupt request level */ | ||
| 73 | int dma; /* DMA request level */ | ||
| 74 | unsigned bps; /* data transfer rate */ | ||
| 75 | unsigned mtu; /* max physical transmit unit size */ | ||
| 76 | unsigned udp_port; /* UDP port for management */ | ||
| 77 | unsigned char ttl; /* Time To Live for UDP security */ | ||
| 78 | unsigned enable_tx_int; /* Transmit Interrupt enabled or not */ | ||
| 79 | char interface; /* RS-232/V.35, etc. */ | ||
| 80 | char clocking; /* external/internal */ | ||
| 81 | char line_coding; /* NRZ/NRZI/FM0/FM1, etc. */ | ||
| 82 | char station; /* DTE/DCE, primary/secondary, etc. */ | ||
| 83 | char connection; /* permanent/switched/on-demand */ | ||
| 84 | char signalling; /* Signalling RS232 or V35 */ | ||
| 85 | char read_mode; /* read mode: Polling or interrupt */ | ||
| 86 | char new_if_cnt; /* Number of interfaces per wanpipe */ | ||
| 87 | char del_if_cnt; /* Number of times del_if() gets called */ | ||
| 88 | unsigned char piggyback; /* Piggibacking a port */ | ||
| 89 | unsigned hw_opt[4]; /* other hardware options */ | ||
| 90 | /****** status and statistics *******/ | ||
| 91 | char state; /* device state */ | ||
| 92 | char api_status; /* device api status */ | ||
| 93 | struct net_device_stats stats; /* interface statistics */ | ||
| 94 | unsigned reserved[16]; /* reserved for future use */ | ||
| 95 | unsigned long critical; /* critical section flag */ | ||
| 96 | spinlock_t lock; /* Support for SMP Locking */ | ||
| 97 | |||
| 98 | /****** device management methods ***/ | ||
| 99 | int (*setup) (struct wan_device *wandev, wandev_conf_t *conf); | ||
| 100 | int (*shutdown) (struct wan_device *wandev); | ||
| 101 | int (*update) (struct wan_device *wandev); | ||
| 102 | int (*ioctl) (struct wan_device *wandev, unsigned cmd, | ||
| 103 | unsigned long arg); | ||
| 104 | int (*new_if)(struct wan_device *wandev, struct net_device *dev, | ||
| 105 | wanif_conf_t *conf); | ||
| 106 | int (*del_if)(struct wan_device *wandev, struct net_device *dev); | ||
| 107 | /****** maintained by the router ****/ | ||
| 108 | struct wan_device* next; /* -> next device */ | ||
| 109 | struct net_device* dev; /* list of network interfaces */ | ||
| 110 | unsigned ndev; /* number of interfaces */ | ||
| 111 | struct proc_dir_entry *dent; /* proc filesystem entry */ | ||
| 112 | }; | ||
| 113 | |||
| 114 | /* Public functions available for device drivers */ | ||
| 115 | extern int register_wan_device(struct wan_device *wandev); | ||
| 116 | extern int unregister_wan_device(char *name); | ||
| 117 | |||
| 118 | /* Proc interface functions. These must not be called by the drivers! */ | ||
| 119 | extern int wanrouter_proc_init(void); | ||
| 120 | extern void wanrouter_proc_cleanup(void); | ||
| 121 | extern int wanrouter_proc_add(struct wan_device *wandev); | ||
| 122 | extern int wanrouter_proc_delete(struct wan_device *wandev); | ||
| 123 | extern long wanrouter_ioctl(struct file *file, unsigned int cmd, unsigned long arg); | ||
| 124 | |||
| 125 | /* Public Data */ | ||
| 126 | /* list of registered devices */ | ||
| 127 | extern struct wan_device *wanrouter_router_devlist; | ||
| 128 | |||
| 129 | #endif /* _ROUTER_H */ | 10 | #endif /* _ROUTER_H */ |
diff --git a/include/linux/wl12xx.h b/include/linux/wl12xx.h index 0d6373195d32..a54fe82e704b 100644 --- a/include/linux/wl12xx.h +++ b/include/linux/wl12xx.h | |||
| @@ -24,6 +24,8 @@ | |||
| 24 | #ifndef _LINUX_WL12XX_H | 24 | #ifndef _LINUX_WL12XX_H |
| 25 | #define _LINUX_WL12XX_H | 25 | #define _LINUX_WL12XX_H |
| 26 | 26 | ||
| 27 | #include <linux/err.h> | ||
| 28 | |||
| 27 | /* Reference clock values */ | 29 | /* Reference clock values */ |
| 28 | enum { | 30 | enum { |
| 29 | WL12XX_REFCLOCK_19 = 0, /* 19.2 MHz */ | 31 | WL12XX_REFCLOCK_19 = 0, /* 19.2 MHz */ |
| @@ -55,17 +57,17 @@ struct wl12xx_platform_data { | |||
| 55 | int board_tcxo_clock; | 57 | int board_tcxo_clock; |
| 56 | unsigned long platform_quirks; | 58 | unsigned long platform_quirks; |
| 57 | bool pwr_in_suspend; | 59 | bool pwr_in_suspend; |
| 58 | |||
| 59 | struct wl1271_if_operations *ops; | ||
| 60 | }; | 60 | }; |
| 61 | 61 | ||
| 62 | /* Platform does not support level trigger interrupts */ | 62 | /* Platform does not support level trigger interrupts */ |
| 63 | #define WL12XX_PLATFORM_QUIRK_EDGE_IRQ BIT(0) | 63 | #define WL12XX_PLATFORM_QUIRK_EDGE_IRQ BIT(0) |
| 64 | 64 | ||
| 65 | #ifdef CONFIG_WL12XX_PLATFORM_DATA | 65 | #ifdef CONFIG_WILINK_PLATFORM_DATA |
| 66 | 66 | ||
| 67 | int wl12xx_set_platform_data(const struct wl12xx_platform_data *data); | 67 | int wl12xx_set_platform_data(const struct wl12xx_platform_data *data); |
| 68 | 68 | ||
| 69 | struct wl12xx_platform_data *wl12xx_get_platform_data(void); | ||
| 70 | |||
| 69 | #else | 71 | #else |
| 70 | 72 | ||
| 71 | static inline | 73 | static inline |
| @@ -74,8 +76,12 @@ int wl12xx_set_platform_data(const struct wl12xx_platform_data *data) | |||
| 74 | return -ENOSYS; | 76 | return -ENOSYS; |
| 75 | } | 77 | } |
| 76 | 78 | ||
| 77 | #endif | 79 | static inline |
| 80 | struct wl12xx_platform_data *wl12xx_get_platform_data(void) | ||
| 81 | { | ||
| 82 | return ERR_PTR(-ENODATA); | ||
| 83 | } | ||
| 78 | 84 | ||
| 79 | struct wl12xx_platform_data *wl12xx_get_platform_data(void); | 85 | #endif |
| 80 | 86 | ||
| 81 | #endif | 87 | #endif |
diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h index 2b58905d3504..8afab27cdbc2 100644 --- a/include/linux/workqueue.h +++ b/include/linux/workqueue.h | |||
| @@ -27,7 +27,7 @@ void delayed_work_timer_fn(unsigned long __data); | |||
| 27 | enum { | 27 | enum { |
| 28 | WORK_STRUCT_PENDING_BIT = 0, /* work item is pending execution */ | 28 | WORK_STRUCT_PENDING_BIT = 0, /* work item is pending execution */ |
| 29 | WORK_STRUCT_DELAYED_BIT = 1, /* work item is delayed */ | 29 | WORK_STRUCT_DELAYED_BIT = 1, /* work item is delayed */ |
| 30 | WORK_STRUCT_CWQ_BIT = 2, /* data points to cwq */ | 30 | WORK_STRUCT_PWQ_BIT = 2, /* data points to pwq */ |
| 31 | WORK_STRUCT_LINKED_BIT = 3, /* next work is linked to this one */ | 31 | WORK_STRUCT_LINKED_BIT = 3, /* next work is linked to this one */ |
| 32 | #ifdef CONFIG_DEBUG_OBJECTS_WORK | 32 | #ifdef CONFIG_DEBUG_OBJECTS_WORK |
| 33 | WORK_STRUCT_STATIC_BIT = 4, /* static initializer (debugobjects) */ | 33 | WORK_STRUCT_STATIC_BIT = 4, /* static initializer (debugobjects) */ |
| @@ -40,7 +40,7 @@ enum { | |||
| 40 | 40 | ||
| 41 | WORK_STRUCT_PENDING = 1 << WORK_STRUCT_PENDING_BIT, | 41 | WORK_STRUCT_PENDING = 1 << WORK_STRUCT_PENDING_BIT, |
| 42 | WORK_STRUCT_DELAYED = 1 << WORK_STRUCT_DELAYED_BIT, | 42 | WORK_STRUCT_DELAYED = 1 << WORK_STRUCT_DELAYED_BIT, |
| 43 | WORK_STRUCT_CWQ = 1 << WORK_STRUCT_CWQ_BIT, | 43 | WORK_STRUCT_PWQ = 1 << WORK_STRUCT_PWQ_BIT, |
| 44 | WORK_STRUCT_LINKED = 1 << WORK_STRUCT_LINKED_BIT, | 44 | WORK_STRUCT_LINKED = 1 << WORK_STRUCT_LINKED_BIT, |
| 45 | #ifdef CONFIG_DEBUG_OBJECTS_WORK | 45 | #ifdef CONFIG_DEBUG_OBJECTS_WORK |
| 46 | WORK_STRUCT_STATIC = 1 << WORK_STRUCT_STATIC_BIT, | 46 | WORK_STRUCT_STATIC = 1 << WORK_STRUCT_STATIC_BIT, |
| @@ -57,29 +57,36 @@ enum { | |||
| 57 | 57 | ||
| 58 | /* special cpu IDs */ | 58 | /* special cpu IDs */ |
| 59 | WORK_CPU_UNBOUND = NR_CPUS, | 59 | WORK_CPU_UNBOUND = NR_CPUS, |
| 60 | WORK_CPU_NONE = NR_CPUS + 1, | 60 | WORK_CPU_END = NR_CPUS + 1, |
| 61 | WORK_CPU_LAST = WORK_CPU_NONE, | ||
| 62 | 61 | ||
| 63 | /* | 62 | /* |
| 64 | * Reserve 7 bits off of cwq pointer w/ debugobjects turned | 63 | * Reserve 7 bits off of pwq pointer w/ debugobjects turned off. |
| 65 | * off. This makes cwqs aligned to 256 bytes and allows 15 | 64 | * This makes pwqs aligned to 256 bytes and allows 15 workqueue |
| 66 | * workqueue flush colors. | 65 | * flush colors. |
| 67 | */ | 66 | */ |
| 68 | WORK_STRUCT_FLAG_BITS = WORK_STRUCT_COLOR_SHIFT + | 67 | WORK_STRUCT_FLAG_BITS = WORK_STRUCT_COLOR_SHIFT + |
| 69 | WORK_STRUCT_COLOR_BITS, | 68 | WORK_STRUCT_COLOR_BITS, |
| 70 | 69 | ||
| 71 | /* data contains off-queue information when !WORK_STRUCT_CWQ */ | 70 | /* data contains off-queue information when !WORK_STRUCT_PWQ */ |
| 72 | WORK_OFFQ_FLAG_BASE = WORK_STRUCT_FLAG_BITS, | 71 | WORK_OFFQ_FLAG_BASE = WORK_STRUCT_FLAG_BITS, |
| 73 | 72 | ||
| 74 | WORK_OFFQ_CANCELING = (1 << WORK_OFFQ_FLAG_BASE), | 73 | WORK_OFFQ_CANCELING = (1 << WORK_OFFQ_FLAG_BASE), |
| 75 | 74 | ||
| 75 | /* | ||
| 76 | * When a work item is off queue, its high bits point to the last | ||
| 77 | * pool it was on. Cap at 31 bits and use the highest number to | ||
| 78 | * indicate that no pool is associated. | ||
| 79 | */ | ||
| 76 | WORK_OFFQ_FLAG_BITS = 1, | 80 | WORK_OFFQ_FLAG_BITS = 1, |
| 77 | WORK_OFFQ_CPU_SHIFT = WORK_OFFQ_FLAG_BASE + WORK_OFFQ_FLAG_BITS, | 81 | WORK_OFFQ_POOL_SHIFT = WORK_OFFQ_FLAG_BASE + WORK_OFFQ_FLAG_BITS, |
| 82 | WORK_OFFQ_LEFT = BITS_PER_LONG - WORK_OFFQ_POOL_SHIFT, | ||
| 83 | WORK_OFFQ_POOL_BITS = WORK_OFFQ_LEFT <= 31 ? WORK_OFFQ_LEFT : 31, | ||
| 84 | WORK_OFFQ_POOL_NONE = (1LU << WORK_OFFQ_POOL_BITS) - 1, | ||
| 78 | 85 | ||
| 79 | /* convenience constants */ | 86 | /* convenience constants */ |
| 80 | WORK_STRUCT_FLAG_MASK = (1UL << WORK_STRUCT_FLAG_BITS) - 1, | 87 | WORK_STRUCT_FLAG_MASK = (1UL << WORK_STRUCT_FLAG_BITS) - 1, |
| 81 | WORK_STRUCT_WQ_DATA_MASK = ~WORK_STRUCT_FLAG_MASK, | 88 | WORK_STRUCT_WQ_DATA_MASK = ~WORK_STRUCT_FLAG_MASK, |
| 82 | WORK_STRUCT_NO_CPU = (unsigned long)WORK_CPU_NONE << WORK_OFFQ_CPU_SHIFT, | 89 | WORK_STRUCT_NO_POOL = (unsigned long)WORK_OFFQ_POOL_NONE << WORK_OFFQ_POOL_SHIFT, |
| 83 | 90 | ||
| 84 | /* bit mask for work_busy() return values */ | 91 | /* bit mask for work_busy() return values */ |
| 85 | WORK_BUSY_PENDING = 1 << 0, | 92 | WORK_BUSY_PENDING = 1 << 0, |
| @@ -95,13 +102,16 @@ struct work_struct { | |||
| 95 | #endif | 102 | #endif |
| 96 | }; | 103 | }; |
| 97 | 104 | ||
| 98 | #define WORK_DATA_INIT() ATOMIC_LONG_INIT(WORK_STRUCT_NO_CPU) | 105 | #define WORK_DATA_INIT() ATOMIC_LONG_INIT(WORK_STRUCT_NO_POOL) |
| 99 | #define WORK_DATA_STATIC_INIT() \ | 106 | #define WORK_DATA_STATIC_INIT() \ |
| 100 | ATOMIC_LONG_INIT(WORK_STRUCT_NO_CPU | WORK_STRUCT_STATIC) | 107 | ATOMIC_LONG_INIT(WORK_STRUCT_NO_POOL | WORK_STRUCT_STATIC) |
| 101 | 108 | ||
| 102 | struct delayed_work { | 109 | struct delayed_work { |
| 103 | struct work_struct work; | 110 | struct work_struct work; |
| 104 | struct timer_list timer; | 111 | struct timer_list timer; |
| 112 | |||
| 113 | /* target workqueue and CPU ->timer uses to queue ->work */ | ||
| 114 | struct workqueue_struct *wq; | ||
| 105 | int cpu; | 115 | int cpu; |
| 106 | }; | 116 | }; |
| 107 | 117 | ||
| @@ -426,7 +436,6 @@ extern bool cancel_delayed_work_sync(struct delayed_work *dwork); | |||
| 426 | extern void workqueue_set_max_active(struct workqueue_struct *wq, | 436 | extern void workqueue_set_max_active(struct workqueue_struct *wq, |
| 427 | int max_active); | 437 | int max_active); |
| 428 | extern bool workqueue_congested(unsigned int cpu, struct workqueue_struct *wq); | 438 | extern bool workqueue_congested(unsigned int cpu, struct workqueue_struct *wq); |
| 429 | extern unsigned int work_cpu(struct work_struct *work); | ||
| 430 | extern unsigned int work_busy(struct work_struct *work); | 439 | extern unsigned int work_busy(struct work_struct *work); |
| 431 | 440 | ||
| 432 | /* | 441 | /* |
