diff options
Diffstat (limited to 'include/linux')
41 files changed, 710 insertions, 425 deletions
diff --git a/include/linux/ath9k_platform.h b/include/linux/ath9k_platform.h index 6e3f54f37844..fcdd81bd5314 100644 --- a/include/linux/ath9k_platform.h +++ b/include/linux/ath9k_platform.h | |||
| @@ -22,6 +22,8 @@ | |||
| 22 | #define ATH9K_PLAT_EEP_MAX_WORDS 2048 | 22 | #define ATH9K_PLAT_EEP_MAX_WORDS 2048 |
| 23 | 23 | ||
| 24 | struct ath9k_platform_data { | 24 | struct ath9k_platform_data { |
| 25 | const char *eeprom_name; | ||
| 26 | |||
| 25 | u16 eeprom_data[ATH9K_PLAT_EEP_MAX_WORDS]; | 27 | u16 eeprom_data[ATH9K_PLAT_EEP_MAX_WORDS]; |
| 26 | u8 *macaddr; | 28 | u8 *macaddr; |
| 27 | 29 | ||
diff --git a/include/linux/atmdev.h b/include/linux/atmdev.h index 22ef21c33d0c..c1da539f5e28 100644 --- a/include/linux/atmdev.h +++ b/include/linux/atmdev.h | |||
| @@ -99,6 +99,7 @@ struct atm_vcc { | |||
| 99 | struct atm_dev *dev; /* device back pointer */ | 99 | struct atm_dev *dev; /* device back pointer */ |
| 100 | struct atm_qos qos; /* QOS */ | 100 | struct atm_qos qos; /* QOS */ |
| 101 | struct atm_sap sap; /* SAP */ | 101 | struct atm_sap sap; /* SAP */ |
| 102 | void (*release_cb)(struct atm_vcc *vcc); /* release_sock callback */ | ||
| 102 | void (*push)(struct atm_vcc *vcc,struct sk_buff *skb); | 103 | void (*push)(struct atm_vcc *vcc,struct sk_buff *skb); |
| 103 | void (*pop)(struct atm_vcc *vcc,struct sk_buff *skb); /* optional */ | 104 | void (*pop)(struct atm_vcc *vcc,struct sk_buff *skb); /* optional */ |
| 104 | int (*push_oam)(struct atm_vcc *vcc,void *cell); | 105 | int (*push_oam)(struct atm_vcc *vcc,void *cell); |
| @@ -106,6 +107,7 @@ struct atm_vcc { | |||
| 106 | void *dev_data; /* per-device data */ | 107 | void *dev_data; /* per-device data */ |
| 107 | void *proto_data; /* per-protocol data */ | 108 | void *proto_data; /* per-protocol data */ |
| 108 | struct k_atm_aal_stats *stats; /* pointer to AAL stats group */ | 109 | struct k_atm_aal_stats *stats; /* pointer to AAL stats group */ |
| 110 | struct module *owner; /* owner of ->push function */ | ||
| 109 | /* SVC part --- may move later ------------------------------------- */ | 111 | /* SVC part --- may move later ------------------------------------- */ |
| 110 | short itf; /* interface number */ | 112 | short itf; /* interface number */ |
| 111 | struct sockaddr_atmsvc local; | 113 | struct sockaddr_atmsvc local; |
diff --git a/include/linux/bcm47xx_wdt.h b/include/linux/bcm47xx_wdt.h new file mode 100644 index 000000000000..e5dfc256485b --- /dev/null +++ b/include/linux/bcm47xx_wdt.h | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | #ifndef LINUX_BCM47XX_WDT_H_ | ||
| 2 | #define LINUX_BCM47XX_WDT_H_ | ||
| 3 | |||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 6 | |||
| 7 | struct bcm47xx_wdt { | ||
| 8 | u32 (*timer_set)(struct bcm47xx_wdt *, u32); | ||
| 9 | u32 (*timer_set_ms)(struct bcm47xx_wdt *, u32); | ||
| 10 | u32 max_timer_ms; | ||
| 11 | |||
| 12 | void *driver_data; | ||
| 13 | }; | ||
| 14 | |||
| 15 | static inline void *bcm47xx_wdt_get_drvdata(struct bcm47xx_wdt *wdt) | ||
| 16 | { | ||
| 17 | return wdt->driver_data; | ||
| 18 | } | ||
| 19 | #endif /* LINUX_BCM47XX_WDT_H_ */ | ||
diff --git a/include/linux/bcma/bcma.h b/include/linux/bcma/bcma.h index 4180eb78d575..93b1e091b1e9 100644 --- a/include/linux/bcma/bcma.h +++ b/include/linux/bcma/bcma.h | |||
| @@ -157,6 +157,7 @@ struct bcma_host_ops { | |||
| 157 | 157 | ||
| 158 | /* Chip IDs of SoCs */ | 158 | /* Chip IDs of SoCs */ |
| 159 | #define BCMA_CHIP_ID_BCM4706 0x5300 | 159 | #define BCMA_CHIP_ID_BCM4706 0x5300 |
| 160 | #define BCMA_PKG_ID_BCM4706L 1 | ||
| 160 | #define BCMA_CHIP_ID_BCM4716 0x4716 | 161 | #define BCMA_CHIP_ID_BCM4716 0x4716 |
| 161 | #define BCMA_PKG_ID_BCM4716 8 | 162 | #define BCMA_PKG_ID_BCM4716 8 |
| 162 | #define BCMA_PKG_ID_BCM4717 9 | 163 | #define BCMA_PKG_ID_BCM4717 9 |
| @@ -166,7 +167,11 @@ struct bcma_host_ops { | |||
| 166 | #define BCMA_CHIP_ID_BCM4749 0x4749 | 167 | #define BCMA_CHIP_ID_BCM4749 0x4749 |
| 167 | #define BCMA_CHIP_ID_BCM5356 0x5356 | 168 | #define BCMA_CHIP_ID_BCM5356 0x5356 |
| 168 | #define BCMA_CHIP_ID_BCM5357 0x5357 | 169 | #define BCMA_CHIP_ID_BCM5357 0x5357 |
| 170 | #define BCMA_PKG_ID_BCM5358 9 | ||
| 171 | #define BCMA_PKG_ID_BCM47186 10 | ||
| 172 | #define BCMA_PKG_ID_BCM5357 11 | ||
| 169 | #define BCMA_CHIP_ID_BCM53572 53572 | 173 | #define BCMA_CHIP_ID_BCM53572 53572 |
| 174 | #define BCMA_PKG_ID_BCM47188 9 | ||
| 170 | 175 | ||
| 171 | struct bcma_device { | 176 | struct bcma_device { |
| 172 | struct bcma_bus *bus; | 177 | struct bcma_bus *bus; |
| @@ -251,7 +256,7 @@ struct bcma_bus { | |||
| 251 | u8 num; | 256 | u8 num; |
| 252 | 257 | ||
| 253 | struct bcma_drv_cc drv_cc; | 258 | struct bcma_drv_cc drv_cc; |
| 254 | struct bcma_drv_pci drv_pci; | 259 | struct bcma_drv_pci drv_pci[2]; |
| 255 | struct bcma_drv_mips drv_mips; | 260 | struct bcma_drv_mips drv_mips; |
| 256 | struct bcma_drv_gmac_cmn drv_gmac_cmn; | 261 | struct bcma_drv_gmac_cmn drv_gmac_cmn; |
| 257 | 262 | ||
diff --git a/include/linux/bcma/bcma_driver_chipcommon.h b/include/linux/bcma/bcma_driver_chipcommon.h index 1cf1749440ac..e51359180b6f 100644 --- a/include/linux/bcma/bcma_driver_chipcommon.h +++ b/include/linux/bcma/bcma_driver_chipcommon.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef LINUX_BCMA_DRIVER_CC_H_ | 1 | #ifndef LINUX_BCMA_DRIVER_CC_H_ |
| 2 | #define LINUX_BCMA_DRIVER_CC_H_ | 2 | #define LINUX_BCMA_DRIVER_CC_H_ |
| 3 | 3 | ||
| 4 | #include <linux/platform_device.h> | ||
| 5 | |||
| 4 | /** ChipCommon core registers. **/ | 6 | /** ChipCommon core registers. **/ |
| 5 | #define BCMA_CC_ID 0x0000 | 7 | #define BCMA_CC_ID 0x0000 |
| 6 | #define BCMA_CC_ID_ID 0x0000FFFF | 8 | #define BCMA_CC_ID_ID 0x0000FFFF |
| @@ -510,6 +512,7 @@ struct bcma_chipcommon_pmu { | |||
| 510 | 512 | ||
| 511 | #ifdef CONFIG_BCMA_DRIVER_MIPS | 513 | #ifdef CONFIG_BCMA_DRIVER_MIPS |
| 512 | struct bcma_pflash { | 514 | struct bcma_pflash { |
| 515 | bool present; | ||
| 513 | u8 buswidth; | 516 | u8 buswidth; |
| 514 | u32 window; | 517 | u32 window; |
| 515 | u32 window_size; | 518 | u32 window_size; |
| @@ -532,6 +535,7 @@ struct mtd_info; | |||
| 532 | 535 | ||
| 533 | struct bcma_nflash { | 536 | struct bcma_nflash { |
| 534 | bool present; | 537 | bool present; |
| 538 | bool boot; /* This is the flash the SoC boots from */ | ||
| 535 | 539 | ||
| 536 | struct mtd_info *mtd; | 540 | struct mtd_info *mtd; |
| 537 | }; | 541 | }; |
| @@ -552,6 +556,7 @@ struct bcma_drv_cc { | |||
| 552 | u32 capabilities; | 556 | u32 capabilities; |
| 553 | u32 capabilities_ext; | 557 | u32 capabilities_ext; |
| 554 | u8 setup_done:1; | 558 | u8 setup_done:1; |
| 559 | u8 early_setup_done:1; | ||
| 555 | /* Fast Powerup Delay constant */ | 560 | /* Fast Powerup Delay constant */ |
| 556 | u16 fast_pwrup_delay; | 561 | u16 fast_pwrup_delay; |
| 557 | struct bcma_chipcommon_pmu pmu; | 562 | struct bcma_chipcommon_pmu pmu; |
| @@ -567,6 +572,8 @@ struct bcma_drv_cc { | |||
| 567 | int nr_serial_ports; | 572 | int nr_serial_ports; |
| 568 | struct bcma_serial_port serial_ports[4]; | 573 | struct bcma_serial_port serial_ports[4]; |
| 569 | #endif /* CONFIG_BCMA_DRIVER_MIPS */ | 574 | #endif /* CONFIG_BCMA_DRIVER_MIPS */ |
| 575 | u32 ticks_per_ms; | ||
| 576 | struct platform_device *watchdog; | ||
| 570 | }; | 577 | }; |
| 571 | 578 | ||
| 572 | /* Register access */ | 579 | /* Register access */ |
| @@ -583,14 +590,14 @@ struct bcma_drv_cc { | |||
| 583 | bcma_cc_write32(cc, offset, (bcma_cc_read32(cc, offset) & (mask)) | (set)) | 590 | bcma_cc_write32(cc, offset, (bcma_cc_read32(cc, offset) & (mask)) | (set)) |
| 584 | 591 | ||
| 585 | extern void bcma_core_chipcommon_init(struct bcma_drv_cc *cc); | 592 | extern void bcma_core_chipcommon_init(struct bcma_drv_cc *cc); |
| 593 | extern void bcma_core_chipcommon_early_init(struct bcma_drv_cc *cc); | ||
| 586 | 594 | ||
| 587 | extern void bcma_chipco_suspend(struct bcma_drv_cc *cc); | 595 | extern void bcma_chipco_suspend(struct bcma_drv_cc *cc); |
| 588 | extern void bcma_chipco_resume(struct bcma_drv_cc *cc); | 596 | extern void bcma_chipco_resume(struct bcma_drv_cc *cc); |
| 589 | 597 | ||
| 590 | void bcma_chipco_bcm4331_ext_pa_lines_ctl(struct bcma_drv_cc *cc, bool enable); | 598 | void bcma_chipco_bcm4331_ext_pa_lines_ctl(struct bcma_drv_cc *cc, bool enable); |
| 591 | 599 | ||
| 592 | extern void bcma_chipco_watchdog_timer_set(struct bcma_drv_cc *cc, | 600 | extern u32 bcma_chipco_watchdog_timer_set(struct bcma_drv_cc *cc, u32 ticks); |
| 593 | u32 ticks); | ||
| 594 | 601 | ||
| 595 | void bcma_chipco_irq_mask(struct bcma_drv_cc *cc, u32 mask, u32 value); | 602 | void bcma_chipco_irq_mask(struct bcma_drv_cc *cc, u32 mask, u32 value); |
| 596 | 603 | ||
| @@ -606,6 +613,7 @@ u32 bcma_chipco_gpio_polarity(struct bcma_drv_cc *cc, u32 mask, u32 value); | |||
| 606 | 613 | ||
| 607 | /* PMU support */ | 614 | /* PMU support */ |
| 608 | extern void bcma_pmu_init(struct bcma_drv_cc *cc); | 615 | extern void bcma_pmu_init(struct bcma_drv_cc *cc); |
| 616 | extern void bcma_pmu_early_init(struct bcma_drv_cc *cc); | ||
| 609 | 617 | ||
| 610 | extern void bcma_chipco_pll_write(struct bcma_drv_cc *cc, u32 offset, | 618 | extern void bcma_chipco_pll_write(struct bcma_drv_cc *cc, u32 offset, |
| 611 | u32 value); | 619 | u32 value); |
diff --git a/include/linux/bcma/bcma_driver_mips.h b/include/linux/bcma/bcma_driver_mips.h index c0043645cdcb..0baf8a56b794 100644 --- a/include/linux/bcma/bcma_driver_mips.h +++ b/include/linux/bcma/bcma_driver_mips.h | |||
| @@ -35,13 +35,16 @@ struct bcma_device; | |||
| 35 | struct bcma_drv_mips { | 35 | struct bcma_drv_mips { |
| 36 | struct bcma_device *core; | 36 | struct bcma_device *core; |
| 37 | u8 setup_done:1; | 37 | u8 setup_done:1; |
| 38 | u8 early_setup_done:1; | ||
| 38 | unsigned int assigned_irqs; | 39 | unsigned int assigned_irqs; |
| 39 | }; | 40 | }; |
| 40 | 41 | ||
| 41 | #ifdef CONFIG_BCMA_DRIVER_MIPS | 42 | #ifdef CONFIG_BCMA_DRIVER_MIPS |
| 42 | 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); | ||
| 43 | #else | 45 | #else |
| 44 | static inline void bcma_core_mips_init(struct bcma_drv_mips *mcore) { } | 46 | 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) { } | ||
| 45 | #endif | 48 | #endif |
| 46 | 49 | ||
| 47 | extern u32 bcma_cpu_clock(struct bcma_drv_mips *mcore); | 50 | extern u32 bcma_cpu_clock(struct bcma_drv_mips *mcore); |
diff --git a/include/linux/bcma/bcma_regs.h b/include/linux/bcma/bcma_regs.h index 6c9cb93ae3de..7e8104bb7a7e 100644 --- a/include/linux/bcma/bcma_regs.h +++ b/include/linux/bcma/bcma_regs.h | |||
| @@ -85,6 +85,9 @@ | |||
| 85 | * (2 ZettaBytes), high 32 bits | 85 | * (2 ZettaBytes), high 32 bits |
| 86 | */ | 86 | */ |
| 87 | 87 | ||
| 88 | #define BCMA_SFLASH 0x1c000000 | 88 | #define BCMA_SOC_FLASH1 0x1fc00000 /* MIPS Flash Region 1 */ |
| 89 | #define BCMA_SOC_FLASH1_SZ 0x00400000 /* MIPS Size of Flash Region 1 */ | ||
| 90 | #define BCMA_SOC_FLASH2 0x1c000000 /* Flash Region 2 (region 1 shadowed here) */ | ||
| 91 | #define BCMA_SOC_FLASH2_SZ 0x02000000 /* Size of Flash Region 2 */ | ||
| 89 | 92 | ||
| 90 | #endif /* LINUX_BCMA_REGS_H_ */ | 93 | #endif /* LINUX_BCMA_REGS_H_ */ |
diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h index b006ba0a9f42..243eea1e33d8 100644 --- a/include/linux/etherdevice.h +++ b/include/linux/etherdevice.h | |||
| @@ -51,6 +51,26 @@ extern struct net_device *alloc_etherdev_mqs(int sizeof_priv, unsigned int txqs, | |||
| 51 | #define alloc_etherdev(sizeof_priv) alloc_etherdev_mq(sizeof_priv, 1) | 51 | #define alloc_etherdev(sizeof_priv) alloc_etherdev_mq(sizeof_priv, 1) |
| 52 | #define alloc_etherdev_mq(sizeof_priv, count) alloc_etherdev_mqs(sizeof_priv, count, count) | 52 | #define alloc_etherdev_mq(sizeof_priv, count) alloc_etherdev_mqs(sizeof_priv, count, count) |
| 53 | 53 | ||
| 54 | /* Reserved Ethernet Addresses per IEEE 802.1Q */ | ||
| 55 | static const u8 eth_reserved_addr_base[ETH_ALEN] __aligned(2) = | ||
| 56 | { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x00 }; | ||
| 57 | |||
| 58 | /** | ||
| 59 | * is_link_local_ether_addr - Determine if given Ethernet address is link-local | ||
| 60 | * @addr: Pointer to a six-byte array containing the Ethernet address | ||
| 61 | * | ||
| 62 | * Return true if address is link local reserved addr (01:80:c2:00:00:0X) per | ||
| 63 | * IEEE 802.1Q 8.6.3 Frame filtering. | ||
| 64 | */ | ||
| 65 | static inline bool is_link_local_ether_addr(const u8 *addr) | ||
| 66 | { | ||
| 67 | __be16 *a = (__be16 *)addr; | ||
| 68 | static const __be16 *b = (const __be16 *)eth_reserved_addr_base; | ||
| 69 | static const __be16 m = cpu_to_be16(0xfff0); | ||
| 70 | |||
| 71 | return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | ((a[2] ^ b[2]) & m)) == 0; | ||
| 72 | } | ||
| 73 | |||
| 54 | /** | 74 | /** |
| 55 | * is_zero_ether_addr - Determine if give Ethernet address is all zeros. | 75 | * is_zero_ether_addr - Determine if give Ethernet address is all zeros. |
| 56 | * @addr: Pointer to a six-byte array containing the Ethernet address | 76 | * @addr: Pointer to a six-byte array containing the Ethernet address |
diff --git a/include/linux/filter.h b/include/linux/filter.h index 24d251f3bab0..c45eabc135e1 100644 --- a/include/linux/filter.h +++ b/include/linux/filter.h | |||
| @@ -45,6 +45,7 @@ extern void sk_unattached_filter_destroy(struct sk_filter *fp); | |||
| 45 | extern int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk); | 45 | extern int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk); |
| 46 | extern int sk_detach_filter(struct sock *sk); | 46 | extern int sk_detach_filter(struct sock *sk); |
| 47 | extern int sk_chk_filter(struct sock_filter *filter, unsigned int flen); | 47 | extern int sk_chk_filter(struct sock_filter *filter, unsigned int flen); |
| 48 | extern int sk_get_filter(struct sock *sk, struct sock_filter __user *filter, unsigned len); | ||
| 48 | 49 | ||
| 49 | #ifdef CONFIG_BPF_JIT | 50 | #ifdef CONFIG_BPF_JIT |
| 50 | extern void bpf_jit_compile(struct sk_filter *fp); | 51 | extern void bpf_jit_compile(struct sk_filter *fp); |
| @@ -123,6 +124,8 @@ enum { | |||
| 123 | BPF_S_ANC_CPU, | 124 | BPF_S_ANC_CPU, |
| 124 | BPF_S_ANC_ALU_XOR_X, | 125 | BPF_S_ANC_ALU_XOR_X, |
| 125 | BPF_S_ANC_SECCOMP_LD_W, | 126 | BPF_S_ANC_SECCOMP_LD_W, |
| 127 | BPF_S_ANC_VLAN_TAG, | ||
| 128 | BPF_S_ANC_VLAN_TAG_PRESENT, | ||
| 126 | }; | 129 | }; |
| 127 | 130 | ||
| 128 | #endif /* __LINUX_FILTER_H__ */ | 131 | #endif /* __LINUX_FILTER_H__ */ |
diff --git a/include/linux/hdlc/Kbuild b/include/linux/hdlc/Kbuild index 1fb26448faa9..e69de29bb2d1 100644 --- a/include/linux/hdlc/Kbuild +++ b/include/linux/hdlc/Kbuild | |||
| @@ -1 +0,0 @@ | |||
| 1 | header-y += ioctl.h | ||
diff --git a/include/linux/hdlc/ioctl.h b/include/linux/hdlc/ioctl.h deleted file mode 100644 index 583972364357..000000000000 --- a/include/linux/hdlc/ioctl.h +++ /dev/null | |||
| @@ -1,81 +0,0 @@ | |||
| 1 | #ifndef __HDLC_IOCTL_H__ | ||
| 2 | #define __HDLC_IOCTL_H__ | ||
| 3 | |||
| 4 | |||
| 5 | #define GENERIC_HDLC_VERSION 4 /* For synchronization with sethdlc utility */ | ||
| 6 | |||
| 7 | #define CLOCK_DEFAULT 0 /* Default setting */ | ||
| 8 | #define CLOCK_EXT 1 /* External TX and RX clock - DTE */ | ||
| 9 | #define CLOCK_INT 2 /* Internal TX and RX clock - DCE */ | ||
| 10 | #define CLOCK_TXINT 3 /* Internal TX and external RX clock */ | ||
| 11 | #define CLOCK_TXFROMRX 4 /* TX clock derived from external RX clock */ | ||
| 12 | |||
| 13 | |||
| 14 | #define ENCODING_DEFAULT 0 /* Default setting */ | ||
| 15 | #define ENCODING_NRZ 1 | ||
| 16 | #define ENCODING_NRZI 2 | ||
| 17 | #define ENCODING_FM_MARK 3 | ||
| 18 | #define ENCODING_FM_SPACE 4 | ||
| 19 | #define ENCODING_MANCHESTER 5 | ||
| 20 | |||
| 21 | |||
| 22 | #define PARITY_DEFAULT 0 /* Default setting */ | ||
| 23 | #define PARITY_NONE 1 /* No parity */ | ||
| 24 | #define PARITY_CRC16_PR0 2 /* CRC16, initial value 0x0000 */ | ||
| 25 | #define PARITY_CRC16_PR1 3 /* CRC16, initial value 0xFFFF */ | ||
| 26 | #define PARITY_CRC16_PR0_CCITT 4 /* CRC16, initial 0x0000, ITU-T version */ | ||
| 27 | #define PARITY_CRC16_PR1_CCITT 5 /* CRC16, initial 0xFFFF, ITU-T version */ | ||
| 28 | #define PARITY_CRC32_PR0_CCITT 6 /* CRC32, initial value 0x00000000 */ | ||
| 29 | #define PARITY_CRC32_PR1_CCITT 7 /* CRC32, initial value 0xFFFFFFFF */ | ||
| 30 | |||
| 31 | #define LMI_DEFAULT 0 /* Default setting */ | ||
| 32 | #define LMI_NONE 1 /* No LMI, all PVCs are static */ | ||
| 33 | #define LMI_ANSI 2 /* ANSI Annex D */ | ||
| 34 | #define LMI_CCITT 3 /* ITU-T Annex A */ | ||
| 35 | #define LMI_CISCO 4 /* The "original" LMI, aka Gang of Four */ | ||
| 36 | |||
| 37 | typedef struct { | ||
| 38 | unsigned int clock_rate; /* bits per second */ | ||
| 39 | unsigned int clock_type; /* internal, external, TX-internal etc. */ | ||
| 40 | unsigned short loopback; | ||
| 41 | } sync_serial_settings; /* V.35, V.24, X.21 */ | ||
| 42 | |||
| 43 | typedef struct { | ||
| 44 | unsigned int clock_rate; /* bits per second */ | ||
| 45 | unsigned int clock_type; /* internal, external, TX-internal etc. */ | ||
| 46 | unsigned short loopback; | ||
| 47 | unsigned int slot_map; | ||
| 48 | } te1_settings; /* T1, E1 */ | ||
| 49 | |||
| 50 | typedef struct { | ||
| 51 | unsigned short encoding; | ||
| 52 | unsigned short parity; | ||
| 53 | } raw_hdlc_proto; | ||
| 54 | |||
| 55 | typedef struct { | ||
| 56 | unsigned int t391; | ||
| 57 | unsigned int t392; | ||
| 58 | unsigned int n391; | ||
| 59 | unsigned int n392; | ||
| 60 | unsigned int n393; | ||
| 61 | unsigned short lmi; | ||
| 62 | unsigned short dce; /* 1 for DCE (network side) operation */ | ||
| 63 | } fr_proto; | ||
| 64 | |||
| 65 | typedef struct { | ||
| 66 | unsigned int dlci; | ||
| 67 | } fr_proto_pvc; /* for creating/deleting FR PVCs */ | ||
| 68 | |||
| 69 | typedef struct { | ||
| 70 | unsigned int dlci; | ||
| 71 | char master[IFNAMSIZ]; /* Name of master FRAD device */ | ||
| 72 | }fr_proto_pvc_info; /* for returning PVC information only */ | ||
| 73 | |||
| 74 | typedef struct { | ||
| 75 | unsigned int interval; | ||
| 76 | unsigned int timeout; | ||
| 77 | } cisco_proto; | ||
| 78 | |||
| 79 | /* PPP doesn't need any info now - supply length = 0 to ioctl */ | ||
| 80 | |||
| 81 | #endif /* __HDLC_IOCTL_H__ */ | ||
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index 2385119f8bb0..f0859cc73861 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h | |||
| @@ -131,6 +131,8 @@ | |||
| 131 | 131 | ||
| 132 | #define IEEE80211_MAX_MESH_ID_LEN 32 | 132 | #define IEEE80211_MAX_MESH_ID_LEN 32 |
| 133 | 133 | ||
| 134 | #define IEEE80211_NUM_TIDS 16 | ||
| 135 | |||
| 134 | #define IEEE80211_QOS_CTL_LEN 2 | 136 | #define IEEE80211_QOS_CTL_LEN 2 |
| 135 | /* 1d tag mask */ | 137 | /* 1d tag mask */ |
| 136 | #define IEEE80211_QOS_CTL_TAG1D_MASK 0x0007 | 138 | #define IEEE80211_QOS_CTL_TAG1D_MASK 0x0007 |
| @@ -666,6 +668,21 @@ struct ieee80211_meshconf_ie { | |||
| 666 | } __attribute__ ((packed)); | 668 | } __attribute__ ((packed)); |
| 667 | 669 | ||
| 668 | /** | 670 | /** |
| 671 | * enum mesh_config_capab_flags - Mesh Configuration IE capability field flags | ||
| 672 | * | ||
| 673 | * @IEEE80211_MESHCONF_CAPAB_ACCEPT_PLINKS: STA is willing to establish | ||
| 674 | * additional mesh peerings with other mesh STAs | ||
| 675 | * @IEEE80211_MESHCONF_CAPAB_FORWARDING: the STA forwards MSDUs | ||
| 676 | * @IEEE80211_MESHCONF_CAPAB_TBTT_ADJUSTING: TBTT adjustment procedure | ||
| 677 | * is ongoing | ||
| 678 | */ | ||
| 679 | enum mesh_config_capab_flags { | ||
| 680 | IEEE80211_MESHCONF_CAPAB_ACCEPT_PLINKS = 0x01, | ||
| 681 | IEEE80211_MESHCONF_CAPAB_FORWARDING = 0x08, | ||
| 682 | IEEE80211_MESHCONF_CAPAB_TBTT_ADJUSTING = 0x20, | ||
| 683 | }; | ||
| 684 | |||
| 685 | /** | ||
| 669 | * struct ieee80211_rann_ie | 686 | * struct ieee80211_rann_ie |
| 670 | * | 687 | * |
| 671 | * This structure refers to "Root Announcement information element" | 688 | * This structure refers to "Root Announcement information element" |
| @@ -905,6 +922,38 @@ struct ieee80211_tdls_data { | |||
| 905 | } u; | 922 | } u; |
| 906 | } __packed; | 923 | } __packed; |
| 907 | 924 | ||
| 925 | /* | ||
| 926 | * Peer-to-Peer IE attribute related definitions. | ||
| 927 | */ | ||
| 928 | /** | ||
| 929 | * enum ieee80211_p2p_attr_id - identifies type of peer-to-peer attribute. | ||
| 930 | */ | ||
| 931 | enum ieee80211_p2p_attr_id { | ||
| 932 | IEEE80211_P2P_ATTR_STATUS = 0, | ||
| 933 | IEEE80211_P2P_ATTR_MINOR_REASON, | ||
| 934 | IEEE80211_P2P_ATTR_CAPABILITY, | ||
| 935 | IEEE80211_P2P_ATTR_DEVICE_ID, | ||
| 936 | IEEE80211_P2P_ATTR_GO_INTENT, | ||
| 937 | IEEE80211_P2P_ATTR_GO_CONFIG_TIMEOUT, | ||
| 938 | IEEE80211_P2P_ATTR_LISTEN_CHANNEL, | ||
| 939 | IEEE80211_P2P_ATTR_GROUP_BSSID, | ||
| 940 | IEEE80211_P2P_ATTR_EXT_LISTEN_TIMING, | ||
| 941 | IEEE80211_P2P_ATTR_INTENDED_IFACE_ADDR, | ||
| 942 | IEEE80211_P2P_ATTR_MANAGABILITY, | ||
| 943 | IEEE80211_P2P_ATTR_CHANNEL_LIST, | ||
| 944 | IEEE80211_P2P_ATTR_ABSENCE_NOTICE, | ||
| 945 | IEEE80211_P2P_ATTR_DEVICE_INFO, | ||
| 946 | IEEE80211_P2P_ATTR_GROUP_INFO, | ||
| 947 | IEEE80211_P2P_ATTR_GROUP_ID, | ||
| 948 | IEEE80211_P2P_ATTR_INTERFACE, | ||
| 949 | IEEE80211_P2P_ATTR_OPER_CHANNEL, | ||
| 950 | IEEE80211_P2P_ATTR_INVITE_FLAGS, | ||
| 951 | /* 19 - 220: Reserved */ | ||
| 952 | IEEE80211_P2P_ATTR_VENDOR_SPECIFIC = 221, | ||
| 953 | |||
| 954 | IEEE80211_P2P_ATTR_MAX | ||
| 955 | }; | ||
| 956 | |||
| 908 | /** | 957 | /** |
| 909 | * struct ieee80211_bar - HT Block Ack Request | 958 | * struct ieee80211_bar - HT Block Ack Request |
| 910 | * | 959 | * |
| @@ -1107,20 +1156,6 @@ struct ieee80211_ht_operation { | |||
| 1107 | #define WLAN_HT_SMPS_CONTROL_STATIC 1 | 1156 | #define WLAN_HT_SMPS_CONTROL_STATIC 1 |
| 1108 | #define WLAN_HT_SMPS_CONTROL_DYNAMIC 3 | 1157 | #define WLAN_HT_SMPS_CONTROL_DYNAMIC 3 |
| 1109 | 1158 | ||
| 1110 | #define VHT_MCS_SUPPORTED_SET_SIZE 8 | ||
| 1111 | |||
| 1112 | struct ieee80211_vht_capabilities { | ||
| 1113 | __le32 vht_capabilities_info; | ||
| 1114 | u8 vht_supported_mcs_set[VHT_MCS_SUPPORTED_SET_SIZE]; | ||
| 1115 | } __packed; | ||
| 1116 | |||
| 1117 | struct ieee80211_vht_operation { | ||
| 1118 | u8 vht_op_info_chwidth; | ||
| 1119 | u8 vht_op_info_chan_center_freq_seg1_idx; | ||
| 1120 | u8 vht_op_info_chan_center_freq_seg2_idx; | ||
| 1121 | __le16 vht_basic_mcs_set; | ||
| 1122 | } __packed; | ||
| 1123 | |||
| 1124 | /** | 1159 | /** |
| 1125 | * struct ieee80211_vht_mcs_info - VHT MCS information | 1160 | * struct ieee80211_vht_mcs_info - VHT MCS information |
| 1126 | * @rx_mcs_map: RX MCS map 2 bits for each stream, total 8 streams | 1161 | * @rx_mcs_map: RX MCS map 2 bits for each stream, total 8 streams |
| @@ -1128,11 +1163,13 @@ struct ieee80211_vht_operation { | |||
| 1128 | * STA can receive. Rate expressed in units of 1 Mbps. | 1163 | * STA can receive. Rate expressed in units of 1 Mbps. |
| 1129 | * If this field is 0 this value should not be used to | 1164 | * If this field is 0 this value should not be used to |
| 1130 | * consider the highest RX data rate supported. | 1165 | * consider the highest RX data rate supported. |
| 1166 | * The top 3 bits of this field are reserved. | ||
| 1131 | * @tx_mcs_map: TX MCS map 2 bits for each stream, total 8 streams | 1167 | * @tx_mcs_map: TX MCS map 2 bits for each stream, total 8 streams |
| 1132 | * @tx_highest: Indicates highest long GI VHT PPDU data rate | 1168 | * @tx_highest: Indicates highest long GI VHT PPDU data rate |
| 1133 | * STA can transmit. Rate expressed in units of 1 Mbps. | 1169 | * STA can transmit. Rate expressed in units of 1 Mbps. |
| 1134 | * If this field is 0 this value should not be used to | 1170 | * If this field is 0 this value should not be used to |
| 1135 | * consider the highest TX data rate supported. | 1171 | * consider the highest TX data rate supported. |
| 1172 | * The top 3 bits of this field are reserved. | ||
| 1136 | */ | 1173 | */ |
| 1137 | struct ieee80211_vht_mcs_info { | 1174 | struct ieee80211_vht_mcs_info { |
| 1138 | __le16 rx_mcs_map; | 1175 | __le16 rx_mcs_map; |
| @@ -1141,38 +1178,107 @@ struct ieee80211_vht_mcs_info { | |||
| 1141 | __le16 tx_highest; | 1178 | __le16 tx_highest; |
| 1142 | } __packed; | 1179 | } __packed; |
| 1143 | 1180 | ||
| 1181 | /** | ||
| 1182 | * enum ieee80211_vht_mcs_support - VHT MCS support definitions | ||
| 1183 | * @IEEE80211_VHT_MCS_SUPPORT_0_7: MCSes 0-7 are supported for the | ||
| 1184 | * number of streams | ||
| 1185 | * @IEEE80211_VHT_MCS_SUPPORT_0_8: MCSes 0-8 are supported | ||
| 1186 | * @IEEE80211_VHT_MCS_SUPPORT_0_9: MCSes 0-9 are supported | ||
| 1187 | * @IEEE80211_VHT_MCS_NOT_SUPPORTED: This number of streams isn't supported | ||
| 1188 | * | ||
| 1189 | * These definitions are used in each 2-bit subfield of the @rx_mcs_map | ||
| 1190 | * and @tx_mcs_map fields of &struct ieee80211_vht_mcs_info, which are | ||
| 1191 | * both split into 8 subfields by number of streams. These values indicate | ||
| 1192 | * which MCSes are supported for the number of streams the value appears | ||
| 1193 | * for. | ||
| 1194 | */ | ||
| 1195 | enum ieee80211_vht_mcs_support { | ||
| 1196 | IEEE80211_VHT_MCS_SUPPORT_0_7 = 0, | ||
| 1197 | IEEE80211_VHT_MCS_SUPPORT_0_8 = 1, | ||
| 1198 | IEEE80211_VHT_MCS_SUPPORT_0_9 = 2, | ||
| 1199 | IEEE80211_VHT_MCS_NOT_SUPPORTED = 3, | ||
| 1200 | }; | ||
| 1201 | |||
| 1202 | /** | ||
| 1203 | * struct ieee80211_vht_cap - VHT capabilities | ||
| 1204 | * | ||
| 1205 | * This structure is the "VHT capabilities element" as | ||
| 1206 | * described in 802.11ac D3.0 8.4.2.160 | ||
| 1207 | * @vht_cap_info: VHT capability info | ||
| 1208 | * @supp_mcs: VHT MCS supported rates | ||
| 1209 | */ | ||
| 1210 | struct ieee80211_vht_cap { | ||
| 1211 | __le32 vht_cap_info; | ||
| 1212 | struct ieee80211_vht_mcs_info supp_mcs; | ||
| 1213 | } __packed; | ||
| 1214 | |||
| 1215 | /** | ||
| 1216 | * enum ieee80211_vht_chanwidth - VHT channel width | ||
| 1217 | * @IEEE80211_VHT_CHANWIDTH_USE_HT: use the HT operation IE to | ||
| 1218 | * determine the channel width (20 or 40 MHz) | ||
| 1219 | * @IEEE80211_VHT_CHANWIDTH_80MHZ: 80 MHz bandwidth | ||
| 1220 | * @IEEE80211_VHT_CHANWIDTH_160MHZ: 160 MHz bandwidth | ||
| 1221 | * @IEEE80211_VHT_CHANWIDTH_80P80MHZ: 80+80 MHz bandwidth | ||
| 1222 | */ | ||
| 1223 | enum ieee80211_vht_chanwidth { | ||
| 1224 | IEEE80211_VHT_CHANWIDTH_USE_HT = 0, | ||
| 1225 | IEEE80211_VHT_CHANWIDTH_80MHZ = 1, | ||
| 1226 | IEEE80211_VHT_CHANWIDTH_160MHZ = 2, | ||
| 1227 | IEEE80211_VHT_CHANWIDTH_80P80MHZ = 3, | ||
| 1228 | }; | ||
| 1229 | |||
| 1230 | /** | ||
| 1231 | * struct ieee80211_vht_operation - VHT operation IE | ||
| 1232 | * | ||
| 1233 | * This structure is the "VHT operation element" as | ||
| 1234 | * described in 802.11ac D3.0 8.4.2.161 | ||
| 1235 | * @chan_width: Operating channel width | ||
| 1236 | * @center_freq_seg1_idx: center freq segment 1 index | ||
| 1237 | * @center_freq_seg2_idx: center freq segment 2 index | ||
| 1238 | * @basic_mcs_set: VHT Basic MCS rate set | ||
| 1239 | */ | ||
| 1240 | struct ieee80211_vht_operation { | ||
| 1241 | u8 chan_width; | ||
| 1242 | u8 center_freq_seg1_idx; | ||
| 1243 | u8 center_freq_seg2_idx; | ||
| 1244 | __le16 basic_mcs_set; | ||
| 1245 | } __packed; | ||
| 1246 | |||
| 1247 | |||
| 1144 | #define IEEE80211_VHT_MCS_ZERO_TO_SEVEN_SUPPORT 0 | 1248 | #define IEEE80211_VHT_MCS_ZERO_TO_SEVEN_SUPPORT 0 |
| 1145 | #define IEEE80211_VHT_MCS_ZERO_TO_EIGHT_SUPPORT 1 | 1249 | #define IEEE80211_VHT_MCS_ZERO_TO_EIGHT_SUPPORT 1 |
| 1146 | #define IEEE80211_VHT_MCS_ZERO_TO_NINE_SUPPORT 2 | 1250 | #define IEEE80211_VHT_MCS_ZERO_TO_NINE_SUPPORT 2 |
| 1147 | #define IEEE80211_VHT_MCS_NOT_SUPPORTED 3 | 1251 | #define IEEE80211_VHT_MCS_NOT_SUPPORTED 3 |
| 1148 | 1252 | ||
| 1149 | /* 802.11ac VHT Capabilities */ | 1253 | /* 802.11ac VHT Capabilities */ |
| 1150 | #define IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_3895 0x00000000 | 1254 | #define IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_3895 0x00000000 |
| 1151 | #define IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_7991 0x00000001 | 1255 | #define IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_7991 0x00000001 |
| 1152 | #define IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454 0x00000002 | 1256 | #define IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454 0x00000002 |
| 1153 | #define IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ 0x00000004 | 1257 | #define IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ 0x00000004 |
| 1154 | #define IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ 0x00000008 | 1258 | #define IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ 0x00000008 |
| 1155 | #define IEEE80211_VHT_CAP_RXLDPC 0x00000010 | 1259 | #define IEEE80211_VHT_CAP_RXLDPC 0x00000010 |
| 1156 | #define IEEE80211_VHT_CAP_SHORT_GI_80 0x00000020 | 1260 | #define IEEE80211_VHT_CAP_SHORT_GI_80 0x00000020 |
| 1157 | #define IEEE80211_VHT_CAP_SHORT_GI_160 0x00000040 | 1261 | #define IEEE80211_VHT_CAP_SHORT_GI_160 0x00000040 |
| 1158 | #define IEEE80211_VHT_CAP_TXSTBC 0x00000080 | 1262 | #define IEEE80211_VHT_CAP_TXSTBC 0x00000080 |
| 1159 | #define IEEE80211_VHT_CAP_RXSTBC_1 0x00000100 | 1263 | #define IEEE80211_VHT_CAP_RXSTBC_1 0x00000100 |
| 1160 | #define IEEE80211_VHT_CAP_RXSTBC_2 0x00000200 | 1264 | #define IEEE80211_VHT_CAP_RXSTBC_2 0x00000200 |
| 1161 | #define IEEE80211_VHT_CAP_RXSTBC_3 0x00000300 | 1265 | #define IEEE80211_VHT_CAP_RXSTBC_3 0x00000300 |
| 1162 | #define IEEE80211_VHT_CAP_RXSTBC_4 0x00000400 | 1266 | #define IEEE80211_VHT_CAP_RXSTBC_4 0x00000400 |
| 1163 | #define IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE 0x00000800 | 1267 | #define IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE 0x00000800 |
| 1164 | #define IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE 0x00001000 | 1268 | #define IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE 0x00001000 |
| 1165 | #define IEEE80211_VHT_CAP_BEAMFORMER_ANTENNAS_MAX 0x00006000 | 1269 | #define IEEE80211_VHT_CAP_BEAMFORMER_ANTENNAS_MAX 0x00006000 |
| 1166 | #define IEEE80211_VHT_CAP_SOUNDING_DIMENTION_MAX 0x00030000 | 1270 | #define IEEE80211_VHT_CAP_SOUNDING_DIMENTION_MAX 0x00030000 |
| 1167 | #define IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE 0x00080000 | 1271 | #define IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE 0x00080000 |
| 1168 | #define IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE 0x00100000 | 1272 | #define IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE 0x00100000 |
| 1169 | #define IEEE80211_VHT_CAP_VHT_TXOP_PS 0x00200000 | 1273 | #define IEEE80211_VHT_CAP_VHT_TXOP_PS 0x00200000 |
| 1170 | #define IEEE80211_VHT_CAP_HTC_VHT 0x00400000 | 1274 | #define IEEE80211_VHT_CAP_HTC_VHT 0x00400000 |
| 1171 | #define IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT 0x00800000 | 1275 | #define IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_SHIFT 23 |
| 1172 | #define IEEE80211_VHT_CAP_VHT_LINK_ADAPTATION_VHT_UNSOL_MFB 0x08000000 | 1276 | #define IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK \ |
| 1173 | #define IEEE80211_VHT_CAP_VHT_LINK_ADAPTATION_VHT_MRQ_MFB 0x0c000000 | 1277 | (7 << IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_SHIFT) |
| 1174 | #define IEEE80211_VHT_CAP_RX_ANTENNA_PATTERN 0x10000000 | 1278 | #define IEEE80211_VHT_CAP_VHT_LINK_ADAPTATION_VHT_UNSOL_MFB 0x08000000 |
| 1175 | #define IEEE80211_VHT_CAP_TX_ANTENNA_PATTERN 0x20000000 | 1279 | #define IEEE80211_VHT_CAP_VHT_LINK_ADAPTATION_VHT_MRQ_MFB 0x0c000000 |
| 1280 | #define IEEE80211_VHT_CAP_RX_ANTENNA_PATTERN 0x10000000 | ||
| 1281 | #define IEEE80211_VHT_CAP_TX_ANTENNA_PATTERN 0x20000000 | ||
| 1176 | 1282 | ||
| 1177 | /* Authentication algorithms */ | 1283 | /* Authentication algorithms */ |
| 1178 | #define WLAN_AUTH_OPEN 0 | 1284 | #define WLAN_AUTH_OPEN 0 |
| @@ -1440,8 +1546,6 @@ enum ieee80211_eid { | |||
| 1440 | 1546 | ||
| 1441 | WLAN_EID_RSN = 48, | 1547 | WLAN_EID_RSN = 48, |
| 1442 | WLAN_EID_MMIE = 76, | 1548 | WLAN_EID_MMIE = 76, |
| 1443 | WLAN_EID_WPA = 221, | ||
| 1444 | WLAN_EID_GENERIC = 221, | ||
| 1445 | WLAN_EID_VENDOR_SPECIFIC = 221, | 1549 | WLAN_EID_VENDOR_SPECIFIC = 221, |
| 1446 | WLAN_EID_QOS_PARAMETER = 222, | 1550 | WLAN_EID_QOS_PARAMETER = 222, |
| 1447 | 1551 | ||
diff --git a/include/linux/if_tunnel.h b/include/linux/if_tunnel.h index 1cc595a67cc9..f4e56ecd0b1a 100644 --- a/include/linux/if_tunnel.h +++ b/include/linux/if_tunnel.h | |||
| @@ -4,5 +4,22 @@ | |||
| 4 | #include <linux/ip.h> | 4 | #include <linux/ip.h> |
| 5 | #include <linux/in6.h> | 5 | #include <linux/in6.h> |
| 6 | #include <uapi/linux/if_tunnel.h> | 6 | #include <uapi/linux/if_tunnel.h> |
| 7 | #include <linux/u64_stats_sync.h> | ||
| 8 | |||
| 9 | /* | ||
| 10 | * Locking : hash tables are protected by RCU and RTNL | ||
| 11 | */ | ||
| 12 | |||
| 13 | #define for_each_ip_tunnel_rcu(pos, start) \ | ||
| 14 | for (pos = rcu_dereference(start); pos; pos = rcu_dereference(pos->next)) | ||
| 15 | |||
| 16 | /* often modified stats are per cpu, other are shared (netdev->stats) */ | ||
| 17 | struct pcpu_tstats { | ||
| 18 | u64 rx_packets; | ||
| 19 | u64 rx_bytes; | ||
| 20 | u64 tx_packets; | ||
| 21 | u64 tx_bytes; | ||
| 22 | struct u64_stats_sync syncp; | ||
| 23 | }; | ||
| 7 | 24 | ||
| 8 | #endif /* _IF_TUNNEL_H_ */ | 25 | #endif /* _IF_TUNNEL_H_ */ |
diff --git a/include/linux/inetdevice.h b/include/linux/inetdevice.h index d032780d0ce5..a9d828976a77 100644 --- a/include/linux/inetdevice.h +++ b/include/linux/inetdevice.h | |||
| @@ -171,6 +171,9 @@ struct in_ifaddr { | |||
| 171 | extern int register_inetaddr_notifier(struct notifier_block *nb); | 171 | extern int register_inetaddr_notifier(struct notifier_block *nb); |
| 172 | extern int unregister_inetaddr_notifier(struct notifier_block *nb); | 172 | extern int unregister_inetaddr_notifier(struct notifier_block *nb); |
| 173 | 173 | ||
| 174 | extern void inet_netconf_notify_devconf(struct net *net, int type, int ifindex, | ||
| 175 | struct ipv4_devconf *devconf); | ||
| 176 | |||
| 174 | extern struct net_device *__ip_dev_find(struct net *net, __be32 addr, bool devref); | 177 | extern struct net_device *__ip_dev_find(struct net *net, __be32 addr, bool devref); |
| 175 | static inline struct net_device *ip_dev_find(struct net *net, __be32 addr) | 178 | static inline struct net_device *ip_dev_find(struct net *net, __be32 addr) |
| 176 | { | 179 | { |
diff --git a/include/linux/ip.h b/include/linux/ip.h index 58b82a22a52b..492bc6513533 100644 --- a/include/linux/ip.h +++ b/include/linux/ip.h | |||
| @@ -25,6 +25,11 @@ static inline struct iphdr *ip_hdr(const struct sk_buff *skb) | |||
| 25 | return (struct iphdr *)skb_network_header(skb); | 25 | return (struct iphdr *)skb_network_header(skb); |
| 26 | } | 26 | } |
| 27 | 27 | ||
| 28 | static inline struct iphdr *inner_ip_hdr(const struct sk_buff *skb) | ||
| 29 | { | ||
| 30 | return (struct iphdr *)skb_inner_network_header(skb); | ||
| 31 | } | ||
| 32 | |||
| 28 | static inline struct iphdr *ipip_hdr(const struct sk_buff *skb) | 33 | static inline struct iphdr *ipip_hdr(const struct sk_buff *skb) |
| 29 | { | 34 | { |
| 30 | return (struct iphdr *)skb_transport_header(skb); | 35 | return (struct iphdr *)skb_transport_header(skb); |
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h index bcba48a97868..faed1e357dd6 100644 --- a/include/linux/ipv6.h +++ b/include/linux/ipv6.h | |||
| @@ -47,6 +47,7 @@ struct ipv6_devconf { | |||
| 47 | __s32 disable_ipv6; | 47 | __s32 disable_ipv6; |
| 48 | __s32 accept_dad; | 48 | __s32 accept_dad; |
| 49 | __s32 force_tllao; | 49 | __s32 force_tllao; |
| 50 | __s32 ndisc_notify; | ||
| 50 | void *sysctl; | 51 | void *sysctl; |
| 51 | }; | 52 | }; |
| 52 | 53 | ||
| @@ -66,6 +67,11 @@ static inline struct ipv6hdr *ipv6_hdr(const struct sk_buff *skb) | |||
| 66 | return (struct ipv6hdr *)skb_network_header(skb); | 67 | return (struct ipv6hdr *)skb_network_header(skb); |
| 67 | } | 68 | } |
| 68 | 69 | ||
| 70 | static inline struct ipv6hdr *inner_ipv6_hdr(const struct sk_buff *skb) | ||
| 71 | { | ||
| 72 | return (struct ipv6hdr *)skb_inner_network_header(skb); | ||
| 73 | } | ||
| 74 | |||
| 69 | static inline struct ipv6hdr *ipipv6_hdr(const struct sk_buff *skb) | 75 | static inline struct ipv6hdr *ipipv6_hdr(const struct sk_buff *skb) |
| 70 | { | 76 | { |
| 71 | return (struct ipv6hdr *)skb_transport_header(skb); | 77 | return (struct ipv6hdr *)skb_transport_header(skb); |
| @@ -363,20 +369,22 @@ static inline struct raw6_sock *raw6_sk(const struct sock *sk) | |||
| 363 | #define inet_v6_ipv6only(__sk) 0 | 369 | #define inet_v6_ipv6only(__sk) 0 |
| 364 | #endif /* IS_ENABLED(CONFIG_IPV6) */ | 370 | #endif /* IS_ENABLED(CONFIG_IPV6) */ |
| 365 | 371 | ||
| 366 | #define INET6_MATCH(__sk, __net, __hash, __saddr, __daddr, __ports, __dif)\ | 372 | #define INET6_MATCH(__sk, __net, __saddr, __daddr, __ports, __dif) \ |
| 367 | (((__sk)->sk_hash == (__hash)) && sock_net((__sk)) == (__net) && \ | 373 | ((inet_sk(__sk)->inet_portpair == (__ports)) && \ |
| 368 | ((*((__portpair *)&(inet_sk(__sk)->inet_dport))) == (__ports)) && \ | 374 | ((__sk)->sk_family == AF_INET6) && \ |
| 369 | ((__sk)->sk_family == AF_INET6) && \ | 375 | ipv6_addr_equal(&inet6_sk(__sk)->daddr, (__saddr)) && \ |
| 370 | ipv6_addr_equal(&inet6_sk(__sk)->daddr, (__saddr)) && \ | 376 | ipv6_addr_equal(&inet6_sk(__sk)->rcv_saddr, (__daddr)) && \ |
| 371 | ipv6_addr_equal(&inet6_sk(__sk)->rcv_saddr, (__daddr)) && \ | 377 | (!(__sk)->sk_bound_dev_if || \ |
| 372 | (!((__sk)->sk_bound_dev_if) || ((__sk)->sk_bound_dev_if == (__dif)))) | 378 | ((__sk)->sk_bound_dev_if == (__dif))) && \ |
| 373 | 379 | net_eq(sock_net(__sk), (__net))) | |
| 374 | #define INET6_TW_MATCH(__sk, __net, __hash, __saddr, __daddr, __ports, __dif) \ | 380 | |
| 375 | (((__sk)->sk_hash == (__hash)) && sock_net((__sk)) == (__net) && \ | 381 | #define INET6_TW_MATCH(__sk, __net, __saddr, __daddr, __ports, __dif) \ |
| 376 | (*((__portpair *)&(inet_twsk(__sk)->tw_dport)) == (__ports)) && \ | 382 | ((inet_twsk(__sk)->tw_portpair == (__ports)) && \ |
| 377 | ((__sk)->sk_family == PF_INET6) && \ | 383 | ((__sk)->sk_family == AF_INET6) && \ |
| 378 | (ipv6_addr_equal(&inet6_twsk(__sk)->tw_v6_daddr, (__saddr))) && \ | 384 | ipv6_addr_equal(&inet6_twsk(__sk)->tw_v6_daddr, (__saddr)) && \ |
| 379 | (ipv6_addr_equal(&inet6_twsk(__sk)->tw_v6_rcv_saddr, (__daddr))) && \ | 385 | ipv6_addr_equal(&inet6_twsk(__sk)->tw_v6_rcv_saddr, (__daddr)) && \ |
| 380 | (!((__sk)->sk_bound_dev_if) || ((__sk)->sk_bound_dev_if == (__dif)))) | 386 | (!(__sk)->sk_bound_dev_if || \ |
| 387 | ((__sk)->sk_bound_dev_if == (__dif))) && \ | ||
| 388 | net_eq(sock_net(__sk), (__net))) | ||
| 381 | 389 | ||
| 382 | #endif /* _IPV6_H */ | 390 | #endif /* _IPV6_H */ |
diff --git a/include/linux/ktime.h b/include/linux/ktime.h index 06177ba10a16..e83512f63df5 100644 --- a/include/linux/ktime.h +++ b/include/linux/ktime.h | |||
| @@ -282,6 +282,25 @@ static inline int ktime_equal(const ktime_t cmp1, const ktime_t cmp2) | |||
| 282 | return cmp1.tv64 == cmp2.tv64; | 282 | return cmp1.tv64 == cmp2.tv64; |
| 283 | } | 283 | } |
| 284 | 284 | ||
| 285 | /** | ||
| 286 | * ktime_compare - Compares two ktime_t variables for less, greater or equal | ||
| 287 | * @cmp1: comparable1 | ||
| 288 | * @cmp2: comparable2 | ||
| 289 | * | ||
| 290 | * Returns ... | ||
| 291 | * cmp1 < cmp2: return <0 | ||
| 292 | * cmp1 == cmp2: return 0 | ||
| 293 | * cmp1 > cmp2: return >0 | ||
| 294 | */ | ||
| 295 | static inline int ktime_compare(const ktime_t cmp1, const ktime_t cmp2) | ||
| 296 | { | ||
| 297 | if (cmp1.tv64 < cmp2.tv64) | ||
| 298 | return -1; | ||
| 299 | if (cmp1.tv64 > cmp2.tv64) | ||
| 300 | return 1; | ||
| 301 | return 0; | ||
| 302 | } | ||
| 303 | |||
| 285 | static inline s64 ktime_to_us(const ktime_t kt) | 304 | static inline s64 ktime_to_us(const ktime_t kt) |
| 286 | { | 305 | { |
| 287 | struct timeval tv = ktime_to_timeval(kt); | 306 | struct timeval tv = ktime_to_timeval(kt); |
diff --git a/include/linux/micrel_phy.h b/include/linux/micrel_phy.h index de201203bc7c..adfe8c058f29 100644 --- a/include/linux/micrel_phy.h +++ b/include/linux/micrel_phy.h | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | 15 | ||
| 16 | #define MICREL_PHY_ID_MASK 0x00fffff0 | 16 | #define MICREL_PHY_ID_MASK 0x00fffff0 |
| 17 | 17 | ||
| 18 | #define PHY_ID_KSZ8873MLL 0x000e7237 | ||
| 18 | #define PHY_ID_KSZ9021 0x00221610 | 19 | #define PHY_ID_KSZ9021 0x00221610 |
| 19 | #define PHY_ID_KS8737 0x00221720 | 20 | #define PHY_ID_KS8737 0x00221720 |
| 20 | #define PHY_ID_KSZ8021 0x00221555 | 21 | #define PHY_ID_KSZ8021 0x00221555 |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index a848ffc327f4..ef9336c9d464 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
| @@ -887,6 +887,10 @@ struct netdev_fcoe_hbainfo { | |||
| 887 | * struct net_device *dev, int idx) | 887 | * struct net_device *dev, int idx) |
| 888 | * Used to add FDB entries to dump requests. Implementers should add | 888 | * Used to add FDB entries to dump requests. Implementers should add |
| 889 | * entries to skb and update idx with the number of entries. | 889 | * entries to skb and update idx with the number of entries. |
| 890 | * | ||
| 891 | * int (*ndo_bridge_setlink)(struct net_device *dev, struct nlmsghdr *nlh) | ||
| 892 | * int (*ndo_bridge_getlink)(struct sk_buff *skb, u32 pid, u32 seq, | ||
| 893 | * struct net_device *dev) | ||
| 890 | */ | 894 | */ |
| 891 | struct net_device_ops { | 895 | struct net_device_ops { |
| 892 | int (*ndo_init)(struct net_device *dev); | 896 | int (*ndo_init)(struct net_device *dev); |
| @@ -998,6 +1002,12 @@ struct net_device_ops { | |||
| 998 | struct netlink_callback *cb, | 1002 | struct netlink_callback *cb, |
| 999 | struct net_device *dev, | 1003 | struct net_device *dev, |
| 1000 | int idx); | 1004 | int idx); |
| 1005 | |||
| 1006 | int (*ndo_bridge_setlink)(struct net_device *dev, | ||
| 1007 | struct nlmsghdr *nlh); | ||
| 1008 | int (*ndo_bridge_getlink)(struct sk_buff *skb, | ||
| 1009 | u32 pid, u32 seq, | ||
| 1010 | struct net_device *dev); | ||
| 1001 | }; | 1011 | }; |
| 1002 | 1012 | ||
| 1003 | /* | 1013 | /* |
| @@ -1053,6 +1063,12 @@ struct net_device { | |||
| 1053 | netdev_features_t wanted_features; | 1063 | netdev_features_t wanted_features; |
| 1054 | /* mask of features inheritable by VLAN devices */ | 1064 | /* mask of features inheritable by VLAN devices */ |
| 1055 | netdev_features_t vlan_features; | 1065 | netdev_features_t vlan_features; |
| 1066 | /* mask of features inherited by encapsulating devices | ||
| 1067 | * This field indicates what encapsulation offloads | ||
| 1068 | * the hardware is capable of doing, and drivers will | ||
| 1069 | * need to set them appropriately. | ||
| 1070 | */ | ||
| 1071 | netdev_features_t hw_enc_features; | ||
| 1056 | 1072 | ||
| 1057 | /* Interface index. Unique device identifier */ | 1073 | /* Interface index. Unique device identifier */ |
| 1058 | int ifindex; | 1074 | int ifindex; |
| @@ -1502,16 +1518,25 @@ struct packet_type { | |||
| 1502 | struct net_device *, | 1518 | struct net_device *, |
| 1503 | struct packet_type *, | 1519 | struct packet_type *, |
| 1504 | struct net_device *); | 1520 | struct net_device *); |
| 1521 | bool (*id_match)(struct packet_type *ptype, | ||
| 1522 | struct sock *sk); | ||
| 1523 | void *af_packet_priv; | ||
| 1524 | struct list_head list; | ||
| 1525 | }; | ||
| 1526 | |||
| 1527 | struct offload_callbacks { | ||
| 1505 | struct sk_buff *(*gso_segment)(struct sk_buff *skb, | 1528 | struct sk_buff *(*gso_segment)(struct sk_buff *skb, |
| 1506 | netdev_features_t features); | 1529 | netdev_features_t features); |
| 1507 | int (*gso_send_check)(struct sk_buff *skb); | 1530 | int (*gso_send_check)(struct sk_buff *skb); |
| 1508 | struct sk_buff **(*gro_receive)(struct sk_buff **head, | 1531 | struct sk_buff **(*gro_receive)(struct sk_buff **head, |
| 1509 | struct sk_buff *skb); | 1532 | struct sk_buff *skb); |
| 1510 | int (*gro_complete)(struct sk_buff *skb); | 1533 | int (*gro_complete)(struct sk_buff *skb); |
| 1511 | bool (*id_match)(struct packet_type *ptype, | 1534 | }; |
| 1512 | struct sock *sk); | 1535 | |
| 1513 | void *af_packet_priv; | 1536 | struct packet_offload { |
| 1514 | struct list_head list; | 1537 | __be16 type; /* This is really htons(ether_type). */ |
| 1538 | struct offload_callbacks callbacks; | ||
| 1539 | struct list_head list; | ||
| 1515 | }; | 1540 | }; |
| 1516 | 1541 | ||
| 1517 | #include <linux/notifier.h> | 1542 | #include <linux/notifier.h> |
| @@ -1551,6 +1576,8 @@ extern int call_netdevice_notifiers(unsigned long val, struct net_device *dev); | |||
| 1551 | 1576 | ||
| 1552 | extern rwlock_t dev_base_lock; /* Device list lock */ | 1577 | extern rwlock_t dev_base_lock; /* Device list lock */ |
| 1553 | 1578 | ||
| 1579 | extern seqlock_t devnet_rename_seq; /* Device rename lock */ | ||
| 1580 | |||
| 1554 | 1581 | ||
| 1555 | #define for_each_netdev(net, d) \ | 1582 | #define for_each_netdev(net, d) \ |
| 1556 | list_for_each_entry(d, &(net)->dev_base_head, dev_list) | 1583 | list_for_each_entry(d, &(net)->dev_base_head, dev_list) |
| @@ -1608,6 +1635,9 @@ extern struct net_device *__dev_getfirstbyhwtype(struct net *net, unsigned short | |||
| 1608 | extern void dev_add_pack(struct packet_type *pt); | 1635 | extern void dev_add_pack(struct packet_type *pt); |
| 1609 | extern void dev_remove_pack(struct packet_type *pt); | 1636 | extern void dev_remove_pack(struct packet_type *pt); |
| 1610 | extern void __dev_remove_pack(struct packet_type *pt); | 1637 | extern void __dev_remove_pack(struct packet_type *pt); |
| 1638 | extern void dev_add_offload(struct packet_offload *po); | ||
| 1639 | extern void dev_remove_offload(struct packet_offload *po); | ||
| 1640 | extern void __dev_remove_offload(struct packet_offload *po); | ||
| 1611 | 1641 | ||
| 1612 | extern struct net_device *dev_get_by_flags_rcu(struct net *net, unsigned short flags, | 1642 | extern struct net_device *dev_get_by_flags_rcu(struct net *net, unsigned short flags, |
| 1613 | unsigned short mask); | 1643 | unsigned short mask); |
| @@ -2132,16 +2162,10 @@ extern void dev_kfree_skb_any(struct sk_buff *skb); | |||
| 2132 | extern int netif_rx(struct sk_buff *skb); | 2162 | extern int netif_rx(struct sk_buff *skb); |
| 2133 | extern int netif_rx_ni(struct sk_buff *skb); | 2163 | extern int netif_rx_ni(struct sk_buff *skb); |
| 2134 | extern int netif_receive_skb(struct sk_buff *skb); | 2164 | extern int netif_receive_skb(struct sk_buff *skb); |
| 2135 | extern gro_result_t dev_gro_receive(struct napi_struct *napi, | ||
| 2136 | struct sk_buff *skb); | ||
| 2137 | extern gro_result_t napi_skb_finish(gro_result_t ret, struct sk_buff *skb); | ||
| 2138 | extern gro_result_t napi_gro_receive(struct napi_struct *napi, | 2165 | extern gro_result_t napi_gro_receive(struct napi_struct *napi, |
| 2139 | struct sk_buff *skb); | 2166 | struct sk_buff *skb); |
| 2140 | extern void napi_gro_flush(struct napi_struct *napi, bool flush_old); | 2167 | extern void napi_gro_flush(struct napi_struct *napi, bool flush_old); |
| 2141 | extern struct sk_buff * napi_get_frags(struct napi_struct *napi); | 2168 | extern struct sk_buff * napi_get_frags(struct napi_struct *napi); |
| 2142 | extern gro_result_t napi_frags_finish(struct napi_struct *napi, | ||
| 2143 | struct sk_buff *skb, | ||
| 2144 | gro_result_t ret); | ||
| 2145 | extern gro_result_t napi_gro_frags(struct napi_struct *napi); | 2169 | extern gro_result_t napi_gro_frags(struct napi_struct *napi); |
| 2146 | 2170 | ||
| 2147 | static inline void napi_free_frags(struct napi_struct *napi) | 2171 | static inline void napi_free_frags(struct napi_struct *napi) |
diff --git a/include/linux/netfilter_ipv6/ip6_tables.h b/include/linux/netfilter_ipv6/ip6_tables.h index 5f84c6229dc6..610208b18c05 100644 --- a/include/linux/netfilter_ipv6/ip6_tables.h +++ b/include/linux/netfilter_ipv6/ip6_tables.h | |||
| @@ -47,15 +47,6 @@ ip6t_ext_hdr(u8 nexthdr) | |||
| 47 | (nexthdr == IPPROTO_DSTOPTS); | 47 | (nexthdr == IPPROTO_DSTOPTS); |
| 48 | } | 48 | } |
| 49 | 49 | ||
| 50 | enum { | ||
| 51 | IP6T_FH_F_FRAG = (1 << 0), | ||
| 52 | IP6T_FH_F_AUTH = (1 << 1), | ||
| 53 | }; | ||
| 54 | |||
| 55 | /* find specified header and get offset to it */ | ||
| 56 | extern int ipv6_find_hdr(const struct sk_buff *skb, unsigned int *offset, | ||
| 57 | int target, unsigned short *fragoff, int *fragflg); | ||
| 58 | |||
| 59 | #ifdef CONFIG_COMPAT | 50 | #ifdef CONFIG_COMPAT |
| 60 | #include <net/compat.h> | 51 | #include <net/compat.h> |
| 61 | 52 | ||
diff --git a/include/linux/nfc/pn544.h b/include/linux/nfc/pn544.h deleted file mode 100644 index 9890bbaf4328..000000000000 --- a/include/linux/nfc/pn544.h +++ /dev/null | |||
| @@ -1,104 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Driver include for the PN544 NFC chip. | ||
| 3 | * | ||
| 4 | * Copyright (C) Nokia Corporation | ||
| 5 | * | ||
| 6 | * Author: Jari Vanhala <ext-jari.vanhala@nokia.com> | ||
| 7 | * Contact: Matti Aaltoenn <matti.j.aaltonen@nokia.com> | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or | ||
| 10 | * modify it under the terms of the GNU General Public License | ||
| 11 | * version 2 as published by the Free Software Foundation. | ||
| 12 | * | ||
| 13 | * This program is distributed in the hope that it will be useful, | ||
| 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 16 | * GNU General Public License for more details. | ||
| 17 | * | ||
| 18 | * You should have received a copy of the GNU General Public License | ||
| 19 | * along with this program; if not, write to the Free Software | ||
| 20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 21 | */ | ||
| 22 | |||
| 23 | #ifndef _PN544_H_ | ||
| 24 | #define _PN544_H_ | ||
| 25 | |||
| 26 | #include <linux/i2c.h> | ||
| 27 | |||
| 28 | #define PN544_DRIVER_NAME "pn544" | ||
| 29 | #define PN544_MAXWINDOW_SIZE 7 | ||
| 30 | #define PN544_WINDOW_SIZE 4 | ||
| 31 | #define PN544_RETRIES 10 | ||
| 32 | #define PN544_MAX_I2C_TRANSFER 0x0400 | ||
| 33 | #define PN544_MSG_MAX_SIZE 0x21 /* at normal HCI mode */ | ||
| 34 | |||
| 35 | /* ioctl */ | ||
| 36 | #define PN544_CHAR_BASE 'P' | ||
| 37 | #define PN544_IOR(num, dtype) _IOR(PN544_CHAR_BASE, num, dtype) | ||
| 38 | #define PN544_IOW(num, dtype) _IOW(PN544_CHAR_BASE, num, dtype) | ||
| 39 | #define PN544_GET_FW_MODE PN544_IOW(1, unsigned int) | ||
| 40 | #define PN544_SET_FW_MODE PN544_IOW(2, unsigned int) | ||
| 41 | #define PN544_GET_DEBUG PN544_IOW(3, unsigned int) | ||
| 42 | #define PN544_SET_DEBUG PN544_IOW(4, unsigned int) | ||
| 43 | |||
| 44 | /* Timing restrictions (ms) */ | ||
| 45 | #define PN544_RESETVEN_TIME 30 /* 7 */ | ||
| 46 | #define PN544_PVDDVEN_TIME 0 | ||
| 47 | #define PN544_VBATVEN_TIME 0 | ||
| 48 | #define PN544_GPIO4VEN_TIME 0 | ||
| 49 | #define PN544_WAKEUP_ACK 5 | ||
| 50 | #define PN544_WAKEUP_GUARD (PN544_WAKEUP_ACK + 1) | ||
| 51 | #define PN544_INACTIVITY_TIME 1000 | ||
| 52 | #define PN544_INTERFRAME_DELAY 200 /* us */ | ||
| 53 | #define PN544_BAUDRATE_CHANGE 150 /* us */ | ||
| 54 | |||
| 55 | /* Debug bits */ | ||
| 56 | #define PN544_DEBUG_BUF 0x01 | ||
| 57 | #define PN544_DEBUG_READ 0x02 | ||
| 58 | #define PN544_DEBUG_WRITE 0x04 | ||
| 59 | #define PN544_DEBUG_IRQ 0x08 | ||
| 60 | #define PN544_DEBUG_CALLS 0x10 | ||
| 61 | #define PN544_DEBUG_MODE 0x20 | ||
| 62 | |||
| 63 | /* Normal (HCI) mode */ | ||
| 64 | #define PN544_LLC_HCI_OVERHEAD 3 /* header + crc (to length) */ | ||
| 65 | #define PN544_LLC_MIN_SIZE (1 + PN544_LLC_HCI_OVERHEAD) /* length + */ | ||
| 66 | #define PN544_LLC_MAX_DATA (PN544_MSG_MAX_SIZE - 2) | ||
| 67 | #define PN544_LLC_MAX_HCI_SIZE (PN544_LLC_MAX_DATA - 2) | ||
| 68 | |||
| 69 | struct pn544_llc_packet { | ||
| 70 | unsigned char length; /* of rest of packet */ | ||
| 71 | unsigned char header; | ||
| 72 | unsigned char data[PN544_LLC_MAX_DATA]; /* includes crc-ccitt */ | ||
| 73 | }; | ||
| 74 | |||
| 75 | /* Firmware upgrade mode */ | ||
| 76 | #define PN544_FW_HEADER_SIZE 3 | ||
| 77 | /* max fw transfer is 1024bytes, but I2C limits it to 0xC0 */ | ||
| 78 | #define PN544_MAX_FW_DATA (PN544_MAX_I2C_TRANSFER - PN544_FW_HEADER_SIZE) | ||
| 79 | |||
| 80 | struct pn544_fw_packet { | ||
| 81 | unsigned char command; /* status in answer */ | ||
| 82 | unsigned char length[2]; /* big-endian order (msf) */ | ||
| 83 | unsigned char data[PN544_MAX_FW_DATA]; | ||
| 84 | }; | ||
| 85 | |||
| 86 | #ifdef __KERNEL__ | ||
| 87 | enum { | ||
| 88 | NFC_GPIO_ENABLE, | ||
| 89 | NFC_GPIO_FW_RESET, | ||
| 90 | NFC_GPIO_IRQ | ||
| 91 | }; | ||
| 92 | |||
| 93 | /* board config */ | ||
| 94 | struct pn544_nfc_platform_data { | ||
| 95 | int (*request_resources) (struct i2c_client *client); | ||
| 96 | void (*free_resources) (void); | ||
| 97 | void (*enable) (int fw); | ||
| 98 | int (*test) (void); | ||
| 99 | void (*disable) (void); | ||
| 100 | int (*get_gpio)(int type); | ||
| 101 | }; | ||
| 102 | #endif /* __KERNEL__ */ | ||
| 103 | |||
| 104 | #endif /* _PN544_H_ */ | ||
diff --git a/include/linux/openvswitch.h b/include/linux/openvswitch.h index eb1efa54fe84..d42e174bd0c8 100644 --- a/include/linux/openvswitch.h +++ b/include/linux/openvswitch.h | |||
| @@ -243,6 +243,7 @@ enum ovs_key_attr { | |||
| 243 | OVS_KEY_ATTR_ICMPV6, /* struct ovs_key_icmpv6 */ | 243 | OVS_KEY_ATTR_ICMPV6, /* struct ovs_key_icmpv6 */ |
| 244 | OVS_KEY_ATTR_ARP, /* struct ovs_key_arp */ | 244 | OVS_KEY_ATTR_ARP, /* struct ovs_key_arp */ |
| 245 | OVS_KEY_ATTR_ND, /* struct ovs_key_nd */ | 245 | OVS_KEY_ATTR_ND, /* struct ovs_key_nd */ |
| 246 | OVS_KEY_ATTR_SKB_MARK, /* u32 skb mark */ | ||
| 246 | __OVS_KEY_ATTR_MAX | 247 | __OVS_KEY_ATTR_MAX |
| 247 | }; | 248 | }; |
| 248 | 249 | ||
diff --git a/include/linux/pci.h b/include/linux/pci.h index d03d2463efac..af8229244ee2 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
| @@ -604,6 +604,20 @@ struct pci_driver { | |||
| 604 | .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID | 604 | .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID |
| 605 | 605 | ||
| 606 | /** | 606 | /** |
| 607 | * PCI_DEVICE_SUB - macro used to describe a specific pci device with subsystem | ||
| 608 | * @vend: the 16 bit PCI Vendor ID | ||
| 609 | * @dev: the 16 bit PCI Device ID | ||
| 610 | * @subvend: the 16 bit PCI Subvendor ID | ||
| 611 | * @subdev: the 16 bit PCI Subdevice ID | ||
| 612 | * | ||
| 613 | * This macro is used to create a struct pci_device_id that matches a | ||
| 614 | * specific device with subsystem information. | ||
| 615 | */ | ||
| 616 | #define PCI_DEVICE_SUB(vend, dev, subvend, subdev) \ | ||
| 617 | .vendor = (vend), .device = (dev), \ | ||
| 618 | .subvendor = (subvend), .subdevice = (subdev) | ||
| 619 | |||
| 620 | /** | ||
| 607 | * PCI_DEVICE_CLASS - macro used to describe a specific pci device class | 621 | * PCI_DEVICE_CLASS - macro used to describe a specific pci device class |
| 608 | * @dev_class: the class, subclass, prog-if triple for this device | 622 | * @dev_class: the class, subclass, prog-if triple for this device |
| 609 | * @dev_class_mask: the class mask for this device | 623 | * @dev_class_mask: the class mask for this device |
diff --git a/include/linux/platform_data/cpsw.h b/include/linux/platform_data/cpsw.h index c4e23d029498..24368a2e8b87 100644 --- a/include/linux/platform_data/cpsw.h +++ b/include/linux/platform_data/cpsw.h | |||
| @@ -18,9 +18,7 @@ | |||
| 18 | #include <linux/if_ether.h> | 18 | #include <linux/if_ether.h> |
| 19 | 19 | ||
| 20 | struct cpsw_slave_data { | 20 | struct cpsw_slave_data { |
| 21 | u32 slave_reg_ofs; | 21 | char phy_id[MII_BUS_ID_SIZE]; |
| 22 | u32 sliver_reg_ofs; | ||
| 23 | const char *phy_id; | ||
| 24 | int phy_if; | 22 | int phy_if; |
| 25 | u8 mac_addr[ETH_ALEN]; | 23 | u8 mac_addr[ETH_ALEN]; |
| 26 | }; | 24 | }; |
| @@ -28,27 +26,14 @@ struct cpsw_slave_data { | |||
| 28 | struct cpsw_platform_data { | 26 | struct cpsw_platform_data { |
| 29 | u32 ss_reg_ofs; /* Subsystem control register offset */ | 27 | u32 ss_reg_ofs; /* Subsystem control register offset */ |
| 30 | u32 channels; /* number of cpdma channels (symmetric) */ | 28 | u32 channels; /* number of cpdma channels (symmetric) */ |
| 31 | u32 cpdma_reg_ofs; /* cpdma register offset */ | ||
| 32 | u32 cpdma_sram_ofs; /* cpdma sram offset */ | ||
| 33 | |||
| 34 | u32 slaves; /* number of slave cpgmac ports */ | 29 | u32 slaves; /* number of slave cpgmac ports */ |
| 35 | struct cpsw_slave_data *slave_data; | 30 | struct cpsw_slave_data *slave_data; |
| 36 | 31 | u32 cpts_active_slave; /* time stamping slave */ | |
| 37 | u32 ale_reg_ofs; /* address lookup engine reg offset */ | 32 | u32 cpts_clock_mult; /* convert input clock ticks to nanoseconds */ |
| 33 | u32 cpts_clock_shift; /* convert input clock ticks to nanoseconds */ | ||
| 38 | u32 ale_entries; /* ale table size */ | 34 | u32 ale_entries; /* ale table size */ |
| 39 | |||
| 40 | u32 host_port_reg_ofs; /* cpsw cpdma host port registers */ | ||
| 41 | u32 host_port_num; /* The port number for the host port */ | ||
| 42 | |||
| 43 | u32 hw_stats_reg_ofs; /* cpsw hardware statistics counters */ | ||
| 44 | |||
| 45 | u32 bd_ram_ofs; /* embedded buffer descriptor RAM offset*/ | ||
| 46 | u32 bd_ram_size; /*buffer descriptor ram size */ | 35 | u32 bd_ram_size; /*buffer descriptor ram size */ |
| 47 | u32 hw_ram_addr; /*if the HW address for BD RAM is different */ | ||
| 48 | bool no_bd_ram; /* no embedded BD ram*/ | ||
| 49 | |||
| 50 | u32 rx_descs; /* Number of Rx Descriptios */ | 36 | u32 rx_descs; /* Number of Rx Descriptios */ |
| 51 | |||
| 52 | u32 mac_control; /* Mac control register */ | 37 | u32 mac_control; /* Mac control register */ |
| 53 | }; | 38 | }; |
| 54 | 39 | ||
diff --git a/include/linux/platform_data/macb.h b/include/linux/platform_data/macb.h index b081c7245ec8..044a124bfbbc 100644 --- a/include/linux/platform_data/macb.h +++ b/include/linux/platform_data/macb.h | |||
| @@ -12,6 +12,7 @@ struct macb_platform_data { | |||
| 12 | u32 phy_mask; | 12 | u32 phy_mask; |
| 13 | int phy_irq_pin; /* PHY IRQ */ | 13 | int phy_irq_pin; /* PHY IRQ */ |
| 14 | u8 is_rmii; /* using RMII interface? */ | 14 | u8 is_rmii; /* using RMII interface? */ |
| 15 | u8 rev_eth_addr; /* reverse Ethernet address byte order */ | ||
| 15 | }; | 16 | }; |
| 16 | 17 | ||
| 17 | #endif /* __MACB_PDATA_H__ */ | 18 | #endif /* __MACB_PDATA_H__ */ |
diff --git a/include/linux/platform_data/pn544.h b/include/linux/platform_data/pn544.h new file mode 100644 index 000000000000..713bfd703342 --- /dev/null +++ b/include/linux/platform_data/pn544.h | |||
| @@ -0,0 +1,44 @@ | |||
| 1 | /* | ||
| 2 | * Driver include for the PN544 NFC chip. | ||
| 3 | * | ||
| 4 | * Copyright (C) Nokia Corporation | ||
| 5 | * | ||
| 6 | * Author: Jari Vanhala <ext-jari.vanhala@nokia.com> | ||
| 7 | * Contact: Matti Aaltoenn <matti.j.aaltonen@nokia.com> | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or | ||
| 10 | * modify it under the terms of the GNU General Public License | ||
| 11 | * version 2 as published by the Free Software Foundation. | ||
| 12 | * | ||
| 13 | * This program is distributed in the hope that it will be useful, | ||
| 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 16 | * GNU General Public License for more details. | ||
| 17 | * | ||
| 18 | * You should have received a copy of the GNU General Public License | ||
| 19 | * along with this program; if not, write to the Free Software | ||
| 20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 21 | */ | ||
| 22 | |||
| 23 | #ifndef _PN544_H_ | ||
| 24 | #define _PN544_H_ | ||
| 25 | |||
| 26 | #include <linux/i2c.h> | ||
| 27 | |||
| 28 | enum { | ||
| 29 | NFC_GPIO_ENABLE, | ||
| 30 | NFC_GPIO_FW_RESET, | ||
| 31 | NFC_GPIO_IRQ | ||
| 32 | }; | ||
| 33 | |||
| 34 | /* board config */ | ||
| 35 | struct pn544_nfc_platform_data { | ||
| 36 | int (*request_resources) (struct i2c_client *client); | ||
| 37 | void (*free_resources) (void); | ||
| 38 | void (*enable) (int fw); | ||
| 39 | int (*test) (void); | ||
| 40 | void (*disable) (void); | ||
| 41 | int (*get_gpio)(int type); | ||
| 42 | }; | ||
| 43 | |||
| 44 | #endif /* _PN544_H_ */ | ||
diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h index 7002bbfd5d4a..489dd7bb28ec 100644 --- a/include/linux/rtnetlink.h +++ b/include/linux/rtnetlink.h | |||
| @@ -69,4 +69,7 @@ extern int ndo_dflt_fdb_dump(struct sk_buff *skb, | |||
| 69 | struct netlink_callback *cb, | 69 | struct netlink_callback *cb, |
| 70 | struct net_device *dev, | 70 | struct net_device *dev, |
| 71 | int idx); | 71 | int idx); |
| 72 | |||
| 73 | extern int ndo_dflt_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq, | ||
| 74 | struct net_device *dev, u16 mode); | ||
| 72 | #endif /* __LINUX_RTNETLINK_H */ | 75 | #endif /* __LINUX_RTNETLINK_H */ |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 6a2c34e6d962..320e976d5ab8 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
| @@ -235,11 +235,13 @@ enum { | |||
| 235 | /* | 235 | /* |
| 236 | * The callback notifies userspace to release buffers when skb DMA is done in | 236 | * The callback notifies userspace to release buffers when skb DMA is done in |
| 237 | * lower device, the skb last reference should be 0 when calling this. | 237 | * lower device, the skb last reference should be 0 when calling this. |
| 238 | * The zerocopy_success argument is true if zero copy transmit occurred, | ||
| 239 | * false on data copy or out of memory error caused by data copy attempt. | ||
| 238 | * The ctx field is used to track device context. | 240 | * The ctx field is used to track device context. |
| 239 | * The desc field is used to track userspace buffer index. | 241 | * The desc field is used to track userspace buffer index. |
| 240 | */ | 242 | */ |
| 241 | struct ubuf_info { | 243 | struct ubuf_info { |
| 242 | void (*callback)(struct ubuf_info *); | 244 | void (*callback)(struct ubuf_info *, bool zerocopy_success); |
| 243 | void *ctx; | 245 | void *ctx; |
| 244 | unsigned long desc; | 246 | unsigned long desc; |
| 245 | }; | 247 | }; |
| @@ -374,6 +376,8 @@ typedef unsigned char *sk_buff_data_t; | |||
| 374 | * @mark: Generic packet mark | 376 | * @mark: Generic packet mark |
| 375 | * @dropcount: total number of sk_receive_queue overflows | 377 | * @dropcount: total number of sk_receive_queue overflows |
| 376 | * @vlan_tci: vlan tag control information | 378 | * @vlan_tci: vlan tag control information |
| 379 | * @inner_transport_header: Inner transport layer header (encapsulation) | ||
| 380 | * @inner_network_header: Network layer header (encapsulation) | ||
| 377 | * @transport_header: Transport layer header | 381 | * @transport_header: Transport layer header |
| 378 | * @network_header: Network layer header | 382 | * @network_header: Network layer header |
| 379 | * @mac_header: Link layer header | 383 | * @mac_header: Link layer header |
| @@ -469,7 +473,13 @@ struct sk_buff { | |||
| 469 | __u8 wifi_acked:1; | 473 | __u8 wifi_acked:1; |
| 470 | __u8 no_fcs:1; | 474 | __u8 no_fcs:1; |
| 471 | __u8 head_frag:1; | 475 | __u8 head_frag:1; |
| 472 | /* 8/10 bit hole (depending on ndisc_nodetype presence) */ | 476 | /* Encapsulation protocol and NIC drivers should use |
| 477 | * this flag to indicate to each other if the skb contains | ||
| 478 | * encapsulated packet or not and maybe use the inner packet | ||
| 479 | * headers if needed | ||
| 480 | */ | ||
| 481 | __u8 encapsulation:1; | ||
| 482 | /* 7/9 bit hole (depending on ndisc_nodetype presence) */ | ||
| 473 | kmemcheck_bitfield_end(flags2); | 483 | kmemcheck_bitfield_end(flags2); |
| 474 | 484 | ||
| 475 | #ifdef CONFIG_NET_DMA | 485 | #ifdef CONFIG_NET_DMA |
| @@ -484,6 +494,8 @@ struct sk_buff { | |||
| 484 | __u32 avail_size; | 494 | __u32 avail_size; |
| 485 | }; | 495 | }; |
| 486 | 496 | ||
| 497 | sk_buff_data_t inner_transport_header; | ||
| 498 | sk_buff_data_t inner_network_header; | ||
| 487 | sk_buff_data_t transport_header; | 499 | sk_buff_data_t transport_header; |
| 488 | sk_buff_data_t network_header; | 500 | sk_buff_data_t network_header; |
| 489 | sk_buff_data_t mac_header; | 501 | sk_buff_data_t mac_header; |
| @@ -566,6 +578,7 @@ static inline struct rtable *skb_rtable(const struct sk_buff *skb) | |||
| 566 | } | 578 | } |
| 567 | 579 | ||
| 568 | extern void kfree_skb(struct sk_buff *skb); | 580 | extern void kfree_skb(struct sk_buff *skb); |
| 581 | extern void skb_tx_error(struct sk_buff *skb); | ||
| 569 | extern void consume_skb(struct sk_buff *skb); | 582 | extern void consume_skb(struct sk_buff *skb); |
| 570 | extern void __kfree_skb(struct sk_buff *skb); | 583 | extern void __kfree_skb(struct sk_buff *skb); |
| 571 | extern struct kmem_cache *skbuff_head_cache; | 584 | extern struct kmem_cache *skbuff_head_cache; |
| @@ -643,7 +656,7 @@ extern unsigned int skb_find_text(struct sk_buff *skb, unsigned int from, | |||
| 643 | extern void __skb_get_rxhash(struct sk_buff *skb); | 656 | extern void __skb_get_rxhash(struct sk_buff *skb); |
| 644 | static inline __u32 skb_get_rxhash(struct sk_buff *skb) | 657 | static inline __u32 skb_get_rxhash(struct sk_buff *skb) |
| 645 | { | 658 | { |
| 646 | if (!skb->rxhash) | 659 | if (!skb->l4_rxhash) |
| 647 | __skb_get_rxhash(skb); | 660 | __skb_get_rxhash(skb); |
| 648 | 661 | ||
| 649 | return skb->rxhash; | 662 | return skb->rxhash; |
| @@ -1432,12 +1445,53 @@ static inline void skb_reserve(struct sk_buff *skb, int len) | |||
| 1432 | skb->tail += len; | 1445 | skb->tail += len; |
| 1433 | } | 1446 | } |
| 1434 | 1447 | ||
| 1448 | static inline void skb_reset_inner_headers(struct sk_buff *skb) | ||
| 1449 | { | ||
| 1450 | skb->inner_network_header = skb->network_header; | ||
| 1451 | skb->inner_transport_header = skb->transport_header; | ||
| 1452 | } | ||
| 1453 | |||
| 1435 | static inline void skb_reset_mac_len(struct sk_buff *skb) | 1454 | static inline void skb_reset_mac_len(struct sk_buff *skb) |
| 1436 | { | 1455 | { |
| 1437 | skb->mac_len = skb->network_header - skb->mac_header; | 1456 | skb->mac_len = skb->network_header - skb->mac_header; |
| 1438 | } | 1457 | } |
| 1439 | 1458 | ||
| 1440 | #ifdef NET_SKBUFF_DATA_USES_OFFSET | 1459 | #ifdef NET_SKBUFF_DATA_USES_OFFSET |
| 1460 | static inline unsigned char *skb_inner_transport_header(const struct sk_buff | ||
| 1461 | *skb) | ||
| 1462 | { | ||
| 1463 | return skb->head + skb->inner_transport_header; | ||
| 1464 | } | ||
| 1465 | |||
| 1466 | static inline void skb_reset_inner_transport_header(struct sk_buff *skb) | ||
| 1467 | { | ||
| 1468 | skb->inner_transport_header = skb->data - skb->head; | ||
| 1469 | } | ||
| 1470 | |||
| 1471 | static inline void skb_set_inner_transport_header(struct sk_buff *skb, | ||
| 1472 | const int offset) | ||
| 1473 | { | ||
| 1474 | skb_reset_inner_transport_header(skb); | ||
| 1475 | skb->inner_transport_header += offset; | ||
| 1476 | } | ||
| 1477 | |||
| 1478 | static inline unsigned char *skb_inner_network_header(const struct sk_buff *skb) | ||
| 1479 | { | ||
| 1480 | return skb->head + skb->inner_network_header; | ||
| 1481 | } | ||
| 1482 | |||
| 1483 | static inline void skb_reset_inner_network_header(struct sk_buff *skb) | ||
| 1484 | { | ||
| 1485 | skb->inner_network_header = skb->data - skb->head; | ||
| 1486 | } | ||
| 1487 | |||
| 1488 | static inline void skb_set_inner_network_header(struct sk_buff *skb, | ||
| 1489 | const int offset) | ||
| 1490 | { | ||
| 1491 | skb_reset_inner_network_header(skb); | ||
| 1492 | skb->inner_network_header += offset; | ||
| 1493 | } | ||
| 1494 | |||
| 1441 | static inline unsigned char *skb_transport_header(const struct sk_buff *skb) | 1495 | static inline unsigned char *skb_transport_header(const struct sk_buff *skb) |
| 1442 | { | 1496 | { |
| 1443 | return skb->head + skb->transport_header; | 1497 | return skb->head + skb->transport_header; |
| @@ -1493,6 +1547,38 @@ static inline void skb_set_mac_header(struct sk_buff *skb, const int offset) | |||
| 1493 | } | 1547 | } |
| 1494 | 1548 | ||
| 1495 | #else /* NET_SKBUFF_DATA_USES_OFFSET */ | 1549 | #else /* NET_SKBUFF_DATA_USES_OFFSET */ |
| 1550 | static inline unsigned char *skb_inner_transport_header(const struct sk_buff | ||
| 1551 | *skb) | ||
| 1552 | { | ||
| 1553 | return skb->inner_transport_header; | ||
| 1554 | } | ||
| 1555 | |||
| 1556 | static inline void skb_reset_inner_transport_header(struct sk_buff *skb) | ||
| 1557 | { | ||
| 1558 | skb->inner_transport_header = skb->data; | ||
| 1559 | } | ||
| 1560 | |||
| 1561 | static inline void skb_set_inner_transport_header(struct sk_buff *skb, | ||
| 1562 | const int offset) | ||
| 1563 | { | ||
| 1564 | skb->inner_transport_header = skb->data + offset; | ||
| 1565 | } | ||
| 1566 | |||
| 1567 | static inline unsigned char *skb_inner_network_header(const struct sk_buff *skb) | ||
| 1568 | { | ||
| 1569 | return skb->inner_network_header; | ||
| 1570 | } | ||
| 1571 | |||
| 1572 | static inline void skb_reset_inner_network_header(struct sk_buff *skb) | ||
| 1573 | { | ||
| 1574 | skb->inner_network_header = skb->data; | ||
| 1575 | } | ||
| 1576 | |||
| 1577 | static inline void skb_set_inner_network_header(struct sk_buff *skb, | ||
| 1578 | const int offset) | ||
| 1579 | { | ||
| 1580 | skb->inner_network_header = skb->data + offset; | ||
| 1581 | } | ||
| 1496 | 1582 | ||
| 1497 | static inline unsigned char *skb_transport_header(const struct sk_buff *skb) | 1583 | static inline unsigned char *skb_transport_header(const struct sk_buff *skb) |
| 1498 | { | 1584 | { |
| @@ -1571,11 +1657,21 @@ static inline u32 skb_network_header_len(const struct sk_buff *skb) | |||
| 1571 | return skb->transport_header - skb->network_header; | 1657 | return skb->transport_header - skb->network_header; |
| 1572 | } | 1658 | } |
| 1573 | 1659 | ||
| 1660 | static inline u32 skb_inner_network_header_len(const struct sk_buff *skb) | ||
| 1661 | { | ||
| 1662 | return skb->inner_transport_header - skb->inner_network_header; | ||
| 1663 | } | ||
| 1664 | |||
| 1574 | static inline int skb_network_offset(const struct sk_buff *skb) | 1665 | static inline int skb_network_offset(const struct sk_buff *skb) |
| 1575 | { | 1666 | { |
| 1576 | return skb_network_header(skb) - skb->data; | 1667 | return skb_network_header(skb) - skb->data; |
| 1577 | } | 1668 | } |
| 1578 | 1669 | ||
| 1670 | static inline int skb_inner_network_offset(const struct sk_buff *skb) | ||
| 1671 | { | ||
| 1672 | return skb_inner_network_header(skb) - skb->data; | ||
| 1673 | } | ||
| 1674 | |||
| 1579 | static inline int pskb_network_may_pull(struct sk_buff *skb, unsigned int len) | 1675 | static inline int pskb_network_may_pull(struct sk_buff *skb, unsigned int len) |
| 1580 | { | 1676 | { |
| 1581 | return pskb_may_pull(skb, skb_network_offset(skb) + len); | 1677 | return pskb_may_pull(skb, skb_network_offset(skb) + len); |
diff --git a/include/linux/smscphy.h b/include/linux/smscphy.h index ce718cbce435..f4bf16e16e16 100644 --- a/include/linux/smscphy.h +++ b/include/linux/smscphy.h | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | #define MII_LAN83C185_ISF 29 /* Interrupt Source Flags */ | 4 | #define MII_LAN83C185_ISF 29 /* Interrupt Source Flags */ |
| 5 | #define MII_LAN83C185_IM 30 /* Interrupt Mask */ | 5 | #define MII_LAN83C185_IM 30 /* Interrupt Mask */ |
| 6 | #define MII_LAN83C185_CTRL_STATUS 17 /* Mode/Status Register */ | 6 | #define MII_LAN83C185_CTRL_STATUS 17 /* Mode/Status Register */ |
| 7 | #define MII_LAN83C185_SPECIAL_MODES 18 /* Special Modes Register */ | ||
| 7 | 8 | ||
| 8 | #define MII_LAN83C185_ISF_INT1 (1<<1) /* Auto-Negotiation Page Received */ | 9 | #define MII_LAN83C185_ISF_INT1 (1<<1) /* Auto-Negotiation Page Received */ |
| 9 | #define MII_LAN83C185_ISF_INT2 (1<<2) /* Parallel Detection Fault */ | 10 | #define MII_LAN83C185_ISF_INT2 (1<<2) /* Parallel Detection Fault */ |
| @@ -22,4 +23,8 @@ | |||
| 22 | #define MII_LAN83C185_EDPWRDOWN (1 << 13) /* EDPWRDOWN */ | 23 | #define MII_LAN83C185_EDPWRDOWN (1 << 13) /* EDPWRDOWN */ |
| 23 | #define MII_LAN83C185_ENERGYON (1 << 1) /* ENERGYON */ | 24 | #define MII_LAN83C185_ENERGYON (1 << 1) /* ENERGYON */ |
| 24 | 25 | ||
| 26 | #define MII_LAN83C185_MODE_MASK 0xE0 | ||
| 27 | #define MII_LAN83C185_MODE_POWERDOWN 0xC0 /* Power Down mode */ | ||
| 28 | #define MII_LAN83C185_MODE_ALL 0xE0 /* All capable mode */ | ||
| 29 | |||
| 25 | #endif /* __LINUX_SMSCPHY_H__ */ | 30 | #endif /* __LINUX_SMSCPHY_H__ */ |
diff --git a/include/linux/ssb/ssb.h b/include/linux/ssb/ssb.h index bb674c02f306..1f64e3f1f22b 100644 --- a/include/linux/ssb/ssb.h +++ b/include/linux/ssb/ssb.h | |||
| @@ -8,6 +8,7 @@ | |||
| 8 | #include <linux/pci.h> | 8 | #include <linux/pci.h> |
| 9 | #include <linux/mod_devicetable.h> | 9 | #include <linux/mod_devicetable.h> |
| 10 | #include <linux/dma-mapping.h> | 10 | #include <linux/dma-mapping.h> |
| 11 | #include <linux/platform_device.h> | ||
| 11 | 12 | ||
| 12 | #include <linux/ssb/ssb_regs.h> | 13 | #include <linux/ssb/ssb_regs.h> |
| 13 | 14 | ||
| @@ -432,6 +433,7 @@ struct ssb_bus { | |||
| 432 | #ifdef CONFIG_SSB_EMBEDDED | 433 | #ifdef CONFIG_SSB_EMBEDDED |
| 433 | /* Lock for GPIO register access. */ | 434 | /* Lock for GPIO register access. */ |
| 434 | spinlock_t gpio_lock; | 435 | spinlock_t gpio_lock; |
| 436 | struct platform_device *watchdog; | ||
| 435 | #endif /* EMBEDDED */ | 437 | #endif /* EMBEDDED */ |
| 436 | 438 | ||
| 437 | /* Internal-only stuff follows. Do not touch. */ | 439 | /* Internal-only stuff follows. Do not touch. */ |
diff --git a/include/linux/ssb/ssb_driver_chipcommon.h b/include/linux/ssb/ssb_driver_chipcommon.h index c2b02a5c86ae..38339fd68a5f 100644 --- a/include/linux/ssb/ssb_driver_chipcommon.h +++ b/include/linux/ssb/ssb_driver_chipcommon.h | |||
| @@ -591,6 +591,8 @@ struct ssb_chipcommon { | |||
| 591 | /* Fast Powerup Delay constant */ | 591 | /* Fast Powerup Delay constant */ |
| 592 | u16 fast_pwrup_delay; | 592 | u16 fast_pwrup_delay; |
| 593 | struct ssb_chipcommon_pmu pmu; | 593 | struct ssb_chipcommon_pmu pmu; |
| 594 | u32 ticks_per_ms; | ||
| 595 | u32 max_timer_ms; | ||
| 594 | }; | 596 | }; |
| 595 | 597 | ||
| 596 | static inline bool ssb_chipco_available(struct ssb_chipcommon *cc) | 598 | static inline bool ssb_chipco_available(struct ssb_chipcommon *cc) |
| @@ -630,8 +632,7 @@ enum ssb_clkmode { | |||
| 630 | extern void ssb_chipco_set_clockmode(struct ssb_chipcommon *cc, | 632 | extern void ssb_chipco_set_clockmode(struct ssb_chipcommon *cc, |
| 631 | enum ssb_clkmode mode); | 633 | enum ssb_clkmode mode); |
| 632 | 634 | ||
| 633 | extern void ssb_chipco_watchdog_timer_set(struct ssb_chipcommon *cc, | 635 | extern u32 ssb_chipco_watchdog_timer_set(struct ssb_chipcommon *cc, u32 ticks); |
| 634 | u32 ticks); | ||
| 635 | 636 | ||
| 636 | void ssb_chipco_irq_mask(struct ssb_chipcommon *cc, u32 mask, u32 value); | 637 | void ssb_chipco_irq_mask(struct ssb_chipcommon *cc, u32 mask, u32 value); |
| 637 | 638 | ||
diff --git a/include/linux/ssb/ssb_driver_extif.h b/include/linux/ssb/ssb_driver_extif.h index 91161f0aa22b..99511d0e931d 100644 --- a/include/linux/ssb/ssb_driver_extif.h +++ b/include/linux/ssb/ssb_driver_extif.h | |||
| @@ -152,6 +152,9 @@ | |||
| 152 | /* watchdog */ | 152 | /* watchdog */ |
| 153 | #define SSB_EXTIF_WATCHDOG_CLK 48000000 /* Hz */ | 153 | #define SSB_EXTIF_WATCHDOG_CLK 48000000 /* Hz */ |
| 154 | 154 | ||
| 155 | #define SSB_EXTIF_WATCHDOG_MAX_TIMER ((1 << 28) - 1) | ||
| 156 | #define SSB_EXTIF_WATCHDOG_MAX_TIMER_MS (SSB_EXTIF_WATCHDOG_MAX_TIMER \ | ||
| 157 | / (SSB_EXTIF_WATCHDOG_CLK / 1000)) | ||
| 155 | 158 | ||
| 156 | 159 | ||
| 157 | #ifdef CONFIG_SSB_DRIVER_EXTIF | 160 | #ifdef CONFIG_SSB_DRIVER_EXTIF |
| @@ -171,8 +174,7 @@ extern void ssb_extif_get_clockcontrol(struct ssb_extif *extif, | |||
| 171 | extern void ssb_extif_timing_init(struct ssb_extif *extif, | 174 | extern void ssb_extif_timing_init(struct ssb_extif *extif, |
| 172 | unsigned long ns); | 175 | unsigned long ns); |
| 173 | 176 | ||
| 174 | extern void ssb_extif_watchdog_timer_set(struct ssb_extif *extif, | 177 | extern u32 ssb_extif_watchdog_timer_set(struct ssb_extif *extif, u32 ticks); |
| 175 | u32 ticks); | ||
| 176 | 178 | ||
| 177 | /* Extif GPIO pin access */ | 179 | /* Extif GPIO pin access */ |
| 178 | u32 ssb_extif_gpio_in(struct ssb_extif *extif, u32 mask); | 180 | u32 ssb_extif_gpio_in(struct ssb_extif *extif, u32 mask); |
| @@ -205,10 +207,52 @@ void ssb_extif_get_clockcontrol(struct ssb_extif *extif, | |||
| 205 | } | 207 | } |
| 206 | 208 | ||
| 207 | static inline | 209 | static inline |
| 208 | void ssb_extif_watchdog_timer_set(struct ssb_extif *extif, | 210 | void ssb_extif_timing_init(struct ssb_extif *extif, unsigned long ns) |
| 209 | u32 ticks) | ||
| 210 | { | 211 | { |
| 211 | } | 212 | } |
| 212 | 213 | ||
| 214 | static inline | ||
| 215 | u32 ssb_extif_watchdog_timer_set(struct ssb_extif *extif, u32 ticks) | ||
| 216 | { | ||
| 217 | return 0; | ||
| 218 | } | ||
| 219 | |||
| 220 | static inline u32 ssb_extif_gpio_in(struct ssb_extif *extif, u32 mask) | ||
| 221 | { | ||
| 222 | return 0; | ||
| 223 | } | ||
| 224 | |||
| 225 | static inline u32 ssb_extif_gpio_out(struct ssb_extif *extif, u32 mask, | ||
| 226 | u32 value) | ||
| 227 | { | ||
| 228 | return 0; | ||
| 229 | } | ||
| 230 | |||
| 231 | static inline u32 ssb_extif_gpio_outen(struct ssb_extif *extif, u32 mask, | ||
| 232 | u32 value) | ||
| 233 | { | ||
| 234 | return 0; | ||
| 235 | } | ||
| 236 | |||
| 237 | static inline u32 ssb_extif_gpio_polarity(struct ssb_extif *extif, u32 mask, | ||
| 238 | u32 value) | ||
| 239 | { | ||
| 240 | return 0; | ||
| 241 | } | ||
| 242 | |||
| 243 | static inline u32 ssb_extif_gpio_intmask(struct ssb_extif *extif, u32 mask, | ||
| 244 | u32 value) | ||
| 245 | { | ||
| 246 | return 0; | ||
| 247 | } | ||
| 248 | |||
| 249 | #ifdef CONFIG_SSB_SERIAL | ||
| 250 | static inline int ssb_extif_serial_init(struct ssb_extif *extif, | ||
| 251 | struct ssb_serial_port *ports) | ||
| 252 | { | ||
| 253 | return 0; | ||
| 254 | } | ||
| 255 | #endif /* CONFIG_SSB_SERIAL */ | ||
| 256 | |||
| 213 | #endif /* CONFIG_SSB_DRIVER_EXTIF */ | 257 | #endif /* CONFIG_SSB_DRIVER_EXTIF */ |
| 214 | #endif /* LINUX_SSB_EXTIFCORE_H_ */ | 258 | #endif /* LINUX_SSB_EXTIFCORE_H_ */ |
diff --git a/include/linux/ssb/ssb_driver_mips.h b/include/linux/ssb/ssb_driver_mips.h index 5f44e9740cd2..07a9c7a2e088 100644 --- a/include/linux/ssb/ssb_driver_mips.h +++ b/include/linux/ssb/ssb_driver_mips.h | |||
| @@ -13,6 +13,12 @@ struct ssb_serial_port { | |||
| 13 | unsigned int reg_shift; | 13 | unsigned int reg_shift; |
| 14 | }; | 14 | }; |
| 15 | 15 | ||
| 16 | struct ssb_pflash { | ||
| 17 | bool present; | ||
| 18 | u8 buswidth; | ||
| 19 | u32 window; | ||
| 20 | u32 window_size; | ||
| 21 | }; | ||
| 16 | 22 | ||
| 17 | struct ssb_mipscore { | 23 | struct ssb_mipscore { |
| 18 | struct ssb_device *dev; | 24 | struct ssb_device *dev; |
| @@ -20,9 +26,7 @@ struct ssb_mipscore { | |||
| 20 | int nr_serial_ports; | 26 | int nr_serial_ports; |
| 21 | struct ssb_serial_port serial_ports[4]; | 27 | struct ssb_serial_port serial_ports[4]; |
| 22 | 28 | ||
| 23 | u8 flash_buswidth; | 29 | struct ssb_pflash pflash; |
| 24 | u32 flash_window; | ||
| 25 | u32 flash_window_size; | ||
| 26 | }; | 30 | }; |
| 27 | 31 | ||
| 28 | extern void ssb_mipscore_init(struct ssb_mipscore *mcore); | 32 | extern void ssb_mipscore_init(struct ssb_mipscore *mcore); |
diff --git a/include/linux/ssb/ssb_regs.h b/include/linux/ssb/ssb_regs.h index a0525019e1d1..6ecfa02ddbac 100644 --- a/include/linux/ssb/ssb_regs.h +++ b/include/linux/ssb/ssb_regs.h | |||
| @@ -485,7 +485,7 @@ | |||
| 485 | #define SSB_SPROM8_HWIQ_IQSWP_IQCAL_SWP_SHIFT 4 | 485 | #define SSB_SPROM8_HWIQ_IQSWP_IQCAL_SWP_SHIFT 4 |
| 486 | #define SSB_SPROM8_HWIQ_IQSWP_HW_IQCAL 0x0020 | 486 | #define SSB_SPROM8_HWIQ_IQSWP_HW_IQCAL 0x0020 |
| 487 | #define SSB_SPROM8_HWIQ_IQSWP_HW_IQCAL_SHIFT 5 | 487 | #define SSB_SPROM8_HWIQ_IQSWP_HW_IQCAL_SHIFT 5 |
| 488 | #define SSB_SPROM8_TEMPDELTA 0x00BA | 488 | #define SSB_SPROM8_TEMPDELTA 0x00BC |
| 489 | #define SSB_SPROM8_TEMPDELTA_PHYCAL 0x00ff | 489 | #define SSB_SPROM8_TEMPDELTA_PHYCAL 0x00ff |
| 490 | #define SSB_SPROM8_TEMPDELTA_PHYCAL_SHIFT 0 | 490 | #define SSB_SPROM8_TEMPDELTA_PHYCAL_SHIFT 0 |
| 491 | #define SSB_SPROM8_TEMPDELTA_PERIOD 0x0f00 | 491 | #define SSB_SPROM8_TEMPDELTA_PERIOD 0x0f00 |
diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h index a1547ea3920d..de5b2f8176ce 100644 --- a/include/linux/stmmac.h +++ b/include/linux/stmmac.h | |||
| @@ -104,6 +104,7 @@ struct plat_stmmacenet_data { | |||
| 104 | int bugged_jumbo; | 104 | int bugged_jumbo; |
| 105 | int pmt; | 105 | int pmt; |
| 106 | int force_sf_dma_mode; | 106 | int force_sf_dma_mode; |
| 107 | int riwt_off; | ||
| 107 | void (*fix_mac_speed)(void *priv, unsigned int speed); | 108 | void (*fix_mac_speed)(void *priv, unsigned int speed); |
| 108 | void (*bus_setup)(void __iomem *ioaddr); | 109 | void (*bus_setup)(void __iomem *ioaddr); |
| 109 | int (*init)(struct platform_device *pdev); | 110 | int (*init)(struct platform_device *pdev); |
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h index cd844a6a8d5f..14a8ff2de11e 100644 --- a/include/linux/sysctl.h +++ b/include/linux/sysctl.h | |||
| @@ -158,8 +158,7 @@ struct ctl_table_root { | |||
| 158 | struct ctl_table_set default_set; | 158 | struct ctl_table_set default_set; |
| 159 | struct ctl_table_set *(*lookup)(struct ctl_table_root *root, | 159 | struct ctl_table_set *(*lookup)(struct ctl_table_root *root, |
| 160 | struct nsproxy *namespaces); | 160 | struct nsproxy *namespaces); |
| 161 | int (*permissions)(struct ctl_table_root *root, | 161 | int (*permissions)(struct ctl_table_header *head, struct ctl_table *table); |
| 162 | struct nsproxy *namespaces, struct ctl_table *table); | ||
| 163 | }; | 162 | }; |
| 164 | 163 | ||
| 165 | /* struct ctl_path describes where in the hierarchy a table is added */ | 164 | /* struct ctl_path describes where in the hierarchy a table is added */ |
diff --git a/include/linux/tcp.h b/include/linux/tcp.h index 60b7aac15e0e..4e1d2283e3cc 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h | |||
| @@ -35,6 +35,16 @@ static inline unsigned int tcp_hdrlen(const struct sk_buff *skb) | |||
| 35 | return tcp_hdr(skb)->doff * 4; | 35 | return tcp_hdr(skb)->doff * 4; |
| 36 | } | 36 | } |
| 37 | 37 | ||
| 38 | static inline struct tcphdr *inner_tcp_hdr(const struct sk_buff *skb) | ||
| 39 | { | ||
| 40 | return (struct tcphdr *)skb_inner_transport_header(skb); | ||
| 41 | } | ||
| 42 | |||
| 43 | static inline unsigned int inner_tcp_hdrlen(const struct sk_buff *skb) | ||
| 44 | { | ||
| 45 | return inner_tcp_hdr(skb)->doff * 4; | ||
| 46 | } | ||
| 47 | |||
| 38 | static inline unsigned int tcp_optlen(const struct sk_buff *skb) | 48 | static inline unsigned int tcp_optlen(const struct sk_buff *skb) |
| 39 | { | 49 | { |
| 40 | return (tcp_hdr(skb)->doff - 5) * 4; | 50 | return (tcp_hdr(skb)->doff - 5) * 4; |
diff --git a/include/linux/timecompare.h b/include/linux/timecompare.h deleted file mode 100644 index 546e2234e4b3..000000000000 --- a/include/linux/timecompare.h +++ /dev/null | |||
| @@ -1,125 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Utility code which helps transforming between two different time | ||
| 3 | * bases, called "source" and "target" time in this code. | ||
| 4 | * | ||
| 5 | * Source time has to be provided via the timecounter API while target | ||
| 6 | * time is accessed via a function callback whose prototype | ||
| 7 | * intentionally matches ktime_get() and ktime_get_real(). These | ||
| 8 | * interfaces where chosen like this so that the code serves its | ||
| 9 | * initial purpose without additional glue code. | ||
| 10 | * | ||
| 11 | * This purpose is synchronizing a hardware clock in a NIC with system | ||
| 12 | * time, in order to implement the Precision Time Protocol (PTP, | ||
| 13 | * IEEE1588) with more accurate hardware assisted time stamping. In | ||
| 14 | * that context only synchronization against system time (= | ||
| 15 | * ktime_get_real()) is currently needed. But this utility code might | ||
| 16 | * become useful in other situations, which is why it was written as | ||
| 17 | * general purpose utility code. | ||
| 18 | * | ||
| 19 | * The source timecounter is assumed to return monotonically | ||
| 20 | * increasing time (but this code does its best to compensate if that | ||
| 21 | * is not the case) whereas target time may jump. | ||
| 22 | * | ||
| 23 | * The target time corresponding to a source time is determined by | ||
| 24 | * reading target time, reading source time, reading target time | ||
| 25 | * again, then assuming that average target time corresponds to source | ||
| 26 | * time. In other words, the assumption is that reading the source | ||
| 27 | * time is slow and involves equal time for sending the request and | ||
| 28 | * receiving the reply, whereas reading target time is assumed to be | ||
| 29 | * fast. | ||
| 30 | * | ||
| 31 | * Copyright (C) 2009 Intel Corporation. | ||
| 32 | * Author: Patrick Ohly <patrick.ohly@intel.com> | ||
| 33 | * | ||
| 34 | * This program is free software; you can redistribute it and/or modify it | ||
| 35 | * under the terms and conditions of the GNU General Public License, | ||
| 36 | * version 2, as published by the Free Software Foundation. | ||
| 37 | * | ||
| 38 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
| 39 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 40 | * FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for | ||
| 41 | * more details. | ||
| 42 | * | ||
| 43 | * You should have received a copy of the GNU General Public License along with | ||
| 44 | * this program; if not, write to the Free Software Foundation, Inc., | ||
| 45 | * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 46 | */ | ||
| 47 | #ifndef _LINUX_TIMECOMPARE_H | ||
| 48 | #define _LINUX_TIMECOMPARE_H | ||
| 49 | |||
| 50 | #include <linux/clocksource.h> | ||
| 51 | #include <linux/ktime.h> | ||
| 52 | |||
| 53 | /** | ||
| 54 | * struct timecompare - stores state and configuration for the two clocks | ||
| 55 | * | ||
| 56 | * Initialize to zero, then set source/target/num_samples. | ||
| 57 | * | ||
| 58 | * Transformation between source time and target time is done with: | ||
| 59 | * target_time = source_time + offset + | ||
| 60 | * (source_time - last_update) * skew / | ||
| 61 | * TIMECOMPARE_SKEW_RESOLUTION | ||
| 62 | * | ||
| 63 | * @source: used to get source time stamps via timecounter_read() | ||
| 64 | * @target: function returning target time (for example, ktime_get | ||
| 65 | * for monotonic time, or ktime_get_real for wall clock) | ||
| 66 | * @num_samples: number of times that source time and target time are to | ||
| 67 | * be compared when determining their offset | ||
| 68 | * @offset: (target time - source time) at the time of the last update | ||
| 69 | * @skew: average (target time - source time) / delta source time * | ||
| 70 | * TIMECOMPARE_SKEW_RESOLUTION | ||
| 71 | * @last_update: last source time stamp when time offset was measured | ||
| 72 | */ | ||
| 73 | struct timecompare { | ||
| 74 | struct timecounter *source; | ||
| 75 | ktime_t (*target)(void); | ||
| 76 | int num_samples; | ||
| 77 | |||
| 78 | s64 offset; | ||
| 79 | s64 skew; | ||
| 80 | u64 last_update; | ||
| 81 | }; | ||
| 82 | |||
| 83 | /** | ||
| 84 | * timecompare_transform - transform source time stamp into target time base | ||
| 85 | * @sync: context for time sync | ||
| 86 | * @source_tstamp: the result of timecounter_read() or | ||
| 87 | * timecounter_cyc2time() | ||
| 88 | */ | ||
| 89 | extern ktime_t timecompare_transform(struct timecompare *sync, | ||
| 90 | u64 source_tstamp); | ||
| 91 | |||
| 92 | /** | ||
| 93 | * timecompare_offset - measure current (target time - source time) offset | ||
| 94 | * @sync: context for time sync | ||
| 95 | * @offset: average offset during sample period returned here | ||
| 96 | * @source_tstamp: average source time during sample period returned here | ||
| 97 | * | ||
| 98 | * Returns number of samples used. Might be zero (= no result) in the | ||
| 99 | * unlikely case that target time was monotonically decreasing for all | ||
| 100 | * samples (= broken). | ||
| 101 | */ | ||
| 102 | extern int timecompare_offset(struct timecompare *sync, | ||
| 103 | s64 *offset, | ||
| 104 | u64 *source_tstamp); | ||
| 105 | |||
| 106 | extern void __timecompare_update(struct timecompare *sync, | ||
| 107 | u64 source_tstamp); | ||
| 108 | |||
| 109 | /** | ||
| 110 | * timecompare_update - update offset and skew by measuring current offset | ||
| 111 | * @sync: context for time sync | ||
| 112 | * @source_tstamp: the result of timecounter_read() or | ||
| 113 | * timecounter_cyc2time(), pass zero to force update | ||
| 114 | * | ||
| 115 | * Updates are only done at most once per second. | ||
| 116 | */ | ||
| 117 | static inline void timecompare_update(struct timecompare *sync, | ||
| 118 | u64 source_tstamp) | ||
| 119 | { | ||
| 120 | if (!source_tstamp || | ||
| 121 | (s64)(source_tstamp - sync->last_update) >= NSEC_PER_SEC) | ||
| 122 | __timecompare_update(sync, source_tstamp); | ||
| 123 | } | ||
| 124 | |||
| 125 | #endif /* _LINUX_TIMECOMPARE_H */ | ||
diff --git a/include/linux/udp.h b/include/linux/udp.h index 0b67d7793520..9d81de123c90 100644 --- a/include/linux/udp.h +++ b/include/linux/udp.h | |||
| @@ -27,6 +27,11 @@ static inline struct udphdr *udp_hdr(const struct sk_buff *skb) | |||
| 27 | return (struct udphdr *)skb_transport_header(skb); | 27 | return (struct udphdr *)skb_transport_header(skb); |
| 28 | } | 28 | } |
| 29 | 29 | ||
| 30 | static inline struct udphdr *inner_udp_hdr(const struct sk_buff *skb) | ||
| 31 | { | ||
| 32 | return (struct udphdr *)skb_inner_transport_header(skb); | ||
| 33 | } | ||
| 34 | |||
| 30 | #define UDP_HTABLE_SIZE_MIN (CONFIG_BASE_SMALL ? 128 : 256) | 35 | #define UDP_HTABLE_SIZE_MIN (CONFIG_BASE_SMALL ? 128 : 256) |
| 31 | 36 | ||
| 32 | static inline int udp_hashfn(struct net *net, unsigned num, unsigned mask) | 37 | static inline int udp_hashfn(struct net *net, unsigned num, unsigned mask) |
diff --git a/include/linux/usb/cdc_ncm.h b/include/linux/usb/cdc_ncm.h new file mode 100644 index 000000000000..3b8f9d4fc3fe --- /dev/null +++ b/include/linux/usb/cdc_ncm.h | |||
| @@ -0,0 +1,134 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) ST-Ericsson 2010-2012 | ||
| 3 | * Contact: Alexey Orishko <alexey.orishko@stericsson.com> | ||
| 4 | * Original author: Hans Petter Selasky <hans.petter.selasky@stericsson.com> | ||
| 5 | * | ||
| 6 | * USB Host Driver for Network Control Model (NCM) | ||
| 7 | * http://www.usb.org/developers/devclass_docs/NCM10.zip | ||
| 8 | * | ||
| 9 | * The NCM encoding, decoding and initialization logic | ||
| 10 | * derives from FreeBSD 8.x. if_cdce.c and if_cdcereg.h | ||
| 11 | * | ||
| 12 | * This software is available to you under a choice of one of two | ||
| 13 | * licenses. You may choose this file to be licensed under the terms | ||
| 14 | * of the GNU General Public License (GPL) Version 2 or the 2-clause | ||
| 15 | * BSD license listed below: | ||
| 16 | * | ||
| 17 | * Redistribution and use in source and binary forms, with or without | ||
| 18 | * modification, are permitted provided that the following conditions | ||
| 19 | * are met: | ||
| 20 | * 1. Redistributions of source code must retain the above copyright | ||
| 21 | * notice, this list of conditions and the following disclaimer. | ||
| 22 | * 2. Redistributions in binary form must reproduce the above copyright | ||
| 23 | * notice, this list of conditions and the following disclaimer in the | ||
| 24 | * documentation and/or other materials provided with the distribution. | ||
| 25 | * | ||
| 26 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | ||
| 27 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
| 28 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
| 29 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | ||
| 30 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
| 31 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
| 32 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
| 33 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
| 34 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||
| 35 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||
| 36 | * SUCH DAMAGE. | ||
| 37 | */ | ||
| 38 | |||
| 39 | #define CDC_NCM_COMM_ALTSETTING_NCM 0 | ||
| 40 | #define CDC_NCM_COMM_ALTSETTING_MBIM 1 | ||
| 41 | |||
| 42 | #define CDC_NCM_DATA_ALTSETTING_NCM 1 | ||
| 43 | #define CDC_NCM_DATA_ALTSETTING_MBIM 2 | ||
| 44 | |||
| 45 | /* CDC NCM subclass 3.2.1 */ | ||
| 46 | #define USB_CDC_NCM_NDP16_LENGTH_MIN 0x10 | ||
| 47 | |||
| 48 | /* Maximum NTB length */ | ||
| 49 | #define CDC_NCM_NTB_MAX_SIZE_TX 32768 /* bytes */ | ||
| 50 | #define CDC_NCM_NTB_MAX_SIZE_RX 32768 /* bytes */ | ||
| 51 | |||
| 52 | /* Minimum value for MaxDatagramSize, ch. 6.2.9 */ | ||
| 53 | #define CDC_NCM_MIN_DATAGRAM_SIZE 1514 /* bytes */ | ||
| 54 | |||
| 55 | /* Minimum value for MaxDatagramSize, ch. 8.1.3 */ | ||
| 56 | #define CDC_MBIM_MIN_DATAGRAM_SIZE 2048 /* bytes */ | ||
| 57 | |||
| 58 | #define CDC_NCM_MIN_TX_PKT 512 /* bytes */ | ||
| 59 | |||
| 60 | /* Default value for MaxDatagramSize */ | ||
| 61 | #define CDC_NCM_MAX_DATAGRAM_SIZE 8192 /* bytes */ | ||
| 62 | |||
| 63 | /* | ||
| 64 | * Maximum amount of datagrams in NCM Datagram Pointer Table, not counting | ||
| 65 | * the last NULL entry. | ||
| 66 | */ | ||
| 67 | #define CDC_NCM_DPT_DATAGRAMS_MAX 40 | ||
| 68 | |||
| 69 | /* Restart the timer, if amount of datagrams is less than given value */ | ||
| 70 | #define CDC_NCM_RESTART_TIMER_DATAGRAM_CNT 3 | ||
| 71 | #define CDC_NCM_TIMER_PENDING_CNT 2 | ||
| 72 | #define CDC_NCM_TIMER_INTERVAL (400UL * NSEC_PER_USEC) | ||
| 73 | |||
| 74 | /* The following macro defines the minimum header space */ | ||
| 75 | #define CDC_NCM_MIN_HDR_SIZE \ | ||
| 76 | (sizeof(struct usb_cdc_ncm_nth16) + sizeof(struct usb_cdc_ncm_ndp16) + \ | ||
| 77 | (CDC_NCM_DPT_DATAGRAMS_MAX + 1) * sizeof(struct usb_cdc_ncm_dpe16)) | ||
| 78 | |||
| 79 | #define CDC_NCM_NDP_SIZE \ | ||
| 80 | (sizeof(struct usb_cdc_ncm_ndp16) + \ | ||
| 81 | (CDC_NCM_DPT_DATAGRAMS_MAX + 1) * sizeof(struct usb_cdc_ncm_dpe16)) | ||
| 82 | |||
| 83 | #define cdc_ncm_comm_intf_is_mbim(x) ((x)->desc.bInterfaceSubClass == USB_CDC_SUBCLASS_MBIM && \ | ||
| 84 | (x)->desc.bInterfaceProtocol == USB_CDC_PROTO_NONE) | ||
| 85 | #define cdc_ncm_data_intf_is_mbim(x) ((x)->desc.bInterfaceProtocol == USB_CDC_MBIM_PROTO_NTB) | ||
| 86 | |||
| 87 | struct cdc_ncm_ctx { | ||
| 88 | struct usb_cdc_ncm_ntb_parameters ncm_parm; | ||
| 89 | struct hrtimer tx_timer; | ||
| 90 | struct tasklet_struct bh; | ||
| 91 | |||
| 92 | const struct usb_cdc_ncm_desc *func_desc; | ||
| 93 | const struct usb_cdc_mbim_desc *mbim_desc; | ||
| 94 | const struct usb_cdc_header_desc *header_desc; | ||
| 95 | const struct usb_cdc_union_desc *union_desc; | ||
| 96 | const struct usb_cdc_ether_desc *ether_desc; | ||
| 97 | |||
| 98 | struct net_device *netdev; | ||
| 99 | struct usb_device *udev; | ||
| 100 | struct usb_host_endpoint *in_ep; | ||
| 101 | struct usb_host_endpoint *out_ep; | ||
| 102 | struct usb_host_endpoint *status_ep; | ||
| 103 | struct usb_interface *intf; | ||
| 104 | struct usb_interface *control; | ||
| 105 | struct usb_interface *data; | ||
| 106 | |||
| 107 | struct sk_buff *tx_curr_skb; | ||
| 108 | struct sk_buff *tx_rem_skb; | ||
| 109 | __le32 tx_rem_sign; | ||
| 110 | |||
| 111 | spinlock_t mtx; | ||
| 112 | atomic_t stop; | ||
| 113 | |||
| 114 | u32 tx_timer_pending; | ||
| 115 | u32 tx_curr_frame_num; | ||
| 116 | u32 rx_speed; | ||
| 117 | u32 tx_speed; | ||
| 118 | u32 rx_max; | ||
| 119 | u32 tx_max; | ||
| 120 | u32 max_datagram_size; | ||
| 121 | u16 tx_max_datagrams; | ||
| 122 | u16 tx_remainder; | ||
| 123 | u16 tx_modulus; | ||
| 124 | u16 tx_ndp_modulus; | ||
| 125 | u16 tx_seq; | ||
| 126 | u16 rx_seq; | ||
| 127 | u16 connected; | ||
| 128 | }; | ||
| 129 | |||
| 130 | extern int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_altsetting); | ||
| 131 | extern void cdc_ncm_unbind(struct usbnet *dev, struct usb_interface *intf); | ||
| 132 | extern struct sk_buff *cdc_ncm_fill_tx_frame(struct cdc_ncm_ctx *ctx, struct sk_buff *skb, __le32 sign); | ||
| 133 | extern int cdc_ncm_rx_verify_nth16(struct cdc_ncm_ctx *ctx, struct sk_buff *skb_in); | ||
| 134 | extern int cdc_ncm_rx_verify_ndp16(struct sk_buff *skb_in, int ndpoffset); | ||
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h index ddbbb7de894b..9bbeabf66c54 100644 --- a/include/linux/usb/usbnet.h +++ b/include/linux/usb/usbnet.h | |||
| @@ -163,6 +163,16 @@ extern int usbnet_resume(struct usb_interface *); | |||
| 163 | extern void usbnet_disconnect(struct usb_interface *); | 163 | extern void usbnet_disconnect(struct usb_interface *); |
| 164 | extern void usbnet_device_suggests_idle(struct usbnet *dev); | 164 | extern void usbnet_device_suggests_idle(struct usbnet *dev); |
| 165 | 165 | ||
| 166 | extern int usbnet_read_cmd(struct usbnet *dev, u8 cmd, u8 reqtype, | ||
| 167 | u16 value, u16 index, void *data, u16 size); | ||
| 168 | extern int usbnet_write_cmd(struct usbnet *dev, u8 cmd, u8 reqtype, | ||
| 169 | u16 value, u16 index, const void *data, u16 size); | ||
| 170 | extern int usbnet_read_cmd_nopm(struct usbnet *dev, u8 cmd, u8 reqtype, | ||
| 171 | u16 value, u16 index, void *data, u16 size); | ||
| 172 | extern int usbnet_write_cmd_nopm(struct usbnet *dev, u8 cmd, u8 reqtype, | ||
| 173 | u16 value, u16 index, const void *data, u16 size); | ||
| 174 | extern int usbnet_write_cmd_async(struct usbnet *dev, u8 cmd, u8 reqtype, | ||
| 175 | u16 value, u16 index, const void *data, u16 size); | ||
| 166 | 176 | ||
| 167 | /* Drivers that reuse some of the standard USB CDC infrastructure | 177 | /* Drivers that reuse some of the standard USB CDC infrastructure |
| 168 | * (notably, using multiple interfaces according to the CDC | 178 | * (notably, using multiple interfaces according to the CDC |
