diff options
Diffstat (limited to 'include')
101 files changed, 3741 insertions, 1305 deletions
diff --git a/include/asm-generic/errno.h b/include/asm-generic/errno.h index e8852c092fea..28cc03bf19e6 100644 --- a/include/asm-generic/errno.h +++ b/include/asm-generic/errno.h | |||
@@ -106,4 +106,6 @@ | |||
106 | #define EOWNERDEAD 130 /* Owner died */ | 106 | #define EOWNERDEAD 130 /* Owner died */ |
107 | #define ENOTRECOVERABLE 131 /* State not recoverable */ | 107 | #define ENOTRECOVERABLE 131 /* State not recoverable */ |
108 | 108 | ||
109 | #define ERFKILL 132 /* Operation not possible due to RF-kill */ | ||
110 | |||
109 | #endif | 111 | #endif |
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index b3afd2219ad2..a2df7030d49d 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
@@ -311,6 +311,7 @@ unifdef-y += ppp-comp.h | |||
311 | unifdef-y += ptrace.h | 311 | unifdef-y += ptrace.h |
312 | unifdef-y += quota.h | 312 | unifdef-y += quota.h |
313 | unifdef-y += random.h | 313 | unifdef-y += random.h |
314 | unifdef-y += rfkill.h | ||
314 | unifdef-y += irqnr.h | 315 | unifdef-y += irqnr.h |
315 | unifdef-y += reboot.h | 316 | unifdef-y += reboot.h |
316 | unifdef-y += reiserfs_fs.h | 317 | unifdef-y += reiserfs_fs.h |
diff --git a/include/linux/can/Kbuild b/include/linux/can/Kbuild index eff898aac02b..8cb05aae661c 100644 --- a/include/linux/can/Kbuild +++ b/include/linux/can/Kbuild | |||
@@ -1,3 +1,4 @@ | |||
1 | header-y += raw.h | 1 | header-y += raw.h |
2 | header-y += bcm.h | 2 | header-y += bcm.h |
3 | header-y += error.h | 3 | header-y += error.h |
4 | header-y += netlink.h | ||
diff --git a/include/linux/can/dev.h b/include/linux/can/dev.h new file mode 100644 index 000000000000..4a37a56f6cdd --- /dev/null +++ b/include/linux/can/dev.h | |||
@@ -0,0 +1,70 @@ | |||
1 | /* | ||
2 | * linux/can/dev.h | ||
3 | * | ||
4 | * Definitions for the CAN network device driver interface | ||
5 | * | ||
6 | * Copyright (C) 2006 Andrey Volkov <avolkov@varma-el.com> | ||
7 | * Varma Electronics Oy | ||
8 | * | ||
9 | * Copyright (C) 2008 Wolfgang Grandegger <wg@grandegger.com> | ||
10 | * | ||
11 | * Send feedback to <socketcan-users@lists.berlios.de> | ||
12 | */ | ||
13 | |||
14 | #ifndef CAN_DEV_H | ||
15 | #define CAN_DEV_H | ||
16 | |||
17 | #include <linux/can/netlink.h> | ||
18 | #include <linux/can/error.h> | ||
19 | |||
20 | /* | ||
21 | * CAN mode | ||
22 | */ | ||
23 | enum can_mode { | ||
24 | CAN_MODE_STOP = 0, | ||
25 | CAN_MODE_START, | ||
26 | CAN_MODE_SLEEP | ||
27 | }; | ||
28 | |||
29 | /* | ||
30 | * CAN common private data | ||
31 | */ | ||
32 | #define CAN_ECHO_SKB_MAX 4 | ||
33 | |||
34 | struct can_priv { | ||
35 | struct can_device_stats can_stats; | ||
36 | |||
37 | struct can_bittiming bittiming; | ||
38 | struct can_bittiming_const *bittiming_const; | ||
39 | struct can_clock clock; | ||
40 | |||
41 | enum can_state state; | ||
42 | u32 ctrlmode; | ||
43 | |||
44 | int restart_ms; | ||
45 | struct timer_list restart_timer; | ||
46 | |||
47 | struct sk_buff *echo_skb[CAN_ECHO_SKB_MAX]; | ||
48 | |||
49 | int (*do_set_bittiming)(struct net_device *dev); | ||
50 | int (*do_set_mode)(struct net_device *dev, enum can_mode mode); | ||
51 | int (*do_get_state)(const struct net_device *dev, | ||
52 | enum can_state *state); | ||
53 | }; | ||
54 | |||
55 | struct net_device *alloc_candev(int sizeof_priv); | ||
56 | void free_candev(struct net_device *dev); | ||
57 | |||
58 | int open_candev(struct net_device *dev); | ||
59 | void close_candev(struct net_device *dev); | ||
60 | |||
61 | int register_candev(struct net_device *dev); | ||
62 | void unregister_candev(struct net_device *dev); | ||
63 | |||
64 | int can_restart_now(struct net_device *dev); | ||
65 | void can_bus_off(struct net_device *dev); | ||
66 | |||
67 | void can_put_echo_skb(struct sk_buff *skb, struct net_device *dev, int idx); | ||
68 | void can_get_echo_skb(struct net_device *dev, int idx); | ||
69 | |||
70 | #endif /* CAN_DEV_H */ | ||
diff --git a/include/linux/can/netlink.h b/include/linux/can/netlink.h new file mode 100644 index 000000000000..9ecbb7871c0e --- /dev/null +++ b/include/linux/can/netlink.h | |||
@@ -0,0 +1,113 @@ | |||
1 | /* | ||
2 | * linux/can/netlink.h | ||
3 | * | ||
4 | * Definitions for the CAN netlink interface | ||
5 | * | ||
6 | * Copyright (c) 2009 Wolfgang Grandegger <wg@grandegger.com> | ||
7 | * | ||
8 | * Send feedback to <socketcan-users@lists.berlios.de> | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | #ifndef CAN_NETLINK_H | ||
13 | #define CAN_NETLINK_H | ||
14 | |||
15 | #include <linux/types.h> | ||
16 | |||
17 | /* | ||
18 | * CAN bit-timing parameters | ||
19 | * | ||
20 | * For futher information, please read chapter "8 BIT TIMING | ||
21 | * REQUIREMENTS" of the "Bosch CAN Specification version 2.0" | ||
22 | * at http://www.semiconductors.bosch.de/pdf/can2spec.pdf. | ||
23 | */ | ||
24 | struct can_bittiming { | ||
25 | __u32 bitrate; /* Bit-rate in bits/second */ | ||
26 | __u32 sample_point; /* Sample point in one-tenth of a percent */ | ||
27 | __u32 tq; /* Time quanta (TQ) in nanoseconds */ | ||
28 | __u32 prop_seg; /* Propagation segment in TQs */ | ||
29 | __u32 phase_seg1; /* Phase buffer segment 1 in TQs */ | ||
30 | __u32 phase_seg2; /* Phase buffer segment 2 in TQs */ | ||
31 | __u32 sjw; /* Synchronisation jump width in TQs */ | ||
32 | __u32 brp; /* Bit-rate prescaler */ | ||
33 | }; | ||
34 | |||
35 | /* | ||
36 | * CAN harware-dependent bit-timing constant | ||
37 | * | ||
38 | * Used for calculating and checking bit-timing parameters | ||
39 | */ | ||
40 | struct can_bittiming_const { | ||
41 | char name[16]; /* Name of the CAN controller hardware */ | ||
42 | __u32 tseg1_min; /* Time segement 1 = prop_seg + phase_seg1 */ | ||
43 | __u32 tseg1_max; | ||
44 | __u32 tseg2_min; /* Time segement 2 = phase_seg2 */ | ||
45 | __u32 tseg2_max; | ||
46 | __u32 sjw_max; /* Synchronisation jump width */ | ||
47 | __u32 brp_min; /* Bit-rate prescaler */ | ||
48 | __u32 brp_max; | ||
49 | __u32 brp_inc; | ||
50 | }; | ||
51 | |||
52 | /* | ||
53 | * CAN clock parameters | ||
54 | */ | ||
55 | struct can_clock { | ||
56 | __u32 freq; /* CAN system clock frequency in Hz */ | ||
57 | }; | ||
58 | |||
59 | /* | ||
60 | * CAN operational and error states | ||
61 | */ | ||
62 | enum can_state { | ||
63 | CAN_STATE_ERROR_ACTIVE = 0, /* RX/TX error count < 96 */ | ||
64 | CAN_STATE_ERROR_WARNING, /* RX/TX error count < 128 */ | ||
65 | CAN_STATE_ERROR_PASSIVE, /* RX/TX error count < 256 */ | ||
66 | CAN_STATE_BUS_OFF, /* RX/TX error count >= 256 */ | ||
67 | CAN_STATE_STOPPED, /* Device is stopped */ | ||
68 | CAN_STATE_SLEEPING, /* Device is sleeping */ | ||
69 | CAN_STATE_MAX | ||
70 | }; | ||
71 | |||
72 | /* | ||
73 | * CAN controller mode | ||
74 | */ | ||
75 | struct can_ctrlmode { | ||
76 | __u32 mask; | ||
77 | __u32 flags; | ||
78 | }; | ||
79 | |||
80 | #define CAN_CTRLMODE_LOOPBACK 0x1 /* Loopback mode */ | ||
81 | #define CAN_CTRLMODE_LISTENONLY 0x2 /* Listen-only mode */ | ||
82 | #define CAN_CTRLMODE_3_SAMPLES 0x4 /* Triple sampling mode */ | ||
83 | |||
84 | /* | ||
85 | * CAN device statistics | ||
86 | */ | ||
87 | struct can_device_stats { | ||
88 | __u32 bus_error; /* Bus errors */ | ||
89 | __u32 error_warning; /* Changes to error warning state */ | ||
90 | __u32 error_passive; /* Changes to error passive state */ | ||
91 | __u32 bus_off; /* Changes to bus off state */ | ||
92 | __u32 arbitration_lost; /* Arbitration lost errors */ | ||
93 | __u32 restarts; /* CAN controller re-starts */ | ||
94 | }; | ||
95 | |||
96 | /* | ||
97 | * CAN netlink interface | ||
98 | */ | ||
99 | enum { | ||
100 | IFLA_CAN_UNSPEC, | ||
101 | IFLA_CAN_BITTIMING, | ||
102 | IFLA_CAN_BITTIMING_CONST, | ||
103 | IFLA_CAN_CLOCK, | ||
104 | IFLA_CAN_STATE, | ||
105 | IFLA_CAN_CTRLMODE, | ||
106 | IFLA_CAN_RESTART_MS, | ||
107 | IFLA_CAN_RESTART, | ||
108 | __IFLA_CAN_MAX | ||
109 | }; | ||
110 | |||
111 | #define IFLA_CAN_MAX (__IFLA_CAN_MAX - 1) | ||
112 | |||
113 | #endif /* CAN_NETLINK_H */ | ||
diff --git a/include/linux/can/platform/sja1000.h b/include/linux/can/platform/sja1000.h new file mode 100644 index 000000000000..01ee2aeb048d --- /dev/null +++ b/include/linux/can/platform/sja1000.h | |||
@@ -0,0 +1,35 @@ | |||
1 | #ifndef _CAN_PLATFORM_SJA1000_H_ | ||
2 | #define _CAN_PLATFORM_SJA1000_H_ | ||
3 | |||
4 | /* clock divider register */ | ||
5 | #define CDR_CLKOUT_MASK 0x07 | ||
6 | #define CDR_CLK_OFF 0x08 /* Clock off (CLKOUT pin) */ | ||
7 | #define CDR_RXINPEN 0x20 /* TX1 output is RX irq output */ | ||
8 | #define CDR_CBP 0x40 /* CAN input comparator bypass */ | ||
9 | #define CDR_PELICAN 0x80 /* PeliCAN mode */ | ||
10 | |||
11 | /* output control register */ | ||
12 | #define OCR_MODE_BIPHASE 0x00 | ||
13 | #define OCR_MODE_TEST 0x01 | ||
14 | #define OCR_MODE_NORMAL 0x02 | ||
15 | #define OCR_MODE_CLOCK 0x03 | ||
16 | #define OCR_MODE_MASK 0x07 | ||
17 | #define OCR_TX0_INVERT 0x04 | ||
18 | #define OCR_TX0_PULLDOWN 0x08 | ||
19 | #define OCR_TX0_PULLUP 0x10 | ||
20 | #define OCR_TX0_PUSHPULL 0x18 | ||
21 | #define OCR_TX1_INVERT 0x20 | ||
22 | #define OCR_TX1_PULLDOWN 0x40 | ||
23 | #define OCR_TX1_PULLUP 0x80 | ||
24 | #define OCR_TX1_PUSHPULL 0xc0 | ||
25 | #define OCR_TX_MASK 0xfc | ||
26 | #define OCR_TX_SHIFT 2 | ||
27 | |||
28 | struct sja1000_platform_data { | ||
29 | u32 clock; /* CAN bus oscillator frequency in Hz */ | ||
30 | |||
31 | u8 ocr; /* output control register */ | ||
32 | u8 cdr; /* clock divider register */ | ||
33 | }; | ||
34 | |||
35 | #endif /* !_CAN_PLATFORM_SJA1000_H_ */ | ||
diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h index a1f17abba7dc..3d7a6687d247 100644 --- a/include/linux/etherdevice.h +++ b/include/linux/etherdevice.h | |||
@@ -182,6 +182,33 @@ static inline unsigned compare_ether_addr_64bits(const u8 addr1[6+2], | |||
182 | return compare_ether_addr(addr1, addr2); | 182 | return compare_ether_addr(addr1, addr2); |
183 | #endif | 183 | #endif |
184 | } | 184 | } |
185 | |||
186 | /** | ||
187 | * is_etherdev_addr - Tell if given Ethernet address belongs to the device. | ||
188 | * @dev: Pointer to a device structure | ||
189 | * @addr: Pointer to a six-byte array containing the Ethernet address | ||
190 | * | ||
191 | * Compare passed address with all addresses of the device. Return true if the | ||
192 | * address if one of the device addresses. | ||
193 | * | ||
194 | * Note that this function calls compare_ether_addr_64bits() so take care of | ||
195 | * the right padding. | ||
196 | */ | ||
197 | static inline bool is_etherdev_addr(const struct net_device *dev, | ||
198 | const u8 addr[6 + 2]) | ||
199 | { | ||
200 | struct netdev_hw_addr *ha; | ||
201 | int res = 1; | ||
202 | |||
203 | rcu_read_lock(); | ||
204 | for_each_dev_addr(dev, ha) { | ||
205 | res = compare_ether_addr_64bits(addr, ha->addr); | ||
206 | if (!res) | ||
207 | break; | ||
208 | } | ||
209 | rcu_read_unlock(); | ||
210 | return !res; | ||
211 | } | ||
185 | #endif /* __KERNEL__ */ | 212 | #endif /* __KERNEL__ */ |
186 | 213 | ||
187 | /** | 214 | /** |
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h index 131b127b70f8..9b660bd2e2b3 100644 --- a/include/linux/ethtool.h +++ b/include/linux/ethtool.h | |||
@@ -26,11 +26,14 @@ struct ethtool_cmd { | |||
26 | __u8 phy_address; | 26 | __u8 phy_address; |
27 | __u8 transceiver; /* Which transceiver to use */ | 27 | __u8 transceiver; /* Which transceiver to use */ |
28 | __u8 autoneg; /* Enable or disable autonegotiation */ | 28 | __u8 autoneg; /* Enable or disable autonegotiation */ |
29 | __u8 mdio_support; | ||
29 | __u32 maxtxpkt; /* Tx pkts before generating tx int */ | 30 | __u32 maxtxpkt; /* Tx pkts before generating tx int */ |
30 | __u32 maxrxpkt; /* Rx pkts before generating rx int */ | 31 | __u32 maxrxpkt; /* Rx pkts before generating rx int */ |
31 | __u16 speed_hi; | 32 | __u16 speed_hi; |
32 | __u16 reserved2; | 33 | __u8 eth_tp_mdix; |
33 | __u32 reserved[3]; | 34 | __u8 reserved2; |
35 | __u32 lp_advertising; /* Features the link partner advertises */ | ||
36 | __u32 reserved[2]; | ||
34 | }; | 37 | }; |
35 | 38 | ||
36 | static inline void ethtool_cmd_speed_set(struct ethtool_cmd *ep, | 39 | static inline void ethtool_cmd_speed_set(struct ethtool_cmd *ep, |
@@ -563,6 +566,11 @@ struct ethtool_ops { | |||
563 | #define SUPPORTED_Pause (1 << 13) | 566 | #define SUPPORTED_Pause (1 << 13) |
564 | #define SUPPORTED_Asym_Pause (1 << 14) | 567 | #define SUPPORTED_Asym_Pause (1 << 14) |
565 | #define SUPPORTED_2500baseX_Full (1 << 15) | 568 | #define SUPPORTED_2500baseX_Full (1 << 15) |
569 | #define SUPPORTED_Backplane (1 << 16) | ||
570 | #define SUPPORTED_1000baseKX_Full (1 << 17) | ||
571 | #define SUPPORTED_10000baseKX4_Full (1 << 18) | ||
572 | #define SUPPORTED_10000baseKR_Full (1 << 19) | ||
573 | #define SUPPORTED_10000baseR_FEC (1 << 20) | ||
566 | 574 | ||
567 | /* Indicates what features are advertised by the interface. */ | 575 | /* Indicates what features are advertised by the interface. */ |
568 | #define ADVERTISED_10baseT_Half (1 << 0) | 576 | #define ADVERTISED_10baseT_Half (1 << 0) |
@@ -581,6 +589,11 @@ struct ethtool_ops { | |||
581 | #define ADVERTISED_Pause (1 << 13) | 589 | #define ADVERTISED_Pause (1 << 13) |
582 | #define ADVERTISED_Asym_Pause (1 << 14) | 590 | #define ADVERTISED_Asym_Pause (1 << 14) |
583 | #define ADVERTISED_2500baseX_Full (1 << 15) | 591 | #define ADVERTISED_2500baseX_Full (1 << 15) |
592 | #define ADVERTISED_Backplane (1 << 16) | ||
593 | #define ADVERTISED_1000baseKX_Full (1 << 17) | ||
594 | #define ADVERTISED_10000baseKX4_Full (1 << 18) | ||
595 | #define ADVERTISED_10000baseKR_Full (1 << 19) | ||
596 | #define ADVERTISED_10000baseR_FEC (1 << 20) | ||
584 | 597 | ||
585 | /* The following are all involved in forcing a particular link | 598 | /* The following are all involved in forcing a particular link |
586 | * mode for the device for setting things. When getting the | 599 | * mode for the device for setting things. When getting the |
@@ -605,6 +618,7 @@ struct ethtool_ops { | |||
605 | #define PORT_MII 0x02 | 618 | #define PORT_MII 0x02 |
606 | #define PORT_FIBRE 0x03 | 619 | #define PORT_FIBRE 0x03 |
607 | #define PORT_BNC 0x04 | 620 | #define PORT_BNC 0x04 |
621 | #define PORT_OTHER 0xff | ||
608 | 622 | ||
609 | /* Which transceiver to use. */ | 623 | /* Which transceiver to use. */ |
610 | #define XCVR_INTERNAL 0x00 | 624 | #define XCVR_INTERNAL 0x00 |
@@ -619,6 +633,11 @@ struct ethtool_ops { | |||
619 | #define AUTONEG_DISABLE 0x00 | 633 | #define AUTONEG_DISABLE 0x00 |
620 | #define AUTONEG_ENABLE 0x01 | 634 | #define AUTONEG_ENABLE 0x01 |
621 | 635 | ||
636 | /* Mode MDI or MDI-X */ | ||
637 | #define ETH_TP_MDI_INVALID 0x00 | ||
638 | #define ETH_TP_MDI 0x01 | ||
639 | #define ETH_TP_MDI_X 0x02 | ||
640 | |||
622 | /* Wake-On-Lan options. */ | 641 | /* Wake-On-Lan options. */ |
623 | #define WAKE_PHY (1 << 0) | 642 | #define WAKE_PHY (1 << 0) |
624 | #define WAKE_UCAST (1 << 1) | 643 | #define WAKE_UCAST (1 << 1) |
diff --git a/include/linux/fs_enet_pd.h b/include/linux/fs_enet_pd.h index 8300cab30f9a..51b793466ff3 100644 --- a/include/linux/fs_enet_pd.h +++ b/include/linux/fs_enet_pd.h | |||
@@ -17,6 +17,7 @@ | |||
17 | #define FS_ENET_PD_H | 17 | #define FS_ENET_PD_H |
18 | 18 | ||
19 | #include <linux/string.h> | 19 | #include <linux/string.h> |
20 | #include <linux/of_mdio.h> | ||
20 | #include <asm/types.h> | 21 | #include <asm/types.h> |
21 | 22 | ||
22 | #define FS_ENET_NAME "fs_enet" | 23 | #define FS_ENET_NAME "fs_enet" |
@@ -130,10 +131,7 @@ struct fs_platform_info { | |||
130 | 131 | ||
131 | u32 device_flags; | 132 | u32 device_flags; |
132 | 133 | ||
133 | int phy_addr; /* the phy address (-1 no phy) */ | 134 | struct device_node *phy_node; |
134 | char bus_id[16]; | ||
135 | int phy_irq; /* the phy irq (if it exists) */ | ||
136 | |||
137 | const struct fs_mii_bus_info *bus_info; | 135 | const struct fs_mii_bus_info *bus_info; |
138 | 136 | ||
139 | int rx_ring, tx_ring; /* number of buffers on rx */ | 137 | int rx_ring, tx_ring; /* number of buffers on rx */ |
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index 4b501b48ce86..a9173d5434d1 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h | |||
@@ -493,6 +493,7 @@ struct ieee80211s_hdr { | |||
493 | /* Mesh flags */ | 493 | /* Mesh flags */ |
494 | #define MESH_FLAGS_AE_A4 0x1 | 494 | #define MESH_FLAGS_AE_A4 0x1 |
495 | #define MESH_FLAGS_AE_A5_A6 0x2 | 495 | #define MESH_FLAGS_AE_A5_A6 0x2 |
496 | #define MESH_FLAGS_AE 0x3 | ||
496 | #define MESH_FLAGS_PS_DEEP 0x4 | 497 | #define MESH_FLAGS_PS_DEEP 0x4 |
497 | 498 | ||
498 | /** | 499 | /** |
@@ -540,10 +541,10 @@ struct ieee80211_tim_ie { | |||
540 | u8 dtim_period; | 541 | u8 dtim_period; |
541 | u8 bitmap_ctrl; | 542 | u8 bitmap_ctrl; |
542 | /* variable size: 1 - 251 bytes */ | 543 | /* variable size: 1 - 251 bytes */ |
543 | u8 virtual_map[0]; | 544 | u8 virtual_map[1]; |
544 | } __attribute__ ((packed)); | 545 | } __attribute__ ((packed)); |
545 | 546 | ||
546 | #define WLAN_SA_QUERY_TR_ID_LEN 16 | 547 | #define WLAN_SA_QUERY_TR_ID_LEN 2 |
547 | 548 | ||
548 | struct ieee80211_mgmt { | 549 | struct ieee80211_mgmt { |
549 | __le16 frame_control; | 550 | __le16 frame_control; |
@@ -1068,8 +1069,12 @@ enum ieee80211_category { | |||
1068 | WLAN_CATEGORY_DLS = 2, | 1069 | WLAN_CATEGORY_DLS = 2, |
1069 | WLAN_CATEGORY_BACK = 3, | 1070 | WLAN_CATEGORY_BACK = 3, |
1070 | WLAN_CATEGORY_PUBLIC = 4, | 1071 | WLAN_CATEGORY_PUBLIC = 4, |
1072 | WLAN_CATEGORY_HT = 7, | ||
1071 | WLAN_CATEGORY_SA_QUERY = 8, | 1073 | WLAN_CATEGORY_SA_QUERY = 8, |
1074 | WLAN_CATEGORY_PROTECTED_DUAL_OF_ACTION = 9, | ||
1072 | WLAN_CATEGORY_WMM = 17, | 1075 | WLAN_CATEGORY_WMM = 17, |
1076 | WLAN_CATEGORY_VENDOR_SPECIFIC_PROTECTED = 126, | ||
1077 | WLAN_CATEGORY_VENDOR_SPECIFIC = 127, | ||
1073 | }; | 1078 | }; |
1074 | 1079 | ||
1075 | /* SPECTRUM_MGMT action code */ | 1080 | /* SPECTRUM_MGMT action code */ |
@@ -1081,6 +1086,15 @@ enum ieee80211_spectrum_mgmt_actioncode { | |||
1081 | WLAN_ACTION_SPCT_CHL_SWITCH = 4, | 1086 | WLAN_ACTION_SPCT_CHL_SWITCH = 4, |
1082 | }; | 1087 | }; |
1083 | 1088 | ||
1089 | /* Security key length */ | ||
1090 | enum ieee80211_key_len { | ||
1091 | WLAN_KEY_LEN_WEP40 = 5, | ||
1092 | WLAN_KEY_LEN_WEP104 = 13, | ||
1093 | WLAN_KEY_LEN_CCMP = 16, | ||
1094 | WLAN_KEY_LEN_TKIP = 32, | ||
1095 | WLAN_KEY_LEN_AES_CMAC = 16, | ||
1096 | }; | ||
1097 | |||
1084 | /* | 1098 | /* |
1085 | * IEEE 802.11-2007 7.3.2.9 Country information element | 1099 | * IEEE 802.11-2007 7.3.2.9 Country information element |
1086 | * | 1100 | * |
@@ -1261,7 +1275,9 @@ static inline bool ieee80211_is_robust_mgmt_frame(struct ieee80211_hdr *hdr) | |||
1261 | if (ieee80211_has_protected(hdr->frame_control)) | 1275 | if (ieee80211_has_protected(hdr->frame_control)) |
1262 | return true; | 1276 | return true; |
1263 | category = ((u8 *) hdr) + 24; | 1277 | category = ((u8 *) hdr) + 24; |
1264 | return *category != WLAN_CATEGORY_PUBLIC; | 1278 | return *category != WLAN_CATEGORY_PUBLIC && |
1279 | *category != WLAN_CATEGORY_HT && | ||
1280 | *category != WLAN_CATEGORY_VENDOR_SPECIFIC; | ||
1265 | } | 1281 | } |
1266 | 1282 | ||
1267 | return false; | 1283 | return false; |
@@ -1383,4 +1399,43 @@ static inline int ieee80211_freq_to_ofdm_chan(int s_freq, int freq) | |||
1383 | return -1; | 1399 | return -1; |
1384 | } | 1400 | } |
1385 | 1401 | ||
1402 | /** | ||
1403 | * ieee80211_tu_to_usec - convert time units (TU) to microseconds | ||
1404 | * @tu: the TUs | ||
1405 | */ | ||
1406 | static inline unsigned long ieee80211_tu_to_usec(unsigned long tu) | ||
1407 | { | ||
1408 | return 1024 * tu; | ||
1409 | } | ||
1410 | |||
1411 | /** | ||
1412 | * ieee80211_check_tim - check if AID bit is set in TIM | ||
1413 | * @tim: the TIM IE | ||
1414 | * @tim_len: length of the TIM IE | ||
1415 | * @aid: the AID to look for | ||
1416 | */ | ||
1417 | static inline bool ieee80211_check_tim(struct ieee80211_tim_ie *tim, | ||
1418 | u8 tim_len, u16 aid) | ||
1419 | { | ||
1420 | u8 mask; | ||
1421 | u8 index, indexn1, indexn2; | ||
1422 | |||
1423 | if (unlikely(!tim || tim_len < sizeof(*tim))) | ||
1424 | return false; | ||
1425 | |||
1426 | aid &= 0x3fff; | ||
1427 | index = aid / 8; | ||
1428 | mask = 1 << (aid & 7); | ||
1429 | |||
1430 | indexn1 = tim->bitmap_ctrl & 0xfe; | ||
1431 | indexn2 = tim_len + indexn1 - 4; | ||
1432 | |||
1433 | if (index < indexn1 || index > indexn2) | ||
1434 | return false; | ||
1435 | |||
1436 | index -= indexn1; | ||
1437 | |||
1438 | return !!(tim->virtual_map[index] & mask); | ||
1439 | } | ||
1440 | |||
1386 | #endif /* LINUX_IEEE80211_H */ | 1441 | #endif /* LINUX_IEEE80211_H */ |
diff --git a/include/linux/if.h b/include/linux/if.h index 1108f3e099e3..b9a6229f3be7 100644 --- a/include/linux/if.h +++ b/include/linux/if.h | |||
@@ -67,6 +67,9 @@ | |||
67 | #define IFF_ISATAP 0x80 /* ISATAP interface (RFC4214) */ | 67 | #define IFF_ISATAP 0x80 /* ISATAP interface (RFC4214) */ |
68 | #define IFF_MASTER_ARPMON 0x100 /* bonding master, ARP mon in use */ | 68 | #define IFF_MASTER_ARPMON 0x100 /* bonding master, ARP mon in use */ |
69 | #define IFF_WAN_HDLC 0x200 /* WAN HDLC device */ | 69 | #define IFF_WAN_HDLC 0x200 /* WAN HDLC device */ |
70 | #define IFF_XMIT_DST_RELEASE 0x400 /* dev_hard_start_xmit() is allowed to | ||
71 | * release skb->dst | ||
72 | */ | ||
70 | 73 | ||
71 | #define IF_GET_IFACE 0x0001 /* for querying only */ | 74 | #define IF_GET_IFACE 0x0001 /* for querying only */ |
72 | #define IF_GET_PROTO 0x0002 | 75 | #define IF_GET_PROTO 0x0002 |
diff --git a/include/linux/if_arp.h b/include/linux/if_arp.h index 5ff89809a581..b554300ef8bf 100644 --- a/include/linux/if_arp.h +++ b/include/linux/if_arp.h | |||
@@ -86,6 +86,8 @@ | |||
86 | #define ARPHRD_IEEE80211 801 /* IEEE 802.11 */ | 86 | #define ARPHRD_IEEE80211 801 /* IEEE 802.11 */ |
87 | #define ARPHRD_IEEE80211_PRISM 802 /* IEEE 802.11 + Prism2 header */ | 87 | #define ARPHRD_IEEE80211_PRISM 802 /* IEEE 802.11 + Prism2 header */ |
88 | #define ARPHRD_IEEE80211_RADIOTAP 803 /* IEEE 802.11 + radiotap header */ | 88 | #define ARPHRD_IEEE80211_RADIOTAP 803 /* IEEE 802.11 + radiotap header */ |
89 | #define ARPHRD_IEEE802154 804 | ||
90 | #define ARPHRD_IEEE802154_PHY 805 | ||
89 | 91 | ||
90 | #define ARPHRD_PHONET 820 /* PhoNet media type */ | 92 | #define ARPHRD_PHONET 820 /* PhoNet media type */ |
91 | #define ARPHRD_PHONET_PIPE 821 /* PhoNet pipe header */ | 93 | #define ARPHRD_PHONET_PIPE 821 /* PhoNet pipe header */ |
diff --git a/include/linux/if_ether.h b/include/linux/if_ether.h index 60e8934d10b5..ae3a1871413d 100644 --- a/include/linux/if_ether.h +++ b/include/linux/if_ether.h | |||
@@ -107,6 +107,7 @@ | |||
107 | #define ETH_P_DSA 0x001B /* Distributed Switch Arch. */ | 107 | #define ETH_P_DSA 0x001B /* Distributed Switch Arch. */ |
108 | #define ETH_P_TRAILER 0x001C /* Trailer switch tagging */ | 108 | #define ETH_P_TRAILER 0x001C /* Trailer switch tagging */ |
109 | #define ETH_P_PHONET 0x00F5 /* Nokia Phonet frames */ | 109 | #define ETH_P_PHONET 0x00F5 /* Nokia Phonet frames */ |
110 | #define ETH_P_IEEE802154 0x00F6 /* IEEE802.15.4 frame */ | ||
110 | 111 | ||
111 | /* | 112 | /* |
112 | * This is an Ethernet frame header. | 113 | * This is an Ethernet frame header. |
diff --git a/include/linux/if_packet.h b/include/linux/if_packet.h index 18db0668065a..dea7d6b7cf98 100644 --- a/include/linux/if_packet.h +++ b/include/linux/if_packet.h | |||
@@ -46,6 +46,8 @@ struct sockaddr_ll | |||
46 | #define PACKET_VERSION 10 | 46 | #define PACKET_VERSION 10 |
47 | #define PACKET_HDRLEN 11 | 47 | #define PACKET_HDRLEN 11 |
48 | #define PACKET_RESERVE 12 | 48 | #define PACKET_RESERVE 12 |
49 | #define PACKET_TX_RING 13 | ||
50 | #define PACKET_LOSS 14 | ||
49 | 51 | ||
50 | struct tpacket_stats | 52 | struct tpacket_stats |
51 | { | 53 | { |
@@ -63,14 +65,22 @@ struct tpacket_auxdata | |||
63 | __u16 tp_vlan_tci; | 65 | __u16 tp_vlan_tci; |
64 | }; | 66 | }; |
65 | 67 | ||
68 | /* Rx ring - header status */ | ||
69 | #define TP_STATUS_KERNEL 0x0 | ||
70 | #define TP_STATUS_USER 0x1 | ||
71 | #define TP_STATUS_COPY 0x2 | ||
72 | #define TP_STATUS_LOSING 0x4 | ||
73 | #define TP_STATUS_CSUMNOTREADY 0x8 | ||
74 | |||
75 | /* Tx ring - header status */ | ||
76 | #define TP_STATUS_AVAILABLE 0x0 | ||
77 | #define TP_STATUS_SEND_REQUEST 0x1 | ||
78 | #define TP_STATUS_SENDING 0x2 | ||
79 | #define TP_STATUS_WRONG_FORMAT 0x4 | ||
80 | |||
66 | struct tpacket_hdr | 81 | struct tpacket_hdr |
67 | { | 82 | { |
68 | unsigned long tp_status; | 83 | unsigned long tp_status; |
69 | #define TP_STATUS_KERNEL 0 | ||
70 | #define TP_STATUS_USER 1 | ||
71 | #define TP_STATUS_COPY 2 | ||
72 | #define TP_STATUS_LOSING 4 | ||
73 | #define TP_STATUS_CSUMNOTREADY 8 | ||
74 | unsigned int tp_len; | 84 | unsigned int tp_len; |
75 | unsigned int tp_snaplen; | 85 | unsigned int tp_snaplen; |
76 | unsigned short tp_mac; | 86 | unsigned short tp_mac; |
@@ -135,5 +145,6 @@ struct packet_mreq | |||
135 | #define PACKET_MR_MULTICAST 0 | 145 | #define PACKET_MR_MULTICAST 0 |
136 | #define PACKET_MR_PROMISC 1 | 146 | #define PACKET_MR_PROMISC 1 |
137 | #define PACKET_MR_ALLMULTI 2 | 147 | #define PACKET_MR_ALLMULTI 2 |
148 | #define PACKET_MR_UNICAST 3 | ||
138 | 149 | ||
139 | #endif | 150 | #endif |
diff --git a/include/linux/if_tun.h b/include/linux/if_tun.h index 049d6c9428db..915ba5789f0e 100644 --- a/include/linux/if_tun.h +++ b/include/linux/if_tun.h | |||
@@ -55,6 +55,7 @@ | |||
55 | #define IFF_NO_PI 0x1000 | 55 | #define IFF_NO_PI 0x1000 |
56 | #define IFF_ONE_QUEUE 0x2000 | 56 | #define IFF_ONE_QUEUE 0x2000 |
57 | #define IFF_VNET_HDR 0x4000 | 57 | #define IFF_VNET_HDR 0x4000 |
58 | #define IFF_TUN_EXCL 0x8000 | ||
58 | 59 | ||
59 | /* Features for GSO (TUNSETOFFLOAD). */ | 60 | /* Features for GSO (TUNSETOFFLOAD). */ |
60 | #define TUN_F_CSUM 0x01 /* You can hand me unchecksummed packets. */ | 61 | #define TUN_F_CSUM 0x01 /* You can hand me unchecksummed packets. */ |
diff --git a/include/linux/if_tunnel.h b/include/linux/if_tunnel.h index 5a9aae4adb44..5eb9b0f857e0 100644 --- a/include/linux/if_tunnel.h +++ b/include/linux/if_tunnel.h | |||
@@ -44,7 +44,7 @@ struct ip_tunnel_prl { | |||
44 | __u16 flags; | 44 | __u16 flags; |
45 | __u16 __reserved; | 45 | __u16 __reserved; |
46 | __u32 datalen; | 46 | __u32 datalen; |
47 | __u32 __reserved2; | 47 | __u32 rs_delay; |
48 | /* data follows */ | 48 | /* data follows */ |
49 | }; | 49 | }; |
50 | 50 | ||
diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h index e1ff5b14310e..7ff9af1d0f05 100644 --- a/include/linux/if_vlan.h +++ b/include/linux/if_vlan.h | |||
@@ -118,8 +118,7 @@ extern int vlan_hwaccel_do_receive(struct sk_buff *skb); | |||
118 | extern int vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp, | 118 | extern int vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp, |
119 | unsigned int vlan_tci, struct sk_buff *skb); | 119 | unsigned int vlan_tci, struct sk_buff *skb); |
120 | extern int vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp, | 120 | extern int vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp, |
121 | unsigned int vlan_tci, | 121 | unsigned int vlan_tci); |
122 | struct napi_gro_fraginfo *info); | ||
123 | 122 | ||
124 | #else | 123 | #else |
125 | static inline struct net_device *vlan_dev_real_dev(const struct net_device *dev) | 124 | static inline struct net_device *vlan_dev_real_dev(const struct net_device *dev) |
@@ -154,8 +153,7 @@ static inline int vlan_gro_receive(struct napi_struct *napi, | |||
154 | } | 153 | } |
155 | 154 | ||
156 | static inline int vlan_gro_frags(struct napi_struct *napi, | 155 | static inline int vlan_gro_frags(struct napi_struct *napi, |
157 | struct vlan_group *grp, unsigned int vlan_tci, | 156 | struct vlan_group *grp, unsigned int vlan_tci) |
158 | struct napi_gro_fraginfo *info) | ||
159 | { | 157 | { |
160 | return NET_RX_DROP; | 158 | return NET_RX_DROP; |
161 | } | 159 | } |
diff --git a/include/linux/in.h b/include/linux/in.h index d60122a3a088..cf196da04ec9 100644 --- a/include/linux/in.h +++ b/include/linux/in.h | |||
@@ -107,6 +107,7 @@ struct in_addr { | |||
107 | #define MCAST_JOIN_SOURCE_GROUP 46 | 107 | #define MCAST_JOIN_SOURCE_GROUP 46 |
108 | #define MCAST_LEAVE_SOURCE_GROUP 47 | 108 | #define MCAST_LEAVE_SOURCE_GROUP 47 |
109 | #define MCAST_MSFILTER 48 | 109 | #define MCAST_MSFILTER 48 |
110 | #define IP_MULTICAST_ALL 49 | ||
110 | 111 | ||
111 | #define MCAST_EXCLUDE 0 | 112 | #define MCAST_EXCLUDE 0 |
112 | #define MCAST_INCLUDE 1 | 113 | #define MCAST_INCLUDE 1 |
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h index 476d9464ac82..c662efa68289 100644 --- a/include/linux/ipv6.h +++ b/include/linux/ipv6.h | |||
@@ -169,6 +169,12 @@ struct ipv6_devconf { | |||
169 | __s32 accept_dad; | 169 | __s32 accept_dad; |
170 | void *sysctl; | 170 | void *sysctl; |
171 | }; | 171 | }; |
172 | |||
173 | struct ipv6_params { | ||
174 | __s32 disable_ipv6; | ||
175 | __s32 autoconf; | ||
176 | }; | ||
177 | extern struct ipv6_params ipv6_defaults; | ||
172 | #endif | 178 | #endif |
173 | 179 | ||
174 | /* index values for the variables in ipv6_devconf */ | 180 | /* index values for the variables in ipv6_devconf */ |
diff --git a/include/linux/isdn/capilli.h b/include/linux/isdn/capilli.h index 35e9b0fd014b..7acb87a44872 100644 --- a/include/linux/isdn/capilli.h +++ b/include/linux/isdn/capilli.h | |||
@@ -79,7 +79,7 @@ int attach_capi_ctr(struct capi_ctr *); | |||
79 | int detach_capi_ctr(struct capi_ctr *); | 79 | int detach_capi_ctr(struct capi_ctr *); |
80 | 80 | ||
81 | void capi_ctr_ready(struct capi_ctr * card); | 81 | void capi_ctr_ready(struct capi_ctr * card); |
82 | void capi_ctr_reseted(struct capi_ctr * card); | 82 | void capi_ctr_down(struct capi_ctr * card); |
83 | void capi_ctr_suspend_output(struct capi_ctr * card); | 83 | void capi_ctr_suspend_output(struct capi_ctr * card); |
84 | void capi_ctr_resume_output(struct capi_ctr * card); | 84 | void capi_ctr_resume_output(struct capi_ctr * card); |
85 | void capi_ctr_handle_message(struct capi_ctr * card, u16 appl, struct sk_buff *skb); | 85 | void capi_ctr_handle_message(struct capi_ctr * card, u16 appl, struct sk_buff *skb); |
diff --git a/include/linux/list_nulls.h b/include/linux/list_nulls.h index 93150ecf3ea4..5d10ae364b5e 100644 --- a/include/linux/list_nulls.h +++ b/include/linux/list_nulls.h | |||
@@ -56,6 +56,18 @@ static inline int hlist_nulls_empty(const struct hlist_nulls_head *h) | |||
56 | return is_a_nulls(h->first); | 56 | return is_a_nulls(h->first); |
57 | } | 57 | } |
58 | 58 | ||
59 | static inline void hlist_nulls_add_head(struct hlist_nulls_node *n, | ||
60 | struct hlist_nulls_head *h) | ||
61 | { | ||
62 | struct hlist_nulls_node *first = h->first; | ||
63 | |||
64 | n->next = first; | ||
65 | n->pprev = &h->first; | ||
66 | h->first = n; | ||
67 | if (!is_a_nulls(first)) | ||
68 | first->pprev = &n->next; | ||
69 | } | ||
70 | |||
59 | static inline void __hlist_nulls_del(struct hlist_nulls_node *n) | 71 | static inline void __hlist_nulls_del(struct hlist_nulls_node *n) |
60 | { | 72 | { |
61 | struct hlist_nulls_node *next = n->next; | 73 | struct hlist_nulls_node *next = n->next; |
@@ -65,6 +77,12 @@ static inline void __hlist_nulls_del(struct hlist_nulls_node *n) | |||
65 | next->pprev = pprev; | 77 | next->pprev = pprev; |
66 | } | 78 | } |
67 | 79 | ||
80 | static inline void hlist_nulls_del(struct hlist_nulls_node *n) | ||
81 | { | ||
82 | __hlist_nulls_del(n); | ||
83 | n->pprev = LIST_POISON2; | ||
84 | } | ||
85 | |||
68 | /** | 86 | /** |
69 | * hlist_nulls_for_each_entry - iterate over list of given type | 87 | * hlist_nulls_for_each_entry - iterate over list of given type |
70 | * @tpos: the type * to use as a loop cursor. | 88 | * @tpos: the type * to use as a loop cursor. |
diff --git a/include/linux/mISDNdsp.h b/include/linux/mISDNdsp.h index 6b71d2dce508..41d1eeb9b3bd 100644 --- a/include/linux/mISDNdsp.h +++ b/include/linux/mISDNdsp.h | |||
@@ -12,7 +12,8 @@ struct mISDN_dsp_element { | |||
12 | void *(*new)(const char *arg); | 12 | void *(*new)(const char *arg); |
13 | void (*free)(void *p); | 13 | void (*free)(void *p); |
14 | void (*process_tx)(void *p, unsigned char *data, int len); | 14 | void (*process_tx)(void *p, unsigned char *data, int len); |
15 | void (*process_rx)(void *p, unsigned char *data, int len); | 15 | void (*process_rx)(void *p, unsigned char *data, int len, |
16 | unsigned int txlen); | ||
16 | int num_args; | 17 | int num_args; |
17 | struct mISDN_dsp_element_arg | 18 | struct mISDN_dsp_element_arg |
18 | *args; | 19 | *args; |
@@ -24,6 +25,7 @@ extern void mISDN_dsp_element_unregister(struct mISDN_dsp_element *elem); | |||
24 | struct dsp_features { | 25 | struct dsp_features { |
25 | int hfc_id; /* unique id to identify the chip (or -1) */ | 26 | int hfc_id; /* unique id to identify the chip (or -1) */ |
26 | int hfc_dtmf; /* set if HFCmulti card supports dtmf */ | 27 | int hfc_dtmf; /* set if HFCmulti card supports dtmf */ |
28 | int hfc_conf; /* set if HFCmulti card supports conferences */ | ||
27 | int hfc_loops; /* set if card supports tone loops */ | 29 | int hfc_loops; /* set if card supports tone loops */ |
28 | int hfc_echocanhw; /* set if card supports echocancelation*/ | 30 | int hfc_echocanhw; /* set if card supports echocancelation*/ |
29 | int pcm_id; /* unique id to identify the pcm bus (or -1) */ | 31 | int pcm_id; /* unique id to identify the pcm bus (or -1) */ |
diff --git a/include/linux/mISDNhw.h b/include/linux/mISDNhw.h index 97ffdc1d3442..7f9831da847f 100644 --- a/include/linux/mISDNhw.h +++ b/include/linux/mISDNhw.h | |||
@@ -89,11 +89,6 @@ struct dchannel { | |||
89 | void (*phfunc) (struct dchannel *); | 89 | void (*phfunc) (struct dchannel *); |
90 | u_int state; | 90 | u_int state; |
91 | void *l1; | 91 | void *l1; |
92 | /* HW access */ | ||
93 | u_char (*read_reg) (void *, u_char); | ||
94 | void (*write_reg) (void *, u_char, u_char); | ||
95 | void (*read_fifo) (void *, u_char *, int); | ||
96 | void (*write_fifo) (void *, u_char *, int); | ||
97 | void *hw; | 92 | void *hw; |
98 | int slot; /* multiport card channel slot */ | 93 | int slot; /* multiport card channel slot */ |
99 | struct timer_list timer; | 94 | struct timer_list timer; |
@@ -151,11 +146,6 @@ struct bchannel { | |||
151 | u_long Flags; | 146 | u_long Flags; |
152 | struct work_struct workq; | 147 | struct work_struct workq; |
153 | u_int state; | 148 | u_int state; |
154 | /* HW access */ | ||
155 | u_char (*read_reg) (void *, u_char); | ||
156 | void (*write_reg) (void *, u_char, u_char); | ||
157 | void (*read_fifo) (void *, u_char *, int); | ||
158 | void (*write_fifo) (void *, u_char *, int); | ||
159 | void *hw; | 149 | void *hw; |
160 | int slot; /* multiport card channel slot */ | 150 | int slot; /* multiport card channel slot */ |
161 | struct timer_list timer; | 151 | struct timer_list timer; |
@@ -185,7 +175,7 @@ extern int dchannel_senddata(struct dchannel *, struct sk_buff *); | |||
185 | extern int bchannel_senddata(struct bchannel *, struct sk_buff *); | 175 | extern int bchannel_senddata(struct bchannel *, struct sk_buff *); |
186 | extern void recv_Dchannel(struct dchannel *); | 176 | extern void recv_Dchannel(struct dchannel *); |
187 | extern void recv_Echannel(struct dchannel *, struct dchannel *); | 177 | extern void recv_Echannel(struct dchannel *, struct dchannel *); |
188 | extern void recv_Bchannel(struct bchannel *); | 178 | extern void recv_Bchannel(struct bchannel *, unsigned int id); |
189 | extern void recv_Dchannel_skb(struct dchannel *, struct sk_buff *); | 179 | extern void recv_Dchannel_skb(struct dchannel *, struct sk_buff *); |
190 | extern void recv_Bchannel_skb(struct bchannel *, struct sk_buff *); | 180 | extern void recv_Bchannel_skb(struct bchannel *, struct sk_buff *); |
191 | extern void confirm_Bsend(struct bchannel *bch); | 181 | extern void confirm_Bsend(struct bchannel *bch); |
diff --git a/include/linux/mISDNif.h b/include/linux/mISDNif.h index 5da3d95b27f1..45100b39a7cf 100644 --- a/include/linux/mISDNif.h +++ b/include/linux/mISDNif.h | |||
@@ -229,6 +229,7 @@ | |||
229 | #define OPTION_L2_PTP 2 | 229 | #define OPTION_L2_PTP 2 |
230 | #define OPTION_L2_FIXEDTEI 3 | 230 | #define OPTION_L2_FIXEDTEI 3 |
231 | #define OPTION_L2_CLEANUP 4 | 231 | #define OPTION_L2_CLEANUP 4 |
232 | #define OPTION_L1_HOLD 5 | ||
232 | 233 | ||
233 | /* should be in sync with linux/kobject.h:KOBJ_NAME_LEN */ | 234 | /* should be in sync with linux/kobject.h:KOBJ_NAME_LEN */ |
234 | #define MISDN_MAX_IDLEN 20 | 235 | #define MISDN_MAX_IDLEN 20 |
@@ -291,19 +292,19 @@ struct mISDN_devrename { | |||
291 | 292 | ||
292 | /* MPH_INFORMATION_REQ payload */ | 293 | /* MPH_INFORMATION_REQ payload */ |
293 | struct ph_info_ch { | 294 | struct ph_info_ch { |
294 | __u32 protocol; | 295 | __u32 protocol; |
295 | __u64 Flags; | 296 | __u64 Flags; |
296 | }; | 297 | }; |
297 | 298 | ||
298 | struct ph_info_dch { | 299 | struct ph_info_dch { |
299 | struct ph_info_ch ch; | 300 | struct ph_info_ch ch; |
300 | __u16 state; | 301 | __u16 state; |
301 | __u16 num_bch; | 302 | __u16 num_bch; |
302 | }; | 303 | }; |
303 | 304 | ||
304 | struct ph_info { | 305 | struct ph_info { |
305 | struct ph_info_dch dch; | 306 | struct ph_info_dch dch; |
306 | struct ph_info_ch bch[]; | 307 | struct ph_info_ch bch[]; |
307 | }; | 308 | }; |
308 | 309 | ||
309 | /* timer device ioctl */ | 310 | /* timer device ioctl */ |
@@ -317,6 +318,7 @@ struct ph_info { | |||
317 | #define IMCTRLREQ _IOR('I', 69, int) | 318 | #define IMCTRLREQ _IOR('I', 69, int) |
318 | #define IMCLEAR_L2 _IOR('I', 70, int) | 319 | #define IMCLEAR_L2 _IOR('I', 70, int) |
319 | #define IMSETDEVNAME _IOR('I', 71, struct mISDN_devrename) | 320 | #define IMSETDEVNAME _IOR('I', 71, struct mISDN_devrename) |
321 | #define IMHOLD_L1 _IOR('I', 72, int) | ||
320 | 322 | ||
321 | static inline int | 323 | static inline int |
322 | test_channelmap(u_int nr, u_char *map) | 324 | test_channelmap(u_int nr, u_char *map) |
@@ -362,7 +364,8 @@ clear_channelmap(u_int nr, u_char *map) | |||
362 | #define MISDN_CTRL_HFC_RECEIVE_ON 0x4006 | 364 | #define MISDN_CTRL_HFC_RECEIVE_ON 0x4006 |
363 | #define MISDN_CTRL_HFC_ECHOCAN_ON 0x4007 | 365 | #define MISDN_CTRL_HFC_ECHOCAN_ON 0x4007 |
364 | #define MISDN_CTRL_HFC_ECHOCAN_OFF 0x4008 | 366 | #define MISDN_CTRL_HFC_ECHOCAN_OFF 0x4008 |
365 | 367 | #define MISDN_CTRL_HFC_WD_INIT 0x4009 | |
368 | #define MISDN_CTRL_HFC_WD_RESET 0x400A | ||
366 | 369 | ||
367 | /* socket options */ | 370 | /* socket options */ |
368 | #define MISDN_TIME_STAMP 0x0001 | 371 | #define MISDN_TIME_STAMP 0x0001 |
diff --git a/include/linux/mdio.h b/include/linux/mdio.h new file mode 100644 index 000000000000..cfdf1df2875e --- /dev/null +++ b/include/linux/mdio.h | |||
@@ -0,0 +1,356 @@ | |||
1 | /* | ||
2 | * linux/mdio.h: definitions for MDIO (clause 45) transceivers | ||
3 | * Copyright 2006-2009 Solarflare Communications Inc. | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify it | ||
6 | * under the terms of the GNU General Public License version 2 as published | ||
7 | * by the Free Software Foundation, incorporated herein by reference. | ||
8 | */ | ||
9 | |||
10 | #ifndef __LINUX_MDIO_H__ | ||
11 | #define __LINUX_MDIO_H__ | ||
12 | |||
13 | #include <linux/mii.h> | ||
14 | |||
15 | /* MDIO Manageable Devices (MMDs). */ | ||
16 | #define MDIO_MMD_PMAPMD 1 /* Physical Medium Attachment/ | ||
17 | * Physical Medium Dependent */ | ||
18 | #define MDIO_MMD_WIS 2 /* WAN Interface Sublayer */ | ||
19 | #define MDIO_MMD_PCS 3 /* Physical Coding Sublayer */ | ||
20 | #define MDIO_MMD_PHYXS 4 /* PHY Extender Sublayer */ | ||
21 | #define MDIO_MMD_DTEXS 5 /* DTE Extender Sublayer */ | ||
22 | #define MDIO_MMD_TC 6 /* Transmission Convergence */ | ||
23 | #define MDIO_MMD_AN 7 /* Auto-Negotiation */ | ||
24 | #define MDIO_MMD_C22EXT 29 /* Clause 22 extension */ | ||
25 | #define MDIO_MMD_VEND1 30 /* Vendor specific 1 */ | ||
26 | #define MDIO_MMD_VEND2 31 /* Vendor specific 2 */ | ||
27 | |||
28 | /* Generic MDIO registers. */ | ||
29 | #define MDIO_CTRL1 MII_BMCR | ||
30 | #define MDIO_STAT1 MII_BMSR | ||
31 | #define MDIO_DEVID1 MII_PHYSID1 | ||
32 | #define MDIO_DEVID2 MII_PHYSID2 | ||
33 | #define MDIO_SPEED 4 /* Speed ability */ | ||
34 | #define MDIO_DEVS1 5 /* Devices in package */ | ||
35 | #define MDIO_DEVS2 6 | ||
36 | #define MDIO_CTRL2 7 /* 10G control 2 */ | ||
37 | #define MDIO_STAT2 8 /* 10G status 2 */ | ||
38 | #define MDIO_PMA_TXDIS 9 /* 10G PMA/PMD transmit disable */ | ||
39 | #define MDIO_PMA_RXDET 10 /* 10G PMA/PMD receive signal detect */ | ||
40 | #define MDIO_PMA_EXTABLE 11 /* 10G PMA/PMD extended ability */ | ||
41 | #define MDIO_PKGID1 14 /* Package identifier */ | ||
42 | #define MDIO_PKGID2 15 | ||
43 | #define MDIO_AN_ADVERTISE 16 /* AN advertising (base page) */ | ||
44 | #define MDIO_AN_LPA 19 /* AN LP abilities (base page) */ | ||
45 | #define MDIO_PHYXS_LNSTAT 24 /* PHY XGXS lane state */ | ||
46 | |||
47 | /* Media-dependent registers. */ | ||
48 | #define MDIO_PMA_10GBT_SWAPPOL 130 /* 10GBASE-T pair swap & polarity */ | ||
49 | #define MDIO_PMA_10GBT_TXPWR 131 /* 10GBASE-T TX power control */ | ||
50 | #define MDIO_PMA_10GBT_SNR 133 /* 10GBASE-T SNR margin, lane A. | ||
51 | * Lanes B-D are numbered 134-136. */ | ||
52 | #define MDIO_PMA_10GBR_FECABLE 170 /* 10GBASE-R FEC ability */ | ||
53 | #define MDIO_PCS_10GBX_STAT1 24 /* 10GBASE-X PCS status 1 */ | ||
54 | #define MDIO_PCS_10GBRT_STAT1 32 /* 10GBASE-R/-T PCS status 1 */ | ||
55 | #define MDIO_PCS_10GBRT_STAT2 33 /* 10GBASE-R/-T PCS status 2 */ | ||
56 | #define MDIO_AN_10GBT_CTRL 32 /* 10GBASE-T auto-negotiation control */ | ||
57 | #define MDIO_AN_10GBT_STAT 33 /* 10GBASE-T auto-negotiation status */ | ||
58 | |||
59 | /* LASI (Link Alarm Status Interrupt) registers, defined by XENPAK MSA. */ | ||
60 | #define MDIO_PMA_LASI_RXCTRL 0x9000 /* RX_ALARM control */ | ||
61 | #define MDIO_PMA_LASI_TXCTRL 0x9001 /* TX_ALARM control */ | ||
62 | #define MDIO_PMA_LASI_CTRL 0x9002 /* LASI control */ | ||
63 | #define MDIO_PMA_LASI_RXSTAT 0x9003 /* RX_ALARM status */ | ||
64 | #define MDIO_PMA_LASI_TXSTAT 0x9004 /* TX_ALARM status */ | ||
65 | #define MDIO_PMA_LASI_STAT 0x9005 /* LASI status */ | ||
66 | |||
67 | /* Control register 1. */ | ||
68 | /* Enable extended speed selection */ | ||
69 | #define MDIO_CTRL1_SPEEDSELEXT (BMCR_SPEED1000 | BMCR_SPEED100) | ||
70 | /* All speed selection bits */ | ||
71 | #define MDIO_CTRL1_SPEEDSEL (MDIO_CTRL1_SPEEDSELEXT | 0x003c) | ||
72 | #define MDIO_CTRL1_FULLDPLX BMCR_FULLDPLX | ||
73 | #define MDIO_CTRL1_LPOWER BMCR_PDOWN | ||
74 | #define MDIO_CTRL1_RESET BMCR_RESET | ||
75 | #define MDIO_PMA_CTRL1_LOOPBACK 0x0001 | ||
76 | #define MDIO_PMA_CTRL1_SPEED1000 BMCR_SPEED1000 | ||
77 | #define MDIO_PMA_CTRL1_SPEED100 BMCR_SPEED100 | ||
78 | #define MDIO_PCS_CTRL1_LOOPBACK BMCR_LOOPBACK | ||
79 | #define MDIO_PHYXS_CTRL1_LOOPBACK BMCR_LOOPBACK | ||
80 | #define MDIO_AN_CTRL1_RESTART BMCR_ANRESTART | ||
81 | #define MDIO_AN_CTRL1_ENABLE BMCR_ANENABLE | ||
82 | #define MDIO_AN_CTRL1_XNP 0x2000 /* Enable extended next page */ | ||
83 | |||
84 | /* 10 Gb/s */ | ||
85 | #define MDIO_CTRL1_SPEED10G (MDIO_CTRL1_SPEEDSELEXT | 0x00) | ||
86 | /* 10PASS-TS/2BASE-TL */ | ||
87 | #define MDIO_CTRL1_SPEED10P2B (MDIO_CTRL1_SPEEDSELEXT | 0x04) | ||
88 | |||
89 | /* Status register 1. */ | ||
90 | #define MDIO_STAT1_LPOWERABLE 0x0002 /* Low-power ability */ | ||
91 | #define MDIO_STAT1_LSTATUS BMSR_LSTATUS | ||
92 | #define MDIO_STAT1_FAULT 0x0080 /* Fault */ | ||
93 | #define MDIO_AN_STAT1_LPABLE 0x0001 /* Link partner AN ability */ | ||
94 | #define MDIO_AN_STAT1_ABLE BMSR_ANEGCAPABLE | ||
95 | #define MDIO_AN_STAT1_RFAULT BMSR_RFAULT | ||
96 | #define MDIO_AN_STAT1_COMPLETE BMSR_ANEGCOMPLETE | ||
97 | #define MDIO_AN_STAT1_PAGE 0x0040 /* Page received */ | ||
98 | #define MDIO_AN_STAT1_XNP 0x0080 /* Extended next page status */ | ||
99 | |||
100 | /* Speed register. */ | ||
101 | #define MDIO_SPEED_10G 0x0001 /* 10G capable */ | ||
102 | #define MDIO_PMA_SPEED_2B 0x0002 /* 2BASE-TL capable */ | ||
103 | #define MDIO_PMA_SPEED_10P 0x0004 /* 10PASS-TS capable */ | ||
104 | #define MDIO_PMA_SPEED_1000 0x0010 /* 1000M capable */ | ||
105 | #define MDIO_PMA_SPEED_100 0x0020 /* 100M capable */ | ||
106 | #define MDIO_PMA_SPEED_10 0x0040 /* 10M capable */ | ||
107 | #define MDIO_PCS_SPEED_10P2B 0x0002 /* 10PASS-TS/2BASE-TL capable */ | ||
108 | |||
109 | /* Device present registers. */ | ||
110 | #define MDIO_DEVS_PRESENT(devad) (1 << (devad)) | ||
111 | #define MDIO_DEVS_PMAPMD MDIO_DEVS_PRESENT(MDIO_MMD_PMAPMD) | ||
112 | #define MDIO_DEVS_WIS MDIO_DEVS_PRESENT(MDIO_MMD_WIS) | ||
113 | #define MDIO_DEVS_PCS MDIO_DEVS_PRESENT(MDIO_MMD_PCS) | ||
114 | #define MDIO_DEVS_PHYXS MDIO_DEVS_PRESENT(MDIO_MMD_PHYXS) | ||
115 | #define MDIO_DEVS_DTEXS MDIO_DEVS_PRESENT(MDIO_MMD_DTEXS) | ||
116 | #define MDIO_DEVS_TC MDIO_DEVS_PRESENT(MDIO_MMD_TC) | ||
117 | #define MDIO_DEVS_AN MDIO_DEVS_PRESENT(MDIO_MMD_AN) | ||
118 | #define MDIO_DEVS_C22EXT MDIO_DEVS_PRESENT(MDIO_MMD_C22EXT) | ||
119 | |||
120 | /* Control register 2. */ | ||
121 | #define MDIO_PMA_CTRL2_TYPE 0x000f /* PMA/PMD type selection */ | ||
122 | #define MDIO_PMA_CTRL2_10GBCX4 0x0000 /* 10GBASE-CX4 type */ | ||
123 | #define MDIO_PMA_CTRL2_10GBEW 0x0001 /* 10GBASE-EW type */ | ||
124 | #define MDIO_PMA_CTRL2_10GBLW 0x0002 /* 10GBASE-LW type */ | ||
125 | #define MDIO_PMA_CTRL2_10GBSW 0x0003 /* 10GBASE-SW type */ | ||
126 | #define MDIO_PMA_CTRL2_10GBLX4 0x0004 /* 10GBASE-LX4 type */ | ||
127 | #define MDIO_PMA_CTRL2_10GBER 0x0005 /* 10GBASE-ER type */ | ||
128 | #define MDIO_PMA_CTRL2_10GBLR 0x0006 /* 10GBASE-LR type */ | ||
129 | #define MDIO_PMA_CTRL2_10GBSR 0x0007 /* 10GBASE-SR type */ | ||
130 | #define MDIO_PMA_CTRL2_10GBLRM 0x0008 /* 10GBASE-LRM type */ | ||
131 | #define MDIO_PMA_CTRL2_10GBT 0x0009 /* 10GBASE-T type */ | ||
132 | #define MDIO_PMA_CTRL2_10GBKX4 0x000a /* 10GBASE-KX4 type */ | ||
133 | #define MDIO_PMA_CTRL2_10GBKR 0x000b /* 10GBASE-KR type */ | ||
134 | #define MDIO_PMA_CTRL2_1000BT 0x000c /* 1000BASE-T type */ | ||
135 | #define MDIO_PMA_CTRL2_1000BKX 0x000d /* 1000BASE-KX type */ | ||
136 | #define MDIO_PMA_CTRL2_100BTX 0x000e /* 100BASE-TX type */ | ||
137 | #define MDIO_PMA_CTRL2_10BT 0x000f /* 10BASE-T type */ | ||
138 | #define MDIO_PCS_CTRL2_TYPE 0x0003 /* PCS type selection */ | ||
139 | #define MDIO_PCS_CTRL2_10GBR 0x0000 /* 10GBASE-R type */ | ||
140 | #define MDIO_PCS_CTRL2_10GBX 0x0001 /* 10GBASE-X type */ | ||
141 | #define MDIO_PCS_CTRL2_10GBW 0x0002 /* 10GBASE-W type */ | ||
142 | #define MDIO_PCS_CTRL2_10GBT 0x0003 /* 10GBASE-T type */ | ||
143 | |||
144 | /* Status register 2. */ | ||
145 | #define MDIO_STAT2_RXFAULT 0x0400 /* Receive fault */ | ||
146 | #define MDIO_STAT2_TXFAULT 0x0800 /* Transmit fault */ | ||
147 | #define MDIO_STAT2_DEVPRST 0xc000 /* Device present */ | ||
148 | #define MDIO_STAT2_DEVPRST_VAL 0x8000 /* Device present value */ | ||
149 | #define MDIO_PMA_STAT2_LBABLE 0x0001 /* PMA loopback ability */ | ||
150 | #define MDIO_PMA_STAT2_10GBEW 0x0002 /* 10GBASE-EW ability */ | ||
151 | #define MDIO_PMA_STAT2_10GBLW 0x0004 /* 10GBASE-LW ability */ | ||
152 | #define MDIO_PMA_STAT2_10GBSW 0x0008 /* 10GBASE-SW ability */ | ||
153 | #define MDIO_PMA_STAT2_10GBLX4 0x0010 /* 10GBASE-LX4 ability */ | ||
154 | #define MDIO_PMA_STAT2_10GBER 0x0020 /* 10GBASE-ER ability */ | ||
155 | #define MDIO_PMA_STAT2_10GBLR 0x0040 /* 10GBASE-LR ability */ | ||
156 | #define MDIO_PMA_STAT2_10GBSR 0x0080 /* 10GBASE-SR ability */ | ||
157 | #define MDIO_PMD_STAT2_TXDISAB 0x0100 /* PMD TX disable ability */ | ||
158 | #define MDIO_PMA_STAT2_EXTABLE 0x0200 /* Extended abilities */ | ||
159 | #define MDIO_PMA_STAT2_RXFLTABLE 0x1000 /* Receive fault ability */ | ||
160 | #define MDIO_PMA_STAT2_TXFLTABLE 0x2000 /* Transmit fault ability */ | ||
161 | #define MDIO_PCS_STAT2_10GBR 0x0001 /* 10GBASE-R capable */ | ||
162 | #define MDIO_PCS_STAT2_10GBX 0x0002 /* 10GBASE-X capable */ | ||
163 | #define MDIO_PCS_STAT2_10GBW 0x0004 /* 10GBASE-W capable */ | ||
164 | #define MDIO_PCS_STAT2_RXFLTABLE 0x1000 /* Receive fault ability */ | ||
165 | #define MDIO_PCS_STAT2_TXFLTABLE 0x2000 /* Transmit fault ability */ | ||
166 | |||
167 | /* Transmit disable register. */ | ||
168 | #define MDIO_PMD_TXDIS_GLOBAL 0x0001 /* Global PMD TX disable */ | ||
169 | #define MDIO_PMD_TXDIS_0 0x0002 /* PMD TX disable 0 */ | ||
170 | #define MDIO_PMD_TXDIS_1 0x0004 /* PMD TX disable 1 */ | ||
171 | #define MDIO_PMD_TXDIS_2 0x0008 /* PMD TX disable 2 */ | ||
172 | #define MDIO_PMD_TXDIS_3 0x0010 /* PMD TX disable 3 */ | ||
173 | |||
174 | /* Receive signal detect register. */ | ||
175 | #define MDIO_PMD_RXDET_GLOBAL 0x0001 /* Global PMD RX signal detect */ | ||
176 | #define MDIO_PMD_RXDET_0 0x0002 /* PMD RX signal detect 0 */ | ||
177 | #define MDIO_PMD_RXDET_1 0x0004 /* PMD RX signal detect 1 */ | ||
178 | #define MDIO_PMD_RXDET_2 0x0008 /* PMD RX signal detect 2 */ | ||
179 | #define MDIO_PMD_RXDET_3 0x0010 /* PMD RX signal detect 3 */ | ||
180 | |||
181 | /* Extended abilities register. */ | ||
182 | #define MDIO_PMA_EXTABLE_10GCX4 0x0001 /* 10GBASE-CX4 ability */ | ||
183 | #define MDIO_PMA_EXTABLE_10GBLRM 0x0002 /* 10GBASE-LRM ability */ | ||
184 | #define MDIO_PMA_EXTABLE_10GBT 0x0004 /* 10GBASE-T ability */ | ||
185 | #define MDIO_PMA_EXTABLE_10GBKX4 0x0008 /* 10GBASE-KX4 ability */ | ||
186 | #define MDIO_PMA_EXTABLE_10GBKR 0x0010 /* 10GBASE-KR ability */ | ||
187 | #define MDIO_PMA_EXTABLE_1000BT 0x0020 /* 1000BASE-T ability */ | ||
188 | #define MDIO_PMA_EXTABLE_1000BKX 0x0040 /* 1000BASE-KX ability */ | ||
189 | #define MDIO_PMA_EXTABLE_100BTX 0x0080 /* 100BASE-TX ability */ | ||
190 | #define MDIO_PMA_EXTABLE_10BT 0x0100 /* 10BASE-T ability */ | ||
191 | |||
192 | /* PHY XGXS lane state register. */ | ||
193 | #define MDIO_PHYXS_LNSTAT_SYNC0 0x0001 | ||
194 | #define MDIO_PHYXS_LNSTAT_SYNC1 0x0002 | ||
195 | #define MDIO_PHYXS_LNSTAT_SYNC2 0x0004 | ||
196 | #define MDIO_PHYXS_LNSTAT_SYNC3 0x0008 | ||
197 | #define MDIO_PHYXS_LNSTAT_ALIGN 0x1000 | ||
198 | |||
199 | /* PMA 10GBASE-T pair swap & polarity */ | ||
200 | #define MDIO_PMA_10GBT_SWAPPOL_ABNX 0x0001 /* Pair A/B uncrossed */ | ||
201 | #define MDIO_PMA_10GBT_SWAPPOL_CDNX 0x0002 /* Pair C/D uncrossed */ | ||
202 | #define MDIO_PMA_10GBT_SWAPPOL_AREV 0x0100 /* Pair A polarity reversed */ | ||
203 | #define MDIO_PMA_10GBT_SWAPPOL_BREV 0x0200 /* Pair B polarity reversed */ | ||
204 | #define MDIO_PMA_10GBT_SWAPPOL_CREV 0x0400 /* Pair C polarity reversed */ | ||
205 | #define MDIO_PMA_10GBT_SWAPPOL_DREV 0x0800 /* Pair D polarity reversed */ | ||
206 | |||
207 | /* PMA 10GBASE-T TX power register. */ | ||
208 | #define MDIO_PMA_10GBT_TXPWR_SHORT 0x0001 /* Short-reach mode */ | ||
209 | |||
210 | /* PMA 10GBASE-T SNR registers. */ | ||
211 | /* Value is SNR margin in dB, clamped to range [-127, 127], plus 0x8000. */ | ||
212 | #define MDIO_PMA_10GBT_SNR_BIAS 0x8000 | ||
213 | #define MDIO_PMA_10GBT_SNR_MAX 127 | ||
214 | |||
215 | /* PMA 10GBASE-R FEC ability register. */ | ||
216 | #define MDIO_PMA_10GBR_FECABLE_ABLE 0x0001 /* FEC ability */ | ||
217 | #define MDIO_PMA_10GBR_FECABLE_ERRABLE 0x0002 /* FEC error indic. ability */ | ||
218 | |||
219 | /* PCS 10GBASE-R/-T status register 1. */ | ||
220 | #define MDIO_PCS_10GBRT_STAT1_BLKLK 0x0001 /* Block lock attained */ | ||
221 | |||
222 | /* PCS 10GBASE-R/-T status register 2. */ | ||
223 | #define MDIO_PCS_10GBRT_STAT2_ERR 0x00ff | ||
224 | #define MDIO_PCS_10GBRT_STAT2_BER 0x3f00 | ||
225 | |||
226 | /* AN 10GBASE-T control register. */ | ||
227 | #define MDIO_AN_10GBT_CTRL_ADV10G 0x1000 /* Advertise 10GBASE-T */ | ||
228 | |||
229 | /* AN 10GBASE-T status register. */ | ||
230 | #define MDIO_AN_10GBT_STAT_LPTRR 0x0200 /* LP training reset req. */ | ||
231 | #define MDIO_AN_10GBT_STAT_LPLTABLE 0x0400 /* LP loop timing ability */ | ||
232 | #define MDIO_AN_10GBT_STAT_LP10G 0x0800 /* LP is 10GBT capable */ | ||
233 | #define MDIO_AN_10GBT_STAT_REMOK 0x1000 /* Remote OK */ | ||
234 | #define MDIO_AN_10GBT_STAT_LOCOK 0x2000 /* Local OK */ | ||
235 | #define MDIO_AN_10GBT_STAT_MS 0x4000 /* Master/slave config */ | ||
236 | #define MDIO_AN_10GBT_STAT_MSFLT 0x8000 /* Master/slave config fault */ | ||
237 | |||
238 | /* LASI RX_ALARM control/status registers. */ | ||
239 | #define MDIO_PMA_LASI_RX_PHYXSLFLT 0x0001 /* PHY XS RX local fault */ | ||
240 | #define MDIO_PMA_LASI_RX_PCSLFLT 0x0008 /* PCS RX local fault */ | ||
241 | #define MDIO_PMA_LASI_RX_PMALFLT 0x0010 /* PMA/PMD RX local fault */ | ||
242 | #define MDIO_PMA_LASI_RX_OPTICPOWERFLT 0x0020 /* RX optical power fault */ | ||
243 | #define MDIO_PMA_LASI_RX_WISLFLT 0x0200 /* WIS local fault */ | ||
244 | |||
245 | /* LASI TX_ALARM control/status registers. */ | ||
246 | #define MDIO_PMA_LASI_TX_PHYXSLFLT 0x0001 /* PHY XS TX local fault */ | ||
247 | #define MDIO_PMA_LASI_TX_PCSLFLT 0x0008 /* PCS TX local fault */ | ||
248 | #define MDIO_PMA_LASI_TX_PMALFLT 0x0010 /* PMA/PMD TX local fault */ | ||
249 | #define MDIO_PMA_LASI_TX_LASERPOWERFLT 0x0080 /* Laser output power fault */ | ||
250 | #define MDIO_PMA_LASI_TX_LASERTEMPFLT 0x0100 /* Laser temperature fault */ | ||
251 | #define MDIO_PMA_LASI_TX_LASERBICURRFLT 0x0200 /* Laser bias current fault */ | ||
252 | |||
253 | /* LASI control/status registers. */ | ||
254 | #define MDIO_PMA_LASI_LSALARM 0x0001 /* LS_ALARM enable/status */ | ||
255 | #define MDIO_PMA_LASI_TXALARM 0x0002 /* TX_ALARM enable/status */ | ||
256 | #define MDIO_PMA_LASI_RXALARM 0x0004 /* RX_ALARM enable/status */ | ||
257 | |||
258 | /* Mapping between MDIO PRTAD/DEVAD and mii_ioctl_data::phy_id */ | ||
259 | |||
260 | #define MDIO_PHY_ID_C45 0x8000 | ||
261 | #define MDIO_PHY_ID_PRTAD 0x03e0 | ||
262 | #define MDIO_PHY_ID_DEVAD 0x001f | ||
263 | #define MDIO_PHY_ID_C45_MASK \ | ||
264 | (MDIO_PHY_ID_C45 | MDIO_PHY_ID_PRTAD | MDIO_PHY_ID_DEVAD) | ||
265 | |||
266 | static inline __u16 mdio_phy_id_c45(int prtad, int devad) | ||
267 | { | ||
268 | return MDIO_PHY_ID_C45 | (prtad << 5) | devad; | ||
269 | } | ||
270 | |||
271 | static inline bool mdio_phy_id_is_c45(int phy_id) | ||
272 | { | ||
273 | return (phy_id & MDIO_PHY_ID_C45) && !(phy_id & ~MDIO_PHY_ID_C45_MASK); | ||
274 | } | ||
275 | |||
276 | static inline __u16 mdio_phy_id_prtad(int phy_id) | ||
277 | { | ||
278 | return (phy_id & MDIO_PHY_ID_PRTAD) >> 5; | ||
279 | } | ||
280 | |||
281 | static inline __u16 mdio_phy_id_devad(int phy_id) | ||
282 | { | ||
283 | return phy_id & MDIO_PHY_ID_DEVAD; | ||
284 | } | ||
285 | |||
286 | #define MDIO_SUPPORTS_C22 1 | ||
287 | #define MDIO_SUPPORTS_C45 2 | ||
288 | |||
289 | #ifdef __KERNEL__ | ||
290 | |||
291 | /** | ||
292 | * struct mdio_if_info - Ethernet controller MDIO interface | ||
293 | * @prtad: PRTAD of the PHY (%MDIO_PRTAD_NONE if not present/unknown) | ||
294 | * @mmds: Mask of MMDs expected to be present in the PHY. This must be | ||
295 | * non-zero unless @prtad = %MDIO_PRTAD_NONE. | ||
296 | * @mode_support: MDIO modes supported. If %MDIO_SUPPORTS_C22 is set then | ||
297 | * MII register access will be passed through with @devad = | ||
298 | * %MDIO_DEVAD_NONE. If %MDIO_EMULATE_C22 is set then access to | ||
299 | * commonly used clause 22 registers will be translated into | ||
300 | * clause 45 registers. | ||
301 | * @dev: Net device structure | ||
302 | * @mdio_read: Register read function; returns value or negative error code | ||
303 | * @mdio_write: Register write function; returns 0 or negative error code | ||
304 | */ | ||
305 | struct mdio_if_info { | ||
306 | int prtad; | ||
307 | u32 __bitwise mmds; | ||
308 | unsigned mode_support; | ||
309 | |||
310 | struct net_device *dev; | ||
311 | int (*mdio_read)(struct net_device *dev, int prtad, int devad, | ||
312 | u16 addr); | ||
313 | int (*mdio_write)(struct net_device *dev, int prtad, int devad, | ||
314 | u16 addr, u16 val); | ||
315 | }; | ||
316 | |||
317 | #define MDIO_PRTAD_NONE (-1) | ||
318 | #define MDIO_DEVAD_NONE (-1) | ||
319 | #define MDIO_EMULATE_C22 4 | ||
320 | |||
321 | struct ethtool_cmd; | ||
322 | struct ethtool_pauseparam; | ||
323 | extern int mdio45_probe(struct mdio_if_info *mdio, int prtad); | ||
324 | extern int mdio_set_flag(const struct mdio_if_info *mdio, | ||
325 | int prtad, int devad, u16 addr, int mask, | ||
326 | bool sense); | ||
327 | extern int mdio45_links_ok(const struct mdio_if_info *mdio, u32 mmds); | ||
328 | extern int mdio45_nway_restart(const struct mdio_if_info *mdio); | ||
329 | extern void mdio45_ethtool_gset_npage(const struct mdio_if_info *mdio, | ||
330 | struct ethtool_cmd *ecmd, | ||
331 | u32 npage_adv, u32 npage_lpa); | ||
332 | extern void | ||
333 | mdio45_ethtool_spauseparam_an(const struct mdio_if_info *mdio, | ||
334 | const struct ethtool_pauseparam *ecmd); | ||
335 | |||
336 | /** | ||
337 | * mdio45_ethtool_gset - get settings for ETHTOOL_GSET | ||
338 | * @mdio: MDIO interface | ||
339 | * @ecmd: Ethtool request structure | ||
340 | * | ||
341 | * Since the CSRs for auto-negotiation using next pages are not fully | ||
342 | * standardised, this function does not attempt to decode them. Use | ||
343 | * mdio45_ethtool_gset_npage() to specify advertisement bits from next | ||
344 | * pages. | ||
345 | */ | ||
346 | static inline void mdio45_ethtool_gset(const struct mdio_if_info *mdio, | ||
347 | struct ethtool_cmd *ecmd) | ||
348 | { | ||
349 | mdio45_ethtool_gset_npage(mdio, ecmd, 0, 0); | ||
350 | } | ||
351 | |||
352 | extern int mdio_mii_ioctl(const struct mdio_if_info *mdio, | ||
353 | struct mii_ioctl_data *mii_data, int cmd); | ||
354 | |||
355 | #endif /* __KERNEL__ */ | ||
356 | #endif /* __LINUX_MDIO_H__ */ | ||
diff --git a/include/linux/mii.h b/include/linux/mii.h index ad748588faf1..359fba880274 100644 --- a/include/linux/mii.h +++ b/include/linux/mii.h | |||
@@ -240,6 +240,22 @@ static inline unsigned int mii_duplex (unsigned int duplex_lock, | |||
240 | } | 240 | } |
241 | 241 | ||
242 | /** | 242 | /** |
243 | * mii_advertise_flowctrl - get flow control advertisement flags | ||
244 | * @cap: Flow control capabilities (FLOW_CTRL_RX, FLOW_CTRL_TX or both) | ||
245 | */ | ||
246 | static inline u16 mii_advertise_flowctrl(int cap) | ||
247 | { | ||
248 | u16 adv = 0; | ||
249 | |||
250 | if (cap & FLOW_CTRL_RX) | ||
251 | adv = ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM; | ||
252 | if (cap & FLOW_CTRL_TX) | ||
253 | adv ^= ADVERTISE_PAUSE_ASYM; | ||
254 | |||
255 | return adv; | ||
256 | } | ||
257 | |||
258 | /** | ||
243 | * mii_resolve_flowctrl_fdx | 259 | * mii_resolve_flowctrl_fdx |
244 | * @lcladv: value of MII ADVERTISE register | 260 | * @lcladv: value of MII ADVERTISE register |
245 | * @rmtadv: value of MII LPA register | 261 | * @rmtadv: value of MII LPA register |
@@ -250,18 +266,12 @@ static inline u8 mii_resolve_flowctrl_fdx(u16 lcladv, u16 rmtadv) | |||
250 | { | 266 | { |
251 | u8 cap = 0; | 267 | u8 cap = 0; |
252 | 268 | ||
253 | if (lcladv & ADVERTISE_PAUSE_CAP) { | 269 | if (lcladv & rmtadv & ADVERTISE_PAUSE_CAP) { |
254 | if (lcladv & ADVERTISE_PAUSE_ASYM) { | 270 | cap = FLOW_CTRL_TX | FLOW_CTRL_RX; |
255 | if (rmtadv & LPA_PAUSE_CAP) | 271 | } else if (lcladv & rmtadv & ADVERTISE_PAUSE_ASYM) { |
256 | cap = FLOW_CTRL_TX | FLOW_CTRL_RX; | 272 | if (lcladv & ADVERTISE_PAUSE_CAP) |
257 | else if (rmtadv & LPA_PAUSE_ASYM) | 273 | cap = FLOW_CTRL_RX; |
258 | cap = FLOW_CTRL_RX; | 274 | else if (rmtadv & ADVERTISE_PAUSE_CAP) |
259 | } else { | ||
260 | if (rmtadv & LPA_PAUSE_CAP) | ||
261 | cap = FLOW_CTRL_TX | FLOW_CTRL_RX; | ||
262 | } | ||
263 | } else if (lcladv & ADVERTISE_PAUSE_ASYM) { | ||
264 | if ((rmtadv & LPA_PAUSE_CAP) && (rmtadv & LPA_PAUSE_ASYM)) | ||
265 | cap = FLOW_CTRL_TX; | 275 | cap = FLOW_CTRL_TX; |
266 | } | 276 | } |
267 | 277 | ||
diff --git a/include/linux/mmc/sdio_ids.h b/include/linux/mmc/sdio_ids.h index ea1bf5ba092f..c7211ab6dd4b 100644 --- a/include/linux/mmc/sdio_ids.h +++ b/include/linux/mmc/sdio_ids.h | |||
@@ -25,5 +25,7 @@ | |||
25 | 25 | ||
26 | #define SDIO_VENDOR_ID_MARVELL 0x02df | 26 | #define SDIO_VENDOR_ID_MARVELL 0x02df |
27 | #define SDIO_DEVICE_ID_MARVELL_LIBERTAS 0x9103 | 27 | #define SDIO_DEVICE_ID_MARVELL_LIBERTAS 0x9103 |
28 | #define SDIO_DEVICE_ID_MARVELL_8688WLAN 0x9104 | ||
29 | #define SDIO_DEVICE_ID_MARVELL_8688BT 0x9105 | ||
28 | 30 | ||
29 | #endif | 31 | #endif |
diff --git a/include/linux/net_dropmon.h b/include/linux/net_dropmon.h index 0e2e100c44a2..3ceb0cc1bc78 100644 --- a/include/linux/net_dropmon.h +++ b/include/linux/net_dropmon.h | |||
@@ -3,12 +3,20 @@ | |||
3 | 3 | ||
4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
5 | #include <linux/netlink.h> | 5 | #include <linux/netlink.h> |
6 | #include <linux/types.h> | ||
6 | 7 | ||
7 | struct net_dm_drop_point { | 8 | struct net_dm_drop_point { |
8 | __u8 pc[8]; | 9 | __u8 pc[8]; |
9 | __u32 count; | 10 | __u32 count; |
10 | }; | 11 | }; |
11 | 12 | ||
13 | #define is_drop_point_hw(x) do {\ | ||
14 | int ____i, ____j;\ | ||
15 | for (____i = 0; ____i < 8; i ____i++)\ | ||
16 | ____j |= x[____i];\ | ||
17 | ____j;\ | ||
18 | } while (0) | ||
19 | |||
12 | #define NET_DM_CFG_VERSION 0 | 20 | #define NET_DM_CFG_VERSION 0 |
13 | #define NET_DM_CFG_ALERT_COUNT 1 | 21 | #define NET_DM_CFG_ALERT_COUNT 1 |
14 | #define NET_DM_CFG_ALERT_DELAY 2 | 22 | #define NET_DM_CFG_ALERT_DELAY 2 |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 5a96a1a406e9..9ea8d6dfe540 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
@@ -39,9 +39,11 @@ | |||
39 | 39 | ||
40 | #include <linux/device.h> | 40 | #include <linux/device.h> |
41 | #include <linux/percpu.h> | 41 | #include <linux/percpu.h> |
42 | #include <linux/rculist.h> | ||
42 | #include <linux/dmaengine.h> | 43 | #include <linux/dmaengine.h> |
43 | #include <linux/workqueue.h> | 44 | #include <linux/workqueue.h> |
44 | 45 | ||
46 | #include <linux/ethtool.h> | ||
45 | #include <net/net_namespace.h> | 47 | #include <net/net_namespace.h> |
46 | #include <net/dsa.h> | 48 | #include <net/dsa.h> |
47 | #ifdef CONFIG_DCB | 49 | #ifdef CONFIG_DCB |
@@ -49,7 +51,6 @@ | |||
49 | #endif | 51 | #endif |
50 | 52 | ||
51 | struct vlan_group; | 53 | struct vlan_group; |
52 | struct ethtool_ops; | ||
53 | struct netpoll_info; | 54 | struct netpoll_info; |
54 | /* 802.11 specific */ | 55 | /* 802.11 specific */ |
55 | struct wireless_dev; | 56 | struct wireless_dev; |
@@ -210,6 +211,19 @@ struct dev_addr_list | |||
210 | #define dmi_users da_users | 211 | #define dmi_users da_users |
211 | #define dmi_gusers da_gusers | 212 | #define dmi_gusers da_gusers |
212 | 213 | ||
214 | struct netdev_hw_addr { | ||
215 | struct list_head list; | ||
216 | unsigned char addr[MAX_ADDR_LEN]; | ||
217 | unsigned char type; | ||
218 | #define NETDEV_HW_ADDR_T_LAN 1 | ||
219 | #define NETDEV_HW_ADDR_T_SAN 2 | ||
220 | #define NETDEV_HW_ADDR_T_SLAVE 3 | ||
221 | #define NETDEV_HW_ADDR_T_UNICAST 4 | ||
222 | int refcount; | ||
223 | bool synced; | ||
224 | struct rcu_head rcu_head; | ||
225 | }; | ||
226 | |||
213 | struct hh_cache | 227 | struct hh_cache |
214 | { | 228 | { |
215 | struct hh_cache *hh_next; /* Next entry */ | 229 | struct hh_cache *hh_next; /* Next entry */ |
@@ -447,12 +461,25 @@ enum netdev_queue_state_t | |||
447 | }; | 461 | }; |
448 | 462 | ||
449 | struct netdev_queue { | 463 | struct netdev_queue { |
464 | /* | ||
465 | * read mostly part | ||
466 | */ | ||
450 | struct net_device *dev; | 467 | struct net_device *dev; |
451 | struct Qdisc *qdisc; | 468 | struct Qdisc *qdisc; |
452 | unsigned long state; | 469 | unsigned long state; |
453 | spinlock_t _xmit_lock; | ||
454 | int xmit_lock_owner; | ||
455 | struct Qdisc *qdisc_sleeping; | 470 | struct Qdisc *qdisc_sleeping; |
471 | /* | ||
472 | * write mostly part | ||
473 | */ | ||
474 | spinlock_t _xmit_lock ____cacheline_aligned_in_smp; | ||
475 | int xmit_lock_owner; | ||
476 | /* | ||
477 | * please use this field instead of dev->trans_start | ||
478 | */ | ||
479 | unsigned long trans_start; | ||
480 | unsigned long tx_bytes; | ||
481 | unsigned long tx_packets; | ||
482 | unsigned long tx_dropped; | ||
456 | } ____cacheline_aligned_in_smp; | 483 | } ____cacheline_aligned_in_smp; |
457 | 484 | ||
458 | 485 | ||
@@ -670,7 +697,9 @@ struct net_device | |||
670 | #define NETIF_F_GRO 16384 /* Generic receive offload */ | 697 | #define NETIF_F_GRO 16384 /* Generic receive offload */ |
671 | #define NETIF_F_LRO 32768 /* large receive offload */ | 698 | #define NETIF_F_LRO 32768 /* large receive offload */ |
672 | 699 | ||
700 | /* the GSO_MASK reserves bits 16 through 23 */ | ||
673 | #define NETIF_F_FCOE_CRC (1 << 24) /* FCoE CRC32 */ | 701 | #define NETIF_F_FCOE_CRC (1 << 24) /* FCoE CRC32 */ |
702 | #define NETIF_F_SCTP_CSUM (1 << 25) /* SCTP checksum offload */ | ||
674 | 703 | ||
675 | /* Segmentation offload features */ | 704 | /* Segmentation offload features */ |
676 | #define NETIF_F_GSO_SHIFT 16 | 705 | #define NETIF_F_GSO_SHIFT 16 |
@@ -747,10 +776,11 @@ struct net_device | |||
747 | unsigned char addr_len; /* hardware address length */ | 776 | unsigned char addr_len; /* hardware address length */ |
748 | unsigned short dev_id; /* for shared network cards */ | 777 | unsigned short dev_id; /* for shared network cards */ |
749 | 778 | ||
750 | spinlock_t addr_list_lock; | 779 | struct list_head uc_list; /* Secondary unicast mac |
751 | struct dev_addr_list *uc_list; /* Secondary unicast mac addresses */ | 780 | addresses */ |
752 | int uc_count; /* Number of installed ucasts */ | 781 | int uc_count; /* Number of installed ucasts */ |
753 | int uc_promisc; | 782 | int uc_promisc; |
783 | spinlock_t addr_list_lock; | ||
754 | struct dev_addr_list *mc_list; /* Multicast mac addresses */ | 784 | struct dev_addr_list *mc_list; /* Multicast mac addresses */ |
755 | int mc_count; /* Number of installed mcasts */ | 785 | int mc_count; /* Number of installed mcasts */ |
756 | unsigned int promiscuity; | 786 | unsigned int promiscuity; |
@@ -776,8 +806,11 @@ struct net_device | |||
776 | */ | 806 | */ |
777 | unsigned long last_rx; /* Time of last Rx */ | 807 | unsigned long last_rx; /* Time of last Rx */ |
778 | /* Interface address info used in eth_type_trans() */ | 808 | /* Interface address info used in eth_type_trans() */ |
779 | unsigned char dev_addr[MAX_ADDR_LEN]; /* hw address, (before bcast | 809 | unsigned char *dev_addr; /* hw address, (before bcast |
780 | because most packets are unicast) */ | 810 | because most packets are |
811 | unicast) */ | ||
812 | |||
813 | struct list_head dev_addr_list; /* list of device hw addresses */ | ||
781 | 814 | ||
782 | unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */ | 815 | unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */ |
783 | 816 | ||
@@ -797,6 +830,11 @@ struct net_device | |||
797 | * One part is mostly used on xmit path (device) | 830 | * One part is mostly used on xmit path (device) |
798 | */ | 831 | */ |
799 | /* These may be needed for future network-power-down code. */ | 832 | /* These may be needed for future network-power-down code. */ |
833 | |||
834 | /* | ||
835 | * trans_start here is expensive for high speed devices on SMP, | ||
836 | * please use netdev_queue->trans_start instead. | ||
837 | */ | ||
800 | unsigned long trans_start; /* Time (in jiffies) of last Tx */ | 838 | unsigned long trans_start; /* Time (in jiffies) of last Tx */ |
801 | 839 | ||
802 | int watchdog_timeo; /* used by dev_watchdog() */ | 840 | int watchdog_timeo; /* used by dev_watchdog() */ |
@@ -867,49 +905,10 @@ struct net_device | |||
867 | /* max exchange id for FCoE LRO by ddp */ | 905 | /* max exchange id for FCoE LRO by ddp */ |
868 | unsigned int fcoe_ddp_xid; | 906 | unsigned int fcoe_ddp_xid; |
869 | #endif | 907 | #endif |
870 | |||
871 | #ifdef CONFIG_COMPAT_NET_DEV_OPS | ||
872 | struct { | ||
873 | int (*init)(struct net_device *dev); | ||
874 | void (*uninit)(struct net_device *dev); | ||
875 | int (*open)(struct net_device *dev); | ||
876 | int (*stop)(struct net_device *dev); | ||
877 | int (*hard_start_xmit) (struct sk_buff *skb, | ||
878 | struct net_device *dev); | ||
879 | u16 (*select_queue)(struct net_device *dev, | ||
880 | struct sk_buff *skb); | ||
881 | void (*change_rx_flags)(struct net_device *dev, | ||
882 | int flags); | ||
883 | void (*set_rx_mode)(struct net_device *dev); | ||
884 | void (*set_multicast_list)(struct net_device *dev); | ||
885 | int (*set_mac_address)(struct net_device *dev, | ||
886 | void *addr); | ||
887 | int (*validate_addr)(struct net_device *dev); | ||
888 | int (*do_ioctl)(struct net_device *dev, | ||
889 | struct ifreq *ifr, int cmd); | ||
890 | int (*set_config)(struct net_device *dev, | ||
891 | struct ifmap *map); | ||
892 | int (*change_mtu)(struct net_device *dev, int new_mtu); | ||
893 | int (*neigh_setup)(struct net_device *dev, | ||
894 | struct neigh_parms *); | ||
895 | void (*tx_timeout) (struct net_device *dev); | ||
896 | struct net_device_stats* (*get_stats)(struct net_device *dev); | ||
897 | void (*vlan_rx_register)(struct net_device *dev, | ||
898 | struct vlan_group *grp); | ||
899 | void (*vlan_rx_add_vid)(struct net_device *dev, | ||
900 | unsigned short vid); | ||
901 | void (*vlan_rx_kill_vid)(struct net_device *dev, | ||
902 | unsigned short vid); | ||
903 | #ifdef CONFIG_NET_POLL_CONTROLLER | ||
904 | void (*poll_controller)(struct net_device *dev); | ||
905 | #endif | ||
906 | }; | ||
907 | #endif | ||
908 | }; | 908 | }; |
909 | #define to_net_dev(d) container_of(d, struct net_device, dev) | 909 | #define to_net_dev(d) container_of(d, struct net_device, dev) |
910 | 910 | ||
911 | #define NETDEV_ALIGN 32 | 911 | #define NETDEV_ALIGN 32 |
912 | #define NETDEV_ALIGN_CONST (NETDEV_ALIGN - 1) | ||
913 | 912 | ||
914 | static inline | 913 | static inline |
915 | struct netdev_queue *netdev_get_tx_queue(const struct net_device *dev, | 914 | struct netdev_queue *netdev_get_tx_queue(const struct net_device *dev, |
@@ -980,9 +979,7 @@ static inline bool netdev_uses_trailer_tags(struct net_device *dev) | |||
980 | */ | 979 | */ |
981 | static inline void *netdev_priv(const struct net_device *dev) | 980 | static inline void *netdev_priv(const struct net_device *dev) |
982 | { | 981 | { |
983 | return (char *)dev + ((sizeof(struct net_device) | 982 | return (char *)dev + ALIGN(sizeof(struct net_device), NETDEV_ALIGN); |
984 | + NETDEV_ALIGN_CONST) | ||
985 | & ~NETDEV_ALIGN_CONST); | ||
986 | } | 983 | } |
987 | 984 | ||
988 | /* Set the sysfs physical device reference for the network logical device | 985 | /* Set the sysfs physical device reference for the network logical device |
@@ -1012,6 +1009,12 @@ void netif_napi_add(struct net_device *dev, struct napi_struct *napi, | |||
1012 | void netif_napi_del(struct napi_struct *napi); | 1009 | void netif_napi_del(struct napi_struct *napi); |
1013 | 1010 | ||
1014 | struct napi_gro_cb { | 1011 | struct napi_gro_cb { |
1012 | /* Virtual address of skb_shinfo(skb)->frags[0].page + offset. */ | ||
1013 | void *frag0; | ||
1014 | |||
1015 | /* Length of frag0. */ | ||
1016 | unsigned int frag0_len; | ||
1017 | |||
1015 | /* This indicates where we are processing relative to skb->data. */ | 1018 | /* This indicates where we are processing relative to skb->data. */ |
1016 | int data_offset; | 1019 | int data_offset; |
1017 | 1020 | ||
@@ -1047,14 +1050,6 @@ struct packet_type { | |||
1047 | struct list_head list; | 1050 | struct list_head list; |
1048 | }; | 1051 | }; |
1049 | 1052 | ||
1050 | struct napi_gro_fraginfo { | ||
1051 | skb_frag_t frags[MAX_SKB_FRAGS]; | ||
1052 | unsigned int nr_frags; | ||
1053 | unsigned int ip_summed; | ||
1054 | unsigned int len; | ||
1055 | __wsum csum; | ||
1056 | }; | ||
1057 | |||
1058 | #include <linux/interrupt.h> | 1053 | #include <linux/interrupt.h> |
1059 | #include <linux/notifier.h> | 1054 | #include <linux/notifier.h> |
1060 | 1055 | ||
@@ -1119,9 +1114,9 @@ extern int dev_restart(struct net_device *dev); | |||
1119 | #ifdef CONFIG_NETPOLL_TRAP | 1114 | #ifdef CONFIG_NETPOLL_TRAP |
1120 | extern int netpoll_trap(void); | 1115 | extern int netpoll_trap(void); |
1121 | #endif | 1116 | #endif |
1122 | extern void *skb_gro_header(struct sk_buff *skb, unsigned int hlen); | ||
1123 | extern int skb_gro_receive(struct sk_buff **head, | 1117 | extern int skb_gro_receive(struct sk_buff **head, |
1124 | struct sk_buff *skb); | 1118 | struct sk_buff *skb); |
1119 | extern void skb_gro_reset_offset(struct sk_buff *skb); | ||
1125 | 1120 | ||
1126 | static inline unsigned int skb_gro_offset(const struct sk_buff *skb) | 1121 | static inline unsigned int skb_gro_offset(const struct sk_buff *skb) |
1127 | { | 1122 | { |
@@ -1138,16 +1133,34 @@ static inline void skb_gro_pull(struct sk_buff *skb, unsigned int len) | |||
1138 | NAPI_GRO_CB(skb)->data_offset += len; | 1133 | NAPI_GRO_CB(skb)->data_offset += len; |
1139 | } | 1134 | } |
1140 | 1135 | ||
1141 | static inline void skb_gro_reset_offset(struct sk_buff *skb) | 1136 | static inline void *skb_gro_header_fast(struct sk_buff *skb, |
1137 | unsigned int offset) | ||
1142 | { | 1138 | { |
1143 | NAPI_GRO_CB(skb)->data_offset = 0; | 1139 | return NAPI_GRO_CB(skb)->frag0 + offset; |
1140 | } | ||
1141 | |||
1142 | static inline int skb_gro_header_hard(struct sk_buff *skb, unsigned int hlen) | ||
1143 | { | ||
1144 | return NAPI_GRO_CB(skb)->frag0_len < hlen; | ||
1145 | } | ||
1146 | |||
1147 | static inline void *skb_gro_header_slow(struct sk_buff *skb, unsigned int hlen, | ||
1148 | unsigned int offset) | ||
1149 | { | ||
1150 | NAPI_GRO_CB(skb)->frag0 = NULL; | ||
1151 | NAPI_GRO_CB(skb)->frag0_len = 0; | ||
1152 | return pskb_may_pull(skb, hlen) ? skb->data + offset : NULL; | ||
1144 | } | 1153 | } |
1145 | 1154 | ||
1146 | static inline void *skb_gro_mac_header(struct sk_buff *skb) | 1155 | static inline void *skb_gro_mac_header(struct sk_buff *skb) |
1147 | { | 1156 | { |
1148 | return skb_mac_header(skb) < skb->data ? skb_mac_header(skb) : | 1157 | return NAPI_GRO_CB(skb)->frag0 ?: skb_mac_header(skb); |
1149 | page_address(skb_shinfo(skb)->frags[0].page) + | 1158 | } |
1150 | skb_shinfo(skb)->frags[0].page_offset; | 1159 | |
1160 | static inline void *skb_gro_network_header(struct sk_buff *skb) | ||
1161 | { | ||
1162 | return (NAPI_GRO_CB(skb)->frag0 ?: skb->data) + | ||
1163 | skb_network_offset(skb); | ||
1151 | } | 1164 | } |
1152 | 1165 | ||
1153 | static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev, | 1166 | static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev, |
@@ -1442,12 +1455,18 @@ extern int napi_gro_receive(struct napi_struct *napi, | |||
1442 | struct sk_buff *skb); | 1455 | struct sk_buff *skb); |
1443 | extern void napi_reuse_skb(struct napi_struct *napi, | 1456 | extern void napi_reuse_skb(struct napi_struct *napi, |
1444 | struct sk_buff *skb); | 1457 | struct sk_buff *skb); |
1445 | extern struct sk_buff * napi_fraginfo_skb(struct napi_struct *napi, | 1458 | extern struct sk_buff * napi_get_frags(struct napi_struct *napi); |
1446 | struct napi_gro_fraginfo *info); | ||
1447 | extern int napi_frags_finish(struct napi_struct *napi, | 1459 | extern int napi_frags_finish(struct napi_struct *napi, |
1448 | struct sk_buff *skb, int ret); | 1460 | struct sk_buff *skb, int ret); |
1449 | extern int napi_gro_frags(struct napi_struct *napi, | 1461 | extern struct sk_buff * napi_frags_skb(struct napi_struct *napi); |
1450 | struct napi_gro_fraginfo *info); | 1462 | extern int napi_gro_frags(struct napi_struct *napi); |
1463 | |||
1464 | static inline void napi_free_frags(struct napi_struct *napi) | ||
1465 | { | ||
1466 | kfree_skb(napi->skb); | ||
1467 | napi->skb = NULL; | ||
1468 | } | ||
1469 | |||
1451 | extern void netif_nit_deliver(struct sk_buff *skb); | 1470 | extern void netif_nit_deliver(struct sk_buff *skb); |
1452 | extern int dev_valid_name(const char *name); | 1471 | extern int dev_valid_name(const char *name); |
1453 | extern int dev_ioctl(struct net *net, unsigned int cmd, void __user *); | 1472 | extern int dev_ioctl(struct net *net, unsigned int cmd, void __user *); |
@@ -1514,6 +1533,8 @@ static inline int netif_carrier_ok(const struct net_device *dev) | |||
1514 | return !test_bit(__LINK_STATE_NOCARRIER, &dev->state); | 1533 | return !test_bit(__LINK_STATE_NOCARRIER, &dev->state); |
1515 | } | 1534 | } |
1516 | 1535 | ||
1536 | extern unsigned long dev_trans_start(struct net_device *dev); | ||
1537 | |||
1517 | extern void __netdev_watchdog_up(struct net_device *dev); | 1538 | extern void __netdev_watchdog_up(struct net_device *dev); |
1518 | 1539 | ||
1519 | extern void netif_carrier_on(struct net_device *dev); | 1540 | extern void netif_carrier_on(struct net_device *dev); |
@@ -1671,6 +1692,12 @@ static inline void __netif_tx_unlock_bh(struct netdev_queue *txq) | |||
1671 | spin_unlock_bh(&txq->_xmit_lock); | 1692 | spin_unlock_bh(&txq->_xmit_lock); |
1672 | } | 1693 | } |
1673 | 1694 | ||
1695 | static inline void txq_trans_update(struct netdev_queue *txq) | ||
1696 | { | ||
1697 | if (txq->xmit_lock_owner != -1) | ||
1698 | txq->trans_start = jiffies; | ||
1699 | } | ||
1700 | |||
1674 | /** | 1701 | /** |
1675 | * netif_tx_lock - grab network device transmit lock | 1702 | * netif_tx_lock - grab network device transmit lock |
1676 | * @dev: network device | 1703 | * @dev: network device |
@@ -1778,6 +1805,13 @@ static inline void netif_addr_unlock_bh(struct net_device *dev) | |||
1778 | spin_unlock_bh(&dev->addr_list_lock); | 1805 | spin_unlock_bh(&dev->addr_list_lock); |
1779 | } | 1806 | } |
1780 | 1807 | ||
1808 | /* | ||
1809 | * dev_addr_list walker. Should be used only for read access. Call with | ||
1810 | * rcu_read_lock held. | ||
1811 | */ | ||
1812 | #define for_each_dev_addr(dev, ha) \ | ||
1813 | list_for_each_entry_rcu(ha, &dev->dev_addr_list, list) | ||
1814 | |||
1781 | /* These functions live elsewhere (drivers/net/net_init.c, but related) */ | 1815 | /* These functions live elsewhere (drivers/net/net_init.c, but related) */ |
1782 | 1816 | ||
1783 | extern void ether_setup(struct net_device *dev); | 1817 | extern void ether_setup(struct net_device *dev); |
@@ -1790,11 +1824,24 @@ extern struct net_device *alloc_netdev_mq(int sizeof_priv, const char *name, | |||
1790 | alloc_netdev_mq(sizeof_priv, name, setup, 1) | 1824 | alloc_netdev_mq(sizeof_priv, name, setup, 1) |
1791 | extern int register_netdev(struct net_device *dev); | 1825 | extern int register_netdev(struct net_device *dev); |
1792 | extern void unregister_netdev(struct net_device *dev); | 1826 | extern void unregister_netdev(struct net_device *dev); |
1827 | |||
1828 | /* Functions used for device addresses handling */ | ||
1829 | extern int dev_addr_add(struct net_device *dev, unsigned char *addr, | ||
1830 | unsigned char addr_type); | ||
1831 | extern int dev_addr_del(struct net_device *dev, unsigned char *addr, | ||
1832 | unsigned char addr_type); | ||
1833 | extern int dev_addr_add_multiple(struct net_device *to_dev, | ||
1834 | struct net_device *from_dev, | ||
1835 | unsigned char addr_type); | ||
1836 | extern int dev_addr_del_multiple(struct net_device *to_dev, | ||
1837 | struct net_device *from_dev, | ||
1838 | unsigned char addr_type); | ||
1839 | |||
1793 | /* Functions used for secondary unicast and multicast support */ | 1840 | /* Functions used for secondary unicast and multicast support */ |
1794 | extern void dev_set_rx_mode(struct net_device *dev); | 1841 | extern void dev_set_rx_mode(struct net_device *dev); |
1795 | extern void __dev_set_rx_mode(struct net_device *dev); | 1842 | extern void __dev_set_rx_mode(struct net_device *dev); |
1796 | extern int dev_unicast_delete(struct net_device *dev, void *addr, int alen); | 1843 | extern int dev_unicast_delete(struct net_device *dev, void *addr); |
1797 | extern int dev_unicast_add(struct net_device *dev, void *addr, int alen); | 1844 | extern int dev_unicast_add(struct net_device *dev, void *addr); |
1798 | extern int dev_unicast_sync(struct net_device *to, struct net_device *from); | 1845 | extern int dev_unicast_sync(struct net_device *to, struct net_device *from); |
1799 | extern void dev_unicast_unsync(struct net_device *to, struct net_device *from); | 1846 | extern void dev_unicast_unsync(struct net_device *to, struct net_device *from); |
1800 | extern int dev_mc_delete(struct net_device *dev, void *addr, int alen, int all); | 1847 | extern int dev_mc_delete(struct net_device *dev, void *addr, int alen, int all); |
@@ -1856,15 +1903,14 @@ static inline int net_gso_ok(int features, int gso_type) | |||
1856 | 1903 | ||
1857 | static inline int skb_gso_ok(struct sk_buff *skb, int features) | 1904 | static inline int skb_gso_ok(struct sk_buff *skb, int features) |
1858 | { | 1905 | { |
1859 | return net_gso_ok(features, skb_shinfo(skb)->gso_type); | 1906 | return net_gso_ok(features, skb_shinfo(skb)->gso_type) && |
1907 | (!skb_has_frags(skb) || (features & NETIF_F_FRAGLIST)); | ||
1860 | } | 1908 | } |
1861 | 1909 | ||
1862 | static inline int netif_needs_gso(struct net_device *dev, struct sk_buff *skb) | 1910 | static inline int netif_needs_gso(struct net_device *dev, struct sk_buff *skb) |
1863 | { | 1911 | { |
1864 | return skb_is_gso(skb) && | 1912 | return skb_is_gso(skb) && |
1865 | (!skb_gso_ok(skb, dev->features) || | 1913 | (!skb_gso_ok(skb, dev->features) || |
1866 | (skb_shinfo(skb)->frag_list && | ||
1867 | !(dev->features & NETIF_F_FRAGLIST)) || | ||
1868 | unlikely(skb->ip_summed != CHECKSUM_PARTIAL)); | 1914 | unlikely(skb->ip_summed != CHECKSUM_PARTIAL)); |
1869 | } | 1915 | } |
1870 | 1916 | ||
@@ -1874,6 +1920,16 @@ static inline void netif_set_gso_max_size(struct net_device *dev, | |||
1874 | dev->gso_max_size = size; | 1920 | dev->gso_max_size = size; |
1875 | } | 1921 | } |
1876 | 1922 | ||
1923 | static inline void skb_bond_set_mac_by_master(struct sk_buff *skb, | ||
1924 | struct net_device *master) | ||
1925 | { | ||
1926 | if (skb->pkt_type == PACKET_HOST) { | ||
1927 | u16 *dest = (u16 *) eth_hdr(skb)->h_dest; | ||
1928 | |||
1929 | memcpy(dest, master->dev_addr, ETH_ALEN); | ||
1930 | } | ||
1931 | } | ||
1932 | |||
1877 | /* On bonding slaves other than the currently active slave, suppress | 1933 | /* On bonding slaves other than the currently active slave, suppress |
1878 | * duplicates except for 802.3ad ETH_P_SLOW, alb non-mcast/bcast, and | 1934 | * duplicates except for 802.3ad ETH_P_SLOW, alb non-mcast/bcast, and |
1879 | * ARP on active-backup slaves with arp_validate enabled. | 1935 | * ARP on active-backup slaves with arp_validate enabled. |
@@ -1887,6 +1943,14 @@ static inline int skb_bond_should_drop(struct sk_buff *skb) | |||
1887 | if (master->priv_flags & IFF_MASTER_ARPMON) | 1943 | if (master->priv_flags & IFF_MASTER_ARPMON) |
1888 | dev->last_rx = jiffies; | 1944 | dev->last_rx = jiffies; |
1889 | 1945 | ||
1946 | if ((master->priv_flags & IFF_MASTER_ALB) && master->br_port) { | ||
1947 | /* Do address unmangle. The local destination address | ||
1948 | * will be always the one master has. Provides the right | ||
1949 | * functionality in a bridge. | ||
1950 | */ | ||
1951 | skb_bond_set_mac_by_master(skb, master); | ||
1952 | } | ||
1953 | |||
1890 | if (dev->priv_flags & IFF_SLAVE_INACTIVE) { | 1954 | if (dev->priv_flags & IFF_SLAVE_INACTIVE) { |
1891 | if ((dev->priv_flags & IFF_SLAVE_NEEDARP) && | 1955 | if ((dev->priv_flags & IFF_SLAVE_NEEDARP) && |
1892 | skb->protocol == __cpu_to_be16(ETH_P_ARP)) | 1956 | skb->protocol == __cpu_to_be16(ETH_P_ARP)) |
@@ -1908,6 +1972,28 @@ static inline int skb_bond_should_drop(struct sk_buff *skb) | |||
1908 | } | 1972 | } |
1909 | 1973 | ||
1910 | extern struct pernet_operations __net_initdata loopback_net_ops; | 1974 | extern struct pernet_operations __net_initdata loopback_net_ops; |
1975 | |||
1976 | static inline int dev_ethtool_get_settings(struct net_device *dev, | ||
1977 | struct ethtool_cmd *cmd) | ||
1978 | { | ||
1979 | if (!dev->ethtool_ops || !dev->ethtool_ops->get_settings) | ||
1980 | return -EOPNOTSUPP; | ||
1981 | return dev->ethtool_ops->get_settings(dev, cmd); | ||
1982 | } | ||
1983 | |||
1984 | static inline u32 dev_ethtool_get_rx_csum(struct net_device *dev) | ||
1985 | { | ||
1986 | if (!dev->ethtool_ops || !dev->ethtool_ops->get_rx_csum) | ||
1987 | return 0; | ||
1988 | return dev->ethtool_ops->get_rx_csum(dev); | ||
1989 | } | ||
1990 | |||
1991 | static inline u32 dev_ethtool_get_flags(struct net_device *dev) | ||
1992 | { | ||
1993 | if (!dev->ethtool_ops || !dev->ethtool_ops->get_flags) | ||
1994 | return 0; | ||
1995 | return dev->ethtool_ops->get_flags(dev); | ||
1996 | } | ||
1911 | #endif /* __KERNEL__ */ | 1997 | #endif /* __KERNEL__ */ |
1912 | 1998 | ||
1913 | #endif /* _LINUX_DEV_H */ | 1999 | #endif /* _LINUX_NETDEVICE_H */ |
diff --git a/include/linux/netfilter/Kbuild b/include/linux/netfilter/Kbuild index af9d2fb97212..2aea50399c0b 100644 --- a/include/linux/netfilter/Kbuild +++ b/include/linux/netfilter/Kbuild | |||
@@ -33,6 +33,7 @@ header-y += xt_limit.h | |||
33 | header-y += xt_mac.h | 33 | header-y += xt_mac.h |
34 | header-y += xt_mark.h | 34 | header-y += xt_mark.h |
35 | header-y += xt_multiport.h | 35 | header-y += xt_multiport.h |
36 | header-y += xt_osf.h | ||
36 | header-y += xt_owner.h | 37 | header-y += xt_owner.h |
37 | header-y += xt_pkttype.h | 38 | header-y += xt_pkttype.h |
38 | header-y += xt_quota.h | 39 | header-y += xt_quota.h |
diff --git a/include/linux/netfilter/nf_conntrack_common.h b/include/linux/netfilter/nf_conntrack_common.h index 885cbe282260..a8248ee422b7 100644 --- a/include/linux/netfilter/nf_conntrack_common.h +++ b/include/linux/netfilter/nf_conntrack_common.h | |||
@@ -75,75 +75,6 @@ enum ip_conntrack_status { | |||
75 | IPS_FIXED_TIMEOUT = (1 << IPS_FIXED_TIMEOUT_BIT), | 75 | IPS_FIXED_TIMEOUT = (1 << IPS_FIXED_TIMEOUT_BIT), |
76 | }; | 76 | }; |
77 | 77 | ||
78 | /* Connection tracking event bits */ | ||
79 | enum ip_conntrack_events | ||
80 | { | ||
81 | /* New conntrack */ | ||
82 | IPCT_NEW_BIT = 0, | ||
83 | IPCT_NEW = (1 << IPCT_NEW_BIT), | ||
84 | |||
85 | /* Expected connection */ | ||
86 | IPCT_RELATED_BIT = 1, | ||
87 | IPCT_RELATED = (1 << IPCT_RELATED_BIT), | ||
88 | |||
89 | /* Destroyed conntrack */ | ||
90 | IPCT_DESTROY_BIT = 2, | ||
91 | IPCT_DESTROY = (1 << IPCT_DESTROY_BIT), | ||
92 | |||
93 | /* Timer has been refreshed */ | ||
94 | IPCT_REFRESH_BIT = 3, | ||
95 | IPCT_REFRESH = (1 << IPCT_REFRESH_BIT), | ||
96 | |||
97 | /* Status has changed */ | ||
98 | IPCT_STATUS_BIT = 4, | ||
99 | IPCT_STATUS = (1 << IPCT_STATUS_BIT), | ||
100 | |||
101 | /* Update of protocol info */ | ||
102 | IPCT_PROTOINFO_BIT = 5, | ||
103 | IPCT_PROTOINFO = (1 << IPCT_PROTOINFO_BIT), | ||
104 | |||
105 | /* Volatile protocol info */ | ||
106 | IPCT_PROTOINFO_VOLATILE_BIT = 6, | ||
107 | IPCT_PROTOINFO_VOLATILE = (1 << IPCT_PROTOINFO_VOLATILE_BIT), | ||
108 | |||
109 | /* New helper for conntrack */ | ||
110 | IPCT_HELPER_BIT = 7, | ||
111 | IPCT_HELPER = (1 << IPCT_HELPER_BIT), | ||
112 | |||
113 | /* Update of helper info */ | ||
114 | IPCT_HELPINFO_BIT = 8, | ||
115 | IPCT_HELPINFO = (1 << IPCT_HELPINFO_BIT), | ||
116 | |||
117 | /* Volatile helper info */ | ||
118 | IPCT_HELPINFO_VOLATILE_BIT = 9, | ||
119 | IPCT_HELPINFO_VOLATILE = (1 << IPCT_HELPINFO_VOLATILE_BIT), | ||
120 | |||
121 | /* NAT info */ | ||
122 | IPCT_NATINFO_BIT = 10, | ||
123 | IPCT_NATINFO = (1 << IPCT_NATINFO_BIT), | ||
124 | |||
125 | /* Counter highest bit has been set, unused */ | ||
126 | IPCT_COUNTER_FILLING_BIT = 11, | ||
127 | IPCT_COUNTER_FILLING = (1 << IPCT_COUNTER_FILLING_BIT), | ||
128 | |||
129 | /* Mark is set */ | ||
130 | IPCT_MARK_BIT = 12, | ||
131 | IPCT_MARK = (1 << IPCT_MARK_BIT), | ||
132 | |||
133 | /* NAT sequence adjustment */ | ||
134 | IPCT_NATSEQADJ_BIT = 13, | ||
135 | IPCT_NATSEQADJ = (1 << IPCT_NATSEQADJ_BIT), | ||
136 | |||
137 | /* Secmark is set */ | ||
138 | IPCT_SECMARK_BIT = 14, | ||
139 | IPCT_SECMARK = (1 << IPCT_SECMARK_BIT), | ||
140 | }; | ||
141 | |||
142 | enum ip_conntrack_expect_events { | ||
143 | IPEXP_NEW_BIT = 0, | ||
144 | IPEXP_NEW = (1 << IPEXP_NEW_BIT), | ||
145 | }; | ||
146 | |||
147 | #ifdef __KERNEL__ | 78 | #ifdef __KERNEL__ |
148 | struct ip_conntrack_stat | 79 | struct ip_conntrack_stat |
149 | { | 80 | { |
diff --git a/include/linux/netfilter/nf_conntrack_tcp.h b/include/linux/netfilter/nf_conntrack_tcp.h index b2f384d42611..4352feed2377 100644 --- a/include/linux/netfilter/nf_conntrack_tcp.h +++ b/include/linux/netfilter/nf_conntrack_tcp.h | |||
@@ -15,7 +15,8 @@ enum tcp_conntrack { | |||
15 | TCP_CONNTRACK_LAST_ACK, | 15 | TCP_CONNTRACK_LAST_ACK, |
16 | TCP_CONNTRACK_TIME_WAIT, | 16 | TCP_CONNTRACK_TIME_WAIT, |
17 | TCP_CONNTRACK_CLOSE, | 17 | TCP_CONNTRACK_CLOSE, |
18 | TCP_CONNTRACK_LISTEN, | 18 | TCP_CONNTRACK_LISTEN, /* obsolete */ |
19 | #define TCP_CONNTRACK_SYN_SENT2 TCP_CONNTRACK_LISTEN | ||
19 | TCP_CONNTRACK_MAX, | 20 | TCP_CONNTRACK_MAX, |
20 | TCP_CONNTRACK_IGNORE | 21 | TCP_CONNTRACK_IGNORE |
21 | }; | 22 | }; |
diff --git a/include/linux/netfilter/nfnetlink.h b/include/linux/netfilter/nfnetlink.h index c600083cbdf5..bff4d5741d98 100644 --- a/include/linux/netfilter/nfnetlink.h +++ b/include/linux/netfilter/nfnetlink.h | |||
@@ -46,7 +46,8 @@ struct nfgenmsg { | |||
46 | #define NFNL_SUBSYS_CTNETLINK_EXP 2 | 46 | #define NFNL_SUBSYS_CTNETLINK_EXP 2 |
47 | #define NFNL_SUBSYS_QUEUE 3 | 47 | #define NFNL_SUBSYS_QUEUE 3 |
48 | #define NFNL_SUBSYS_ULOG 4 | 48 | #define NFNL_SUBSYS_ULOG 4 |
49 | #define NFNL_SUBSYS_COUNT 5 | 49 | #define NFNL_SUBSYS_OSF 5 |
50 | #define NFNL_SUBSYS_COUNT 6 | ||
50 | 51 | ||
51 | #ifdef __KERNEL__ | 52 | #ifdef __KERNEL__ |
52 | 53 | ||
@@ -75,7 +76,7 @@ extern int nfnetlink_subsys_unregister(const struct nfnetlink_subsystem *n); | |||
75 | 76 | ||
76 | extern int nfnetlink_has_listeners(unsigned int group); | 77 | extern int nfnetlink_has_listeners(unsigned int group); |
77 | extern int nfnetlink_send(struct sk_buff *skb, u32 pid, unsigned group, | 78 | extern int nfnetlink_send(struct sk_buff *skb, u32 pid, unsigned group, |
78 | int echo); | 79 | int echo, gfp_t flags); |
79 | extern void nfnetlink_set_err(u32 pid, u32 group, int error); | 80 | extern void nfnetlink_set_err(u32 pid, u32 group, int error); |
80 | extern int nfnetlink_unicast(struct sk_buff *skb, u_int32_t pid, int flags); | 81 | extern int nfnetlink_unicast(struct sk_buff *skb, u_int32_t pid, int flags); |
81 | 82 | ||
diff --git a/include/linux/netfilter/nfnetlink_conntrack.h b/include/linux/netfilter/nfnetlink_conntrack.h index 1a865e48b8eb..ed4ef8d0b11b 100644 --- a/include/linux/netfilter/nfnetlink_conntrack.h +++ b/include/linux/netfilter/nfnetlink_conntrack.h | |||
@@ -101,6 +101,7 @@ enum ctattr_protoinfo_dccp { | |||
101 | CTA_PROTOINFO_DCCP_UNSPEC, | 101 | CTA_PROTOINFO_DCCP_UNSPEC, |
102 | CTA_PROTOINFO_DCCP_STATE, | 102 | CTA_PROTOINFO_DCCP_STATE, |
103 | CTA_PROTOINFO_DCCP_ROLE, | 103 | CTA_PROTOINFO_DCCP_ROLE, |
104 | CTA_PROTOINFO_DCCP_HANDSHAKE_SEQ, | ||
104 | __CTA_PROTOINFO_DCCP_MAX, | 105 | __CTA_PROTOINFO_DCCP_MAX, |
105 | }; | 106 | }; |
106 | #define CTA_PROTOINFO_DCCP_MAX (__CTA_PROTOINFO_DCCP_MAX - 1) | 107 | #define CTA_PROTOINFO_DCCP_MAX (__CTA_PROTOINFO_DCCP_MAX - 1) |
diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h index c9efe039dc57..1030b7593898 100644 --- a/include/linux/netfilter/x_tables.h +++ b/include/linux/netfilter/x_tables.h | |||
@@ -184,9 +184,10 @@ struct xt_counters_info | |||
184 | * @matchinfo: per-match data | 184 | * @matchinfo: per-match data |
185 | * @fragoff: packet is a fragment, this is the data offset | 185 | * @fragoff: packet is a fragment, this is the data offset |
186 | * @thoff: position of transport header relative to skb->data | 186 | * @thoff: position of transport header relative to skb->data |
187 | * @hotdrop: drop packet if we had inspection problems | 187 | * @hook: hook number given packet came from |
188 | * @family: Actual NFPROTO_* through which the function is invoked | 188 | * @family: Actual NFPROTO_* through which the function is invoked |
189 | * (helpful when match->family == NFPROTO_UNSPEC) | 189 | * (helpful when match->family == NFPROTO_UNSPEC) |
190 | * @hotdrop: drop packet if we had inspection problems | ||
190 | */ | 191 | */ |
191 | struct xt_match_param { | 192 | struct xt_match_param { |
192 | const struct net_device *in, *out; | 193 | const struct net_device *in, *out; |
@@ -194,8 +195,9 @@ struct xt_match_param { | |||
194 | const void *matchinfo; | 195 | const void *matchinfo; |
195 | int fragoff; | 196 | int fragoff; |
196 | unsigned int thoff; | 197 | unsigned int thoff; |
197 | bool *hotdrop; | 198 | unsigned int hooknum; |
198 | u_int8_t family; | 199 | u_int8_t family; |
200 | bool *hotdrop; | ||
199 | }; | 201 | }; |
200 | 202 | ||
201 | /** | 203 | /** |
diff --git a/include/linux/netfilter/xt_NFQUEUE.h b/include/linux/netfilter/xt_NFQUEUE.h index 982a89f78272..2584f4a777de 100644 --- a/include/linux/netfilter/xt_NFQUEUE.h +++ b/include/linux/netfilter/xt_NFQUEUE.h | |||
@@ -15,4 +15,9 @@ struct xt_NFQ_info { | |||
15 | __u16 queuenum; | 15 | __u16 queuenum; |
16 | }; | 16 | }; |
17 | 17 | ||
18 | struct xt_NFQ_info_v1 { | ||
19 | __u16 queuenum; | ||
20 | __u16 queues_total; | ||
21 | }; | ||
22 | |||
18 | #endif /* _XT_NFQ_TARGET_H */ | 23 | #endif /* _XT_NFQ_TARGET_H */ |
diff --git a/include/linux/netfilter/xt_osf.h b/include/linux/netfilter/xt_osf.h new file mode 100644 index 000000000000..fd2272e0959a --- /dev/null +++ b/include/linux/netfilter/xt_osf.h | |||
@@ -0,0 +1,133 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2003+ Evgeniy Polyakov <johnpol@2ka.mxt.ru> | ||
3 | * | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
18 | */ | ||
19 | |||
20 | #ifndef _XT_OSF_H | ||
21 | #define _XT_OSF_H | ||
22 | |||
23 | #define MAXGENRELEN 32 | ||
24 | |||
25 | #define XT_OSF_GENRE (1<<0) | ||
26 | #define XT_OSF_TTL (1<<1) | ||
27 | #define XT_OSF_LOG (1<<2) | ||
28 | #define XT_OSF_INVERT (1<<3) | ||
29 | |||
30 | #define XT_OSF_LOGLEVEL_ALL 0 /* log all matched fingerprints */ | ||
31 | #define XT_OSF_LOGLEVEL_FIRST 1 /* log only the first matced fingerprint */ | ||
32 | #define XT_OSF_LOGLEVEL_ALL_KNOWN 2 /* do not log unknown packets */ | ||
33 | |||
34 | #define XT_OSF_TTL_TRUE 0 /* True ip and fingerprint TTL comparison */ | ||
35 | #define XT_OSF_TTL_LESS 1 /* Check if ip TTL is less than fingerprint one */ | ||
36 | #define XT_OSF_TTL_NOCHECK 2 /* Do not compare ip and fingerprint TTL at all */ | ||
37 | |||
38 | struct xt_osf_info { | ||
39 | char genre[MAXGENRELEN]; | ||
40 | __u32 len; | ||
41 | __u32 flags; | ||
42 | __u32 loglevel; | ||
43 | __u32 ttl; | ||
44 | }; | ||
45 | |||
46 | /* | ||
47 | * Wildcard MSS (kind of). | ||
48 | * It is used to implement a state machine for the different wildcard values | ||
49 | * of the MSS and window sizes. | ||
50 | */ | ||
51 | struct xt_osf_wc { | ||
52 | __u32 wc; | ||
53 | __u32 val; | ||
54 | }; | ||
55 | |||
56 | /* | ||
57 | * This struct represents IANA options | ||
58 | * http://www.iana.org/assignments/tcp-parameters | ||
59 | */ | ||
60 | struct xt_osf_opt { | ||
61 | __u16 kind, length; | ||
62 | struct xt_osf_wc wc; | ||
63 | }; | ||
64 | |||
65 | struct xt_osf_user_finger { | ||
66 | struct xt_osf_wc wss; | ||
67 | |||
68 | __u8 ttl, df; | ||
69 | __u16 ss, mss; | ||
70 | __u16 opt_num; | ||
71 | |||
72 | char genre[MAXGENRELEN]; | ||
73 | char version[MAXGENRELEN]; | ||
74 | char subtype[MAXGENRELEN]; | ||
75 | |||
76 | /* MAX_IPOPTLEN is maximum if all options are NOPs or EOLs */ | ||
77 | struct xt_osf_opt opt[MAX_IPOPTLEN]; | ||
78 | }; | ||
79 | |||
80 | struct xt_osf_nlmsg { | ||
81 | struct xt_osf_user_finger f; | ||
82 | struct iphdr ip; | ||
83 | struct tcphdr tcp; | ||
84 | }; | ||
85 | |||
86 | /* Defines for IANA option kinds */ | ||
87 | |||
88 | enum iana_options { | ||
89 | OSFOPT_EOL = 0, /* End of options */ | ||
90 | OSFOPT_NOP, /* NOP */ | ||
91 | OSFOPT_MSS, /* Maximum segment size */ | ||
92 | OSFOPT_WSO, /* Window scale option */ | ||
93 | OSFOPT_SACKP, /* SACK permitted */ | ||
94 | OSFOPT_SACK, /* SACK */ | ||
95 | OSFOPT_ECHO, | ||
96 | OSFOPT_ECHOREPLY, | ||
97 | OSFOPT_TS, /* Timestamp option */ | ||
98 | OSFOPT_POCP, /* Partial Order Connection Permitted */ | ||
99 | OSFOPT_POSP, /* Partial Order Service Profile */ | ||
100 | |||
101 | /* Others are not used in the current OSF */ | ||
102 | OSFOPT_EMPTY = 255, | ||
103 | }; | ||
104 | |||
105 | /* | ||
106 | * Initial window size option state machine: multiple of mss, mtu or | ||
107 | * plain numeric value. Can also be made as plain numeric value which | ||
108 | * is not a multiple of specified value. | ||
109 | */ | ||
110 | enum xt_osf_window_size_options { | ||
111 | OSF_WSS_PLAIN = 0, | ||
112 | OSF_WSS_MSS, | ||
113 | OSF_WSS_MTU, | ||
114 | OSF_WSS_MODULO, | ||
115 | OSF_WSS_MAX, | ||
116 | }; | ||
117 | |||
118 | /* | ||
119 | * Add/remove fingerprint from the kernel. | ||
120 | */ | ||
121 | enum xt_osf_msg_types { | ||
122 | OSF_MSG_ADD, | ||
123 | OSF_MSG_REMOVE, | ||
124 | OSF_MSG_MAX, | ||
125 | }; | ||
126 | |||
127 | enum xt_osf_attr_type { | ||
128 | OSF_ATTR_UNSPEC, | ||
129 | OSF_ATTR_FINGER, | ||
130 | OSF_ATTR_MAX, | ||
131 | }; | ||
132 | |||
133 | #endif /* _XT_OSF_H */ | ||
diff --git a/include/linux/netfilter/xt_socket.h b/include/linux/netfilter/xt_socket.h new file mode 100644 index 000000000000..6f475b8ff34b --- /dev/null +++ b/include/linux/netfilter/xt_socket.h | |||
@@ -0,0 +1,12 @@ | |||
1 | #ifndef _XT_SOCKET_H | ||
2 | #define _XT_SOCKET_H | ||
3 | |||
4 | enum { | ||
5 | XT_SOCKET_TRANSPARENT = 1 << 0, | ||
6 | }; | ||
7 | |||
8 | struct xt_socket_mtinfo1 { | ||
9 | __u8 flags; | ||
10 | }; | ||
11 | |||
12 | #endif /* _XT_SOCKET_H */ | ||
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h index cbe8ce3bf486..dbea93b694e5 100644 --- a/include/linux/nl80211.h +++ b/include/linux/nl80211.h | |||
@@ -7,7 +7,7 @@ | |||
7 | * Copyright 2008 Michael Wu <flamingice@sourmilk.net> | 7 | * Copyright 2008 Michael Wu <flamingice@sourmilk.net> |
8 | * Copyright 2008 Luis Carlos Cobo <luisca@cozybit.com> | 8 | * Copyright 2008 Luis Carlos Cobo <luisca@cozybit.com> |
9 | * Copyright 2008 Michael Buesch <mb@bu3sch.de> | 9 | * Copyright 2008 Michael Buesch <mb@bu3sch.de> |
10 | * Copyright 2008 Luis R. Rodriguez <lrodriguez@atheros.com> | 10 | * Copyright 2008, 2009 Luis R. Rodriguez <lrodriguez@atheros.com> |
11 | * Copyright 2008 Jouni Malinen <jouni.malinen@atheros.com> | 11 | * Copyright 2008 Jouni Malinen <jouni.malinen@atheros.com> |
12 | * Copyright 2008 Colin McCabe <colin@cozybit.com> | 12 | * Copyright 2008 Colin McCabe <colin@cozybit.com> |
13 | * | 13 | * |
@@ -25,6 +25,8 @@ | |||
25 | * | 25 | * |
26 | */ | 26 | */ |
27 | 27 | ||
28 | #include <linux/types.h> | ||
29 | |||
28 | /** | 30 | /** |
29 | * DOC: Station handling | 31 | * DOC: Station handling |
30 | * | 32 | * |
@@ -46,8 +48,10 @@ | |||
46 | * to get a list of all present wiphys. | 48 | * to get a list of all present wiphys. |
47 | * @NL80211_CMD_SET_WIPHY: set wiphy parameters, needs %NL80211_ATTR_WIPHY or | 49 | * @NL80211_CMD_SET_WIPHY: set wiphy parameters, needs %NL80211_ATTR_WIPHY or |
48 | * %NL80211_ATTR_IFINDEX; can be used to set %NL80211_ATTR_WIPHY_NAME, | 50 | * %NL80211_ATTR_IFINDEX; can be used to set %NL80211_ATTR_WIPHY_NAME, |
49 | * %NL80211_ATTR_WIPHY_TXQ_PARAMS, %NL80211_ATTR_WIPHY_FREQ, and/or | 51 | * %NL80211_ATTR_WIPHY_TXQ_PARAMS, %NL80211_ATTR_WIPHY_FREQ, |
50 | * %NL80211_ATTR_WIPHY_CHANNEL_TYPE. | 52 | * %NL80211_ATTR_WIPHY_CHANNEL_TYPE, %NL80211_ATTR_WIPHY_RETRY_SHORT, |
53 | * %NL80211_ATTR_WIPHY_RETRY_LONG, %NL80211_ATTR_WIPHY_FRAG_THRESHOLD, | ||
54 | * and/or %NL80211_ATTR_WIPHY_RTS_THRESHOLD. | ||
51 | * @NL80211_CMD_NEW_WIPHY: Newly created wiphy, response to get request | 55 | * @NL80211_CMD_NEW_WIPHY: Newly created wiphy, response to get request |
52 | * or rename notification. Has attributes %NL80211_ATTR_WIPHY and | 56 | * or rename notification. Has attributes %NL80211_ATTR_WIPHY and |
53 | * %NL80211_ATTR_WIPHY_NAME. | 57 | * %NL80211_ATTR_WIPHY_NAME. |
@@ -75,8 +79,8 @@ | |||
75 | * @NL80211_CMD_SET_KEY: Set key attributes %NL80211_ATTR_KEY_DEFAULT, | 79 | * @NL80211_CMD_SET_KEY: Set key attributes %NL80211_ATTR_KEY_DEFAULT, |
76 | * %NL80211_ATTR_KEY_DEFAULT_MGMT, or %NL80211_ATTR_KEY_THRESHOLD. | 80 | * %NL80211_ATTR_KEY_DEFAULT_MGMT, or %NL80211_ATTR_KEY_THRESHOLD. |
77 | * @NL80211_CMD_NEW_KEY: add a key with given %NL80211_ATTR_KEY_DATA, | 81 | * @NL80211_CMD_NEW_KEY: add a key with given %NL80211_ATTR_KEY_DATA, |
78 | * %NL80211_ATTR_KEY_IDX, %NL80211_ATTR_MAC and %NL80211_ATTR_KEY_CIPHER | 82 | * %NL80211_ATTR_KEY_IDX, %NL80211_ATTR_MAC, %NL80211_ATTR_KEY_CIPHER, |
79 | * attributes. | 83 | * and %NL80211_ATTR_KEY_SEQ attributes. |
80 | * @NL80211_CMD_DEL_KEY: delete a key identified by %NL80211_ATTR_KEY_IDX | 84 | * @NL80211_CMD_DEL_KEY: delete a key identified by %NL80211_ATTR_KEY_IDX |
81 | * or %NL80211_ATTR_MAC. | 85 | * or %NL80211_ATTR_MAC. |
82 | * | 86 | * |
@@ -166,6 +170,22 @@ | |||
166 | * set (%NL80211_ATTR_REG_TYPE), if the type of regulatory domain is | 170 | * set (%NL80211_ATTR_REG_TYPE), if the type of regulatory domain is |
167 | * %NL80211_REG_TYPE_COUNTRY the alpha2 to which we have moved on | 171 | * %NL80211_REG_TYPE_COUNTRY the alpha2 to which we have moved on |
168 | * to (%NL80211_ATTR_REG_ALPHA2). | 172 | * to (%NL80211_ATTR_REG_ALPHA2). |
173 | * @NL80211_CMD_REG_BEACON_HINT: indicates to userspace that an AP beacon | ||
174 | * has been found while world roaming thus enabling active scan or | ||
175 | * any mode of operation that initiates TX (beacons) on a channel | ||
176 | * where we would not have been able to do either before. As an example | ||
177 | * if you are world roaming (regulatory domain set to world or if your | ||
178 | * driver is using a custom world roaming regulatory domain) and while | ||
179 | * doing a passive scan on the 5 GHz band you find an AP there (if not | ||
180 | * on a DFS channel) you will now be able to actively scan for that AP | ||
181 | * or use AP mode on your card on that same channel. Note that this will | ||
182 | * never be used for channels 1-11 on the 2 GHz band as they are always | ||
183 | * enabled world wide. This beacon hint is only sent if your device had | ||
184 | * either disabled active scanning or beaconing on a channel. We send to | ||
185 | * userspace the wiphy on which we removed a restriction from | ||
186 | * (%NL80211_ATTR_WIPHY) and the channel on which this occurred | ||
187 | * before (%NL80211_ATTR_FREQ_BEFORE) and after (%NL80211_ATTR_FREQ_AFTER) | ||
188 | * the beacon hint was processed. | ||
169 | * | 189 | * |
170 | * @NL80211_CMD_AUTHENTICATE: authentication request and notification. | 190 | * @NL80211_CMD_AUTHENTICATE: authentication request and notification. |
171 | * This command is used both as a command (request to authenticate) and | 191 | * This command is used both as a command (request to authenticate) and |
@@ -185,8 +205,12 @@ | |||
185 | * frame, i.e., it was for the local STA and was received in correct | 205 | * frame, i.e., it was for the local STA and was received in correct |
186 | * state. This is similar to MLME-AUTHENTICATE.confirm primitive in the | 206 | * state. This is similar to MLME-AUTHENTICATE.confirm primitive in the |
187 | * MLME SAP interface (kernel providing MLME, userspace SME). The | 207 | * MLME SAP interface (kernel providing MLME, userspace SME). The |
188 | * included NL80211_ATTR_FRAME attribute contains the management frame | 208 | * included %NL80211_ATTR_FRAME attribute contains the management frame |
189 | * (including both the header and frame body, but not FCS). | 209 | * (including both the header and frame body, but not FCS). This event is |
210 | * also used to indicate if the authentication attempt timed out. In that | ||
211 | * case the %NL80211_ATTR_FRAME attribute is replaced with a | ||
212 | * %NL80211_ATTR_TIMED_OUT flag (and %NL80211_ATTR_MAC to indicate which | ||
213 | * pending authentication timed out). | ||
190 | * @NL80211_CMD_ASSOCIATE: association request and notification; like | 214 | * @NL80211_CMD_ASSOCIATE: association request and notification; like |
191 | * NL80211_CMD_AUTHENTICATE but for Association and Reassociation | 215 | * NL80211_CMD_AUTHENTICATE but for Association and Reassociation |
192 | * (similar to MLME-ASSOCIATE.request, MLME-REASSOCIATE.request, | 216 | * (similar to MLME-ASSOCIATE.request, MLME-REASSOCIATE.request, |
@@ -199,6 +223,25 @@ | |||
199 | * NL80211_CMD_AUTHENTICATE but for Disassociation frames (similar to | 223 | * NL80211_CMD_AUTHENTICATE but for Disassociation frames (similar to |
200 | * MLME-DISASSOCIATE.request and MLME-DISASSOCIATE.indication primitives). | 224 | * MLME-DISASSOCIATE.request and MLME-DISASSOCIATE.indication primitives). |
201 | * | 225 | * |
226 | * @NL80211_CMD_MICHAEL_MIC_FAILURE: notification of a locally detected Michael | ||
227 | * MIC (part of TKIP) failure; sent on the "mlme" multicast group; the | ||
228 | * event includes %NL80211_ATTR_MAC to describe the source MAC address of | ||
229 | * the frame with invalid MIC, %NL80211_ATTR_KEY_TYPE to show the key | ||
230 | * type, %NL80211_ATTR_KEY_IDX to indicate the key identifier, and | ||
231 | * %NL80211_ATTR_KEY_SEQ to indicate the TSC value of the frame; this | ||
232 | * event matches with MLME-MICHAELMICFAILURE.indication() primitive | ||
233 | * | ||
234 | * @NL80211_CMD_JOIN_IBSS: Join a new IBSS -- given at least an SSID and a | ||
235 | * FREQ attribute (for the initial frequency if no peer can be found) | ||
236 | * and optionally a MAC (as BSSID) and FREQ_FIXED attribute if those | ||
237 | * should be fixed rather than automatically determined. Can only be | ||
238 | * executed on a network interface that is UP, and fixed BSSID/FREQ | ||
239 | * may be rejected. Another optional parameter is the beacon interval, | ||
240 | * given in the %NL80211_ATTR_BEACON_INTERVAL attribute, which if not | ||
241 | * given defaults to 100 TU (102.4ms). | ||
242 | * @NL80211_CMD_LEAVE_IBSS: Leave the IBSS -- no special arguments, the IBSS is | ||
243 | * determined by the network interface. | ||
244 | * | ||
202 | * @NL80211_CMD_MAX: highest used command number | 245 | * @NL80211_CMD_MAX: highest used command number |
203 | * @__NL80211_CMD_AFTER_LAST: internal use | 246 | * @__NL80211_CMD_AFTER_LAST: internal use |
204 | */ | 247 | */ |
@@ -260,6 +303,13 @@ enum nl80211_commands { | |||
260 | NL80211_CMD_DEAUTHENTICATE, | 303 | NL80211_CMD_DEAUTHENTICATE, |
261 | NL80211_CMD_DISASSOCIATE, | 304 | NL80211_CMD_DISASSOCIATE, |
262 | 305 | ||
306 | NL80211_CMD_MICHAEL_MIC_FAILURE, | ||
307 | |||
308 | NL80211_CMD_REG_BEACON_HINT, | ||
309 | |||
310 | NL80211_CMD_JOIN_IBSS, | ||
311 | NL80211_CMD_LEAVE_IBSS, | ||
312 | |||
263 | /* add new commands above here */ | 313 | /* add new commands above here */ |
264 | 314 | ||
265 | /* used to define NL80211_CMD_MAX below */ | 315 | /* used to define NL80211_CMD_MAX below */ |
@@ -278,6 +328,7 @@ enum nl80211_commands { | |||
278 | #define NL80211_CMD_ASSOCIATE NL80211_CMD_ASSOCIATE | 328 | #define NL80211_CMD_ASSOCIATE NL80211_CMD_ASSOCIATE |
279 | #define NL80211_CMD_DEAUTHENTICATE NL80211_CMD_DEAUTHENTICATE | 329 | #define NL80211_CMD_DEAUTHENTICATE NL80211_CMD_DEAUTHENTICATE |
280 | #define NL80211_CMD_DISASSOCIATE NL80211_CMD_DISASSOCIATE | 330 | #define NL80211_CMD_DISASSOCIATE NL80211_CMD_DISASSOCIATE |
331 | #define NL80211_CMD_REG_BEACON_HINT NL80211_CMD_REG_BEACON_HINT | ||
281 | 332 | ||
282 | /** | 333 | /** |
283 | * enum nl80211_attrs - nl80211 netlink attributes | 334 | * enum nl80211_attrs - nl80211 netlink attributes |
@@ -296,6 +347,18 @@ enum nl80211_commands { | |||
296 | * NL80211_CHAN_HT20 = HT20 only | 347 | * NL80211_CHAN_HT20 = HT20 only |
297 | * NL80211_CHAN_HT40MINUS = secondary channel is below the primary channel | 348 | * NL80211_CHAN_HT40MINUS = secondary channel is below the primary channel |
298 | * NL80211_CHAN_HT40PLUS = secondary channel is above the primary channel | 349 | * NL80211_CHAN_HT40PLUS = secondary channel is above the primary channel |
350 | * @NL80211_ATTR_WIPHY_RETRY_SHORT: TX retry limit for frames whose length is | ||
351 | * less than or equal to the RTS threshold; allowed range: 1..255; | ||
352 | * dot11ShortRetryLimit; u8 | ||
353 | * @NL80211_ATTR_WIPHY_RETRY_LONG: TX retry limit for frames whose length is | ||
354 | * greater than the RTS threshold; allowed range: 1..255; | ||
355 | * dot11ShortLongLimit; u8 | ||
356 | * @NL80211_ATTR_WIPHY_FRAG_THRESHOLD: fragmentation threshold, i.e., maximum | ||
357 | * length in octets for frames; allowed range: 256..8000, disable | ||
358 | * fragmentation with (u32)-1; dot11FragmentationThreshold; u32 | ||
359 | * @NL80211_ATTR_WIPHY_RTS_THRESHOLD: RTS threshold (TX frames with length | ||
360 | * larger than or equal to this use RTS/CTS handshake); allowed range: | ||
361 | * 0..65536, disable with (u32)-1; dot11RTSThreshold; u32 | ||
299 | * | 362 | * |
300 | * @NL80211_ATTR_IFINDEX: network interface index of the device to operate on | 363 | * @NL80211_ATTR_IFINDEX: network interface index of the device to operate on |
301 | * @NL80211_ATTR_IFNAME: network interface name | 364 | * @NL80211_ATTR_IFNAME: network interface name |
@@ -319,7 +382,7 @@ enum nl80211_commands { | |||
319 | * | 382 | * |
320 | * @NL80211_ATTR_STA_AID: Association ID for the station (u16) | 383 | * @NL80211_ATTR_STA_AID: Association ID for the station (u16) |
321 | * @NL80211_ATTR_STA_FLAGS: flags, nested element with NLA_FLAG attributes of | 384 | * @NL80211_ATTR_STA_FLAGS: flags, nested element with NLA_FLAG attributes of |
322 | * &enum nl80211_sta_flags. | 385 | * &enum nl80211_sta_flags (deprecated, use %NL80211_ATTR_STA_FLAGS2) |
323 | * @NL80211_ATTR_STA_LISTEN_INTERVAL: listen interval as defined by | 386 | * @NL80211_ATTR_STA_LISTEN_INTERVAL: listen interval as defined by |
324 | * IEEE 802.11 7.3.1.6 (u16). | 387 | * IEEE 802.11 7.3.1.6 (u16). |
325 | * @NL80211_ATTR_STA_SUPPORTED_RATES: supported rates, array of supported | 388 | * @NL80211_ATTR_STA_SUPPORTED_RATES: supported rates, array of supported |
@@ -380,6 +443,8 @@ enum nl80211_commands { | |||
380 | * | 443 | * |
381 | * @NL80211_ATTR_MAX_NUM_SCAN_SSIDS: number of SSIDs you can scan with | 444 | * @NL80211_ATTR_MAX_NUM_SCAN_SSIDS: number of SSIDs you can scan with |
382 | * a single scan request, a wiphy attribute. | 445 | * a single scan request, a wiphy attribute. |
446 | * @NL80211_ATTR_MAX_SCAN_IE_LEN: maximum length of information elements | ||
447 | * that can be added to a scan request | ||
383 | * | 448 | * |
384 | * @NL80211_ATTR_SCAN_FREQUENCIES: nested attribute with frequencies (in MHz) | 449 | * @NL80211_ATTR_SCAN_FREQUENCIES: nested attribute with frequencies (in MHz) |
385 | * @NL80211_ATTR_SCAN_SSIDS: nested attribute with SSIDs, leave out for passive | 450 | * @NL80211_ATTR_SCAN_SSIDS: nested attribute with SSIDs, leave out for passive |
@@ -408,6 +473,44 @@ enum nl80211_commands { | |||
408 | * @NL80211_ATTR_REASON_CODE: ReasonCode for %NL80211_CMD_DEAUTHENTICATE and | 473 | * @NL80211_ATTR_REASON_CODE: ReasonCode for %NL80211_CMD_DEAUTHENTICATE and |
409 | * %NL80211_CMD_DISASSOCIATE, u16 | 474 | * %NL80211_CMD_DISASSOCIATE, u16 |
410 | * | 475 | * |
476 | * @NL80211_ATTR_KEY_TYPE: Key Type, see &enum nl80211_key_type, represented as | ||
477 | * a u32 | ||
478 | * | ||
479 | * @NL80211_ATTR_FREQ_BEFORE: A channel which has suffered a regulatory change | ||
480 | * due to considerations from a beacon hint. This attribute reflects | ||
481 | * the state of the channel _before_ the beacon hint processing. This | ||
482 | * attributes consists of a nested attribute containing | ||
483 | * NL80211_FREQUENCY_ATTR_* | ||
484 | * @NL80211_ATTR_FREQ_AFTER: A channel which has suffered a regulatory change | ||
485 | * due to considerations from a beacon hint. This attribute reflects | ||
486 | * the state of the channel _after_ the beacon hint processing. This | ||
487 | * attributes consists of a nested attribute containing | ||
488 | * NL80211_FREQUENCY_ATTR_* | ||
489 | * | ||
490 | * @NL80211_ATTR_CIPHER_SUITES: a set of u32 values indicating the supported | ||
491 | * cipher suites | ||
492 | * | ||
493 | * @NL80211_ATTR_FREQ_FIXED: a flag indicating the IBSS should not try to look | ||
494 | * for other networks on different channels | ||
495 | * | ||
496 | * @NL80211_ATTR_TIMED_OUT: a flag indicating than an operation timed out; this | ||
497 | * is used, e.g., with %NL80211_CMD_AUTHENTICATE event | ||
498 | * | ||
499 | * @NL80211_ATTR_USE_MFP: Whether management frame protection (IEEE 802.11w) is | ||
500 | * used for the association (&enum nl80211_mfp, represented as a u32); | ||
501 | * this attribute can be used | ||
502 | * with %NL80211_CMD_ASSOCIATE request | ||
503 | * | ||
504 | * @NL80211_ATTR_STA_FLAGS2: Attribute containing a | ||
505 | * &struct nl80211_sta_flag_update. | ||
506 | * | ||
507 | * @NL80211_ATTR_CONTROL_PORT: A flag indicating whether user space controls | ||
508 | * IEEE 802.1X port, i.e., sets/clears %NL80211_STA_FLAG_AUTHORIZED, in | ||
509 | * station mode. If the flag is included in %NL80211_CMD_ASSOCIATE | ||
510 | * request, the driver will assume that the port is unauthorized until | ||
511 | * authorized by user space. Otherwise, port is marked authorized by | ||
512 | * default in station mode. | ||
513 | * | ||
411 | * @NL80211_ATTR_MAX: highest attribute number currently defined | 514 | * @NL80211_ATTR_MAX: highest attribute number currently defined |
412 | * @__NL80211_ATTR_AFTER_LAST: internal use | 515 | * @__NL80211_ATTR_AFTER_LAST: internal use |
413 | */ | 516 | */ |
@@ -492,6 +595,30 @@ enum nl80211_attrs { | |||
492 | NL80211_ATTR_AUTH_TYPE, | 595 | NL80211_ATTR_AUTH_TYPE, |
493 | NL80211_ATTR_REASON_CODE, | 596 | NL80211_ATTR_REASON_CODE, |
494 | 597 | ||
598 | NL80211_ATTR_KEY_TYPE, | ||
599 | |||
600 | NL80211_ATTR_MAX_SCAN_IE_LEN, | ||
601 | NL80211_ATTR_CIPHER_SUITES, | ||
602 | |||
603 | NL80211_ATTR_FREQ_BEFORE, | ||
604 | NL80211_ATTR_FREQ_AFTER, | ||
605 | |||
606 | NL80211_ATTR_FREQ_FIXED, | ||
607 | |||
608 | |||
609 | NL80211_ATTR_WIPHY_RETRY_SHORT, | ||
610 | NL80211_ATTR_WIPHY_RETRY_LONG, | ||
611 | NL80211_ATTR_WIPHY_FRAG_THRESHOLD, | ||
612 | NL80211_ATTR_WIPHY_RTS_THRESHOLD, | ||
613 | |||
614 | NL80211_ATTR_TIMED_OUT, | ||
615 | |||
616 | NL80211_ATTR_USE_MFP, | ||
617 | |||
618 | NL80211_ATTR_STA_FLAGS2, | ||
619 | |||
620 | NL80211_ATTR_CONTROL_PORT, | ||
621 | |||
495 | /* add attributes here, update the policy in nl80211.c */ | 622 | /* add attributes here, update the policy in nl80211.c */ |
496 | 623 | ||
497 | __NL80211_ATTR_AFTER_LAST, | 624 | __NL80211_ATTR_AFTER_LAST, |
@@ -581,6 +708,18 @@ enum nl80211_sta_flags { | |||
581 | }; | 708 | }; |
582 | 709 | ||
583 | /** | 710 | /** |
711 | * struct nl80211_sta_flag_update - station flags mask/set | ||
712 | * @mask: mask of station flags to set | ||
713 | * @set: which values to set them to | ||
714 | * | ||
715 | * Both mask and set contain bits as per &enum nl80211_sta_flags. | ||
716 | */ | ||
717 | struct nl80211_sta_flag_update { | ||
718 | __u32 mask; | ||
719 | __u32 set; | ||
720 | } __attribute__((packed)); | ||
721 | |||
722 | /** | ||
584 | * enum nl80211_rate_info - bitrate information | 723 | * enum nl80211_rate_info - bitrate information |
585 | * | 724 | * |
586 | * These attribute types are used with %NL80211_STA_INFO_TXRATE | 725 | * These attribute types are used with %NL80211_STA_INFO_TXRATE |
@@ -1062,4 +1201,27 @@ enum nl80211_auth_type { | |||
1062 | NL80211_AUTHTYPE_FT, | 1201 | NL80211_AUTHTYPE_FT, |
1063 | NL80211_AUTHTYPE_NETWORK_EAP, | 1202 | NL80211_AUTHTYPE_NETWORK_EAP, |
1064 | }; | 1203 | }; |
1204 | |||
1205 | /** | ||
1206 | * enum nl80211_key_type - Key Type | ||
1207 | * @NL80211_KEYTYPE_GROUP: Group (broadcast/multicast) key | ||
1208 | * @NL80211_KEYTYPE_PAIRWISE: Pairwise (unicast/individual) key | ||
1209 | * @NL80211_KEYTYPE_PEERKEY: PeerKey (DLS) | ||
1210 | */ | ||
1211 | enum nl80211_key_type { | ||
1212 | NL80211_KEYTYPE_GROUP, | ||
1213 | NL80211_KEYTYPE_PAIRWISE, | ||
1214 | NL80211_KEYTYPE_PEERKEY, | ||
1215 | }; | ||
1216 | |||
1217 | /** | ||
1218 | * enum nl80211_mfp - Management frame protection state | ||
1219 | * @NL80211_MFP_NO: Management frame protection not used | ||
1220 | * @NL80211_MFP_REQUIRED: Management frame protection required | ||
1221 | */ | ||
1222 | enum nl80211_mfp { | ||
1223 | NL80211_MFP_NO, | ||
1224 | NL80211_MFP_REQUIRED, | ||
1225 | }; | ||
1226 | |||
1065 | #endif /* __LINUX_NL80211_H */ | 1227 | #endif /* __LINUX_NL80211_H */ |
diff --git a/include/linux/nl802154.h b/include/linux/nl802154.h new file mode 100644 index 000000000000..2cda00ccfcca --- /dev/null +++ b/include/linux/nl802154.h | |||
@@ -0,0 +1,119 @@ | |||
1 | /* | ||
2 | * nl802154.h | ||
3 | * | ||
4 | * Copyright (C) 2007, 2008, 2009 Siemens AG | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 | ||
8 | * as published by the Free Software Foundation. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License along | ||
16 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef NL802154_H | ||
22 | #define NL802154_H | ||
23 | |||
24 | #define IEEE802154_NL_NAME "802.15.4 MAC" | ||
25 | #define IEEE802154_MCAST_COORD_NAME "coordinator" | ||
26 | #define IEEE802154_MCAST_BEACON_NAME "beacon" | ||
27 | |||
28 | enum { | ||
29 | __IEEE802154_ATTR_INVALID, | ||
30 | |||
31 | IEEE802154_ATTR_DEV_NAME, | ||
32 | IEEE802154_ATTR_DEV_INDEX, | ||
33 | |||
34 | IEEE802154_ATTR_STATUS, | ||
35 | |||
36 | IEEE802154_ATTR_SHORT_ADDR, | ||
37 | IEEE802154_ATTR_HW_ADDR, | ||
38 | IEEE802154_ATTR_PAN_ID, | ||
39 | |||
40 | IEEE802154_ATTR_CHANNEL, | ||
41 | |||
42 | IEEE802154_ATTR_COORD_SHORT_ADDR, | ||
43 | IEEE802154_ATTR_COORD_HW_ADDR, | ||
44 | IEEE802154_ATTR_COORD_PAN_ID, | ||
45 | |||
46 | IEEE802154_ATTR_SRC_SHORT_ADDR, | ||
47 | IEEE802154_ATTR_SRC_HW_ADDR, | ||
48 | IEEE802154_ATTR_SRC_PAN_ID, | ||
49 | |||
50 | IEEE802154_ATTR_DEST_SHORT_ADDR, | ||
51 | IEEE802154_ATTR_DEST_HW_ADDR, | ||
52 | IEEE802154_ATTR_DEST_PAN_ID, | ||
53 | |||
54 | IEEE802154_ATTR_CAPABILITY, | ||
55 | IEEE802154_ATTR_REASON, | ||
56 | IEEE802154_ATTR_SCAN_TYPE, | ||
57 | IEEE802154_ATTR_CHANNELS, | ||
58 | IEEE802154_ATTR_DURATION, | ||
59 | IEEE802154_ATTR_ED_LIST, | ||
60 | IEEE802154_ATTR_BCN_ORD, | ||
61 | IEEE802154_ATTR_SF_ORD, | ||
62 | IEEE802154_ATTR_PAN_COORD, | ||
63 | IEEE802154_ATTR_BAT_EXT, | ||
64 | IEEE802154_ATTR_COORD_REALIGN, | ||
65 | IEEE802154_ATTR_SEC, | ||
66 | |||
67 | __IEEE802154_ATTR_MAX, | ||
68 | }; | ||
69 | |||
70 | #define IEEE802154_ATTR_MAX (__IEEE802154_ATTR_MAX - 1) | ||
71 | |||
72 | extern struct nla_policy ieee802154_policy[]; | ||
73 | |||
74 | /* commands */ | ||
75 | /* REQ should be responded with CONF | ||
76 | * and INDIC with RESP | ||
77 | */ | ||
78 | enum { | ||
79 | __IEEE802154_COMMAND_INVALID, | ||
80 | |||
81 | IEEE802154_ASSOCIATE_REQ, | ||
82 | IEEE802154_ASSOCIATE_CONF, | ||
83 | IEEE802154_DISASSOCIATE_REQ, | ||
84 | IEEE802154_DISASSOCIATE_CONF, | ||
85 | IEEE802154_GET_REQ, | ||
86 | IEEE802154_GET_CONF, | ||
87 | IEEE802154_RESET_REQ, | ||
88 | IEEE802154_RESET_CONF, | ||
89 | IEEE802154_SCAN_REQ, | ||
90 | IEEE802154_SCAN_CONF, | ||
91 | IEEE802154_SET_REQ, | ||
92 | IEEE802154_SET_CONF, | ||
93 | IEEE802154_START_REQ, | ||
94 | IEEE802154_START_CONF, | ||
95 | IEEE802154_SYNC_REQ, | ||
96 | IEEE802154_POLL_REQ, | ||
97 | IEEE802154_POLL_CONF, | ||
98 | |||
99 | IEEE802154_ASSOCIATE_INDIC, | ||
100 | IEEE802154_ASSOCIATE_RESP, | ||
101 | IEEE802154_DISASSOCIATE_INDIC, | ||
102 | IEEE802154_BEACON_NOTIFY_INDIC, | ||
103 | IEEE802154_ORPHAN_INDIC, | ||
104 | IEEE802154_ORPHAN_RESP, | ||
105 | IEEE802154_COMM_STATUS_INDIC, | ||
106 | IEEE802154_SYNC_LOSS_INDIC, | ||
107 | |||
108 | IEEE802154_GTS_REQ, /* Not supported yet */ | ||
109 | IEEE802154_GTS_INDIC, /* Not supported yet */ | ||
110 | IEEE802154_GTS_CONF, /* Not supported yet */ | ||
111 | IEEE802154_RX_ENABLE_REQ, /* Not supported yet */ | ||
112 | IEEE802154_RX_ENABLE_CONF, /* Not supported yet */ | ||
113 | |||
114 | __IEEE802154_CMD_MAX, | ||
115 | }; | ||
116 | |||
117 | #define IEEE802154_CMD_MAX (__IEEE802154_CMD_MAX - 1) | ||
118 | |||
119 | #endif | ||
diff --git a/include/linux/notifier.h b/include/linux/notifier.h index b86fa2ffca0c..81bc252dc8ac 100644 --- a/include/linux/notifier.h +++ b/include/linux/notifier.h | |||
@@ -198,6 +198,7 @@ static inline int notifier_to_errno(int ret) | |||
198 | #define NETDEV_CHANGENAME 0x000A | 198 | #define NETDEV_CHANGENAME 0x000A |
199 | #define NETDEV_FEAT_CHANGE 0x000B | 199 | #define NETDEV_FEAT_CHANGE 0x000B |
200 | #define NETDEV_BONDING_FAILOVER 0x000C | 200 | #define NETDEV_BONDING_FAILOVER 0x000C |
201 | #define NETDEV_PRE_UP 0x000D | ||
201 | 202 | ||
202 | #define SYS_DOWN 0x0001 /* Notify of system down */ | 203 | #define SYS_DOWN 0x0001 /* Notify of system down */ |
203 | #define SYS_RESTART SYS_DOWN | 204 | #define SYS_RESTART SYS_DOWN |
diff --git a/include/linux/of.h b/include/linux/of.h index 6a7efa242f5e..7be2d1043c16 100644 --- a/include/linux/of.h +++ b/include/linux/of.h | |||
@@ -77,6 +77,9 @@ extern int of_n_size_cells(struct device_node *np); | |||
77 | extern const struct of_device_id *of_match_node( | 77 | extern const struct of_device_id *of_match_node( |
78 | const struct of_device_id *matches, const struct device_node *node); | 78 | const struct of_device_id *matches, const struct device_node *node); |
79 | extern int of_modalias_node(struct device_node *node, char *modalias, int len); | 79 | extern int of_modalias_node(struct device_node *node, char *modalias, int len); |
80 | extern struct device_node *of_parse_phandle(struct device_node *np, | ||
81 | const char *phandle_name, | ||
82 | int index); | ||
80 | extern int of_parse_phandles_with_args(struct device_node *np, | 83 | extern int of_parse_phandles_with_args(struct device_node *np, |
81 | const char *list_name, const char *cells_name, int index, | 84 | const char *list_name, const char *cells_name, int index, |
82 | struct device_node **out_node, const void **out_args); | 85 | struct device_node **out_node, const void **out_args); |
diff --git a/include/linux/of_mdio.h b/include/linux/of_mdio.h new file mode 100644 index 000000000000..c9663c690303 --- /dev/null +++ b/include/linux/of_mdio.h | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | * OF helpers for the MDIO (Ethernet PHY) API | ||
3 | * | ||
4 | * Copyright (c) 2009 Secret Lab Technologies, Ltd. | ||
5 | * | ||
6 | * This file is released under the GPLv2 | ||
7 | */ | ||
8 | |||
9 | #ifndef __LINUX_OF_MDIO_H | ||
10 | #define __LINUX_OF_MDIO_H | ||
11 | |||
12 | #include <linux/phy.h> | ||
13 | #include <linux/of.h> | ||
14 | |||
15 | extern int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np); | ||
16 | extern struct phy_device *of_phy_find_device(struct device_node *phy_np); | ||
17 | extern struct phy_device *of_phy_connect(struct net_device *dev, | ||
18 | struct device_node *phy_np, | ||
19 | void (*hndlr)(struct net_device *), | ||
20 | u32 flags, phy_interface_t iface); | ||
21 | |||
22 | #endif /* __LINUX_OF_MDIO_H */ | ||
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index a3df4a2bba63..aa01d38c9971 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -1067,8 +1067,6 @@ | |||
1067 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SMBUS 0x0034 | 1067 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SMBUS 0x0034 |
1068 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE 0x0035 | 1068 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE 0x0035 |
1069 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA 0x0036 | 1069 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA 0x0036 |
1070 | #define PCI_DEVICE_ID_NVIDIA_NVENET_10 0x0037 | ||
1071 | #define PCI_DEVICE_ID_NVIDIA_NVENET_11 0x0038 | ||
1072 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2 0x003e | 1070 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2 0x003e |
1073 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_6800_ULTRA 0x0040 | 1071 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_6800_ULTRA 0x0040 |
1074 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_6800 0x0041 | 1072 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_6800 0x0041 |
@@ -1079,21 +1077,16 @@ | |||
1079 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE 0x0053 | 1077 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE 0x0053 |
1080 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA 0x0054 | 1078 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA 0x0054 |
1081 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA2 0x0055 | 1079 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA2 0x0055 |
1082 | #define PCI_DEVICE_ID_NVIDIA_NVENET_8 0x0056 | ||
1083 | #define PCI_DEVICE_ID_NVIDIA_NVENET_9 0x0057 | ||
1084 | #define PCI_DEVICE_ID_NVIDIA_CK804_AUDIO 0x0059 | 1080 | #define PCI_DEVICE_ID_NVIDIA_CK804_AUDIO 0x0059 |
1085 | #define PCI_DEVICE_ID_NVIDIA_CK804_PCIE 0x005d | 1081 | #define PCI_DEVICE_ID_NVIDIA_CK804_PCIE 0x005d |
1086 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2_SMBUS 0x0064 | 1082 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2_SMBUS 0x0064 |
1087 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE 0x0065 | 1083 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE 0x0065 |
1088 | #define PCI_DEVICE_ID_NVIDIA_NVENET_2 0x0066 | ||
1089 | #define PCI_DEVICE_ID_NVIDIA_MCP2_MODEM 0x0069 | 1084 | #define PCI_DEVICE_ID_NVIDIA_MCP2_MODEM 0x0069 |
1090 | #define PCI_DEVICE_ID_NVIDIA_MCP2_AUDIO 0x006a | 1085 | #define PCI_DEVICE_ID_NVIDIA_MCP2_AUDIO 0x006a |
1091 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2S_SMBUS 0x0084 | 1086 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2S_SMBUS 0x0084 |
1092 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2S_IDE 0x0085 | 1087 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2S_IDE 0x0085 |
1093 | #define PCI_DEVICE_ID_NVIDIA_NVENET_4 0x0086 | ||
1094 | #define PCI_DEVICE_ID_NVIDIA_MCP2S_MODEM 0x0089 | 1088 | #define PCI_DEVICE_ID_NVIDIA_MCP2S_MODEM 0x0089 |
1095 | #define PCI_DEVICE_ID_NVIDIA_CK8_AUDIO 0x008a | 1089 | #define PCI_DEVICE_ID_NVIDIA_CK8_AUDIO 0x008a |
1096 | #define PCI_DEVICE_ID_NVIDIA_NVENET_5 0x008c | ||
1097 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA 0x008e | 1090 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA 0x008e |
1098 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_7800_GT 0x0090 | 1091 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_7800_GT 0x0090 |
1099 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_7800_GTX 0x0091 | 1092 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_7800_GTX 0x0091 |
@@ -1109,15 +1102,12 @@ | |||
1109 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3 0x00d1 | 1102 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3 0x00d1 |
1110 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3_SMBUS 0x00d4 | 1103 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3_SMBUS 0x00d4 |
1111 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE 0x00d5 | 1104 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE 0x00d5 |
1112 | #define PCI_DEVICE_ID_NVIDIA_NVENET_3 0x00d6 | ||
1113 | #define PCI_DEVICE_ID_NVIDIA_MCP3_MODEM 0x00d9 | 1105 | #define PCI_DEVICE_ID_NVIDIA_MCP3_MODEM 0x00d9 |
1114 | #define PCI_DEVICE_ID_NVIDIA_MCP3_AUDIO 0x00da | 1106 | #define PCI_DEVICE_ID_NVIDIA_MCP3_AUDIO 0x00da |
1115 | #define PCI_DEVICE_ID_NVIDIA_NVENET_7 0x00df | ||
1116 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S 0x00e1 | 1107 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S 0x00e1 |
1117 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA 0x00e3 | 1108 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA 0x00e3 |
1118 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SMBUS 0x00e4 | 1109 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SMBUS 0x00e4 |
1119 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE 0x00e5 | 1110 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE 0x00e5 |
1120 | #define PCI_DEVICE_ID_NVIDIA_NVENET_6 0x00e6 | ||
1121 | #define PCI_DEVICE_ID_NVIDIA_CK8S_AUDIO 0x00ea | 1111 | #define PCI_DEVICE_ID_NVIDIA_CK8S_AUDIO 0x00ea |
1122 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2 0x00ee | 1112 | #define PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2 0x00ee |
1123 | #define PCIE_DEVICE_ID_NVIDIA_GEFORCE_6800_ALT1 0x00f0 | 1113 | #define PCIE_DEVICE_ID_NVIDIA_GEFORCE_6800_ALT1 0x00f0 |
@@ -1177,7 +1167,6 @@ | |||
1177 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_SMBUS 0x01b4 | 1167 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_SMBUS 0x01b4 |
1178 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_IDE 0x01bc | 1168 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_IDE 0x01bc |
1179 | #define PCI_DEVICE_ID_NVIDIA_MCP1_MODEM 0x01c1 | 1169 | #define PCI_DEVICE_ID_NVIDIA_MCP1_MODEM 0x01c1 |
1180 | #define PCI_DEVICE_ID_NVIDIA_NVENET_1 0x01c3 | ||
1181 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2 0x01e0 | 1170 | #define PCI_DEVICE_ID_NVIDIA_NFORCE2 0x01e0 |
1182 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE3 0x0200 | 1171 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE3 0x0200 |
1183 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE3_1 0x0201 | 1172 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE3_1 0x0201 |
@@ -1200,8 +1189,6 @@ | |||
1200 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE 0x036E | 1189 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE 0x036E |
1201 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA 0x037E | 1190 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA 0x037E |
1202 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA2 0x037F | 1191 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA2 0x037F |
1203 | #define PCI_DEVICE_ID_NVIDIA_NVENET_12 0x0268 | ||
1204 | #define PCI_DEVICE_ID_NVIDIA_NVENET_13 0x0269 | ||
1205 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4800 0x0280 | 1192 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4800 0x0280 |
1206 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4800_8X 0x0281 | 1193 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4800_8X 0x0281 |
1207 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4800SE 0x0282 | 1194 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI_4800SE 0x0282 |
@@ -1248,46 +1235,21 @@ | |||
1248 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5700_2 0x0348 | 1235 | #define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5700_2 0x0348 |
1249 | #define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_GO1000 0x034C | 1236 | #define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_GO1000 0x034C |
1250 | #define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_1100 0x034E | 1237 | #define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_1100 0x034E |
1251 | #define PCI_DEVICE_ID_NVIDIA_NVENET_14 0x0372 | ||
1252 | #define PCI_DEVICE_ID_NVIDIA_NVENET_15 0x0373 | 1238 | #define PCI_DEVICE_ID_NVIDIA_NVENET_15 0x0373 |
1253 | #define PCI_DEVICE_ID_NVIDIA_NVENET_16 0x03E5 | ||
1254 | #define PCI_DEVICE_ID_NVIDIA_NVENET_17 0x03E6 | ||
1255 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA 0x03E7 | 1239 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA 0x03E7 |
1256 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SMBUS 0x03EB | 1240 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SMBUS 0x03EB |
1257 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE 0x03EC | 1241 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE 0x03EC |
1258 | #define PCI_DEVICE_ID_NVIDIA_NVENET_18 0x03EE | ||
1259 | #define PCI_DEVICE_ID_NVIDIA_NVENET_19 0x03EF | ||
1260 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA2 0x03F6 | 1242 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA2 0x03F6 |
1261 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA3 0x03F7 | 1243 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA3 0x03F7 |
1262 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_SMBUS 0x0446 | 1244 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_SMBUS 0x0446 |
1263 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_IDE 0x0448 | 1245 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_IDE 0x0448 |
1264 | #define PCI_DEVICE_ID_NVIDIA_NVENET_20 0x0450 | ||
1265 | #define PCI_DEVICE_ID_NVIDIA_NVENET_21 0x0451 | ||
1266 | #define PCI_DEVICE_ID_NVIDIA_NVENET_22 0x0452 | ||
1267 | #define PCI_DEVICE_ID_NVIDIA_NVENET_23 0x0453 | ||
1268 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_SMBUS 0x0542 | 1246 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_SMBUS 0x0542 |
1269 | #define PCI_DEVICE_ID_NVIDIA_NVENET_24 0x054C | ||
1270 | #define PCI_DEVICE_ID_NVIDIA_NVENET_25 0x054D | ||
1271 | #define PCI_DEVICE_ID_NVIDIA_NVENET_26 0x054E | ||
1272 | #define PCI_DEVICE_ID_NVIDIA_NVENET_27 0x054F | ||
1273 | #define PCI_DEVICE_ID_NVIDIA_NVENET_28 0x07DC | ||
1274 | #define PCI_DEVICE_ID_NVIDIA_NVENET_29 0x07DD | ||
1275 | #define PCI_DEVICE_ID_NVIDIA_NVENET_30 0x07DE | ||
1276 | #define PCI_DEVICE_ID_NVIDIA_NVENET_31 0x07DF | ||
1277 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_IDE 0x0560 | 1247 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_IDE 0x0560 |
1278 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_IDE 0x056C | 1248 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_IDE 0x056C |
1279 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP78S_SMBUS 0x0752 | 1249 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP78S_SMBUS 0x0752 |
1280 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP77_IDE 0x0759 | 1250 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP77_IDE 0x0759 |
1281 | #define PCI_DEVICE_ID_NVIDIA_NVENET_32 0x0760 | ||
1282 | #define PCI_DEVICE_ID_NVIDIA_NVENET_33 0x0761 | ||
1283 | #define PCI_DEVICE_ID_NVIDIA_NVENET_34 0x0762 | ||
1284 | #define PCI_DEVICE_ID_NVIDIA_NVENET_35 0x0763 | ||
1285 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_SMBUS 0x07D8 | 1251 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_SMBUS 0x07D8 |
1286 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP79_SMBUS 0x0AA2 | 1252 | #define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP79_SMBUS 0x0AA2 |
1287 | #define PCI_DEVICE_ID_NVIDIA_NVENET_36 0x0AB0 | ||
1288 | #define PCI_DEVICE_ID_NVIDIA_NVENET_37 0x0AB1 | ||
1289 | #define PCI_DEVICE_ID_NVIDIA_NVENET_38 0x0AB2 | ||
1290 | #define PCI_DEVICE_ID_NVIDIA_NVENET_39 0x0AB3 | ||
1291 | 1253 | ||
1292 | #define PCI_VENDOR_ID_IMS 0x10e0 | 1254 | #define PCI_VENDOR_ID_IMS 0x10e0 |
1293 | #define PCI_DEVICE_ID_IMS_TT128 0x9128 | 1255 | #define PCI_DEVICE_ID_IMS_TT128 0x9128 |
@@ -1926,6 +1888,8 @@ | |||
1926 | #define PCI_SUBDEVICE_ID_CCD_SWYX4S 0xB540 | 1888 | #define PCI_SUBDEVICE_ID_CCD_SWYX4S 0xB540 |
1927 | #define PCI_SUBDEVICE_ID_CCD_JH4S20 0xB550 | 1889 | #define PCI_SUBDEVICE_ID_CCD_JH4S20 0xB550 |
1928 | #define PCI_SUBDEVICE_ID_CCD_IOB8ST_1 0xB552 | 1890 | #define PCI_SUBDEVICE_ID_CCD_IOB8ST_1 0xB552 |
1891 | #define PCI_SUBDEVICE_ID_CCD_JHSE1 0xB553 | ||
1892 | #define PCI_SUBDEVICE_ID_CCD_JH8S 0xB55B | ||
1929 | #define PCI_SUBDEVICE_ID_CCD_BN4S 0xB560 | 1893 | #define PCI_SUBDEVICE_ID_CCD_BN4S 0xB560 |
1930 | #define PCI_SUBDEVICE_ID_CCD_BN8S 0xB562 | 1894 | #define PCI_SUBDEVICE_ID_CCD_BN8S 0xB562 |
1931 | #define PCI_SUBDEVICE_ID_CCD_BNE1 0xB563 | 1895 | #define PCI_SUBDEVICE_ID_CCD_BNE1 0xB563 |
@@ -2332,6 +2296,8 @@ | |||
2332 | 2296 | ||
2333 | #define PCI_VENDOR_ID_QMI 0x1a32 | 2297 | #define PCI_VENDOR_ID_QMI 0x1a32 |
2334 | 2298 | ||
2299 | #define PCI_VENDOR_ID_AZWAVE 0x1a3b | ||
2300 | |||
2335 | #define PCI_VENDOR_ID_TEKRAM 0x1de1 | 2301 | #define PCI_VENDOR_ID_TEKRAM 0x1de1 |
2336 | #define PCI_DEVICE_ID_TEKRAM_DC290 0xdc29 | 2302 | #define PCI_DEVICE_ID_TEKRAM_DC290 0xdc29 |
2337 | 2303 | ||
diff --git a/include/linux/phy.h b/include/linux/phy.h index 97e40cb6b588..b1368b8f6572 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h | |||
@@ -79,7 +79,7 @@ typedef enum { | |||
79 | * Need to be a little smaller than phydev->dev.bus_id to leave room | 79 | * Need to be a little smaller than phydev->dev.bus_id to leave room |
80 | * for the ":%02x" | 80 | * for the ":%02x" |
81 | */ | 81 | */ |
82 | #define MII_BUS_ID_SIZE (BUS_ID_SIZE - 3) | 82 | #define MII_BUS_ID_SIZE (20 - 3) |
83 | 83 | ||
84 | /* | 84 | /* |
85 | * The Bus class for PHYs. Devices which provide access to | 85 | * The Bus class for PHYs. Devices which provide access to |
@@ -407,7 +407,7 @@ struct phy_driver { | |||
407 | /* A Structure for boards to register fixups with the PHY Lib */ | 407 | /* A Structure for boards to register fixups with the PHY Lib */ |
408 | struct phy_fixup { | 408 | struct phy_fixup { |
409 | struct list_head list; | 409 | struct list_head list; |
410 | char bus_id[BUS_ID_SIZE]; | 410 | char bus_id[20]; |
411 | u32 phy_uid; | 411 | u32 phy_uid; |
412 | u32 phy_uid_mask; | 412 | u32 phy_uid_mask; |
413 | int (*run)(struct phy_device *phydev); | 413 | int (*run)(struct phy_device *phydev); |
@@ -444,10 +444,16 @@ static inline int phy_write(struct phy_device *phydev, u16 regnum, u16 val) | |||
444 | 444 | ||
445 | int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id); | 445 | int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id); |
446 | struct phy_device* get_phy_device(struct mii_bus *bus, int addr); | 446 | struct phy_device* get_phy_device(struct mii_bus *bus, int addr); |
447 | int phy_device_register(struct phy_device *phy); | ||
447 | int phy_clear_interrupt(struct phy_device *phydev); | 448 | int phy_clear_interrupt(struct phy_device *phydev); |
448 | int phy_config_interrupt(struct phy_device *phydev, u32 interrupts); | 449 | int phy_config_interrupt(struct phy_device *phydev, u32 interrupts); |
450 | int phy_attach_direct(struct net_device *dev, struct phy_device *phydev, | ||
451 | u32 flags, phy_interface_t interface); | ||
449 | struct phy_device * phy_attach(struct net_device *dev, | 452 | struct phy_device * phy_attach(struct net_device *dev, |
450 | const char *bus_id, u32 flags, phy_interface_t interface); | 453 | const char *bus_id, u32 flags, phy_interface_t interface); |
454 | int phy_connect_direct(struct net_device *dev, struct phy_device *phydev, | ||
455 | void (*handler)(struct net_device *), u32 flags, | ||
456 | phy_interface_t interface); | ||
451 | struct phy_device * phy_connect(struct net_device *dev, const char *bus_id, | 457 | struct phy_device * phy_connect(struct net_device *dev, const char *bus_id, |
452 | void (*handler)(struct net_device *), u32 flags, | 458 | void (*handler)(struct net_device *), u32 flags, |
453 | phy_interface_t interface); | 459 | phy_interface_t interface); |
diff --git a/include/linux/rfkill.h b/include/linux/rfkill.h index 164332cbb77c..16e39c7a67fc 100644 --- a/include/linux/rfkill.h +++ b/include/linux/rfkill.h | |||
@@ -4,6 +4,7 @@ | |||
4 | /* | 4 | /* |
5 | * Copyright (C) 2006 - 2007 Ivo van Doorn | 5 | * Copyright (C) 2006 - 2007 Ivo van Doorn |
6 | * Copyright (C) 2007 Dmitry Torokhov | 6 | * Copyright (C) 2007 Dmitry Torokhov |
7 | * Copyright 2009 Johannes Berg <johannes@sipsolutions.net> | ||
7 | * | 8 | * |
8 | * This program is free software; you can redistribute it and/or modify | 9 | * This program is free software; you can redistribute it and/or modify |
9 | * it under the terms of the GNU General Public License as published by | 10 | * it under the terms of the GNU General Public License as published by |
@@ -22,131 +23,331 @@ | |||
22 | */ | 23 | */ |
23 | 24 | ||
24 | #include <linux/types.h> | 25 | #include <linux/types.h> |
25 | #include <linux/kernel.h> | 26 | |
26 | #include <linux/list.h> | 27 | /* define userspace visible states */ |
27 | #include <linux/mutex.h> | 28 | #define RFKILL_STATE_SOFT_BLOCKED 0 |
28 | #include <linux/device.h> | 29 | #define RFKILL_STATE_UNBLOCKED 1 |
29 | #include <linux/leds.h> | 30 | #define RFKILL_STATE_HARD_BLOCKED 2 |
30 | 31 | ||
31 | /** | 32 | /** |
32 | * enum rfkill_type - type of rfkill switch. | 33 | * enum rfkill_type - type of rfkill switch. |
33 | * RFKILL_TYPE_WLAN: switch is on a 802.11 wireless network device. | 34 | * |
34 | * RFKILL_TYPE_BLUETOOTH: switch is on a bluetooth device. | 35 | * @RFKILL_TYPE_ALL: toggles all switches (userspace only) |
35 | * RFKILL_TYPE_UWB: switch is on a ultra wideband device. | 36 | * @RFKILL_TYPE_WLAN: switch is on a 802.11 wireless network device. |
36 | * RFKILL_TYPE_WIMAX: switch is on a WiMAX device. | 37 | * @RFKILL_TYPE_BLUETOOTH: switch is on a bluetooth device. |
37 | * RFKILL_TYPE_WWAN: switch is on a wireless WAN device. | 38 | * @RFKILL_TYPE_UWB: switch is on a ultra wideband device. |
39 | * @RFKILL_TYPE_WIMAX: switch is on a WiMAX device. | ||
40 | * @RFKILL_TYPE_WWAN: switch is on a wireless WAN device. | ||
41 | * @NUM_RFKILL_TYPES: number of defined rfkill types | ||
38 | */ | 42 | */ |
39 | enum rfkill_type { | 43 | enum rfkill_type { |
40 | RFKILL_TYPE_WLAN , | 44 | RFKILL_TYPE_ALL = 0, |
45 | RFKILL_TYPE_WLAN, | ||
41 | RFKILL_TYPE_BLUETOOTH, | 46 | RFKILL_TYPE_BLUETOOTH, |
42 | RFKILL_TYPE_UWB, | 47 | RFKILL_TYPE_UWB, |
43 | RFKILL_TYPE_WIMAX, | 48 | RFKILL_TYPE_WIMAX, |
44 | RFKILL_TYPE_WWAN, | 49 | RFKILL_TYPE_WWAN, |
45 | RFKILL_TYPE_MAX, | 50 | NUM_RFKILL_TYPES, |
46 | }; | 51 | }; |
47 | 52 | ||
48 | enum rfkill_state { | 53 | /** |
49 | RFKILL_STATE_SOFT_BLOCKED = 0, /* Radio output blocked */ | 54 | * enum rfkill_operation - operation types |
50 | RFKILL_STATE_UNBLOCKED = 1, /* Radio output allowed */ | 55 | * @RFKILL_OP_ADD: a device was added |
51 | RFKILL_STATE_HARD_BLOCKED = 2, /* Output blocked, non-overrideable */ | 56 | * @RFKILL_OP_DEL: a device was removed |
52 | RFKILL_STATE_MAX, /* marker for last valid state */ | 57 | * @RFKILL_OP_CHANGE: a device's state changed -- userspace changes one device |
58 | * @RFKILL_OP_CHANGE_ALL: userspace changes all devices (of a type, or all) | ||
59 | */ | ||
60 | enum rfkill_operation { | ||
61 | RFKILL_OP_ADD = 0, | ||
62 | RFKILL_OP_DEL, | ||
63 | RFKILL_OP_CHANGE, | ||
64 | RFKILL_OP_CHANGE_ALL, | ||
53 | }; | 65 | }; |
54 | 66 | ||
55 | /* | 67 | /** |
56 | * These are DEPRECATED, drivers using them should be verified to | 68 | * struct rfkill_event - events for userspace on /dev/rfkill |
57 | * comply with the rfkill usage guidelines in Documentation/rfkill.txt | 69 | * @idx: index of dev rfkill |
58 | * and then converted to use the new names for rfkill_state | 70 | * @type: type of the rfkill struct |
59 | */ | 71 | * @op: operation code |
60 | #define RFKILL_STATE_OFF RFKILL_STATE_SOFT_BLOCKED | 72 | * @hard: hard state (0/1) |
61 | #define RFKILL_STATE_ON RFKILL_STATE_UNBLOCKED | 73 | * @soft: soft state (0/1) |
62 | 74 | * | |
63 | /** | 75 | * Structure used for userspace communication on /dev/rfkill, |
64 | * struct rfkill - rfkill control structure. | 76 | * used for events from the kernel and control to the kernel. |
65 | * @name: Name of the switch. | 77 | */ |
66 | * @type: Radio type which the button controls, the value stored | 78 | struct rfkill_event { |
67 | * here should be a value from enum rfkill_type. | 79 | __u32 idx; |
68 | * @state: State of the switch, "UNBLOCKED" means radio can operate. | 80 | __u8 type; |
69 | * @user_claim_unsupported: Whether the hardware supports exclusive | 81 | __u8 op; |
70 | * RF-kill control by userspace. Set this before registering. | 82 | __u8 soft, hard; |
71 | * @user_claim: Set when the switch is controlled exlusively by userspace. | 83 | } __packed; |
72 | * @mutex: Guards switch state transitions. It serializes callbacks | ||
73 | * and also protects the state. | ||
74 | * @data: Pointer to the RF button drivers private data which will be | ||
75 | * passed along when toggling radio state. | ||
76 | * @toggle_radio(): Mandatory handler to control state of the radio. | ||
77 | * only RFKILL_STATE_SOFT_BLOCKED and RFKILL_STATE_UNBLOCKED are | ||
78 | * valid parameters. | ||
79 | * @get_state(): handler to read current radio state from hardware, | ||
80 | * may be called from atomic context, should return 0 on success. | ||
81 | * Either this handler OR judicious use of rfkill_force_state() is | ||
82 | * MANDATORY for any driver capable of RFKILL_STATE_HARD_BLOCKED. | ||
83 | * @led_trigger: A LED trigger for this button's LED. | ||
84 | * @dev: Device structure integrating the switch into device tree. | ||
85 | * @node: Used to place switch into list of all switches known to the | ||
86 | * the system. | ||
87 | * | ||
88 | * This structure represents a RF switch located on a network device. | ||
89 | */ | ||
90 | struct rfkill { | ||
91 | const char *name; | ||
92 | enum rfkill_type type; | ||
93 | |||
94 | bool user_claim_unsupported; | ||
95 | bool user_claim; | ||
96 | |||
97 | /* the mutex serializes callbacks and also protects | ||
98 | * the state */ | ||
99 | struct mutex mutex; | ||
100 | enum rfkill_state state; | ||
101 | void *data; | ||
102 | int (*toggle_radio)(void *data, enum rfkill_state state); | ||
103 | int (*get_state)(void *data, enum rfkill_state *state); | ||
104 | 84 | ||
105 | #ifdef CONFIG_RFKILL_LEDS | 85 | /* ioctl for turning off rfkill-input (if present) */ |
106 | struct led_trigger led_trigger; | 86 | #define RFKILL_IOC_MAGIC 'R' |
107 | #endif | 87 | #define RFKILL_IOC_NOINPUT 1 |
88 | #define RFKILL_IOCTL_NOINPUT _IO(RFKILL_IOC_MAGIC, RFKILL_IOC_NOINPUT) | ||
89 | |||
90 | /* and that's all userspace gets */ | ||
91 | #ifdef __KERNEL__ | ||
92 | /* don't allow anyone to use these in the kernel */ | ||
93 | enum rfkill_user_states { | ||
94 | RFKILL_USER_STATE_SOFT_BLOCKED = RFKILL_STATE_SOFT_BLOCKED, | ||
95 | RFKILL_USER_STATE_UNBLOCKED = RFKILL_STATE_UNBLOCKED, | ||
96 | RFKILL_USER_STATE_HARD_BLOCKED = RFKILL_STATE_HARD_BLOCKED, | ||
97 | }; | ||
98 | #undef RFKILL_STATE_SOFT_BLOCKED | ||
99 | #undef RFKILL_STATE_UNBLOCKED | ||
100 | #undef RFKILL_STATE_HARD_BLOCKED | ||
101 | |||
102 | #include <linux/types.h> | ||
103 | #include <linux/kernel.h> | ||
104 | #include <linux/list.h> | ||
105 | #include <linux/mutex.h> | ||
106 | #include <linux/device.h> | ||
107 | #include <linux/leds.h> | ||
108 | #include <linux/err.h> | ||
109 | |||
110 | /* this is opaque */ | ||
111 | struct rfkill; | ||
108 | 112 | ||
109 | struct device dev; | 113 | /** |
110 | struct list_head node; | 114 | * struct rfkill_ops - rfkill driver methods |
111 | enum rfkill_state state_for_resume; | 115 | * |
116 | * @poll: poll the rfkill block state(s) -- only assign this method | ||
117 | * when you need polling. When called, simply call one of the | ||
118 | * rfkill_set{,_hw,_sw}_state family of functions. If the hw | ||
119 | * is getting unblocked you need to take into account the return | ||
120 | * value of those functions to make sure the software block is | ||
121 | * properly used. | ||
122 | * @query: query the rfkill block state(s) and call exactly one of the | ||
123 | * rfkill_set{,_hw,_sw}_state family of functions. Assign this | ||
124 | * method if input events can cause hardware state changes to make | ||
125 | * the rfkill core query your driver before setting a requested | ||
126 | * block. | ||
127 | * @set_block: turn the transmitter on (blocked == false) or off | ||
128 | * (blocked == true) -- ignore and return 0 when hard blocked. | ||
129 | * This callback must be assigned. | ||
130 | */ | ||
131 | struct rfkill_ops { | ||
132 | void (*poll)(struct rfkill *rfkill, void *data); | ||
133 | void (*query)(struct rfkill *rfkill, void *data); | ||
134 | int (*set_block)(void *data, bool blocked); | ||
112 | }; | 135 | }; |
113 | #define to_rfkill(d) container_of(d, struct rfkill, dev) | ||
114 | 136 | ||
115 | struct rfkill * __must_check rfkill_allocate(struct device *parent, | 137 | #if defined(CONFIG_RFKILL) || defined(CONFIG_RFKILL_MODULE) |
116 | enum rfkill_type type); | 138 | /** |
117 | void rfkill_free(struct rfkill *rfkill); | 139 | * rfkill_alloc - allocate rfkill structure |
140 | * @name: name of the struct -- the string is not copied internally | ||
141 | * @parent: device that has rf switch on it | ||
142 | * @type: type of the switch (RFKILL_TYPE_*) | ||
143 | * @ops: rfkill methods | ||
144 | * @ops_data: data passed to each method | ||
145 | * | ||
146 | * This function should be called by the transmitter driver to allocate an | ||
147 | * rfkill structure. Returns %NULL on failure. | ||
148 | */ | ||
149 | struct rfkill * __must_check rfkill_alloc(const char *name, | ||
150 | struct device *parent, | ||
151 | const enum rfkill_type type, | ||
152 | const struct rfkill_ops *ops, | ||
153 | void *ops_data); | ||
154 | |||
155 | /** | ||
156 | * rfkill_register - Register a rfkill structure. | ||
157 | * @rfkill: rfkill structure to be registered | ||
158 | * | ||
159 | * This function should be called by the transmitter driver to register | ||
160 | * the rfkill structure. Before calling this function the driver needs | ||
161 | * to be ready to service method calls from rfkill. | ||
162 | * | ||
163 | * If the software blocked state is not set before registration, | ||
164 | * set_block will be called to initialize it to a default value. | ||
165 | * | ||
166 | * If the hardware blocked state is not set before registration, | ||
167 | * it is assumed to be unblocked. | ||
168 | */ | ||
118 | int __must_check rfkill_register(struct rfkill *rfkill); | 169 | int __must_check rfkill_register(struct rfkill *rfkill); |
170 | |||
171 | /** | ||
172 | * rfkill_pause_polling(struct rfkill *rfkill) | ||
173 | * | ||
174 | * Pause polling -- say transmitter is off for other reasons. | ||
175 | * NOTE: not necessary for suspend/resume -- in that case the | ||
176 | * core stops polling anyway | ||
177 | */ | ||
178 | void rfkill_pause_polling(struct rfkill *rfkill); | ||
179 | |||
180 | /** | ||
181 | * rfkill_resume_polling(struct rfkill *rfkill) | ||
182 | * | ||
183 | * Pause polling -- say transmitter is off for other reasons. | ||
184 | * NOTE: not necessary for suspend/resume -- in that case the | ||
185 | * core stops polling anyway | ||
186 | */ | ||
187 | void rfkill_resume_polling(struct rfkill *rfkill); | ||
188 | |||
189 | |||
190 | /** | ||
191 | * rfkill_unregister - Unregister a rfkill structure. | ||
192 | * @rfkill: rfkill structure to be unregistered | ||
193 | * | ||
194 | * This function should be called by the network driver during device | ||
195 | * teardown to destroy rfkill structure. Until it returns, the driver | ||
196 | * needs to be able to service method calls. | ||
197 | */ | ||
119 | void rfkill_unregister(struct rfkill *rfkill); | 198 | void rfkill_unregister(struct rfkill *rfkill); |
120 | 199 | ||
121 | int rfkill_force_state(struct rfkill *rfkill, enum rfkill_state state); | 200 | /** |
122 | int rfkill_set_default(enum rfkill_type type, enum rfkill_state state); | 201 | * rfkill_destroy - free rfkill structure |
202 | * @rfkill: rfkill structure to be destroyed | ||
203 | * | ||
204 | * Destroys the rfkill structure. | ||
205 | */ | ||
206 | void rfkill_destroy(struct rfkill *rfkill); | ||
207 | |||
208 | /** | ||
209 | * rfkill_set_hw_state - Set the internal rfkill hardware block state | ||
210 | * @rfkill: pointer to the rfkill class to modify. | ||
211 | * @state: the current hardware block state to set | ||
212 | * | ||
213 | * rfkill drivers that get events when the hard-blocked state changes | ||
214 | * use this function to notify the rfkill core (and through that also | ||
215 | * userspace) of the current state. They should also use this after | ||
216 | * resume if the state could have changed. | ||
217 | * | ||
218 | * You need not (but may) call this function if poll_state is assigned. | ||
219 | * | ||
220 | * This function can be called in any context, even from within rfkill | ||
221 | * callbacks. | ||
222 | * | ||
223 | * The function returns the combined block state (true if transmitter | ||
224 | * should be blocked) so that drivers need not keep track of the soft | ||
225 | * block state -- which they might not be able to. | ||
226 | */ | ||
227 | bool __must_check rfkill_set_hw_state(struct rfkill *rfkill, bool blocked); | ||
228 | |||
229 | /** | ||
230 | * rfkill_set_sw_state - Set the internal rfkill software block state | ||
231 | * @rfkill: pointer to the rfkill class to modify. | ||
232 | * @state: the current software block state to set | ||
233 | * | ||
234 | * rfkill drivers that get events when the soft-blocked state changes | ||
235 | * (yes, some platforms directly act on input but allow changing again) | ||
236 | * use this function to notify the rfkill core (and through that also | ||
237 | * userspace) of the current state. It is not necessary to notify on | ||
238 | * resume; since hibernation can always change the soft-blocked state, | ||
239 | * the rfkill core will unconditionally restore the previous state. | ||
240 | * | ||
241 | * This function can be called in any context, even from within rfkill | ||
242 | * callbacks. | ||
243 | * | ||
244 | * The function returns the combined block state (true if transmitter | ||
245 | * should be blocked). | ||
246 | */ | ||
247 | bool rfkill_set_sw_state(struct rfkill *rfkill, bool blocked); | ||
248 | |||
249 | /** | ||
250 | * rfkill_set_states - Set the internal rfkill block states | ||
251 | * @rfkill: pointer to the rfkill class to modify. | ||
252 | * @sw: the current software block state to set | ||
253 | * @hw: the current hardware block state to set | ||
254 | * | ||
255 | * This function can be called in any context, even from within rfkill | ||
256 | * callbacks. | ||
257 | */ | ||
258 | void rfkill_set_states(struct rfkill *rfkill, bool sw, bool hw); | ||
123 | 259 | ||
124 | /** | 260 | /** |
125 | * rfkill_state_complement - return complementar state | 261 | * rfkill_blocked - query rfkill block |
126 | * @state: state to return the complement of | ||
127 | * | 262 | * |
128 | * Returns RFKILL_STATE_SOFT_BLOCKED if @state is RFKILL_STATE_UNBLOCKED, | 263 | * @rfkill: rfkill struct to query |
129 | * returns RFKILL_STATE_UNBLOCKED otherwise. | ||
130 | */ | 264 | */ |
131 | static inline enum rfkill_state rfkill_state_complement(enum rfkill_state state) | 265 | bool rfkill_blocked(struct rfkill *rfkill); |
266 | #else /* !RFKILL */ | ||
267 | static inline struct rfkill * __must_check | ||
268 | rfkill_alloc(const char *name, | ||
269 | struct device *parent, | ||
270 | const enum rfkill_type type, | ||
271 | const struct rfkill_ops *ops, | ||
272 | void *ops_data) | ||
273 | { | ||
274 | return ERR_PTR(-ENODEV); | ||
275 | } | ||
276 | |||
277 | static inline int __must_check rfkill_register(struct rfkill *rfkill) | ||
278 | { | ||
279 | if (rfkill == ERR_PTR(-ENODEV)) | ||
280 | return 0; | ||
281 | return -EINVAL; | ||
282 | } | ||
283 | |||
284 | static inline void rfkill_pause_polling(struct rfkill *rfkill) | ||
285 | { | ||
286 | } | ||
287 | |||
288 | static inline void rfkill_resume_polling(struct rfkill *rfkill) | ||
289 | { | ||
290 | } | ||
291 | |||
292 | static inline void rfkill_unregister(struct rfkill *rfkill) | ||
293 | { | ||
294 | } | ||
295 | |||
296 | static inline void rfkill_destroy(struct rfkill *rfkill) | ||
297 | { | ||
298 | } | ||
299 | |||
300 | static inline bool rfkill_set_hw_state(struct rfkill *rfkill, bool blocked) | ||
301 | { | ||
302 | return blocked; | ||
303 | } | ||
304 | |||
305 | static inline bool rfkill_set_sw_state(struct rfkill *rfkill, bool blocked) | ||
132 | { | 306 | { |
133 | return (state == RFKILL_STATE_UNBLOCKED) ? | 307 | return blocked; |
134 | RFKILL_STATE_SOFT_BLOCKED : RFKILL_STATE_UNBLOCKED; | ||
135 | } | 308 | } |
136 | 309 | ||
310 | static inline void rfkill_set_states(struct rfkill *rfkill, bool sw, bool hw) | ||
311 | { | ||
312 | } | ||
313 | |||
314 | static inline bool rfkill_blocked(struct rfkill *rfkill) | ||
315 | { | ||
316 | return false; | ||
317 | } | ||
318 | #endif /* RFKILL || RFKILL_MODULE */ | ||
319 | |||
320 | |||
321 | #ifdef CONFIG_RFKILL_LEDS | ||
137 | /** | 322 | /** |
138 | * rfkill_get_led_name - Get the LED trigger name for the button's LED. | 323 | * rfkill_get_led_trigger_name - Get the LED trigger name for the button's LED. |
139 | * This function might return a NULL pointer if registering of the | 324 | * This function might return a NULL pointer if registering of the |
140 | * LED trigger failed. | 325 | * LED trigger failed. Use this as "default_trigger" for the LED. |
141 | * Use this as "default_trigger" for the LED. | ||
142 | */ | 326 | */ |
143 | static inline char *rfkill_get_led_name(struct rfkill *rfkill) | 327 | const char *rfkill_get_led_trigger_name(struct rfkill *rfkill); |
144 | { | 328 | |
145 | #ifdef CONFIG_RFKILL_LEDS | 329 | /** |
146 | return (char *)(rfkill->led_trigger.name); | 330 | * rfkill_set_led_trigger_name -- set the LED trigger name |
331 | * @rfkill: rfkill struct | ||
332 | * @name: LED trigger name | ||
333 | * | ||
334 | * This function sets the LED trigger name of the radio LED | ||
335 | * trigger that rfkill creates. It is optional, but if called | ||
336 | * must be called before rfkill_register() to be effective. | ||
337 | */ | ||
338 | void rfkill_set_led_trigger_name(struct rfkill *rfkill, const char *name); | ||
147 | #else | 339 | #else |
340 | static inline const char *rfkill_get_led_trigger_name(struct rfkill *rfkill) | ||
341 | { | ||
148 | return NULL; | 342 | return NULL; |
149 | #endif | ||
150 | } | 343 | } |
151 | 344 | ||
345 | static inline void | ||
346 | rfkill_set_led_trigger_name(struct rfkill *rfkill, const char *name) | ||
347 | { | ||
348 | } | ||
349 | #endif | ||
350 | |||
351 | #endif /* __KERNEL__ */ | ||
352 | |||
152 | #endif /* RFKILL_H */ | 353 | #endif /* RFKILL_H */ |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 4896fdfec913..fea9d188dbff 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -2212,6 +2212,12 @@ static inline int test_tsk_need_resched(struct task_struct *tsk) | |||
2212 | return unlikely(test_tsk_thread_flag(tsk,TIF_NEED_RESCHED)); | 2212 | return unlikely(test_tsk_thread_flag(tsk,TIF_NEED_RESCHED)); |
2213 | } | 2213 | } |
2214 | 2214 | ||
2215 | static inline int restart_syscall(void) | ||
2216 | { | ||
2217 | set_tsk_thread_flag(current, TIF_SIGPENDING); | ||
2218 | return -ERESTARTNOINTR; | ||
2219 | } | ||
2220 | |||
2215 | static inline int signal_pending(struct task_struct *p) | 2221 | static inline int signal_pending(struct task_struct *p) |
2216 | { | 2222 | { |
2217 | return unlikely(test_tsk_thread_flag(p,TIF_SIGPENDING)); | 2223 | return unlikely(test_tsk_thread_flag(p,TIF_SIGPENDING)); |
diff --git a/include/linux/sctp.h b/include/linux/sctp.h index c2731bfe04d8..b464b9d3d242 100644 --- a/include/linux/sctp.h +++ b/include/linux/sctp.h | |||
@@ -487,17 +487,17 @@ typedef enum { | |||
487 | * | 487 | * |
488 | * Value Cause Code | 488 | * Value Cause Code |
489 | * --------- ---------------- | 489 | * --------- ---------------- |
490 | * 0x0100 Request to Delete Last Remaining IP Address. | 490 | * 0x00A0 Request to Delete Last Remaining IP Address. |
491 | * 0x0101 Operation Refused Due to Resource Shortage. | 491 | * 0x00A1 Operation Refused Due to Resource Shortage. |
492 | * 0x0102 Request to Delete Source IP Address. | 492 | * 0x00A2 Request to Delete Source IP Address. |
493 | * 0x0103 Association Aborted due to illegal ASCONF-ACK | 493 | * 0x00A3 Association Aborted due to illegal ASCONF-ACK |
494 | * 0x0104 Request refused - no authorization. | 494 | * 0x00A4 Request refused - no authorization. |
495 | */ | 495 | */ |
496 | SCTP_ERROR_DEL_LAST_IP = cpu_to_be16(0x0100), | 496 | SCTP_ERROR_DEL_LAST_IP = cpu_to_be16(0x00A0), |
497 | SCTP_ERROR_RSRC_LOW = cpu_to_be16(0x0101), | 497 | SCTP_ERROR_RSRC_LOW = cpu_to_be16(0x00A1), |
498 | SCTP_ERROR_DEL_SRC_IP = cpu_to_be16(0x0102), | 498 | SCTP_ERROR_DEL_SRC_IP = cpu_to_be16(0x00A2), |
499 | SCTP_ERROR_ASCONF_ACK = cpu_to_be16(0x0103), | 499 | SCTP_ERROR_ASCONF_ACK = cpu_to_be16(0x00A3), |
500 | SCTP_ERROR_REQ_REFUSED = cpu_to_be16(0x0104), | 500 | SCTP_ERROR_REQ_REFUSED = cpu_to_be16(0x00A4), |
501 | 501 | ||
502 | /* AUTH Section 4. New Error Cause | 502 | /* AUTH Section 4. New Error Cause |
503 | * | 503 | * |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 5fd389162f01..fa51293f2708 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -189,20 +189,23 @@ struct skb_shared_info { | |||
189 | atomic_t dataref; | 189 | atomic_t dataref; |
190 | unsigned short nr_frags; | 190 | unsigned short nr_frags; |
191 | unsigned short gso_size; | 191 | unsigned short gso_size; |
192 | #ifdef CONFIG_HAS_DMA | ||
193 | dma_addr_t dma_head; | ||
194 | #endif | ||
192 | /* Warning: this field is not always filled in (UFO)! */ | 195 | /* Warning: this field is not always filled in (UFO)! */ |
193 | unsigned short gso_segs; | 196 | unsigned short gso_segs; |
194 | unsigned short gso_type; | 197 | unsigned short gso_type; |
195 | __be32 ip6_frag_id; | 198 | __be32 ip6_frag_id; |
196 | union skb_shared_tx tx_flags; | 199 | union skb_shared_tx tx_flags; |
197 | #ifdef CONFIG_HAS_DMA | ||
198 | unsigned int num_dma_maps; | ||
199 | #endif | ||
200 | struct sk_buff *frag_list; | 200 | struct sk_buff *frag_list; |
201 | struct skb_shared_hwtstamps hwtstamps; | 201 | struct skb_shared_hwtstamps hwtstamps; |
202 | skb_frag_t frags[MAX_SKB_FRAGS]; | 202 | skb_frag_t frags[MAX_SKB_FRAGS]; |
203 | #ifdef CONFIG_HAS_DMA | 203 | #ifdef CONFIG_HAS_DMA |
204 | dma_addr_t dma_maps[MAX_SKB_FRAGS + 1]; | 204 | dma_addr_t dma_maps[MAX_SKB_FRAGS]; |
205 | #endif | 205 | #endif |
206 | /* Intermediate layers must ensure that destructor_arg | ||
207 | * remains valid until skb destructor */ | ||
208 | void * destructor_arg; | ||
206 | }; | 209 | }; |
207 | 210 | ||
208 | /* We divide dataref into two halves. The higher 16 bits hold references | 211 | /* We divide dataref into two halves. The higher 16 bits hold references |
@@ -301,9 +304,6 @@ typedef unsigned char *sk_buff_data_t; | |||
301 | * @tc_verd: traffic control verdict | 304 | * @tc_verd: traffic control verdict |
302 | * @ndisc_nodetype: router type (from link layer) | 305 | * @ndisc_nodetype: router type (from link layer) |
303 | * @do_not_encrypt: set to prevent encryption of this frame | 306 | * @do_not_encrypt: set to prevent encryption of this frame |
304 | * @requeue: set to indicate that the wireless core should attempt | ||
305 | * a software retry on this frame if we failed to | ||
306 | * receive an ACK for it | ||
307 | * @dma_cookie: a cookie to one of several possible DMA operations | 307 | * @dma_cookie: a cookie to one of several possible DMA operations |
308 | * done by skb DMA functions | 308 | * done by skb DMA functions |
309 | * @secmark: security marking | 309 | * @secmark: security marking |
@@ -319,10 +319,7 @@ struct sk_buff { | |||
319 | ktime_t tstamp; | 319 | ktime_t tstamp; |
320 | struct net_device *dev; | 320 | struct net_device *dev; |
321 | 321 | ||
322 | union { | 322 | unsigned long _skb_dst; |
323 | struct dst_entry *dst; | ||
324 | struct rtable *rtable; | ||
325 | }; | ||
326 | #ifdef CONFIG_XFRM | 323 | #ifdef CONFIG_XFRM |
327 | struct sec_path *sp; | 324 | struct sec_path *sp; |
328 | #endif | 325 | #endif |
@@ -380,7 +377,6 @@ struct sk_buff { | |||
380 | #endif | 377 | #endif |
381 | #if defined(CONFIG_MAC80211) || defined(CONFIG_MAC80211_MODULE) | 378 | #if defined(CONFIG_MAC80211) || defined(CONFIG_MAC80211_MODULE) |
382 | __u8 do_not_encrypt:1; | 379 | __u8 do_not_encrypt:1; |
383 | __u8 requeue:1; | ||
384 | #endif | 380 | #endif |
385 | /* 0/13/14 bit hole */ | 381 | /* 0/13/14 bit hole */ |
386 | 382 | ||
@@ -423,6 +419,21 @@ extern void skb_dma_unmap(struct device *dev, struct sk_buff *skb, | |||
423 | enum dma_data_direction dir); | 419 | enum dma_data_direction dir); |
424 | #endif | 420 | #endif |
425 | 421 | ||
422 | static inline struct dst_entry *skb_dst(const struct sk_buff *skb) | ||
423 | { | ||
424 | return (struct dst_entry *)skb->_skb_dst; | ||
425 | } | ||
426 | |||
427 | static inline void skb_dst_set(struct sk_buff *skb, struct dst_entry *dst) | ||
428 | { | ||
429 | skb->_skb_dst = (unsigned long)dst; | ||
430 | } | ||
431 | |||
432 | static inline struct rtable *skb_rtable(const struct sk_buff *skb) | ||
433 | { | ||
434 | return (struct rtable *)skb_dst(skb); | ||
435 | } | ||
436 | |||
426 | extern void kfree_skb(struct sk_buff *skb); | 437 | extern void kfree_skb(struct sk_buff *skb); |
427 | extern void consume_skb(struct sk_buff *skb); | 438 | extern void consume_skb(struct sk_buff *skb); |
428 | extern void __kfree_skb(struct sk_buff *skb); | 439 | extern void __kfree_skb(struct sk_buff *skb); |
@@ -1062,7 +1073,7 @@ extern void skb_add_rx_frag(struct sk_buff *skb, int i, struct page *page, | |||
1062 | int off, int size); | 1073 | int off, int size); |
1063 | 1074 | ||
1064 | #define SKB_PAGE_ASSERT(skb) BUG_ON(skb_shinfo(skb)->nr_frags) | 1075 | #define SKB_PAGE_ASSERT(skb) BUG_ON(skb_shinfo(skb)->nr_frags) |
1065 | #define SKB_FRAG_ASSERT(skb) BUG_ON(skb_shinfo(skb)->frag_list) | 1076 | #define SKB_FRAG_ASSERT(skb) BUG_ON(skb_has_frags(skb)) |
1066 | #define SKB_LINEAR_ASSERT(skb) BUG_ON(skb_is_nonlinear(skb)) | 1077 | #define SKB_LINEAR_ASSERT(skb) BUG_ON(skb_is_nonlinear(skb)) |
1067 | 1078 | ||
1068 | #ifdef NET_SKBUFF_DATA_USES_OFFSET | 1079 | #ifdef NET_SKBUFF_DATA_USES_OFFSET |
@@ -1701,6 +1712,25 @@ static inline int pskb_trim_rcsum(struct sk_buff *skb, unsigned int len) | |||
1701 | skb = skb->prev) | 1712 | skb = skb->prev) |
1702 | 1713 | ||
1703 | 1714 | ||
1715 | static inline bool skb_has_frags(const struct sk_buff *skb) | ||
1716 | { | ||
1717 | return skb_shinfo(skb)->frag_list != NULL; | ||
1718 | } | ||
1719 | |||
1720 | static inline void skb_frag_list_init(struct sk_buff *skb) | ||
1721 | { | ||
1722 | skb_shinfo(skb)->frag_list = NULL; | ||
1723 | } | ||
1724 | |||
1725 | static inline void skb_frag_add_head(struct sk_buff *skb, struct sk_buff *frag) | ||
1726 | { | ||
1727 | frag->next = skb_shinfo(skb)->frag_list; | ||
1728 | skb_shinfo(skb)->frag_list = frag; | ||
1729 | } | ||
1730 | |||
1731 | #define skb_walk_frags(skb, iter) \ | ||
1732 | for (iter = skb_shinfo(skb)->frag_list; iter; iter = iter->next) | ||
1733 | |||
1704 | extern struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned flags, | 1734 | extern struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned flags, |
1705 | int *peeked, int *err); | 1735 | int *peeked, int *err); |
1706 | extern struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, | 1736 | extern struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, |
@@ -1715,8 +1745,14 @@ extern int skb_copy_and_csum_datagram_iovec(struct sk_buff *skb, | |||
1715 | struct iovec *iov); | 1745 | struct iovec *iov); |
1716 | extern int skb_copy_datagram_from_iovec(struct sk_buff *skb, | 1746 | extern int skb_copy_datagram_from_iovec(struct sk_buff *skb, |
1717 | int offset, | 1747 | int offset, |
1718 | struct iovec *from, | 1748 | const struct iovec *from, |
1749 | int from_offset, | ||
1719 | int len); | 1750 | int len); |
1751 | extern int skb_copy_datagram_const_iovec(const struct sk_buff *from, | ||
1752 | int offset, | ||
1753 | const struct iovec *to, | ||
1754 | int to_offset, | ||
1755 | int size); | ||
1720 | extern void skb_free_datagram(struct sock *sk, struct sk_buff *skb); | 1756 | extern void skb_free_datagram(struct sock *sk, struct sk_buff *skb); |
1721 | extern int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, | 1757 | extern int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, |
1722 | unsigned int flags); | 1758 | unsigned int flags); |
diff --git a/include/linux/smsc911x.h b/include/linux/smsc911x.h index b32725075d71..5241e4fb4eca 100644 --- a/include/linux/smsc911x.h +++ b/include/linux/smsc911x.h | |||
@@ -47,4 +47,14 @@ struct smsc911x_platform_config { | |||
47 | #define SMSC911X_FORCE_EXTERNAL_PHY (BIT(3)) | 47 | #define SMSC911X_FORCE_EXTERNAL_PHY (BIT(3)) |
48 | #define SMSC911X_SAVE_MAC_ADDRESS (BIT(4)) | 48 | #define SMSC911X_SAVE_MAC_ADDRESS (BIT(4)) |
49 | 49 | ||
50 | /* | ||
51 | * SMSC911X_SWAP_FIFO: | ||
52 | * Enables software byte swap for fifo data. Should only be used as a | ||
53 | * "last resort" in the case of big endian mode on boards with incorrectly | ||
54 | * routed data bus to older devices such as LAN9118. Newer devices such as | ||
55 | * LAN9221 can handle this in hardware, there are registers to control | ||
56 | * this swapping but the driver doesn't currently use them. | ||
57 | */ | ||
58 | #define SMSC911X_SWAP_FIFO (BIT(5)) | ||
59 | |||
50 | #endif /* __LINUX_SMSC911X_H__ */ | 60 | #endif /* __LINUX_SMSC911X_H__ */ |
diff --git a/include/linux/snmp.h b/include/linux/snmp.h index aee3f1e1d1ce..0f953fe40413 100644 --- a/include/linux/snmp.h +++ b/include/linux/snmp.h | |||
@@ -18,7 +18,7 @@ | |||
18 | enum | 18 | enum |
19 | { | 19 | { |
20 | IPSTATS_MIB_NUM = 0, | 20 | IPSTATS_MIB_NUM = 0, |
21 | IPSTATS_MIB_INRECEIVES, /* InReceives */ | 21 | IPSTATS_MIB_INPKTS, /* InReceives */ |
22 | IPSTATS_MIB_INHDRERRORS, /* InHdrErrors */ | 22 | IPSTATS_MIB_INHDRERRORS, /* InHdrErrors */ |
23 | IPSTATS_MIB_INTOOBIGERRORS, /* InTooBigErrors */ | 23 | IPSTATS_MIB_INTOOBIGERRORS, /* InTooBigErrors */ |
24 | IPSTATS_MIB_INNOROUTES, /* InNoRoutes */ | 24 | IPSTATS_MIB_INNOROUTES, /* InNoRoutes */ |
@@ -28,7 +28,7 @@ enum | |||
28 | IPSTATS_MIB_INDISCARDS, /* InDiscards */ | 28 | IPSTATS_MIB_INDISCARDS, /* InDiscards */ |
29 | IPSTATS_MIB_INDELIVERS, /* InDelivers */ | 29 | IPSTATS_MIB_INDELIVERS, /* InDelivers */ |
30 | IPSTATS_MIB_OUTFORWDATAGRAMS, /* OutForwDatagrams */ | 30 | IPSTATS_MIB_OUTFORWDATAGRAMS, /* OutForwDatagrams */ |
31 | IPSTATS_MIB_OUTREQUESTS, /* OutRequests */ | 31 | IPSTATS_MIB_OUTPKTS, /* OutRequests */ |
32 | IPSTATS_MIB_OUTDISCARDS, /* OutDiscards */ | 32 | IPSTATS_MIB_OUTDISCARDS, /* OutDiscards */ |
33 | IPSTATS_MIB_OUTNOROUTES, /* OutNoRoutes */ | 33 | IPSTATS_MIB_OUTNOROUTES, /* OutNoRoutes */ |
34 | IPSTATS_MIB_REASMTIMEOUT, /* ReasmTimeout */ | 34 | IPSTATS_MIB_REASMTIMEOUT, /* ReasmTimeout */ |
@@ -42,6 +42,12 @@ enum | |||
42 | IPSTATS_MIB_OUTMCASTPKTS, /* OutMcastPkts */ | 42 | IPSTATS_MIB_OUTMCASTPKTS, /* OutMcastPkts */ |
43 | IPSTATS_MIB_INBCASTPKTS, /* InBcastPkts */ | 43 | IPSTATS_MIB_INBCASTPKTS, /* InBcastPkts */ |
44 | IPSTATS_MIB_OUTBCASTPKTS, /* OutBcastPkts */ | 44 | IPSTATS_MIB_OUTBCASTPKTS, /* OutBcastPkts */ |
45 | IPSTATS_MIB_INOCTETS, /* InOctets */ | ||
46 | IPSTATS_MIB_OUTOCTETS, /* OutOctets */ | ||
47 | IPSTATS_MIB_INMCASTOCTETS, /* InMcastOctets */ | ||
48 | IPSTATS_MIB_OUTMCASTOCTETS, /* OutMcastOctets */ | ||
49 | IPSTATS_MIB_INBCASTOCTETS, /* InBcastOctets */ | ||
50 | IPSTATS_MIB_OUTBCASTOCTETS, /* OutBcastOctets */ | ||
45 | __IPSTATS_MIB_MAX | 51 | __IPSTATS_MIB_MAX |
46 | }; | 52 | }; |
47 | 53 | ||
diff --git a/include/linux/socket.h b/include/linux/socket.h index 421afb4d29b0..3b461dffe244 100644 --- a/include/linux/socket.h +++ b/include/linux/socket.h | |||
@@ -194,7 +194,8 @@ struct ucred { | |||
194 | #define AF_RXRPC 33 /* RxRPC sockets */ | 194 | #define AF_RXRPC 33 /* RxRPC sockets */ |
195 | #define AF_ISDN 34 /* mISDN sockets */ | 195 | #define AF_ISDN 34 /* mISDN sockets */ |
196 | #define AF_PHONET 35 /* Phonet sockets */ | 196 | #define AF_PHONET 35 /* Phonet sockets */ |
197 | #define AF_MAX 36 /* For now.. */ | 197 | #define AF_IEEE802154 36 /* IEEE802154 sockets */ |
198 | #define AF_MAX 37 /* For now.. */ | ||
198 | 199 | ||
199 | /* Protocol families, same as address families. */ | 200 | /* Protocol families, same as address families. */ |
200 | #define PF_UNSPEC AF_UNSPEC | 201 | #define PF_UNSPEC AF_UNSPEC |
@@ -233,6 +234,7 @@ struct ucred { | |||
233 | #define PF_RXRPC AF_RXRPC | 234 | #define PF_RXRPC AF_RXRPC |
234 | #define PF_ISDN AF_ISDN | 235 | #define PF_ISDN AF_ISDN |
235 | #define PF_PHONET AF_PHONET | 236 | #define PF_PHONET AF_PHONET |
237 | #define PF_IEEE802154 AF_IEEE802154 | ||
236 | #define PF_MAX AF_MAX | 238 | #define PF_MAX AF_MAX |
237 | 239 | ||
238 | /* Maximum queue length specifiable by listen. */ | 240 | /* Maximum queue length specifiable by listen. */ |
@@ -303,14 +305,15 @@ struct ucred { | |||
303 | #define SOL_BLUETOOTH 274 | 305 | #define SOL_BLUETOOTH 274 |
304 | #define SOL_PNPIPE 275 | 306 | #define SOL_PNPIPE 275 |
305 | #define SOL_RDS 276 | 307 | #define SOL_RDS 276 |
308 | #define SOL_IUCV 277 | ||
306 | 309 | ||
307 | /* IPX options */ | 310 | /* IPX options */ |
308 | #define IPX_TYPE 1 | 311 | #define IPX_TYPE 1 |
309 | 312 | ||
310 | #ifdef __KERNEL__ | 313 | #ifdef __KERNEL__ |
311 | extern int memcpy_fromiovec(unsigned char *kdata, struct iovec *iov, int len); | 314 | extern int memcpy_fromiovec(unsigned char *kdata, struct iovec *iov, int len); |
312 | extern int memcpy_fromiovecend(unsigned char *kdata, struct iovec *iov, | 315 | extern int memcpy_fromiovecend(unsigned char *kdata, const struct iovec *iov, |
313 | int offset, int len); | 316 | int offset, int len); |
314 | extern int csum_partial_copy_fromiovecend(unsigned char *kdata, | 317 | extern int csum_partial_copy_fromiovecend(unsigned char *kdata, |
315 | struct iovec *iov, | 318 | struct iovec *iov, |
316 | int offset, | 319 | int offset, |
@@ -318,6 +321,8 @@ extern int csum_partial_copy_fromiovecend(unsigned char *kdata, | |||
318 | 321 | ||
319 | extern int verify_iovec(struct msghdr *m, struct iovec *iov, struct sockaddr *address, int mode); | 322 | extern int verify_iovec(struct msghdr *m, struct iovec *iov, struct sockaddr *address, int mode); |
320 | extern int memcpy_toiovec(struct iovec *v, unsigned char *kdata, int len); | 323 | extern int memcpy_toiovec(struct iovec *v, unsigned char *kdata, int len); |
324 | extern int memcpy_toiovecend(const struct iovec *v, unsigned char *kdata, | ||
325 | int offset, int len); | ||
321 | extern int move_addr_to_user(struct sockaddr *kaddr, int klen, void __user *uaddr, int __user *ulen); | 326 | extern int move_addr_to_user(struct sockaddr *kaddr, int klen, void __user *uaddr, int __user *ulen); |
322 | extern int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr *kaddr); | 327 | extern int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr *kaddr); |
323 | extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data); | 328 | extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data); |
diff --git a/include/linux/spi/libertas_spi.h b/include/linux/spi/libertas_spi.h index 79506f5f9e67..1b5d5384fcd3 100644 --- a/include/linux/spi/libertas_spi.h +++ b/include/linux/spi/libertas_spi.h | |||
@@ -22,9 +22,6 @@ struct libertas_spi_platform_data { | |||
22 | * speed, you may want to use 0 here. */ | 22 | * speed, you may want to use 0 here. */ |
23 | u16 use_dummy_writes; | 23 | u16 use_dummy_writes; |
24 | 24 | ||
25 | /* GPIO number to use as chip select */ | ||
26 | u16 gpio_cs; | ||
27 | |||
28 | /* Board specific setup/teardown */ | 25 | /* Board specific setup/teardown */ |
29 | int (*setup)(struct spi_device *spi); | 26 | int (*setup)(struct spi_device *spi); |
30 | int (*teardown)(struct spi_device *spi); | 27 | int (*teardown)(struct spi_device *spi); |
diff --git a/include/linux/spi/wl12xx.h b/include/linux/spi/wl12xx.h new file mode 100644 index 000000000000..11430cab2aad --- /dev/null +++ b/include/linux/spi/wl12xx.h | |||
@@ -0,0 +1,31 @@ | |||
1 | /* | ||
2 | * This file is part of wl12xx | ||
3 | * | ||
4 | * Copyright (C) 2009 Nokia Corporation | ||
5 | * | ||
6 | * Contact: Kalle Valo <kalle.valo@nokia.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License | ||
10 | * version 2 as published by the Free Software Foundation. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, but | ||
13 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
15 | * General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA | ||
20 | * 02110-1301 USA | ||
21 | * | ||
22 | */ | ||
23 | |||
24 | #ifndef _LINUX_SPI_WL12XX_H | ||
25 | #define _LINUX_SPI_WL12XX_H | ||
26 | |||
27 | struct wl12xx_platform_data { | ||
28 | void (*set_power)(bool enable); | ||
29 | }; | ||
30 | |||
31 | #endif | ||
diff --git a/include/linux/tcp.h b/include/linux/tcp.h index 9d5078bd23a3..8afac76cd748 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h | |||
@@ -377,7 +377,7 @@ struct tcp_sock { | |||
377 | unsigned int keepalive_time; /* time before keep alive takes place */ | 377 | unsigned int keepalive_time; /* time before keep alive takes place */ |
378 | unsigned int keepalive_intvl; /* time interval between keep alive probes */ | 378 | unsigned int keepalive_intvl; /* time interval between keep alive probes */ |
379 | 379 | ||
380 | unsigned long last_synq_overflow; | 380 | int linger2; |
381 | 381 | ||
382 | /* Receiver side RTT estimation */ | 382 | /* Receiver side RTT estimation */ |
383 | struct { | 383 | struct { |
@@ -406,8 +406,6 @@ struct tcp_sock { | |||
406 | /* TCP MD5 Signagure Option information */ | 406 | /* TCP MD5 Signagure Option information */ |
407 | struct tcp_md5sig_info *md5sig_info; | 407 | struct tcp_md5sig_info *md5sig_info; |
408 | #endif | 408 | #endif |
409 | |||
410 | int linger2; | ||
411 | }; | 409 | }; |
412 | 410 | ||
413 | static inline struct tcp_sock *tcp_sk(const struct sock *sk) | 411 | static inline struct tcp_sock *tcp_sk(const struct sock *sk) |
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h index 36fabb95c7d3..5d44059f6d63 100644 --- a/include/linux/usb/usbnet.h +++ b/include/linux/usb/usbnet.h | |||
@@ -183,6 +183,7 @@ extern void usbnet_tx_timeout (struct net_device *net); | |||
183 | extern int usbnet_change_mtu (struct net_device *net, int new_mtu); | 183 | extern int usbnet_change_mtu (struct net_device *net, int new_mtu); |
184 | 184 | ||
185 | extern int usbnet_get_endpoints(struct usbnet *, struct usb_interface *); | 185 | extern int usbnet_get_endpoints(struct usbnet *, struct usb_interface *); |
186 | extern int usbnet_get_ethernet_addr(struct usbnet *, int); | ||
186 | extern void usbnet_defer_kevent (struct usbnet *, int); | 187 | extern void usbnet_defer_kevent (struct usbnet *, int); |
187 | extern void usbnet_skb_return (struct usbnet *, struct sk_buff *); | 188 | extern void usbnet_skb_return (struct usbnet *, struct sk_buff *); |
188 | extern void usbnet_unlink_rx_urbs(struct usbnet *); | 189 | extern void usbnet_unlink_rx_urbs(struct usbnet *); |
diff --git a/include/linux/wimax.h b/include/linux/wimax.h index c89de7f4e5b9..4fdcc5635518 100644 --- a/include/linux/wimax.h +++ b/include/linux/wimax.h | |||
@@ -59,7 +59,7 @@ enum { | |||
59 | * M - Major: change if removing or modifying an existing call. | 59 | * M - Major: change if removing or modifying an existing call. |
60 | * m - minor: change when adding a new call | 60 | * m - minor: change when adding a new call |
61 | */ | 61 | */ |
62 | WIMAX_GNL_VERSION = 00, | 62 | WIMAX_GNL_VERSION = 01, |
63 | /* Generic NetLink attributes */ | 63 | /* Generic NetLink attributes */ |
64 | WIMAX_GNL_ATTR_INVALID = 0x00, | 64 | WIMAX_GNL_ATTR_INVALID = 0x00, |
65 | WIMAX_GNL_ATTR_MAX = 10, | 65 | WIMAX_GNL_ATTR_MAX = 10, |
@@ -78,6 +78,7 @@ enum { | |||
78 | WIMAX_GNL_OP_RFKILL, /* Run wimax_rfkill() */ | 78 | WIMAX_GNL_OP_RFKILL, /* Run wimax_rfkill() */ |
79 | WIMAX_GNL_OP_RESET, /* Run wimax_rfkill() */ | 79 | WIMAX_GNL_OP_RESET, /* Run wimax_rfkill() */ |
80 | WIMAX_GNL_RE_STATE_CHANGE, /* Report: status change */ | 80 | WIMAX_GNL_RE_STATE_CHANGE, /* Report: status change */ |
81 | WIMAX_GNL_OP_STATE_GET, /* Request for current state */ | ||
81 | }; | 82 | }; |
82 | 83 | ||
83 | 84 | ||
@@ -113,6 +114,10 @@ enum { | |||
113 | WIMAX_GNL_RESET_IFIDX = 1, | 114 | WIMAX_GNL_RESET_IFIDX = 1, |
114 | }; | 115 | }; |
115 | 116 | ||
117 | /* Atributes for wimax_state_get() */ | ||
118 | enum { | ||
119 | WIMAX_GNL_STGET_IFIDX = 1, | ||
120 | }; | ||
116 | 121 | ||
117 | /* | 122 | /* |
118 | * Attributes for the Report State Change | 123 | * Attributes for the Report State Change |
diff --git a/include/linux/wimax/i2400m.h b/include/linux/wimax/i2400m.h index d5148a7889a6..433693ef2bb0 100644 --- a/include/linux/wimax/i2400m.h +++ b/include/linux/wimax/i2400m.h | |||
@@ -266,7 +266,7 @@ enum i2400m_ro_type { | |||
266 | 266 | ||
267 | /* Misc constants */ | 267 | /* Misc constants */ |
268 | enum { | 268 | enum { |
269 | I2400M_PL_PAD = 16, /* Payload data size alignment */ | 269 | I2400M_PL_ALIGN = 16, /* Payload data size alignment */ |
270 | I2400M_PL_SIZE_MAX = 0x3EFF, | 270 | I2400M_PL_SIZE_MAX = 0x3EFF, |
271 | I2400M_MAX_PLS_IN_MSG = 60, | 271 | I2400M_MAX_PLS_IN_MSG = 60, |
272 | /* protocol barkers: sync sequences; for notifications they | 272 | /* protocol barkers: sync sequences; for notifications they |
diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h index 3ad5390a4dd5..968166a45f86 100644 --- a/include/net/bluetooth/bluetooth.h +++ b/include/net/bluetooth/bluetooth.h | |||
@@ -81,12 +81,6 @@ enum { | |||
81 | BT_CLOSED | 81 | BT_CLOSED |
82 | }; | 82 | }; |
83 | 83 | ||
84 | /* Endianness conversions */ | ||
85 | #define htobs(a) __cpu_to_le16(a) | ||
86 | #define htobl(a) __cpu_to_le32(a) | ||
87 | #define btohs(a) __le16_to_cpu(a) | ||
88 | #define btohl(a) __le32_to_cpu(a) | ||
89 | |||
90 | /* BD Address */ | 84 | /* BD Address */ |
91 | typedef struct { | 85 | typedef struct { |
92 | __u8 b[6]; | 86 | __u8 b[6]; |
@@ -171,15 +165,6 @@ static inline struct sk_buff *bt_skb_send_alloc(struct sock *sk, unsigned long l | |||
171 | return skb; | 165 | return skb; |
172 | } | 166 | } |
173 | 167 | ||
174 | static inline int skb_frags_no(struct sk_buff *skb) | ||
175 | { | ||
176 | register struct sk_buff *frag = skb_shinfo(skb)->frag_list; | ||
177 | register int n = 1; | ||
178 | |||
179 | for (; frag; frag=frag->next, n++); | ||
180 | return n; | ||
181 | } | ||
182 | |||
183 | int bt_err(__u16 code); | 168 | int bt_err(__u16 code); |
184 | 169 | ||
185 | extern int hci_sock_init(void); | 170 | extern int hci_sock_init(void); |
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index 73aead222b32..c4ca4228b083 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h | |||
@@ -137,6 +137,8 @@ struct hci_dev { | |||
137 | struct device *parent; | 137 | struct device *parent; |
138 | struct device dev; | 138 | struct device dev; |
139 | 139 | ||
140 | struct rfkill *rfkill; | ||
141 | |||
140 | struct module *owner; | 142 | struct module *owner; |
141 | 143 | ||
142 | int (*open)(struct hci_dev *hdev); | 144 | int (*open)(struct hci_dev *hdev); |
diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h index f566aa1f0a4c..e919fca1072a 100644 --- a/include/net/bluetooth/l2cap.h +++ b/include/net/bluetooth/l2cap.h | |||
@@ -26,8 +26,13 @@ | |||
26 | #define __L2CAP_H | 26 | #define __L2CAP_H |
27 | 27 | ||
28 | /* L2CAP defaults */ | 28 | /* L2CAP defaults */ |
29 | #define L2CAP_DEFAULT_MTU 672 | 29 | #define L2CAP_DEFAULT_MTU 672 |
30 | #define L2CAP_DEFAULT_FLUSH_TO 0xFFFF | 30 | #define L2CAP_DEFAULT_FLUSH_TO 0xffff |
31 | #define L2CAP_DEFAULT_RX_WINDOW 1 | ||
32 | #define L2CAP_DEFAULT_MAX_RECEIVE 1 | ||
33 | #define L2CAP_DEFAULT_RETRANS_TO 300 /* 300 milliseconds */ | ||
34 | #define L2CAP_DEFAULT_MONITOR_TO 1000 /* 1 second */ | ||
35 | #define L2CAP_DEFAULT_MAX_RX_APDU 0xfff7 | ||
31 | 36 | ||
32 | #define L2CAP_CONN_TIMEOUT (40000) /* 40 seconds */ | 37 | #define L2CAP_CONN_TIMEOUT (40000) /* 40 seconds */ |
33 | #define L2CAP_INFO_TIMEOUT (4000) /* 4 seconds */ | 38 | #define L2CAP_INFO_TIMEOUT (4000) /* 4 seconds */ |
@@ -64,17 +69,29 @@ struct l2cap_conninfo { | |||
64 | #define L2CAP_LM_SECURE 0x0020 | 69 | #define L2CAP_LM_SECURE 0x0020 |
65 | 70 | ||
66 | /* L2CAP command codes */ | 71 | /* L2CAP command codes */ |
67 | #define L2CAP_COMMAND_REJ 0x01 | 72 | #define L2CAP_COMMAND_REJ 0x01 |
68 | #define L2CAP_CONN_REQ 0x02 | 73 | #define L2CAP_CONN_REQ 0x02 |
69 | #define L2CAP_CONN_RSP 0x03 | 74 | #define L2CAP_CONN_RSP 0x03 |
70 | #define L2CAP_CONF_REQ 0x04 | 75 | #define L2CAP_CONF_REQ 0x04 |
71 | #define L2CAP_CONF_RSP 0x05 | 76 | #define L2CAP_CONF_RSP 0x05 |
72 | #define L2CAP_DISCONN_REQ 0x06 | 77 | #define L2CAP_DISCONN_REQ 0x06 |
73 | #define L2CAP_DISCONN_RSP 0x07 | 78 | #define L2CAP_DISCONN_RSP 0x07 |
74 | #define L2CAP_ECHO_REQ 0x08 | 79 | #define L2CAP_ECHO_REQ 0x08 |
75 | #define L2CAP_ECHO_RSP 0x09 | 80 | #define L2CAP_ECHO_RSP 0x09 |
76 | #define L2CAP_INFO_REQ 0x0a | 81 | #define L2CAP_INFO_REQ 0x0a |
77 | #define L2CAP_INFO_RSP 0x0b | 82 | #define L2CAP_INFO_RSP 0x0b |
83 | |||
84 | /* L2CAP feature mask */ | ||
85 | #define L2CAP_FEAT_FLOWCTL 0x00000001 | ||
86 | #define L2CAP_FEAT_RETRANS 0x00000002 | ||
87 | #define L2CAP_FEAT_ERTM 0x00000008 | ||
88 | #define L2CAP_FEAT_STREAMING 0x00000010 | ||
89 | #define L2CAP_FEAT_FCS 0x00000020 | ||
90 | #define L2CAP_FEAT_FIXED_CHAN 0x00000080 | ||
91 | |||
92 | /* L2CAP checksum option */ | ||
93 | #define L2CAP_FCS_NONE 0x00 | ||
94 | #define L2CAP_FCS_CRC16 0x01 | ||
78 | 95 | ||
79 | /* L2CAP structures */ | 96 | /* L2CAP structures */ |
80 | struct l2cap_hdr { | 97 | struct l2cap_hdr { |
@@ -106,17 +123,23 @@ struct l2cap_conn_rsp { | |||
106 | __le16 status; | 123 | __le16 status; |
107 | } __attribute__ ((packed)); | 124 | } __attribute__ ((packed)); |
108 | 125 | ||
126 | /* channel indentifier */ | ||
127 | #define L2CAP_CID_SIGNALING 0x0001 | ||
128 | #define L2CAP_CID_CONN_LESS 0x0002 | ||
129 | #define L2CAP_CID_DYN_START 0x0040 | ||
130 | #define L2CAP_CID_DYN_END 0xffff | ||
131 | |||
109 | /* connect result */ | 132 | /* connect result */ |
110 | #define L2CAP_CR_SUCCESS 0x0000 | 133 | #define L2CAP_CR_SUCCESS 0x0000 |
111 | #define L2CAP_CR_PEND 0x0001 | 134 | #define L2CAP_CR_PEND 0x0001 |
112 | #define L2CAP_CR_BAD_PSM 0x0002 | 135 | #define L2CAP_CR_BAD_PSM 0x0002 |
113 | #define L2CAP_CR_SEC_BLOCK 0x0003 | 136 | #define L2CAP_CR_SEC_BLOCK 0x0003 |
114 | #define L2CAP_CR_NO_MEM 0x0004 | 137 | #define L2CAP_CR_NO_MEM 0x0004 |
115 | 138 | ||
116 | /* connect status */ | 139 | /* connect status */ |
117 | #define L2CAP_CS_NO_INFO 0x0000 | 140 | #define L2CAP_CS_NO_INFO 0x0000 |
118 | #define L2CAP_CS_AUTHEN_PEND 0x0001 | 141 | #define L2CAP_CS_AUTHEN_PEND 0x0001 |
119 | #define L2CAP_CS_AUTHOR_PEND 0x0002 | 142 | #define L2CAP_CS_AUTHOR_PEND 0x0002 |
120 | 143 | ||
121 | struct l2cap_conf_req { | 144 | struct l2cap_conf_req { |
122 | __le16 dcid; | 145 | __le16 dcid; |
@@ -143,10 +166,14 @@ struct l2cap_conf_opt { | |||
143 | } __attribute__ ((packed)); | 166 | } __attribute__ ((packed)); |
144 | #define L2CAP_CONF_OPT_SIZE 2 | 167 | #define L2CAP_CONF_OPT_SIZE 2 |
145 | 168 | ||
169 | #define L2CAP_CONF_HINT 0x80 | ||
170 | #define L2CAP_CONF_MASK 0x7f | ||
171 | |||
146 | #define L2CAP_CONF_MTU 0x01 | 172 | #define L2CAP_CONF_MTU 0x01 |
147 | #define L2CAP_CONF_FLUSH_TO 0x02 | 173 | #define L2CAP_CONF_FLUSH_TO 0x02 |
148 | #define L2CAP_CONF_QOS 0x03 | 174 | #define L2CAP_CONF_QOS 0x03 |
149 | #define L2CAP_CONF_RFC 0x04 | 175 | #define L2CAP_CONF_RFC 0x04 |
176 | #define L2CAP_CONF_FCS 0x05 | ||
150 | 177 | ||
151 | #define L2CAP_CONF_MAX_SIZE 22 | 178 | #define L2CAP_CONF_MAX_SIZE 22 |
152 | 179 | ||
@@ -162,6 +189,8 @@ struct l2cap_conf_rfc { | |||
162 | #define L2CAP_MODE_BASIC 0x00 | 189 | #define L2CAP_MODE_BASIC 0x00 |
163 | #define L2CAP_MODE_RETRANS 0x01 | 190 | #define L2CAP_MODE_RETRANS 0x01 |
164 | #define L2CAP_MODE_FLOWCTL 0x02 | 191 | #define L2CAP_MODE_FLOWCTL 0x02 |
192 | #define L2CAP_MODE_ERTM 0x03 | ||
193 | #define L2CAP_MODE_STREAM 0x04 | ||
165 | 194 | ||
166 | struct l2cap_disconn_req { | 195 | struct l2cap_disconn_req { |
167 | __le16 dcid; | 196 | __le16 dcid; |
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index 5389afdc1297..1a21895b732b 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h | |||
@@ -1,71 +1,220 @@ | |||
1 | #ifndef __NET_CFG80211_H | 1 | #ifndef __NET_CFG80211_H |
2 | #define __NET_CFG80211_H | 2 | #define __NET_CFG80211_H |
3 | /* | ||
4 | * 802.11 device and configuration interface | ||
5 | * | ||
6 | * Copyright 2006-2009 Johannes Berg <johannes@sipsolutions.net> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
3 | 12 | ||
13 | #include <linux/netdevice.h> | ||
14 | #include <linux/debugfs.h> | ||
15 | #include <linux/list.h> | ||
4 | #include <linux/netlink.h> | 16 | #include <linux/netlink.h> |
5 | #include <linux/skbuff.h> | 17 | #include <linux/skbuff.h> |
6 | #include <linux/nl80211.h> | 18 | #include <linux/nl80211.h> |
7 | #include <linux/if_ether.h> | 19 | #include <linux/if_ether.h> |
8 | #include <linux/ieee80211.h> | 20 | #include <linux/ieee80211.h> |
9 | #include <linux/wireless.h> | 21 | #include <net/regulatory.h> |
10 | #include <net/iw_handler.h> | 22 | |
11 | #include <net/genetlink.h> | ||
12 | /* remove once we remove the wext stuff */ | 23 | /* remove once we remove the wext stuff */ |
13 | #include <net/iw_handler.h> | 24 | #include <net/iw_handler.h> |
25 | #include <linux/wireless.h> | ||
26 | |||
14 | 27 | ||
15 | /* | 28 | /* |
16 | * 802.11 configuration in-kernel interface | 29 | * wireless hardware capability structures |
30 | */ | ||
31 | |||
32 | /** | ||
33 | * enum ieee80211_band - supported frequency bands | ||
34 | * | ||
35 | * The bands are assigned this way because the supported | ||
36 | * bitrates differ in these bands. | ||
17 | * | 37 | * |
18 | * Copyright 2006, 2007 Johannes Berg <johannes@sipsolutions.net> | 38 | * @IEEE80211_BAND_2GHZ: 2.4GHz ISM band |
39 | * @IEEE80211_BAND_5GHZ: around 5GHz band (4.9-5.7) | ||
19 | */ | 40 | */ |
41 | enum ieee80211_band { | ||
42 | IEEE80211_BAND_2GHZ, | ||
43 | IEEE80211_BAND_5GHZ, | ||
44 | |||
45 | /* keep last */ | ||
46 | IEEE80211_NUM_BANDS | ||
47 | }; | ||
20 | 48 | ||
21 | /** | 49 | /** |
22 | * struct vif_params - describes virtual interface parameters | 50 | * enum ieee80211_channel_flags - channel flags |
23 | * @mesh_id: mesh ID to use | 51 | * |
24 | * @mesh_id_len: length of the mesh ID | 52 | * Channel flags set by the regulatory control code. |
53 | * | ||
54 | * @IEEE80211_CHAN_DISABLED: This channel is disabled. | ||
55 | * @IEEE80211_CHAN_PASSIVE_SCAN: Only passive scanning is permitted | ||
56 | * on this channel. | ||
57 | * @IEEE80211_CHAN_NO_IBSS: IBSS is not allowed on this channel. | ||
58 | * @IEEE80211_CHAN_RADAR: Radar detection is required on this channel. | ||
59 | * @IEEE80211_CHAN_NO_HT40PLUS: extension channel above this channel | ||
60 | * is not permitted. | ||
61 | * @IEEE80211_CHAN_NO_HT40MINUS: extension channel below this channel | ||
62 | * is not permitted. | ||
25 | */ | 63 | */ |
26 | struct vif_params { | 64 | enum ieee80211_channel_flags { |
27 | u8 *mesh_id; | 65 | IEEE80211_CHAN_DISABLED = 1<<0, |
28 | int mesh_id_len; | 66 | IEEE80211_CHAN_PASSIVE_SCAN = 1<<1, |
67 | IEEE80211_CHAN_NO_IBSS = 1<<2, | ||
68 | IEEE80211_CHAN_RADAR = 1<<3, | ||
69 | IEEE80211_CHAN_NO_HT40PLUS = 1<<4, | ||
70 | IEEE80211_CHAN_NO_HT40MINUS = 1<<5, | ||
29 | }; | 71 | }; |
30 | 72 | ||
31 | /* Radiotap header iteration | 73 | #define IEEE80211_CHAN_NO_HT40 \ |
32 | * implemented in net/wireless/radiotap.c | 74 | (IEEE80211_CHAN_NO_HT40PLUS | IEEE80211_CHAN_NO_HT40MINUS) |
33 | * docs in Documentation/networking/radiotap-headers.txt | 75 | |
76 | /** | ||
77 | * struct ieee80211_channel - channel definition | ||
78 | * | ||
79 | * This structure describes a single channel for use | ||
80 | * with cfg80211. | ||
81 | * | ||
82 | * @center_freq: center frequency in MHz | ||
83 | * @max_bandwidth: maximum allowed bandwidth for this channel, in MHz | ||
84 | * @hw_value: hardware-specific value for the channel | ||
85 | * @flags: channel flags from &enum ieee80211_channel_flags. | ||
86 | * @orig_flags: channel flags at registration time, used by regulatory | ||
87 | * code to support devices with additional restrictions | ||
88 | * @band: band this channel belongs to. | ||
89 | * @max_antenna_gain: maximum antenna gain in dBi | ||
90 | * @max_power: maximum transmission power (in dBm) | ||
91 | * @beacon_found: helper to regulatory code to indicate when a beacon | ||
92 | * has been found on this channel. Use regulatory_hint_found_beacon() | ||
93 | * to enable this, this is is useful only on 5 GHz band. | ||
94 | * @orig_mag: internal use | ||
95 | * @orig_mpwr: internal use | ||
34 | */ | 96 | */ |
97 | struct ieee80211_channel { | ||
98 | enum ieee80211_band band; | ||
99 | u16 center_freq; | ||
100 | u8 max_bandwidth; | ||
101 | u16 hw_value; | ||
102 | u32 flags; | ||
103 | int max_antenna_gain; | ||
104 | int max_power; | ||
105 | bool beacon_found; | ||
106 | u32 orig_flags; | ||
107 | int orig_mag, orig_mpwr; | ||
108 | }; | ||
109 | |||
35 | /** | 110 | /** |
36 | * struct ieee80211_radiotap_iterator - tracks walk thru present radiotap args | 111 | * enum ieee80211_rate_flags - rate flags |
37 | * @rtheader: pointer to the radiotap header we are walking through | 112 | * |
38 | * @max_length: length of radiotap header in cpu byte ordering | 113 | * Hardware/specification flags for rates. These are structured |
39 | * @this_arg_index: IEEE80211_RADIOTAP_... index of current arg | 114 | * in a way that allows using the same bitrate structure for |
40 | * @this_arg: pointer to current radiotap arg | 115 | * different bands/PHY modes. |
41 | * @arg_index: internal next argument index | 116 | * |
42 | * @arg: internal next argument pointer | 117 | * @IEEE80211_RATE_SHORT_PREAMBLE: Hardware can send with short |
43 | * @next_bitmap: internal pointer to next present u32 | 118 | * preamble on this bitrate; only relevant in 2.4GHz band and |
44 | * @bitmap_shifter: internal shifter for curr u32 bitmap, b0 set == arg present | 119 | * with CCK rates. |
120 | * @IEEE80211_RATE_MANDATORY_A: This bitrate is a mandatory rate | ||
121 | * when used with 802.11a (on the 5 GHz band); filled by the | ||
122 | * core code when registering the wiphy. | ||
123 | * @IEEE80211_RATE_MANDATORY_B: This bitrate is a mandatory rate | ||
124 | * when used with 802.11b (on the 2.4 GHz band); filled by the | ||
125 | * core code when registering the wiphy. | ||
126 | * @IEEE80211_RATE_MANDATORY_G: This bitrate is a mandatory rate | ||
127 | * when used with 802.11g (on the 2.4 GHz band); filled by the | ||
128 | * core code when registering the wiphy. | ||
129 | * @IEEE80211_RATE_ERP_G: This is an ERP rate in 802.11g mode. | ||
45 | */ | 130 | */ |
131 | enum ieee80211_rate_flags { | ||
132 | IEEE80211_RATE_SHORT_PREAMBLE = 1<<0, | ||
133 | IEEE80211_RATE_MANDATORY_A = 1<<1, | ||
134 | IEEE80211_RATE_MANDATORY_B = 1<<2, | ||
135 | IEEE80211_RATE_MANDATORY_G = 1<<3, | ||
136 | IEEE80211_RATE_ERP_G = 1<<4, | ||
137 | }; | ||
46 | 138 | ||
47 | struct ieee80211_radiotap_iterator { | 139 | /** |
48 | struct ieee80211_radiotap_header *rtheader; | 140 | * struct ieee80211_rate - bitrate definition |
49 | int max_length; | 141 | * |
50 | int this_arg_index; | 142 | * This structure describes a bitrate that an 802.11 PHY can |
51 | u8 *this_arg; | 143 | * operate with. The two values @hw_value and @hw_value_short |
144 | * are only for driver use when pointers to this structure are | ||
145 | * passed around. | ||
146 | * | ||
147 | * @flags: rate-specific flags | ||
148 | * @bitrate: bitrate in units of 100 Kbps | ||
149 | * @hw_value: driver/hardware value for this rate | ||
150 | * @hw_value_short: driver/hardware value for this rate when | ||
151 | * short preamble is used | ||
152 | */ | ||
153 | struct ieee80211_rate { | ||
154 | u32 flags; | ||
155 | u16 bitrate; | ||
156 | u16 hw_value, hw_value_short; | ||
157 | }; | ||
52 | 158 | ||
53 | int arg_index; | 159 | /** |
54 | u8 *arg; | 160 | * struct ieee80211_sta_ht_cap - STA's HT capabilities |
55 | __le32 *next_bitmap; | 161 | * |
56 | u32 bitmap_shifter; | 162 | * This structure describes most essential parameters needed |
163 | * to describe 802.11n HT capabilities for an STA. | ||
164 | * | ||
165 | * @ht_supported: is HT supported by the STA | ||
166 | * @cap: HT capabilities map as described in 802.11n spec | ||
167 | * @ampdu_factor: Maximum A-MPDU length factor | ||
168 | * @ampdu_density: Minimum A-MPDU spacing | ||
169 | * @mcs: Supported MCS rates | ||
170 | */ | ||
171 | struct ieee80211_sta_ht_cap { | ||
172 | u16 cap; /* use IEEE80211_HT_CAP_ */ | ||
173 | bool ht_supported; | ||
174 | u8 ampdu_factor; | ||
175 | u8 ampdu_density; | ||
176 | struct ieee80211_mcs_info mcs; | ||
57 | }; | 177 | }; |
58 | 178 | ||
59 | extern int ieee80211_radiotap_iterator_init( | 179 | /** |
60 | struct ieee80211_radiotap_iterator *iterator, | 180 | * struct ieee80211_supported_band - frequency band definition |
61 | struct ieee80211_radiotap_header *radiotap_header, | 181 | * |
62 | int max_length); | 182 | * This structure describes a frequency band a wiphy |
183 | * is able to operate in. | ||
184 | * | ||
185 | * @channels: Array of channels the hardware can operate in | ||
186 | * in this band. | ||
187 | * @band: the band this structure represents | ||
188 | * @n_channels: Number of channels in @channels | ||
189 | * @bitrates: Array of bitrates the hardware can operate with | ||
190 | * in this band. Must be sorted to give a valid "supported | ||
191 | * rates" IE, i.e. CCK rates first, then OFDM. | ||
192 | * @n_bitrates: Number of bitrates in @bitrates | ||
193 | */ | ||
194 | struct ieee80211_supported_band { | ||
195 | struct ieee80211_channel *channels; | ||
196 | struct ieee80211_rate *bitrates; | ||
197 | enum ieee80211_band band; | ||
198 | int n_channels; | ||
199 | int n_bitrates; | ||
200 | struct ieee80211_sta_ht_cap ht_cap; | ||
201 | }; | ||
63 | 202 | ||
64 | extern int ieee80211_radiotap_iterator_next( | 203 | /* |
65 | struct ieee80211_radiotap_iterator *iterator); | 204 | * Wireless hardware/device configuration structures and methods |
205 | */ | ||
66 | 206 | ||
207 | /** | ||
208 | * struct vif_params - describes virtual interface parameters | ||
209 | * @mesh_id: mesh ID to use | ||
210 | * @mesh_id_len: length of the mesh ID | ||
211 | */ | ||
212 | struct vif_params { | ||
213 | u8 *mesh_id; | ||
214 | int mesh_id_len; | ||
215 | }; | ||
67 | 216 | ||
68 | /** | 217 | /** |
69 | * struct key_params - key information | 218 | * struct key_params - key information |
70 | * | 219 | * |
71 | * Information about a key | 220 | * Information about a key |
@@ -106,27 +255,6 @@ struct beacon_parameters { | |||
106 | }; | 255 | }; |
107 | 256 | ||
108 | /** | 257 | /** |
109 | * enum station_flags - station flags | ||
110 | * | ||
111 | * Station capability flags. Note that these must be the bits | ||
112 | * according to the nl80211 flags. | ||
113 | * | ||
114 | * @STATION_FLAG_CHANGED: station flags were changed | ||
115 | * @STATION_FLAG_AUTHORIZED: station is authorized to send frames (802.1X) | ||
116 | * @STATION_FLAG_SHORT_PREAMBLE: station is capable of receiving frames | ||
117 | * with short preambles | ||
118 | * @STATION_FLAG_WME: station is WME/QoS capable | ||
119 | * @STATION_FLAG_MFP: station uses management frame protection | ||
120 | */ | ||
121 | enum station_flags { | ||
122 | STATION_FLAG_CHANGED = 1<<0, | ||
123 | STATION_FLAG_AUTHORIZED = 1<<NL80211_STA_FLAG_AUTHORIZED, | ||
124 | STATION_FLAG_SHORT_PREAMBLE = 1<<NL80211_STA_FLAG_SHORT_PREAMBLE, | ||
125 | STATION_FLAG_WME = 1<<NL80211_STA_FLAG_WME, | ||
126 | STATION_FLAG_MFP = 1<<NL80211_STA_FLAG_MFP, | ||
127 | }; | ||
128 | |||
129 | /** | ||
130 | * enum plink_action - actions to perform in mesh peers | 258 | * enum plink_action - actions to perform in mesh peers |
131 | * | 259 | * |
132 | * @PLINK_ACTION_INVALID: action 0 is reserved | 260 | * @PLINK_ACTION_INVALID: action 0 is reserved |
@@ -148,14 +276,17 @@ enum plink_actions { | |||
148 | * @supported_rates: supported rates in IEEE 802.11 format | 276 | * @supported_rates: supported rates in IEEE 802.11 format |
149 | * (or NULL for no change) | 277 | * (or NULL for no change) |
150 | * @supported_rates_len: number of supported rates | 278 | * @supported_rates_len: number of supported rates |
151 | * @station_flags: station flags (see &enum station_flags) | 279 | * @sta_flags_mask: station flags that changed |
280 | * (bitmask of BIT(NL80211_STA_FLAG_...)) | ||
281 | * @sta_flags_set: station flags values | ||
282 | * (bitmask of BIT(NL80211_STA_FLAG_...)) | ||
152 | * @listen_interval: listen interval or -1 for no change | 283 | * @listen_interval: listen interval or -1 for no change |
153 | * @aid: AID or zero for no change | 284 | * @aid: AID or zero for no change |
154 | */ | 285 | */ |
155 | struct station_parameters { | 286 | struct station_parameters { |
156 | u8 *supported_rates; | 287 | u8 *supported_rates; |
157 | struct net_device *vlan; | 288 | struct net_device *vlan; |
158 | u32 station_flags; | 289 | u32 sta_flags_mask, sta_flags_set; |
159 | int listen_interval; | 290 | int listen_interval; |
160 | u16 aid; | 291 | u16 aid; |
161 | u8 supported_rates_len; | 292 | u8 supported_rates_len; |
@@ -348,92 +479,6 @@ struct bss_parameters { | |||
348 | u8 basic_rates_len; | 479 | u8 basic_rates_len; |
349 | }; | 480 | }; |
350 | 481 | ||
351 | /** | ||
352 | * enum environment_cap - Environment parsed from country IE | ||
353 | * @ENVIRON_ANY: indicates country IE applies to both indoor and | ||
354 | * outdoor operation. | ||
355 | * @ENVIRON_INDOOR: indicates country IE applies only to indoor operation | ||
356 | * @ENVIRON_OUTDOOR: indicates country IE applies only to outdoor operation | ||
357 | */ | ||
358 | enum environment_cap { | ||
359 | ENVIRON_ANY, | ||
360 | ENVIRON_INDOOR, | ||
361 | ENVIRON_OUTDOOR, | ||
362 | }; | ||
363 | |||
364 | /** | ||
365 | * struct regulatory_request - used to keep track of regulatory requests | ||
366 | * | ||
367 | * @wiphy_idx: this is set if this request's initiator is | ||
368 | * %REGDOM_SET_BY_COUNTRY_IE or %REGDOM_SET_BY_DRIVER. This | ||
369 | * can be used by the wireless core to deal with conflicts | ||
370 | * and potentially inform users of which devices specifically | ||
371 | * cased the conflicts. | ||
372 | * @initiator: indicates who sent this request, could be any of | ||
373 | * of those set in nl80211_reg_initiator (%NL80211_REGDOM_SET_BY_*) | ||
374 | * @alpha2: the ISO / IEC 3166 alpha2 country code of the requested | ||
375 | * regulatory domain. We have a few special codes: | ||
376 | * 00 - World regulatory domain | ||
377 | * 99 - built by driver but a specific alpha2 cannot be determined | ||
378 | * 98 - result of an intersection between two regulatory domains | ||
379 | * @intersect: indicates whether the wireless core should intersect | ||
380 | * the requested regulatory domain with the presently set regulatory | ||
381 | * domain. | ||
382 | * @country_ie_checksum: checksum of the last processed and accepted | ||
383 | * country IE | ||
384 | * @country_ie_env: lets us know if the AP is telling us we are outdoor, | ||
385 | * indoor, or if it doesn't matter | ||
386 | * @list: used to insert into the reg_requests_list linked list | ||
387 | */ | ||
388 | struct regulatory_request { | ||
389 | int wiphy_idx; | ||
390 | enum nl80211_reg_initiator initiator; | ||
391 | char alpha2[2]; | ||
392 | bool intersect; | ||
393 | u32 country_ie_checksum; | ||
394 | enum environment_cap country_ie_env; | ||
395 | struct list_head list; | ||
396 | }; | ||
397 | |||
398 | struct ieee80211_freq_range { | ||
399 | u32 start_freq_khz; | ||
400 | u32 end_freq_khz; | ||
401 | u32 max_bandwidth_khz; | ||
402 | }; | ||
403 | |||
404 | struct ieee80211_power_rule { | ||
405 | u32 max_antenna_gain; | ||
406 | u32 max_eirp; | ||
407 | }; | ||
408 | |||
409 | struct ieee80211_reg_rule { | ||
410 | struct ieee80211_freq_range freq_range; | ||
411 | struct ieee80211_power_rule power_rule; | ||
412 | u32 flags; | ||
413 | }; | ||
414 | |||
415 | struct ieee80211_regdomain { | ||
416 | u32 n_reg_rules; | ||
417 | char alpha2[2]; | ||
418 | struct ieee80211_reg_rule reg_rules[]; | ||
419 | }; | ||
420 | |||
421 | #define MHZ_TO_KHZ(freq) ((freq) * 1000) | ||
422 | #define KHZ_TO_MHZ(freq) ((freq) / 1000) | ||
423 | #define DBI_TO_MBI(gain) ((gain) * 100) | ||
424 | #define MBI_TO_DBI(gain) ((gain) / 100) | ||
425 | #define DBM_TO_MBM(gain) ((gain) * 100) | ||
426 | #define MBM_TO_DBM(gain) ((gain) / 100) | ||
427 | |||
428 | #define REG_RULE(start, end, bw, gain, eirp, reg_flags) { \ | ||
429 | .freq_range.start_freq_khz = MHZ_TO_KHZ(start), \ | ||
430 | .freq_range.end_freq_khz = MHZ_TO_KHZ(end), \ | ||
431 | .freq_range.max_bandwidth_khz = MHZ_TO_KHZ(bw), \ | ||
432 | .power_rule.max_antenna_gain = DBI_TO_MBI(gain), \ | ||
433 | .power_rule.max_eirp = DBM_TO_MBM(eirp), \ | ||
434 | .flags = reg_flags, \ | ||
435 | } | ||
436 | |||
437 | struct mesh_config { | 482 | struct mesh_config { |
438 | /* Timeouts in ms */ | 483 | /* Timeouts in ms */ |
439 | /* Mesh plink management parameters */ | 484 | /* Mesh plink management parameters */ |
@@ -504,7 +549,7 @@ struct cfg80211_scan_request { | |||
504 | int n_ssids; | 549 | int n_ssids; |
505 | struct ieee80211_channel **channels; | 550 | struct ieee80211_channel **channels; |
506 | u32 n_channels; | 551 | u32 n_channels; |
507 | u8 *ie; | 552 | const u8 *ie; |
508 | size_t ie_len; | 553 | size_t ie_len; |
509 | 554 | ||
510 | /* internal */ | 555 | /* internal */ |
@@ -612,6 +657,11 @@ struct cfg80211_auth_request { | |||
612 | * @ssid_len: Length of ssid in octets | 657 | * @ssid_len: Length of ssid in octets |
613 | * @ie: Extra IEs to add to (Re)Association Request frame or %NULL | 658 | * @ie: Extra IEs to add to (Re)Association Request frame or %NULL |
614 | * @ie_len: Length of ie buffer in octets | 659 | * @ie_len: Length of ie buffer in octets |
660 | * @use_mfp: Use management frame protection (IEEE 802.11w) in this association | ||
661 | * @control_port: Whether user space controls IEEE 802.1X port, i.e., | ||
662 | * sets/clears %NL80211_STA_FLAG_AUTHORIZED. If true, the driver is | ||
663 | * required to assume that the port is unauthorized until authorized by | ||
664 | * user space. Otherwise, port is marked authorized by default. | ||
615 | */ | 665 | */ |
616 | struct cfg80211_assoc_request { | 666 | struct cfg80211_assoc_request { |
617 | struct ieee80211_channel *chan; | 667 | struct ieee80211_channel *chan; |
@@ -620,6 +670,8 @@ struct cfg80211_assoc_request { | |||
620 | size_t ssid_len; | 670 | size_t ssid_len; |
621 | const u8 *ie; | 671 | const u8 *ie; |
622 | size_t ie_len; | 672 | size_t ie_len; |
673 | bool use_mfp; | ||
674 | bool control_port; | ||
623 | }; | 675 | }; |
624 | 676 | ||
625 | /** | 677 | /** |
@@ -659,6 +711,60 @@ struct cfg80211_disassoc_request { | |||
659 | }; | 711 | }; |
660 | 712 | ||
661 | /** | 713 | /** |
714 | * struct cfg80211_ibss_params - IBSS parameters | ||
715 | * | ||
716 | * This structure defines the IBSS parameters for the join_ibss() | ||
717 | * method. | ||
718 | * | ||
719 | * @ssid: The SSID, will always be non-null. | ||
720 | * @ssid_len: The length of the SSID, will always be non-zero. | ||
721 | * @bssid: Fixed BSSID requested, maybe be %NULL, if set do not | ||
722 | * search for IBSSs with a different BSSID. | ||
723 | * @channel: The channel to use if no IBSS can be found to join. | ||
724 | * @channel_fixed: The channel should be fixed -- do not search for | ||
725 | * IBSSs to join on other channels. | ||
726 | * @ie: information element(s) to include in the beacon | ||
727 | * @ie_len: length of that | ||
728 | * @beacon_interval: beacon interval to use | ||
729 | */ | ||
730 | struct cfg80211_ibss_params { | ||
731 | u8 *ssid; | ||
732 | u8 *bssid; | ||
733 | struct ieee80211_channel *channel; | ||
734 | u8 *ie; | ||
735 | u8 ssid_len, ie_len; | ||
736 | u16 beacon_interval; | ||
737 | bool channel_fixed; | ||
738 | }; | ||
739 | |||
740 | /** | ||
741 | * enum wiphy_params_flags - set_wiphy_params bitfield values | ||
742 | * WIPHY_PARAM_RETRY_SHORT: wiphy->retry_short has changed | ||
743 | * WIPHY_PARAM_RETRY_LONG: wiphy->retry_long has changed | ||
744 | * WIPHY_PARAM_FRAG_THRESHOLD: wiphy->frag_threshold has changed | ||
745 | * WIPHY_PARAM_RTS_THRESHOLD: wiphy->rts_threshold has changed | ||
746 | */ | ||
747 | enum wiphy_params_flags { | ||
748 | WIPHY_PARAM_RETRY_SHORT = 1 << 0, | ||
749 | WIPHY_PARAM_RETRY_LONG = 1 << 1, | ||
750 | WIPHY_PARAM_FRAG_THRESHOLD = 1 << 2, | ||
751 | WIPHY_PARAM_RTS_THRESHOLD = 1 << 3, | ||
752 | }; | ||
753 | |||
754 | /** | ||
755 | * enum tx_power_setting - TX power adjustment | ||
756 | * | ||
757 | * @TX_POWER_AUTOMATIC: the dbm parameter is ignored | ||
758 | * @TX_POWER_LIMITED: limit TX power by the dbm parameter | ||
759 | * @TX_POWER_FIXED: fix TX power to the dbm parameter | ||
760 | */ | ||
761 | enum tx_power_setting { | ||
762 | TX_POWER_AUTOMATIC, | ||
763 | TX_POWER_LIMITED, | ||
764 | TX_POWER_FIXED, | ||
765 | }; | ||
766 | |||
767 | /** | ||
662 | * struct cfg80211_ops - backend description for wireless configuration | 768 | * struct cfg80211_ops - backend description for wireless configuration |
663 | * | 769 | * |
664 | * This struct is registered by fullmac card drivers and/or wireless stacks | 770 | * This struct is registered by fullmac card drivers and/or wireless stacks |
@@ -688,10 +794,11 @@ struct cfg80211_disassoc_request { | |||
688 | * @get_key: get information about the key with the given parameters. | 794 | * @get_key: get information about the key with the given parameters. |
689 | * @mac_addr will be %NULL when requesting information for a group | 795 | * @mac_addr will be %NULL when requesting information for a group |
690 | * key. All pointers given to the @callback function need not be valid | 796 | * key. All pointers given to the @callback function need not be valid |
691 | * after it returns. | 797 | * after it returns. This function should return an error if it is |
798 | * not possible to retrieve the key, -ENOENT if it doesn't exist. | ||
692 | * | 799 | * |
693 | * @del_key: remove a key given the @mac_addr (%NULL for a group key) | 800 | * @del_key: remove a key given the @mac_addr (%NULL for a group key) |
694 | * and @key_index | 801 | * and @key_index, return -ENOENT if the key doesn't exist. |
695 | * | 802 | * |
696 | * @set_default_key: set the default key on an interface | 803 | * @set_default_key: set the default key on an interface |
697 | * | 804 | * |
@@ -733,6 +840,23 @@ struct cfg80211_disassoc_request { | |||
733 | * @assoc: Request to (re)associate with the specified peer | 840 | * @assoc: Request to (re)associate with the specified peer |
734 | * @deauth: Request to deauthenticate from the specified peer | 841 | * @deauth: Request to deauthenticate from the specified peer |
735 | * @disassoc: Request to disassociate from the specified peer | 842 | * @disassoc: Request to disassociate from the specified peer |
843 | * | ||
844 | * @join_ibss: Join the specified IBSS (or create if necessary). Once done, call | ||
845 | * cfg80211_ibss_joined(), also call that function when changing BSSID due | ||
846 | * to a merge. | ||
847 | * @leave_ibss: Leave the IBSS. | ||
848 | * | ||
849 | * @set_wiphy_params: Notify that wiphy parameters have changed; | ||
850 | * @changed bitfield (see &enum wiphy_params_flags) describes which values | ||
851 | * have changed. The actual parameter values are available in | ||
852 | * struct wiphy. If returning an error, no value should be changed. | ||
853 | * | ||
854 | * @set_tx_power: set the transmit power according to the parameters | ||
855 | * @get_tx_power: store the current TX power into the dbm variable; | ||
856 | * return 0 if successful | ||
857 | * | ||
858 | * @rfkill_poll: polls the hw rfkill line, use cfg80211 reporting | ||
859 | * functions to adjust rfkill hw state | ||
736 | */ | 860 | */ |
737 | struct cfg80211_ops { | 861 | struct cfg80211_ops { |
738 | int (*suspend)(struct wiphy *wiphy); | 862 | int (*suspend)(struct wiphy *wiphy); |
@@ -747,13 +871,13 @@ struct cfg80211_ops { | |||
747 | struct vif_params *params); | 871 | struct vif_params *params); |
748 | 872 | ||
749 | int (*add_key)(struct wiphy *wiphy, struct net_device *netdev, | 873 | int (*add_key)(struct wiphy *wiphy, struct net_device *netdev, |
750 | u8 key_index, u8 *mac_addr, | 874 | u8 key_index, const u8 *mac_addr, |
751 | struct key_params *params); | 875 | struct key_params *params); |
752 | int (*get_key)(struct wiphy *wiphy, struct net_device *netdev, | 876 | int (*get_key)(struct wiphy *wiphy, struct net_device *netdev, |
753 | u8 key_index, u8 *mac_addr, void *cookie, | 877 | u8 key_index, const u8 *mac_addr, void *cookie, |
754 | void (*callback)(void *cookie, struct key_params*)); | 878 | void (*callback)(void *cookie, struct key_params*)); |
755 | int (*del_key)(struct wiphy *wiphy, struct net_device *netdev, | 879 | int (*del_key)(struct wiphy *wiphy, struct net_device *netdev, |
756 | u8 key_index, u8 *mac_addr); | 880 | u8 key_index, const u8 *mac_addr); |
757 | int (*set_default_key)(struct wiphy *wiphy, | 881 | int (*set_default_key)(struct wiphy *wiphy, |
758 | struct net_device *netdev, | 882 | struct net_device *netdev, |
759 | u8 key_index); | 883 | u8 key_index); |
@@ -818,9 +942,473 @@ struct cfg80211_ops { | |||
818 | struct cfg80211_deauth_request *req); | 942 | struct cfg80211_deauth_request *req); |
819 | int (*disassoc)(struct wiphy *wiphy, struct net_device *dev, | 943 | int (*disassoc)(struct wiphy *wiphy, struct net_device *dev, |
820 | struct cfg80211_disassoc_request *req); | 944 | struct cfg80211_disassoc_request *req); |
945 | |||
946 | int (*join_ibss)(struct wiphy *wiphy, struct net_device *dev, | ||
947 | struct cfg80211_ibss_params *params); | ||
948 | int (*leave_ibss)(struct wiphy *wiphy, struct net_device *dev); | ||
949 | |||
950 | int (*set_wiphy_params)(struct wiphy *wiphy, u32 changed); | ||
951 | |||
952 | int (*set_tx_power)(struct wiphy *wiphy, | ||
953 | enum tx_power_setting type, int dbm); | ||
954 | int (*get_tx_power)(struct wiphy *wiphy, int *dbm); | ||
955 | |||
956 | void (*rfkill_poll)(struct wiphy *wiphy); | ||
821 | }; | 957 | }; |
822 | 958 | ||
823 | /* temporary wext handlers */ | 959 | /* |
960 | * wireless hardware and networking interfaces structures | ||
961 | * and registration/helper functions | ||
962 | */ | ||
963 | |||
964 | /** | ||
965 | * struct wiphy - wireless hardware description | ||
966 | * @idx: the wiphy index assigned to this item | ||
967 | * @class_dev: the class device representing /sys/class/ieee80211/<wiphy-name> | ||
968 | * @custom_regulatory: tells us the driver for this device | ||
969 | * has its own custom regulatory domain and cannot identify the | ||
970 | * ISO / IEC 3166 alpha2 it belongs to. When this is enabled | ||
971 | * we will disregard the first regulatory hint (when the | ||
972 | * initiator is %REGDOM_SET_BY_CORE). | ||
973 | * @strict_regulatory: tells us the driver for this device will ignore | ||
974 | * regulatory domain settings until it gets its own regulatory domain | ||
975 | * via its regulatory_hint(). After its gets its own regulatory domain | ||
976 | * it will only allow further regulatory domain settings to further | ||
977 | * enhance compliance. For example if channel 13 and 14 are disabled | ||
978 | * by this regulatory domain no user regulatory domain can enable these | ||
979 | * channels at a later time. This can be used for devices which do not | ||
980 | * have calibration information gauranteed for frequencies or settings | ||
981 | * outside of its regulatory domain. | ||
982 | * @reg_notifier: the driver's regulatory notification callback | ||
983 | * @regd: the driver's regulatory domain, if one was requested via | ||
984 | * the regulatory_hint() API. This can be used by the driver | ||
985 | * on the reg_notifier() if it chooses to ignore future | ||
986 | * regulatory domain changes caused by other drivers. | ||
987 | * @signal_type: signal type reported in &struct cfg80211_bss. | ||
988 | * @cipher_suites: supported cipher suites | ||
989 | * @n_cipher_suites: number of supported cipher suites | ||
990 | * @retry_short: Retry limit for short frames (dot11ShortRetryLimit) | ||
991 | * @retry_long: Retry limit for long frames (dot11LongRetryLimit) | ||
992 | * @frag_threshold: Fragmentation threshold (dot11FragmentationThreshold); | ||
993 | * -1 = fragmentation disabled, only odd values >= 256 used | ||
994 | * @rts_threshold: RTS threshold (dot11RTSThreshold); -1 = RTS/CTS disabled | ||
995 | */ | ||
996 | struct wiphy { | ||
997 | /* assign these fields before you register the wiphy */ | ||
998 | |||
999 | /* permanent MAC address */ | ||
1000 | u8 perm_addr[ETH_ALEN]; | ||
1001 | |||
1002 | /* Supported interface modes, OR together BIT(NL80211_IFTYPE_...) */ | ||
1003 | u16 interface_modes; | ||
1004 | |||
1005 | bool custom_regulatory; | ||
1006 | bool strict_regulatory; | ||
1007 | |||
1008 | enum cfg80211_signal_type signal_type; | ||
1009 | |||
1010 | int bss_priv_size; | ||
1011 | u8 max_scan_ssids; | ||
1012 | u16 max_scan_ie_len; | ||
1013 | |||
1014 | int n_cipher_suites; | ||
1015 | const u32 *cipher_suites; | ||
1016 | |||
1017 | u8 retry_short; | ||
1018 | u8 retry_long; | ||
1019 | u32 frag_threshold; | ||
1020 | u32 rts_threshold; | ||
1021 | |||
1022 | /* If multiple wiphys are registered and you're handed e.g. | ||
1023 | * a regular netdev with assigned ieee80211_ptr, you won't | ||
1024 | * know whether it points to a wiphy your driver has registered | ||
1025 | * or not. Assign this to something global to your driver to | ||
1026 | * help determine whether you own this wiphy or not. */ | ||
1027 | const void *privid; | ||
1028 | |||
1029 | struct ieee80211_supported_band *bands[IEEE80211_NUM_BANDS]; | ||
1030 | |||
1031 | /* Lets us get back the wiphy on the callback */ | ||
1032 | int (*reg_notifier)(struct wiphy *wiphy, | ||
1033 | struct regulatory_request *request); | ||
1034 | |||
1035 | /* fields below are read-only, assigned by cfg80211 */ | ||
1036 | |||
1037 | const struct ieee80211_regdomain *regd; | ||
1038 | |||
1039 | /* the item in /sys/class/ieee80211/ points to this, | ||
1040 | * you need use set_wiphy_dev() (see below) */ | ||
1041 | struct device dev; | ||
1042 | |||
1043 | /* dir in debugfs: ieee80211/<wiphyname> */ | ||
1044 | struct dentry *debugfsdir; | ||
1045 | |||
1046 | char priv[0] __attribute__((__aligned__(NETDEV_ALIGN))); | ||
1047 | }; | ||
1048 | |||
1049 | /** | ||
1050 | * wiphy_priv - return priv from wiphy | ||
1051 | * | ||
1052 | * @wiphy: the wiphy whose priv pointer to return | ||
1053 | */ | ||
1054 | static inline void *wiphy_priv(struct wiphy *wiphy) | ||
1055 | { | ||
1056 | BUG_ON(!wiphy); | ||
1057 | return &wiphy->priv; | ||
1058 | } | ||
1059 | |||
1060 | /** | ||
1061 | * set_wiphy_dev - set device pointer for wiphy | ||
1062 | * | ||
1063 | * @wiphy: The wiphy whose device to bind | ||
1064 | * @dev: The device to parent it to | ||
1065 | */ | ||
1066 | static inline void set_wiphy_dev(struct wiphy *wiphy, struct device *dev) | ||
1067 | { | ||
1068 | wiphy->dev.parent = dev; | ||
1069 | } | ||
1070 | |||
1071 | /** | ||
1072 | * wiphy_dev - get wiphy dev pointer | ||
1073 | * | ||
1074 | * @wiphy: The wiphy whose device struct to look up | ||
1075 | */ | ||
1076 | static inline struct device *wiphy_dev(struct wiphy *wiphy) | ||
1077 | { | ||
1078 | return wiphy->dev.parent; | ||
1079 | } | ||
1080 | |||
1081 | /** | ||
1082 | * wiphy_name - get wiphy name | ||
1083 | * | ||
1084 | * @wiphy: The wiphy whose name to return | ||
1085 | */ | ||
1086 | static inline const char *wiphy_name(struct wiphy *wiphy) | ||
1087 | { | ||
1088 | return dev_name(&wiphy->dev); | ||
1089 | } | ||
1090 | |||
1091 | /** | ||
1092 | * wiphy_new - create a new wiphy for use with cfg80211 | ||
1093 | * | ||
1094 | * @ops: The configuration operations for this device | ||
1095 | * @sizeof_priv: The size of the private area to allocate | ||
1096 | * | ||
1097 | * Create a new wiphy and associate the given operations with it. | ||
1098 | * @sizeof_priv bytes are allocated for private use. | ||
1099 | * | ||
1100 | * The returned pointer must be assigned to each netdev's | ||
1101 | * ieee80211_ptr for proper operation. | ||
1102 | */ | ||
1103 | struct wiphy *wiphy_new(const struct cfg80211_ops *ops, int sizeof_priv); | ||
1104 | |||
1105 | /** | ||
1106 | * wiphy_register - register a wiphy with cfg80211 | ||
1107 | * | ||
1108 | * @wiphy: The wiphy to register. | ||
1109 | * | ||
1110 | * Returns a non-negative wiphy index or a negative error code. | ||
1111 | */ | ||
1112 | extern int wiphy_register(struct wiphy *wiphy); | ||
1113 | |||
1114 | /** | ||
1115 | * wiphy_unregister - deregister a wiphy from cfg80211 | ||
1116 | * | ||
1117 | * @wiphy: The wiphy to unregister. | ||
1118 | * | ||
1119 | * After this call, no more requests can be made with this priv | ||
1120 | * pointer, but the call may sleep to wait for an outstanding | ||
1121 | * request that is being handled. | ||
1122 | */ | ||
1123 | extern void wiphy_unregister(struct wiphy *wiphy); | ||
1124 | |||
1125 | /** | ||
1126 | * wiphy_free - free wiphy | ||
1127 | * | ||
1128 | * @wiphy: The wiphy to free | ||
1129 | */ | ||
1130 | extern void wiphy_free(struct wiphy *wiphy); | ||
1131 | |||
1132 | /** | ||
1133 | * struct wireless_dev - wireless per-netdev state | ||
1134 | * | ||
1135 | * This structure must be allocated by the driver/stack | ||
1136 | * that uses the ieee80211_ptr field in struct net_device | ||
1137 | * (this is intentional so it can be allocated along with | ||
1138 | * the netdev.) | ||
1139 | * | ||
1140 | * @wiphy: pointer to hardware description | ||
1141 | * @iftype: interface type | ||
1142 | * @list: (private) Used to collect the interfaces | ||
1143 | * @netdev: (private) Used to reference back to the netdev | ||
1144 | * @current_bss: (private) Used by the internal configuration code | ||
1145 | * @bssid: (private) Used by the internal configuration code | ||
1146 | * @ssid: (private) Used by the internal configuration code | ||
1147 | * @ssid_len: (private) Used by the internal configuration code | ||
1148 | * @wext: (private) Used by the internal wireless extensions compat code | ||
1149 | * @wext_bssid: (private) Used by the internal wireless extensions compat code | ||
1150 | */ | ||
1151 | struct wireless_dev { | ||
1152 | struct wiphy *wiphy; | ||
1153 | enum nl80211_iftype iftype; | ||
1154 | |||
1155 | /* private to the generic wireless code */ | ||
1156 | struct list_head list; | ||
1157 | struct net_device *netdev; | ||
1158 | |||
1159 | /* currently used for IBSS - might be rearranged in the future */ | ||
1160 | struct cfg80211_bss *current_bss; | ||
1161 | u8 bssid[ETH_ALEN]; | ||
1162 | u8 ssid[IEEE80211_MAX_SSID_LEN]; | ||
1163 | u8 ssid_len; | ||
1164 | |||
1165 | #ifdef CONFIG_WIRELESS_EXT | ||
1166 | /* wext data */ | ||
1167 | struct { | ||
1168 | struct cfg80211_ibss_params ibss; | ||
1169 | u8 bssid[ETH_ALEN]; | ||
1170 | s8 default_key, default_mgmt_key; | ||
1171 | } wext; | ||
1172 | #endif | ||
1173 | }; | ||
1174 | |||
1175 | /** | ||
1176 | * wdev_priv - return wiphy priv from wireless_dev | ||
1177 | * | ||
1178 | * @wdev: The wireless device whose wiphy's priv pointer to return | ||
1179 | */ | ||
1180 | static inline void *wdev_priv(struct wireless_dev *wdev) | ||
1181 | { | ||
1182 | BUG_ON(!wdev); | ||
1183 | return wiphy_priv(wdev->wiphy); | ||
1184 | } | ||
1185 | |||
1186 | /* | ||
1187 | * Utility functions | ||
1188 | */ | ||
1189 | |||
1190 | /** | ||
1191 | * ieee80211_channel_to_frequency - convert channel number to frequency | ||
1192 | */ | ||
1193 | extern int ieee80211_channel_to_frequency(int chan); | ||
1194 | |||
1195 | /** | ||
1196 | * ieee80211_frequency_to_channel - convert frequency to channel number | ||
1197 | */ | ||
1198 | extern int ieee80211_frequency_to_channel(int freq); | ||
1199 | |||
1200 | /* | ||
1201 | * Name indirection necessary because the ieee80211 code also has | ||
1202 | * a function named "ieee80211_get_channel", so if you include | ||
1203 | * cfg80211's header file you get cfg80211's version, if you try | ||
1204 | * to include both header files you'll (rightfully!) get a symbol | ||
1205 | * clash. | ||
1206 | */ | ||
1207 | extern struct ieee80211_channel *__ieee80211_get_channel(struct wiphy *wiphy, | ||
1208 | int freq); | ||
1209 | /** | ||
1210 | * ieee80211_get_channel - get channel struct from wiphy for specified frequency | ||
1211 | */ | ||
1212 | static inline struct ieee80211_channel * | ||
1213 | ieee80211_get_channel(struct wiphy *wiphy, int freq) | ||
1214 | { | ||
1215 | return __ieee80211_get_channel(wiphy, freq); | ||
1216 | } | ||
1217 | |||
1218 | /** | ||
1219 | * ieee80211_get_response_rate - get basic rate for a given rate | ||
1220 | * | ||
1221 | * @sband: the band to look for rates in | ||
1222 | * @basic_rates: bitmap of basic rates | ||
1223 | * @bitrate: the bitrate for which to find the basic rate | ||
1224 | * | ||
1225 | * This function returns the basic rate corresponding to a given | ||
1226 | * bitrate, that is the next lower bitrate contained in the basic | ||
1227 | * rate map, which is, for this function, given as a bitmap of | ||
1228 | * indices of rates in the band's bitrate table. | ||
1229 | */ | ||
1230 | struct ieee80211_rate * | ||
1231 | ieee80211_get_response_rate(struct ieee80211_supported_band *sband, | ||
1232 | u32 basic_rates, int bitrate); | ||
1233 | |||
1234 | /* | ||
1235 | * Radiotap parsing functions -- for controlled injection support | ||
1236 | * | ||
1237 | * Implemented in net/wireless/radiotap.c | ||
1238 | * Documentation in Documentation/networking/radiotap-headers.txt | ||
1239 | */ | ||
1240 | |||
1241 | /** | ||
1242 | * struct ieee80211_radiotap_iterator - tracks walk thru present radiotap args | ||
1243 | * @rtheader: pointer to the radiotap header we are walking through | ||
1244 | * @max_length: length of radiotap header in cpu byte ordering | ||
1245 | * @this_arg_index: IEEE80211_RADIOTAP_... index of current arg | ||
1246 | * @this_arg: pointer to current radiotap arg | ||
1247 | * @arg_index: internal next argument index | ||
1248 | * @arg: internal next argument pointer | ||
1249 | * @next_bitmap: internal pointer to next present u32 | ||
1250 | * @bitmap_shifter: internal shifter for curr u32 bitmap, b0 set == arg present | ||
1251 | */ | ||
1252 | |||
1253 | struct ieee80211_radiotap_iterator { | ||
1254 | struct ieee80211_radiotap_header *rtheader; | ||
1255 | int max_length; | ||
1256 | int this_arg_index; | ||
1257 | u8 *this_arg; | ||
1258 | |||
1259 | int arg_index; | ||
1260 | u8 *arg; | ||
1261 | __le32 *next_bitmap; | ||
1262 | u32 bitmap_shifter; | ||
1263 | }; | ||
1264 | |||
1265 | extern int ieee80211_radiotap_iterator_init( | ||
1266 | struct ieee80211_radiotap_iterator *iterator, | ||
1267 | struct ieee80211_radiotap_header *radiotap_header, | ||
1268 | int max_length); | ||
1269 | |||
1270 | extern int ieee80211_radiotap_iterator_next( | ||
1271 | struct ieee80211_radiotap_iterator *iterator); | ||
1272 | |||
1273 | extern const unsigned char rfc1042_header[6]; | ||
1274 | extern const unsigned char bridge_tunnel_header[6]; | ||
1275 | |||
1276 | /** | ||
1277 | * ieee80211_get_hdrlen_from_skb - get header length from data | ||
1278 | * | ||
1279 | * Given an skb with a raw 802.11 header at the data pointer this function | ||
1280 | * returns the 802.11 header length in bytes (not including encryption | ||
1281 | * headers). If the data in the sk_buff is too short to contain a valid 802.11 | ||
1282 | * header the function returns 0. | ||
1283 | * | ||
1284 | * @skb: the frame | ||
1285 | */ | ||
1286 | unsigned int ieee80211_get_hdrlen_from_skb(const struct sk_buff *skb); | ||
1287 | |||
1288 | /** | ||
1289 | * ieee80211_hdrlen - get header length in bytes from frame control | ||
1290 | * @fc: frame control field in little-endian format | ||
1291 | */ | ||
1292 | unsigned int ieee80211_hdrlen(__le16 fc); | ||
1293 | |||
1294 | /** | ||
1295 | * ieee80211_data_to_8023 - convert an 802.11 data frame to 802.3 | ||
1296 | * @skb: the 802.11 data frame | ||
1297 | * @addr: the device MAC address | ||
1298 | * @iftype: the virtual interface type | ||
1299 | */ | ||
1300 | int ieee80211_data_to_8023(struct sk_buff *skb, u8 *addr, | ||
1301 | enum nl80211_iftype iftype); | ||
1302 | |||
1303 | /** | ||
1304 | * ieee80211_data_from_8023 - convert an 802.3 frame to 802.11 | ||
1305 | * @skb: the 802.3 frame | ||
1306 | * @addr: the device MAC address | ||
1307 | * @iftype: the virtual interface type | ||
1308 | * @bssid: the network bssid (used only for iftype STATION and ADHOC) | ||
1309 | * @qos: build 802.11 QoS data frame | ||
1310 | */ | ||
1311 | int ieee80211_data_from_8023(struct sk_buff *skb, u8 *addr, | ||
1312 | enum nl80211_iftype iftype, u8 *bssid, bool qos); | ||
1313 | |||
1314 | /** | ||
1315 | * cfg80211_classify8021d - determine the 802.1p/1d tag for a data frame | ||
1316 | * @skb: the data frame | ||
1317 | */ | ||
1318 | unsigned int cfg80211_classify8021d(struct sk_buff *skb); | ||
1319 | |||
1320 | /* | ||
1321 | * Regulatory helper functions for wiphys | ||
1322 | */ | ||
1323 | |||
1324 | /** | ||
1325 | * regulatory_hint - driver hint to the wireless core a regulatory domain | ||
1326 | * @wiphy: the wireless device giving the hint (used only for reporting | ||
1327 | * conflicts) | ||
1328 | * @alpha2: the ISO/IEC 3166 alpha2 the driver claims its regulatory domain | ||
1329 | * should be in. If @rd is set this should be NULL. Note that if you | ||
1330 | * set this to NULL you should still set rd->alpha2 to some accepted | ||
1331 | * alpha2. | ||
1332 | * | ||
1333 | * Wireless drivers can use this function to hint to the wireless core | ||
1334 | * what it believes should be the current regulatory domain by | ||
1335 | * giving it an ISO/IEC 3166 alpha2 country code it knows its regulatory | ||
1336 | * domain should be in or by providing a completely build regulatory domain. | ||
1337 | * If the driver provides an ISO/IEC 3166 alpha2 userspace will be queried | ||
1338 | * for a regulatory domain structure for the respective country. | ||
1339 | * | ||
1340 | * The wiphy must have been registered to cfg80211 prior to this call. | ||
1341 | * For cfg80211 drivers this means you must first use wiphy_register(), | ||
1342 | * for mac80211 drivers you must first use ieee80211_register_hw(). | ||
1343 | * | ||
1344 | * Drivers should check the return value, its possible you can get | ||
1345 | * an -ENOMEM. | ||
1346 | */ | ||
1347 | extern int regulatory_hint(struct wiphy *wiphy, const char *alpha2); | ||
1348 | |||
1349 | /** | ||
1350 | * regulatory_hint_11d - hints a country IE as a regulatory domain | ||
1351 | * @wiphy: the wireless device giving the hint (used only for reporting | ||
1352 | * conflicts) | ||
1353 | * @country_ie: pointer to the country IE | ||
1354 | * @country_ie_len: length of the country IE | ||
1355 | * | ||
1356 | * We will intersect the rd with the what CRDA tells us should apply | ||
1357 | * for the alpha2 this country IE belongs to, this prevents APs from | ||
1358 | * sending us incorrect or outdated information against a country. | ||
1359 | */ | ||
1360 | extern void regulatory_hint_11d(struct wiphy *wiphy, | ||
1361 | u8 *country_ie, | ||
1362 | u8 country_ie_len); | ||
1363 | /** | ||
1364 | * wiphy_apply_custom_regulatory - apply a custom driver regulatory domain | ||
1365 | * @wiphy: the wireless device we want to process the regulatory domain on | ||
1366 | * @regd: the custom regulatory domain to use for this wiphy | ||
1367 | * | ||
1368 | * Drivers can sometimes have custom regulatory domains which do not apply | ||
1369 | * to a specific country. Drivers can use this to apply such custom regulatory | ||
1370 | * domains. This routine must be called prior to wiphy registration. The | ||
1371 | * custom regulatory domain will be trusted completely and as such previous | ||
1372 | * default channel settings will be disregarded. If no rule is found for a | ||
1373 | * channel on the regulatory domain the channel will be disabled. | ||
1374 | */ | ||
1375 | extern void wiphy_apply_custom_regulatory( | ||
1376 | struct wiphy *wiphy, | ||
1377 | const struct ieee80211_regdomain *regd); | ||
1378 | |||
1379 | /** | ||
1380 | * freq_reg_info - get regulatory information for the given frequency | ||
1381 | * @wiphy: the wiphy for which we want to process this rule for | ||
1382 | * @center_freq: Frequency in KHz for which we want regulatory information for | ||
1383 | * @desired_bw_khz: the desired max bandwidth you want to use per | ||
1384 | * channel. Note that this is still 20 MHz if you want to use HT40 | ||
1385 | * as HT40 makes use of two channels for its 40 MHz width bandwidth. | ||
1386 | * If set to 0 we'll assume you want the standard 20 MHz. | ||
1387 | * @reg_rule: the regulatory rule which we have for this frequency | ||
1388 | * | ||
1389 | * Use this function to get the regulatory rule for a specific frequency on | ||
1390 | * a given wireless device. If the device has a specific regulatory domain | ||
1391 | * it wants to follow we respect that unless a country IE has been received | ||
1392 | * and processed already. | ||
1393 | * | ||
1394 | * Returns 0 if it was able to find a valid regulatory rule which does | ||
1395 | * apply to the given center_freq otherwise it returns non-zero. It will | ||
1396 | * also return -ERANGE if we determine the given center_freq does not even have | ||
1397 | * a regulatory rule for a frequency range in the center_freq's band. See | ||
1398 | * freq_in_rule_band() for our current definition of a band -- this is purely | ||
1399 | * subjective and right now its 802.11 specific. | ||
1400 | */ | ||
1401 | extern int freq_reg_info(struct wiphy *wiphy, | ||
1402 | u32 center_freq, | ||
1403 | u32 desired_bw_khz, | ||
1404 | const struct ieee80211_reg_rule **reg_rule); | ||
1405 | |||
1406 | /* | ||
1407 | * Temporary wext handlers & helper functions | ||
1408 | * | ||
1409 | * In the future cfg80211 will simply assign the entire wext handler | ||
1410 | * structure to netdevs it manages, but we're not there yet. | ||
1411 | */ | ||
824 | int cfg80211_wext_giwname(struct net_device *dev, | 1412 | int cfg80211_wext_giwname(struct net_device *dev, |
825 | struct iw_request_info *info, | 1413 | struct iw_request_info *info, |
826 | char *name, char *extra); | 1414 | char *name, char *extra); |
@@ -834,9 +1422,72 @@ int cfg80211_wext_siwscan(struct net_device *dev, | |||
834 | int cfg80211_wext_giwscan(struct net_device *dev, | 1422 | int cfg80211_wext_giwscan(struct net_device *dev, |
835 | struct iw_request_info *info, | 1423 | struct iw_request_info *info, |
836 | struct iw_point *data, char *extra); | 1424 | struct iw_point *data, char *extra); |
1425 | int cfg80211_wext_siwmlme(struct net_device *dev, | ||
1426 | struct iw_request_info *info, | ||
1427 | struct iw_point *data, char *extra); | ||
837 | int cfg80211_wext_giwrange(struct net_device *dev, | 1428 | int cfg80211_wext_giwrange(struct net_device *dev, |
838 | struct iw_request_info *info, | 1429 | struct iw_request_info *info, |
839 | struct iw_point *data, char *extra); | 1430 | struct iw_point *data, char *extra); |
1431 | int cfg80211_ibss_wext_siwfreq(struct net_device *dev, | ||
1432 | struct iw_request_info *info, | ||
1433 | struct iw_freq *freq, char *extra); | ||
1434 | int cfg80211_ibss_wext_giwfreq(struct net_device *dev, | ||
1435 | struct iw_request_info *info, | ||
1436 | struct iw_freq *freq, char *extra); | ||
1437 | int cfg80211_ibss_wext_siwessid(struct net_device *dev, | ||
1438 | struct iw_request_info *info, | ||
1439 | struct iw_point *data, char *ssid); | ||
1440 | int cfg80211_ibss_wext_giwessid(struct net_device *dev, | ||
1441 | struct iw_request_info *info, | ||
1442 | struct iw_point *data, char *ssid); | ||
1443 | int cfg80211_ibss_wext_siwap(struct net_device *dev, | ||
1444 | struct iw_request_info *info, | ||
1445 | struct sockaddr *ap_addr, char *extra); | ||
1446 | int cfg80211_ibss_wext_giwap(struct net_device *dev, | ||
1447 | struct iw_request_info *info, | ||
1448 | struct sockaddr *ap_addr, char *extra); | ||
1449 | |||
1450 | struct ieee80211_channel *cfg80211_wext_freq(struct wiphy *wiphy, | ||
1451 | struct iw_freq *freq); | ||
1452 | |||
1453 | int cfg80211_wext_siwrts(struct net_device *dev, | ||
1454 | struct iw_request_info *info, | ||
1455 | struct iw_param *rts, char *extra); | ||
1456 | int cfg80211_wext_giwrts(struct net_device *dev, | ||
1457 | struct iw_request_info *info, | ||
1458 | struct iw_param *rts, char *extra); | ||
1459 | int cfg80211_wext_siwfrag(struct net_device *dev, | ||
1460 | struct iw_request_info *info, | ||
1461 | struct iw_param *frag, char *extra); | ||
1462 | int cfg80211_wext_giwfrag(struct net_device *dev, | ||
1463 | struct iw_request_info *info, | ||
1464 | struct iw_param *frag, char *extra); | ||
1465 | int cfg80211_wext_siwretry(struct net_device *dev, | ||
1466 | struct iw_request_info *info, | ||
1467 | struct iw_param *retry, char *extra); | ||
1468 | int cfg80211_wext_giwretry(struct net_device *dev, | ||
1469 | struct iw_request_info *info, | ||
1470 | struct iw_param *retry, char *extra); | ||
1471 | int cfg80211_wext_siwencodeext(struct net_device *dev, | ||
1472 | struct iw_request_info *info, | ||
1473 | struct iw_point *erq, char *extra); | ||
1474 | int cfg80211_wext_siwencode(struct net_device *dev, | ||
1475 | struct iw_request_info *info, | ||
1476 | struct iw_point *erq, char *keybuf); | ||
1477 | int cfg80211_wext_giwencode(struct net_device *dev, | ||
1478 | struct iw_request_info *info, | ||
1479 | struct iw_point *erq, char *keybuf); | ||
1480 | int cfg80211_wext_siwtxpower(struct net_device *dev, | ||
1481 | struct iw_request_info *info, | ||
1482 | union iwreq_data *data, char *keybuf); | ||
1483 | int cfg80211_wext_giwtxpower(struct net_device *dev, | ||
1484 | struct iw_request_info *info, | ||
1485 | union iwreq_data *data, char *keybuf); | ||
1486 | |||
1487 | /* | ||
1488 | * callbacks for asynchronous cfg80211 methods, notification | ||
1489 | * functions and BSS handling helpers | ||
1490 | */ | ||
840 | 1491 | ||
841 | /** | 1492 | /** |
842 | * cfg80211_scan_done - notify that scan finished | 1493 | * cfg80211_scan_done - notify that scan finished |
@@ -864,6 +1515,14 @@ cfg80211_inform_bss_frame(struct wiphy *wiphy, | |||
864 | struct ieee80211_mgmt *mgmt, size_t len, | 1515 | struct ieee80211_mgmt *mgmt, size_t len, |
865 | s32 signal, gfp_t gfp); | 1516 | s32 signal, gfp_t gfp); |
866 | 1517 | ||
1518 | struct cfg80211_bss* | ||
1519 | cfg80211_inform_bss(struct wiphy *wiphy, | ||
1520 | struct ieee80211_channel *channel, | ||
1521 | const u8 *bssid, | ||
1522 | u64 timestamp, u16 capability, u16 beacon_interval, | ||
1523 | const u8 *ie, size_t ielen, | ||
1524 | s32 signal, gfp_t gfp); | ||
1525 | |||
867 | struct cfg80211_bss *cfg80211_get_bss(struct wiphy *wiphy, | 1526 | struct cfg80211_bss *cfg80211_get_bss(struct wiphy *wiphy, |
868 | struct ieee80211_channel *channel, | 1527 | struct ieee80211_channel *channel, |
869 | const u8 *bssid, | 1528 | const u8 *bssid, |
@@ -883,6 +1542,7 @@ struct cfg80211_bss *cfg80211_get_mesh(struct wiphy *wiphy, | |||
883 | const u8 *meshid, size_t meshidlen, | 1542 | const u8 *meshid, size_t meshidlen, |
884 | const u8 *meshcfg); | 1543 | const u8 *meshcfg); |
885 | void cfg80211_put_bss(struct cfg80211_bss *bss); | 1544 | void cfg80211_put_bss(struct cfg80211_bss *bss); |
1545 | |||
886 | /** | 1546 | /** |
887 | * cfg80211_unlink_bss - unlink BSS from internal data structures | 1547 | * cfg80211_unlink_bss - unlink BSS from internal data structures |
888 | * @wiphy: the wiphy | 1548 | * @wiphy: the wiphy |
@@ -902,44 +1562,62 @@ void cfg80211_unlink_bss(struct wiphy *wiphy, struct cfg80211_bss *bss); | |||
902 | * @len: length of the frame data | 1562 | * @len: length of the frame data |
903 | * | 1563 | * |
904 | * This function is called whenever an authentication has been processed in | 1564 | * This function is called whenever an authentication has been processed in |
905 | * station mode. | 1565 | * station mode. The driver is required to call either this function or |
1566 | * cfg80211_send_auth_timeout() to indicate the result of cfg80211_ops::auth() | ||
1567 | * call. | ||
906 | */ | 1568 | */ |
907 | void cfg80211_send_rx_auth(struct net_device *dev, const u8 *buf, size_t len); | 1569 | void cfg80211_send_rx_auth(struct net_device *dev, const u8 *buf, size_t len); |
908 | 1570 | ||
909 | /** | 1571 | /** |
1572 | * cfg80211_send_auth_timeout - notification of timed out authentication | ||
1573 | * @dev: network device | ||
1574 | * @addr: The MAC address of the device with which the authentication timed out | ||
1575 | */ | ||
1576 | void cfg80211_send_auth_timeout(struct net_device *dev, const u8 *addr); | ||
1577 | |||
1578 | /** | ||
910 | * cfg80211_send_rx_assoc - notification of processed association | 1579 | * cfg80211_send_rx_assoc - notification of processed association |
911 | * @dev: network device | 1580 | * @dev: network device |
912 | * @buf: (re)association response frame (header + body) | 1581 | * @buf: (re)association response frame (header + body) |
913 | * @len: length of the frame data | 1582 | * @len: length of the frame data |
914 | * | 1583 | * |
915 | * This function is called whenever a (re)association response has been | 1584 | * This function is called whenever a (re)association response has been |
916 | * processed in station mode. | 1585 | * processed in station mode. The driver is required to call either this |
1586 | * function or cfg80211_send_assoc_timeout() to indicate the result of | ||
1587 | * cfg80211_ops::assoc() call. | ||
917 | */ | 1588 | */ |
918 | void cfg80211_send_rx_assoc(struct net_device *dev, const u8 *buf, size_t len); | 1589 | void cfg80211_send_rx_assoc(struct net_device *dev, const u8 *buf, size_t len); |
919 | 1590 | ||
920 | /** | 1591 | /** |
921 | * cfg80211_send_rx_deauth - notification of processed deauthentication | 1592 | * cfg80211_send_assoc_timeout - notification of timed out association |
1593 | * @dev: network device | ||
1594 | * @addr: The MAC address of the device with which the association timed out | ||
1595 | */ | ||
1596 | void cfg80211_send_assoc_timeout(struct net_device *dev, const u8 *addr); | ||
1597 | |||
1598 | /** | ||
1599 | * cfg80211_send_deauth - notification of processed deauthentication | ||
922 | * @dev: network device | 1600 | * @dev: network device |
923 | * @buf: deauthentication frame (header + body) | 1601 | * @buf: deauthentication frame (header + body) |
924 | * @len: length of the frame data | 1602 | * @len: length of the frame data |
925 | * | 1603 | * |
926 | * This function is called whenever deauthentication has been processed in | 1604 | * This function is called whenever deauthentication has been processed in |
927 | * station mode. | 1605 | * station mode. This includes both received deauthentication frames and |
1606 | * locally generated ones. | ||
928 | */ | 1607 | */ |
929 | void cfg80211_send_rx_deauth(struct net_device *dev, const u8 *buf, | 1608 | void cfg80211_send_deauth(struct net_device *dev, const u8 *buf, size_t len); |
930 | size_t len); | ||
931 | 1609 | ||
932 | /** | 1610 | /** |
933 | * cfg80211_send_rx_disassoc - notification of processed disassociation | 1611 | * cfg80211_send_disassoc - notification of processed disassociation |
934 | * @dev: network device | 1612 | * @dev: network device |
935 | * @buf: disassociation response frame (header + body) | 1613 | * @buf: disassociation response frame (header + body) |
936 | * @len: length of the frame data | 1614 | * @len: length of the frame data |
937 | * | 1615 | * |
938 | * This function is called whenever disassociation has been processed in | 1616 | * This function is called whenever disassociation has been processed in |
939 | * station mode. | 1617 | * station mode. This includes both received disassociation frames and locally |
1618 | * generated ones. | ||
940 | */ | 1619 | */ |
941 | void cfg80211_send_rx_disassoc(struct net_device *dev, const u8 *buf, | 1620 | void cfg80211_send_disassoc(struct net_device *dev, const u8 *buf, size_t len); |
942 | size_t len); | ||
943 | 1621 | ||
944 | /** | 1622 | /** |
945 | * cfg80211_hold_bss - exclude bss from expiration | 1623 | * cfg80211_hold_bss - exclude bss from expiration |
@@ -958,4 +1636,55 @@ void cfg80211_hold_bss(struct cfg80211_bss *bss); | |||
958 | */ | 1636 | */ |
959 | void cfg80211_unhold_bss(struct cfg80211_bss *bss); | 1637 | void cfg80211_unhold_bss(struct cfg80211_bss *bss); |
960 | 1638 | ||
1639 | /** | ||
1640 | * cfg80211_michael_mic_failure - notification of Michael MIC failure (TKIP) | ||
1641 | * @dev: network device | ||
1642 | * @addr: The source MAC address of the frame | ||
1643 | * @key_type: The key type that the received frame used | ||
1644 | * @key_id: Key identifier (0..3) | ||
1645 | * @tsc: The TSC value of the frame that generated the MIC failure (6 octets) | ||
1646 | * | ||
1647 | * This function is called whenever the local MAC detects a MIC failure in a | ||
1648 | * received frame. This matches with MLME-MICHAELMICFAILURE.indication() | ||
1649 | * primitive. | ||
1650 | */ | ||
1651 | void cfg80211_michael_mic_failure(struct net_device *dev, const u8 *addr, | ||
1652 | enum nl80211_key_type key_type, int key_id, | ||
1653 | const u8 *tsc); | ||
1654 | |||
1655 | /** | ||
1656 | * cfg80211_ibss_joined - notify cfg80211 that device joined an IBSS | ||
1657 | * | ||
1658 | * @dev: network device | ||
1659 | * @bssid: the BSSID of the IBSS joined | ||
1660 | * @gfp: allocation flags | ||
1661 | * | ||
1662 | * This function notifies cfg80211 that the device joined an IBSS or | ||
1663 | * switched to a different BSSID. Before this function can be called, | ||
1664 | * either a beacon has to have been received from the IBSS, or one of | ||
1665 | * the cfg80211_inform_bss{,_frame} functions must have been called | ||
1666 | * with the locally generated beacon -- this guarantees that there is | ||
1667 | * always a scan result for this IBSS. cfg80211 will handle the rest. | ||
1668 | */ | ||
1669 | void cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid, gfp_t gfp); | ||
1670 | |||
1671 | /** | ||
1672 | * wiphy_rfkill_set_hw_state - notify cfg80211 about hw block state | ||
1673 | * @wiphy: the wiphy | ||
1674 | * @blocked: block status | ||
1675 | */ | ||
1676 | void wiphy_rfkill_set_hw_state(struct wiphy *wiphy, bool blocked); | ||
1677 | |||
1678 | /** | ||
1679 | * wiphy_rfkill_start_polling - start polling rfkill | ||
1680 | * @wiphy: the wiphy | ||
1681 | */ | ||
1682 | void wiphy_rfkill_start_polling(struct wiphy *wiphy); | ||
1683 | |||
1684 | /** | ||
1685 | * wiphy_rfkill_stop_polling - stop polling rfkill | ||
1686 | * @wiphy: the wiphy | ||
1687 | */ | ||
1688 | void wiphy_rfkill_stop_polling(struct wiphy *wiphy); | ||
1689 | |||
961 | #endif /* __NET_CFG80211_H */ | 1690 | #endif /* __NET_CFG80211_H */ |
diff --git a/include/net/dst.h b/include/net/dst.h index 6be3b082a070..7fc409c19b37 100644 --- a/include/net/dst.h +++ b/include/net/dst.h | |||
@@ -195,6 +195,12 @@ struct dst_entry * dst_clone(struct dst_entry * dst) | |||
195 | } | 195 | } |
196 | 196 | ||
197 | extern void dst_release(struct dst_entry *dst); | 197 | extern void dst_release(struct dst_entry *dst); |
198 | static inline void skb_dst_drop(struct sk_buff *skb) | ||
199 | { | ||
200 | if (skb->_skb_dst) | ||
201 | dst_release(skb_dst(skb)); | ||
202 | skb->_skb_dst = 0UL; | ||
203 | } | ||
198 | 204 | ||
199 | /* Children define the path of the packet through the | 205 | /* Children define the path of the packet through the |
200 | * Linux networking. Thus, destinations are stackable. | 206 | * Linux networking. Thus, destinations are stackable. |
@@ -246,7 +252,7 @@ static inline void dst_negative_advice(struct dst_entry **dst_p) | |||
246 | 252 | ||
247 | static inline void dst_link_failure(struct sk_buff *skb) | 253 | static inline void dst_link_failure(struct sk_buff *skb) |
248 | { | 254 | { |
249 | struct dst_entry * dst = skb->dst; | 255 | struct dst_entry *dst = skb_dst(skb); |
250 | if (dst && dst->ops && dst->ops->link_failure) | 256 | if (dst && dst->ops && dst->ops->link_failure) |
251 | dst->ops->link_failure(skb); | 257 | dst->ops->link_failure(skb); |
252 | } | 258 | } |
@@ -265,13 +271,13 @@ static inline void dst_set_expires(struct dst_entry *dst, int timeout) | |||
265 | /* Output packet to network from transport. */ | 271 | /* Output packet to network from transport. */ |
266 | static inline int dst_output(struct sk_buff *skb) | 272 | static inline int dst_output(struct sk_buff *skb) |
267 | { | 273 | { |
268 | return skb->dst->output(skb); | 274 | return skb_dst(skb)->output(skb); |
269 | } | 275 | } |
270 | 276 | ||
271 | /* Input packet from network to transport. */ | 277 | /* Input packet from network to transport. */ |
272 | static inline int dst_input(struct sk_buff *skb) | 278 | static inline int dst_input(struct sk_buff *skb) |
273 | { | 279 | { |
274 | return skb->dst->input(skb); | 280 | return skb_dst(skb)->input(skb); |
275 | } | 281 | } |
276 | 282 | ||
277 | static inline struct dst_entry *dst_check(struct dst_entry *dst, u32 cookie) | 283 | static inline struct dst_entry *dst_check(struct dst_entry *dst, u32 cookie) |
diff --git a/include/net/fib_rules.h b/include/net/fib_rules.h index c2bb5cae6515..ca4b2e840078 100644 --- a/include/net/fib_rules.h +++ b/include/net/fib_rules.h | |||
@@ -48,14 +48,12 @@ struct fib_rules_ops | |||
48 | struct flowi *, int); | 48 | struct flowi *, int); |
49 | int (*configure)(struct fib_rule *, | 49 | int (*configure)(struct fib_rule *, |
50 | struct sk_buff *, | 50 | struct sk_buff *, |
51 | struct nlmsghdr *, | ||
52 | struct fib_rule_hdr *, | 51 | struct fib_rule_hdr *, |
53 | struct nlattr **); | 52 | struct nlattr **); |
54 | int (*compare)(struct fib_rule *, | 53 | int (*compare)(struct fib_rule *, |
55 | struct fib_rule_hdr *, | 54 | struct fib_rule_hdr *, |
56 | struct nlattr **); | 55 | struct nlattr **); |
57 | int (*fill)(struct fib_rule *, struct sk_buff *, | 56 | int (*fill)(struct fib_rule *, struct sk_buff *, |
58 | struct nlmsghdr *, | ||
59 | struct fib_rule_hdr *); | 57 | struct fib_rule_hdr *); |
60 | u32 (*default_pref)(struct fib_rules_ops *ops); | 58 | u32 (*default_pref)(struct fib_rules_ops *ops); |
61 | size_t (*nlmsg_payload)(struct fib_rule *); | 59 | size_t (*nlmsg_payload)(struct fib_rule *); |
diff --git a/include/net/genetlink.h b/include/net/genetlink.h index 747c255d1df0..1b0e3ee4ddd8 100644 --- a/include/net/genetlink.h +++ b/include/net/genetlink.h | |||
@@ -88,6 +88,8 @@ struct genl_ops | |||
88 | }; | 88 | }; |
89 | 89 | ||
90 | extern int genl_register_family(struct genl_family *family); | 90 | extern int genl_register_family(struct genl_family *family); |
91 | extern int genl_register_family_with_ops(struct genl_family *family, | ||
92 | struct genl_ops *ops, size_t n_ops); | ||
91 | extern int genl_unregister_family(struct genl_family *family); | 93 | extern int genl_unregister_family(struct genl_family *family); |
92 | extern int genl_register_ops(struct genl_family *, struct genl_ops *ops); | 94 | extern int genl_register_ops(struct genl_family *, struct genl_ops *ops); |
93 | extern int genl_unregister_ops(struct genl_family *, struct genl_ops *ops); | 95 | extern int genl_unregister_ops(struct genl_family *, struct genl_ops *ops); |
diff --git a/include/net/ieee802154/af_ieee802154.h b/include/net/ieee802154/af_ieee802154.h new file mode 100644 index 000000000000..0d78605fb1a6 --- /dev/null +++ b/include/net/ieee802154/af_ieee802154.h | |||
@@ -0,0 +1,60 @@ | |||
1 | /* | ||
2 | * IEEE 802.15.4 inteface for userspace | ||
3 | * | ||
4 | * Copyright 2007, 2008 Siemens AG | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 | ||
8 | * as published by the Free Software Foundation. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License along | ||
16 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | * | ||
19 | * Written by: | ||
20 | * Sergey Lapin <slapin@ossfans.org> | ||
21 | * Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> | ||
22 | */ | ||
23 | |||
24 | #ifndef _AF_IEEE802154_H | ||
25 | #define _AF_IEEE802154_H | ||
26 | |||
27 | #include <linux/socket.h> /* for sa_family_t */ | ||
28 | |||
29 | enum { | ||
30 | IEEE802154_ADDR_NONE = 0x0, | ||
31 | /* RESERVED = 0x01, */ | ||
32 | IEEE802154_ADDR_SHORT = 0x2, /* 16-bit address + PANid */ | ||
33 | IEEE802154_ADDR_LONG = 0x3, /* 64-bit address + PANid */ | ||
34 | }; | ||
35 | |||
36 | /* address length, octets */ | ||
37 | #define IEEE802154_ADDR_LEN 8 | ||
38 | |||
39 | struct ieee802154_addr { | ||
40 | int addr_type; | ||
41 | u16 pan_id; | ||
42 | union { | ||
43 | u8 hwaddr[IEEE802154_ADDR_LEN]; | ||
44 | u16 short_addr; | ||
45 | }; | ||
46 | }; | ||
47 | |||
48 | #define IEEE802154_PANID_BROADCAST 0xffff | ||
49 | #define IEEE802154_ADDR_BROADCAST 0xffff | ||
50 | #define IEEE802154_ADDR_UNDEF 0xfffe | ||
51 | |||
52 | struct sockaddr_ieee802154 { | ||
53 | sa_family_t family; /* AF_IEEE802154 */ | ||
54 | struct ieee802154_addr addr; | ||
55 | }; | ||
56 | |||
57 | /* master device */ | ||
58 | #define IEEE802154_SIOC_ADD_SLAVE (SIOCDEVPRIVATE + 0) | ||
59 | |||
60 | #endif | ||
diff --git a/include/net/ieee802154/mac_def.h b/include/net/ieee802154/mac_def.h new file mode 100644 index 000000000000..8cb684635650 --- /dev/null +++ b/include/net/ieee802154/mac_def.h | |||
@@ -0,0 +1,160 @@ | |||
1 | /* | ||
2 | * IEEE802.15.4-2003 specification | ||
3 | * | ||
4 | * Copyright (C) 2007, 2008 Siemens AG | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 | ||
8 | * as published by the Free Software Foundation. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License along | ||
16 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | * | ||
19 | * Written by: | ||
20 | * Pavel Smolenskiy <pavel.smolenskiy@gmail.com> | ||
21 | * Maxim Gorbachyov <maxim.gorbachev@siemens.com> | ||
22 | * Maxim Osipov <maxim.osipov@siemens.com> | ||
23 | * Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> | ||
24 | */ | ||
25 | |||
26 | #ifndef IEEE802154_MAC_DEF_H | ||
27 | #define IEEE802154_MAC_DEF_H | ||
28 | |||
29 | #define IEEE802154_FC_TYPE_BEACON 0x0 /* Frame is beacon */ | ||
30 | #define IEEE802154_FC_TYPE_DATA 0x1 /* Frame is data */ | ||
31 | #define IEEE802154_FC_TYPE_ACK 0x2 /* Frame is acknowledgment */ | ||
32 | #define IEEE802154_FC_TYPE_MAC_CMD 0x3 /* Frame is MAC command */ | ||
33 | |||
34 | #define IEEE802154_FC_TYPE_SHIFT 0 | ||
35 | #define IEEE802154_FC_TYPE_MASK ((1 << 3) - 1) | ||
36 | #define IEEE802154_FC_TYPE(x) ((x & IEEE802154_FC_TYPE_MASK) >> IEEE802154_FC_TYPE_SHIFT) | ||
37 | #define IEEE802154_FC_SET_TYPE(v, x) do { \ | ||
38 | v = (((v) & ~IEEE802154_FC_TYPE_MASK) | \ | ||
39 | (((x) << IEEE802154_FC_TYPE_SHIFT) & IEEE802154_FC_TYPE_MASK)); \ | ||
40 | } while (0) | ||
41 | |||
42 | #define IEEE802154_FC_SECEN (1 << 3) | ||
43 | #define IEEE802154_FC_FRPEND (1 << 4) | ||
44 | #define IEEE802154_FC_ACK_REQ (1 << 5) | ||
45 | #define IEEE802154_FC_INTRA_PAN (1 << 6) | ||
46 | |||
47 | #define IEEE802154_FC_SAMODE_SHIFT 14 | ||
48 | #define IEEE802154_FC_SAMODE_MASK (3 << IEEE802154_FC_SAMODE_SHIFT) | ||
49 | #define IEEE802154_FC_DAMODE_SHIFT 10 | ||
50 | #define IEEE802154_FC_DAMODE_MASK (3 << IEEE802154_FC_DAMODE_SHIFT) | ||
51 | |||
52 | #define IEEE802154_FC_SAMODE(x) \ | ||
53 | (((x) & IEEE802154_FC_SAMODE_MASK) >> IEEE802154_FC_SAMODE_SHIFT) | ||
54 | |||
55 | #define IEEE802154_FC_DAMODE(x) \ | ||
56 | (((x) & IEEE802154_FC_DAMODE_MASK) >> IEEE802154_FC_DAMODE_SHIFT) | ||
57 | |||
58 | |||
59 | /* MAC's Command Frames Identifiers */ | ||
60 | #define IEEE802154_CMD_ASSOCIATION_REQ 0x01 | ||
61 | #define IEEE802154_CMD_ASSOCIATION_RESP 0x02 | ||
62 | #define IEEE802154_CMD_DISASSOCIATION_NOTIFY 0x03 | ||
63 | #define IEEE802154_CMD_DATA_REQ 0x04 | ||
64 | #define IEEE802154_CMD_PANID_CONFLICT_NOTIFY 0x05 | ||
65 | #define IEEE802154_CMD_ORPHAN_NOTIFY 0x06 | ||
66 | #define IEEE802154_CMD_BEACON_REQ 0x07 | ||
67 | #define IEEE802154_CMD_COORD_REALIGN_NOTIFY 0x08 | ||
68 | #define IEEE802154_CMD_GTS_REQ 0x09 | ||
69 | |||
70 | /* | ||
71 | * The return values of MAC operations | ||
72 | */ | ||
73 | enum { | ||
74 | /* | ||
75 | * The requested operation was completed successfully. | ||
76 | * For a transmission request, this value indicates | ||
77 | * a successful transmission. | ||
78 | */ | ||
79 | IEEE802154_SUCCESS = 0x0, | ||
80 | |||
81 | /* The beacon was lost following a synchronization request. */ | ||
82 | IEEE802154_BEACON_LOSS = 0xe0, | ||
83 | /* | ||
84 | * A transmission could not take place due to activity on the | ||
85 | * channel, i.e., the CSMA-CA mechanism has failed. | ||
86 | */ | ||
87 | IEEE802154_CHNL_ACCESS_FAIL = 0xe1, | ||
88 | /* The GTS request has been denied by the PAN coordinator. */ | ||
89 | IEEE802154_DENINED = 0xe2, | ||
90 | /* The attempt to disable the transceiver has failed. */ | ||
91 | IEEE802154_DISABLE_TRX_FAIL = 0xe3, | ||
92 | /* | ||
93 | * The received frame induces a failed security check according to | ||
94 | * the security suite. | ||
95 | */ | ||
96 | IEEE802154_FAILED_SECURITY_CHECK = 0xe4, | ||
97 | /* | ||
98 | * The frame resulting from secure processing has a length that is | ||
99 | * greater than aMACMaxFrameSize. | ||
100 | */ | ||
101 | IEEE802154_FRAME_TOO_LONG = 0xe5, | ||
102 | /* | ||
103 | * The requested GTS transmission failed because the specified GTS | ||
104 | * either did not have a transmit GTS direction or was not defined. | ||
105 | */ | ||
106 | IEEE802154_INVALID_GTS = 0xe6, | ||
107 | /* | ||
108 | * A request to purge an MSDU from the transaction queue was made using | ||
109 | * an MSDU handle that was not found in the transaction table. | ||
110 | */ | ||
111 | IEEE802154_INVALID_HANDLE = 0xe7, | ||
112 | /* A parameter in the primitive is out of the valid range.*/ | ||
113 | IEEE802154_INVALID_PARAMETER = 0xe8, | ||
114 | /* No acknowledgment was received after aMaxFrameRetries. */ | ||
115 | IEEE802154_NO_ACK = 0xe9, | ||
116 | /* A scan operation failed to find any network beacons.*/ | ||
117 | IEEE802154_NO_BEACON = 0xea, | ||
118 | /* No response data were available following a request. */ | ||
119 | IEEE802154_NO_DATA = 0xeb, | ||
120 | /* The operation failed because a short address was not allocated. */ | ||
121 | IEEE802154_NO_SHORT_ADDRESS = 0xec, | ||
122 | /* | ||
123 | * A receiver enable request was unsuccessful because it could not be | ||
124 | * completed within the CAP. | ||
125 | */ | ||
126 | IEEE802154_OUT_OF_CAP = 0xed, | ||
127 | /* | ||
128 | * A PAN identifier conflict has been detected and communicated to the | ||
129 | * PAN coordinator. | ||
130 | */ | ||
131 | IEEE802154_PANID_CONFLICT = 0xee, | ||
132 | /* A coordinator realignment command has been received. */ | ||
133 | IEEE802154_REALIGMENT = 0xef, | ||
134 | /* The transaction has expired and its information discarded. */ | ||
135 | IEEE802154_TRANSACTION_EXPIRED = 0xf0, | ||
136 | /* There is no capacity to store the transaction. */ | ||
137 | IEEE802154_TRANSACTION_OVERFLOW = 0xf1, | ||
138 | /* | ||
139 | * The transceiver was in the transmitter enabled state when the | ||
140 | * receiver was requested to be enabled. | ||
141 | */ | ||
142 | IEEE802154_TX_ACTIVE = 0xf2, | ||
143 | /* The appropriate key is not available in the ACL. */ | ||
144 | IEEE802154_UNAVAILABLE_KEY = 0xf3, | ||
145 | /* | ||
146 | * A SET/GET request was issued with the identifier of a PIB attribute | ||
147 | * that is not supported. | ||
148 | */ | ||
149 | IEEE802154_UNSUPPORTED_ATTR = 0xf4, | ||
150 | /* | ||
151 | * A request to perform a scan operation failed because the MLME was | ||
152 | * in the process of performing a previously initiated scan operation. | ||
153 | */ | ||
154 | IEEE802154_SCAN_IN_PROGRESS = 0xfc, | ||
155 | }; | ||
156 | |||
157 | |||
158 | #endif | ||
159 | |||
160 | |||
diff --git a/include/net/ieee802154/netdevice.h b/include/net/ieee802154/netdevice.h new file mode 100644 index 000000000000..e2506af3e7c8 --- /dev/null +++ b/include/net/ieee802154/netdevice.h | |||
@@ -0,0 +1,115 @@ | |||
1 | /* | ||
2 | * An interface between IEEE802.15.4 device and rest of the kernel. | ||
3 | * | ||
4 | * Copyright (C) 2007, 2008, 2009 Siemens AG | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 | ||
8 | * as published by the Free Software Foundation. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License along | ||
16 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | * | ||
19 | * Written by: | ||
20 | * Pavel Smolenskiy <pavel.smolenskiy@gmail.com> | ||
21 | * Maxim Gorbachyov <maxim.gorbachev@siemens.com> | ||
22 | * Maxim Osipov <maxim.osipov@siemens.com> | ||
23 | * Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> | ||
24 | */ | ||
25 | |||
26 | #ifndef IEEE802154_NETDEVICE_H | ||
27 | #define IEEE802154_NETDEVICE_H | ||
28 | |||
29 | /* | ||
30 | * A control block of skb passed between the ARPHRD_IEEE802154 device | ||
31 | * and other stack parts. | ||
32 | */ | ||
33 | struct ieee802154_mac_cb { | ||
34 | u8 lqi; | ||
35 | struct ieee802154_addr sa; | ||
36 | struct ieee802154_addr da; | ||
37 | u8 flags; | ||
38 | u8 seq; | ||
39 | }; | ||
40 | |||
41 | static inline struct ieee802154_mac_cb *mac_cb(struct sk_buff *skb) | ||
42 | { | ||
43 | return (struct ieee802154_mac_cb *)skb->cb; | ||
44 | } | ||
45 | |||
46 | #define MAC_CB_FLAG_TYPEMASK ((1 << 3) - 1) | ||
47 | |||
48 | #define MAC_CB_FLAG_ACKREQ (1 << 3) | ||
49 | #define MAC_CB_FLAG_SECEN (1 << 4) | ||
50 | #define MAC_CB_FLAG_INTRAPAN (1 << 5) | ||
51 | |||
52 | static inline int mac_cb_is_ackreq(struct sk_buff *skb) | ||
53 | { | ||
54 | return mac_cb(skb)->flags & MAC_CB_FLAG_ACKREQ; | ||
55 | } | ||
56 | |||
57 | static inline int mac_cb_is_secen(struct sk_buff *skb) | ||
58 | { | ||
59 | return mac_cb(skb)->flags & MAC_CB_FLAG_SECEN; | ||
60 | } | ||
61 | |||
62 | static inline int mac_cb_is_intrapan(struct sk_buff *skb) | ||
63 | { | ||
64 | return mac_cb(skb)->flags & MAC_CB_FLAG_INTRAPAN; | ||
65 | } | ||
66 | |||
67 | static inline int mac_cb_type(struct sk_buff *skb) | ||
68 | { | ||
69 | return mac_cb(skb)->flags & MAC_CB_FLAG_TYPEMASK; | ||
70 | } | ||
71 | |||
72 | #define IEEE802154_MAC_SCAN_ED 0 | ||
73 | #define IEEE802154_MAC_SCAN_ACTIVE 1 | ||
74 | #define IEEE802154_MAC_SCAN_PASSIVE 2 | ||
75 | #define IEEE802154_MAC_SCAN_ORPHAN 3 | ||
76 | |||
77 | /* | ||
78 | * This should be located at net_device->ml_priv | ||
79 | */ | ||
80 | struct ieee802154_mlme_ops { | ||
81 | int (*assoc_req)(struct net_device *dev, | ||
82 | struct ieee802154_addr *addr, | ||
83 | u8 channel, u8 cap); | ||
84 | int (*assoc_resp)(struct net_device *dev, | ||
85 | struct ieee802154_addr *addr, | ||
86 | u16 short_addr, u8 status); | ||
87 | int (*disassoc_req)(struct net_device *dev, | ||
88 | struct ieee802154_addr *addr, | ||
89 | u8 reason); | ||
90 | int (*start_req)(struct net_device *dev, | ||
91 | struct ieee802154_addr *addr, | ||
92 | u8 channel, u8 bcn_ord, u8 sf_ord, | ||
93 | u8 pan_coord, u8 blx, u8 coord_realign); | ||
94 | int (*scan_req)(struct net_device *dev, | ||
95 | u8 type, u32 channels, u8 duration); | ||
96 | |||
97 | /* | ||
98 | * FIXME: these should become the part of PIB/MIB interface. | ||
99 | * However we still don't have IB interface of any kind | ||
100 | */ | ||
101 | u16 (*get_pan_id)(struct net_device *dev); | ||
102 | u16 (*get_short_addr)(struct net_device *dev); | ||
103 | u8 (*get_dsn)(struct net_device *dev); | ||
104 | u8 (*get_bsn)(struct net_device *dev); | ||
105 | }; | ||
106 | |||
107 | static inline struct ieee802154_mlme_ops *ieee802154_mlme_ops( | ||
108 | struct net_device *dev) | ||
109 | { | ||
110 | return dev->ml_priv; | ||
111 | } | ||
112 | |||
113 | #endif | ||
114 | |||
115 | |||
diff --git a/include/net/ieee802154/nl802154.h b/include/net/ieee802154/nl802154.h new file mode 100644 index 000000000000..78efcdf52b59 --- /dev/null +++ b/include/net/ieee802154/nl802154.h | |||
@@ -0,0 +1,41 @@ | |||
1 | /* | ||
2 | * nl802154.h | ||
3 | * | ||
4 | * Copyright (C) 2007, 2008, 2009 Siemens AG | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 | ||
8 | * as published by the Free Software Foundation. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License along | ||
16 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #ifndef IEEE802154_NL_H | ||
22 | #define IEEE802154_NL_H | ||
23 | |||
24 | struct net_device; | ||
25 | struct ieee802154_addr; | ||
26 | |||
27 | int ieee802154_nl_assoc_indic(struct net_device *dev, | ||
28 | struct ieee802154_addr *addr, u8 cap); | ||
29 | int ieee802154_nl_assoc_confirm(struct net_device *dev, | ||
30 | u16 short_addr, u8 status); | ||
31 | int ieee802154_nl_disassoc_indic(struct net_device *dev, | ||
32 | struct ieee802154_addr *addr, u8 reason); | ||
33 | int ieee802154_nl_disassoc_confirm(struct net_device *dev, | ||
34 | u8 status); | ||
35 | int ieee802154_nl_scan_confirm(struct net_device *dev, | ||
36 | u8 status, u8 scan_type, u32 unscanned, | ||
37 | u8 *edl/*, struct list_head *pan_desc_list */); | ||
38 | int ieee802154_nl_beacon_indic(struct net_device *dev, u16 panid, | ||
39 | u16 coord_addr); | ||
40 | |||
41 | #endif | ||
diff --git a/include/net/inet6_hashtables.h b/include/net/inet6_hashtables.h index f74665d7bea8..22c73a77cd99 100644 --- a/include/net/inet6_hashtables.h +++ b/include/net/inet6_hashtables.h | |||
@@ -100,7 +100,7 @@ static inline struct sock *__inet6_lookup_skb(struct inet_hashinfo *hashinfo, | |||
100 | 100 | ||
101 | if (unlikely(sk = skb_steal_sock(skb))) | 101 | if (unlikely(sk = skb_steal_sock(skb))) |
102 | return sk; | 102 | return sk; |
103 | else return __inet6_lookup(dev_net(skb->dst->dev), hashinfo, | 103 | else return __inet6_lookup(dev_net(skb_dst(skb)->dev), hashinfo, |
104 | &ipv6_hdr(skb)->saddr, sport, | 104 | &ipv6_hdr(skb)->saddr, sport, |
105 | &ipv6_hdr(skb)->daddr, ntohs(dport), | 105 | &ipv6_hdr(skb)->daddr, ntohs(dport), |
106 | inet6_iif(skb)); | 106 | inet6_iif(skb)); |
diff --git a/include/net/inet_hashtables.h b/include/net/inet_hashtables.h index a44e2248b2ef..d522dcf3031a 100644 --- a/include/net/inet_hashtables.h +++ b/include/net/inet_hashtables.h | |||
@@ -385,7 +385,7 @@ static inline struct sock *__inet_lookup_skb(struct inet_hashinfo *hashinfo, | |||
385 | if (unlikely(sk = skb_steal_sock(skb))) | 385 | if (unlikely(sk = skb_steal_sock(skb))) |
386 | return sk; | 386 | return sk; |
387 | else | 387 | else |
388 | return __inet_lookup(dev_net(skb->dst->dev), hashinfo, | 388 | return __inet_lookup(dev_net(skb_dst(skb)->dev), hashinfo, |
389 | iph->saddr, sport, | 389 | iph->saddr, sport, |
390 | iph->daddr, dport, inet_iif(skb)); | 390 | iph->daddr, dport, inet_iif(skb)); |
391 | } | 391 | } |
diff --git a/include/net/inet_sock.h b/include/net/inet_sock.h index de0ecc71cf03..20a6957af870 100644 --- a/include/net/inet_sock.h +++ b/include/net/inet_sock.h | |||
@@ -130,7 +130,8 @@ struct inet_sock { | |||
130 | freebind:1, | 130 | freebind:1, |
131 | hdrincl:1, | 131 | hdrincl:1, |
132 | mc_loop:1, | 132 | mc_loop:1, |
133 | transparent:1; | 133 | transparent:1, |
134 | mc_all:1; | ||
134 | int mc_index; | 135 | int mc_index; |
135 | __be32 mc_addr; | 136 | __be32 mc_addr; |
136 | struct ip_mc_socklist *mc_list; | 137 | struct ip_mc_socklist *mc_list; |
diff --git a/include/net/ip.h b/include/net/ip.h index 4ac7577f98d0..72c36926c26d 100644 --- a/include/net/ip.h +++ b/include/net/ip.h | |||
@@ -168,7 +168,10 @@ struct ipv4_config | |||
168 | extern struct ipv4_config ipv4_config; | 168 | extern struct ipv4_config ipv4_config; |
169 | #define IP_INC_STATS(net, field) SNMP_INC_STATS((net)->mib.ip_statistics, field) | 169 | #define IP_INC_STATS(net, field) SNMP_INC_STATS((net)->mib.ip_statistics, field) |
170 | #define IP_INC_STATS_BH(net, field) SNMP_INC_STATS_BH((net)->mib.ip_statistics, field) | 170 | #define IP_INC_STATS_BH(net, field) SNMP_INC_STATS_BH((net)->mib.ip_statistics, field) |
171 | #define IP_ADD_STATS(net, field, val) SNMP_ADD_STATS((net)->mib.ip_statistics, field, val) | ||
171 | #define IP_ADD_STATS_BH(net, field, val) SNMP_ADD_STATS_BH((net)->mib.ip_statistics, field, val) | 172 | #define IP_ADD_STATS_BH(net, field, val) SNMP_ADD_STATS_BH((net)->mib.ip_statistics, field, val) |
173 | #define IP_UPD_PO_STATS(net, field, val) SNMP_UPD_PO_STATS((net)->mib.ip_statistics, field, val) | ||
174 | #define IP_UPD_PO_STATS_BH(net, field, val) SNMP_UPD_PO_STATS_BH((net)->mib.ip_statistics, field, val) | ||
172 | #define NET_INC_STATS(net, field) SNMP_INC_STATS((net)->mib.net_statistics, field) | 175 | #define NET_INC_STATS(net, field) SNMP_INC_STATS((net)->mib.net_statistics, field) |
173 | #define NET_INC_STATS_BH(net, field) SNMP_INC_STATS_BH((net)->mib.net_statistics, field) | 176 | #define NET_INC_STATS_BH(net, field) SNMP_INC_STATS_BH((net)->mib.net_statistics, field) |
174 | #define NET_INC_STATS_USER(net, field) SNMP_INC_STATS_USER((net)->mib.net_statistics, field) | 177 | #define NET_INC_STATS_USER(net, field) SNMP_INC_STATS_USER((net)->mib.net_statistics, field) |
diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h index 5f53db7e4e57..0e1b8aebaff8 100644 --- a/include/net/ip6_route.h +++ b/include/net/ip6_route.h | |||
@@ -142,7 +142,7 @@ static inline void ip6_dst_store(struct sock *sk, struct dst_entry *dst, | |||
142 | 142 | ||
143 | static inline int ipv6_unicast_destination(struct sk_buff *skb) | 143 | static inline int ipv6_unicast_destination(struct sk_buff *skb) |
144 | { | 144 | { |
145 | struct rt6_info *rt = (struct rt6_info *) skb->dst; | 145 | struct rt6_info *rt = (struct rt6_info *) skb_dst(skb); |
146 | 146 | ||
147 | return rt->rt6i_flags & RTF_LOCAL; | 147 | return rt->rt6i_flags & RTF_LOCAL; |
148 | } | 148 | } |
diff --git a/include/net/ip_fib.h b/include/net/ip_fib.h index 8b12667f7a2b..ef91fe924ba4 100644 --- a/include/net/ip_fib.h +++ b/include/net/ip_fib.h | |||
@@ -124,14 +124,12 @@ struct fib_result_nl { | |||
124 | #ifdef CONFIG_IP_ROUTE_MULTIPATH | 124 | #ifdef CONFIG_IP_ROUTE_MULTIPATH |
125 | 125 | ||
126 | #define FIB_RES_NH(res) ((res).fi->fib_nh[(res).nh_sel]) | 126 | #define FIB_RES_NH(res) ((res).fi->fib_nh[(res).nh_sel]) |
127 | #define FIB_RES_RESET(res) ((res).nh_sel = 0) | ||
128 | 127 | ||
129 | #define FIB_TABLE_HASHSZ 2 | 128 | #define FIB_TABLE_HASHSZ 2 |
130 | 129 | ||
131 | #else /* CONFIG_IP_ROUTE_MULTIPATH */ | 130 | #else /* CONFIG_IP_ROUTE_MULTIPATH */ |
132 | 131 | ||
133 | #define FIB_RES_NH(res) ((res).fi->fib_nh[0]) | 132 | #define FIB_RES_NH(res) ((res).fi->fib_nh[0]) |
134 | #define FIB_RES_RESET(res) | ||
135 | 133 | ||
136 | #define FIB_TABLE_HASHSZ 256 | 134 | #define FIB_TABLE_HASHSZ 256 |
137 | 135 | ||
@@ -145,7 +143,6 @@ struct fib_result_nl { | |||
145 | struct fib_table { | 143 | struct fib_table { |
146 | struct hlist_node tb_hlist; | 144 | struct hlist_node tb_hlist; |
147 | u32 tb_id; | 145 | u32 tb_id; |
148 | unsigned tb_stamp; | ||
149 | int tb_default; | 146 | int tb_default; |
150 | int (*tb_lookup)(struct fib_table *tb, const struct flowi *flp, struct fib_result *res); | 147 | int (*tb_lookup)(struct fib_table *tb, const struct flowi *flp, struct fib_result *res); |
151 | int (*tb_insert)(struct fib_table *, struct fib_config *); | 148 | int (*tb_insert)(struct fib_table *, struct fib_config *); |
diff --git a/include/net/ipip.h b/include/net/ipip.h index fdf9bd743705..5d3036fa1511 100644 --- a/include/net/ipip.h +++ b/include/net/ipip.h | |||
@@ -28,11 +28,18 @@ struct ip_tunnel | |||
28 | unsigned int prl_count; /* # of entries in PRL */ | 28 | unsigned int prl_count; /* # of entries in PRL */ |
29 | }; | 29 | }; |
30 | 30 | ||
31 | /* ISATAP: default interval between RS in secondy */ | ||
32 | #define IPTUNNEL_RS_DEFAULT_DELAY (900) | ||
33 | |||
31 | struct ip_tunnel_prl_entry | 34 | struct ip_tunnel_prl_entry |
32 | { | 35 | { |
33 | struct ip_tunnel_prl_entry *next; | 36 | struct ip_tunnel_prl_entry *next; |
34 | __be32 addr; | 37 | __be32 addr; |
35 | u16 flags; | 38 | u16 flags; |
39 | unsigned long rs_delay; | ||
40 | struct timer_list rs_timer; | ||
41 | struct ip_tunnel *tunnel; | ||
42 | spinlock_t lock; | ||
36 | }; | 43 | }; |
37 | 44 | ||
38 | #define IPTUNNEL_XMIT() do { \ | 45 | #define IPTUNNEL_XMIT() do { \ |
diff --git a/include/net/ipv6.h b/include/net/ipv6.h index c1f16fc49ade..f27fd83d67d8 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h | |||
@@ -126,15 +126,28 @@ extern struct ctl_path net_ipv6_ctl_path[]; | |||
126 | SNMP_ADD_STATS##modifier((net)->mib.statname##_statistics, (field), (val));\ | 126 | SNMP_ADD_STATS##modifier((net)->mib.statname##_statistics, (field), (val));\ |
127 | }) | 127 | }) |
128 | 128 | ||
129 | #define _DEVUPD(net, statname, modifier, idev, field, val) \ | ||
130 | ({ \ | ||
131 | struct inet6_dev *_idev = (idev); \ | ||
132 | if (likely(_idev != NULL)) \ | ||
133 | SNMP_UPD_PO_STATS##modifier((_idev)->stats.statname, field, (val)); \ | ||
134 | SNMP_UPD_PO_STATS##modifier((net)->mib.statname##_statistics, field, (val));\ | ||
135 | }) | ||
136 | |||
129 | /* MIBs */ | 137 | /* MIBs */ |
130 | 138 | ||
131 | #define IP6_INC_STATS(net, idev,field) \ | 139 | #define IP6_INC_STATS(net, idev,field) \ |
132 | _DEVINC(net, ipv6, , idev, field) | 140 | _DEVINC(net, ipv6, , idev, field) |
133 | #define IP6_INC_STATS_BH(net, idev,field) \ | 141 | #define IP6_INC_STATS_BH(net, idev,field) \ |
134 | _DEVINC(net, ipv6, _BH, idev, field) | 142 | _DEVINC(net, ipv6, _BH, idev, field) |
143 | #define IP6_ADD_STATS(net, idev,field,val) \ | ||
144 | _DEVADD(net, ipv6, , idev, field, val) | ||
135 | #define IP6_ADD_STATS_BH(net, idev,field,val) \ | 145 | #define IP6_ADD_STATS_BH(net, idev,field,val) \ |
136 | _DEVADD(net, ipv6, _BH, idev, field, val) | 146 | _DEVADD(net, ipv6, _BH, idev, field, val) |
137 | 147 | #define IP6_UPD_PO_STATS(net, idev,field,val) \ | |
148 | _DEVUPD(net, ipv6, , idev, field, val) | ||
149 | #define IP6_UPD_PO_STATS_BH(net, idev,field,val) \ | ||
150 | _DEVUPD(net, ipv6, _BH, idev, field, val) | ||
138 | #define ICMP6_INC_STATS(net, idev, field) \ | 151 | #define ICMP6_INC_STATS(net, idev, field) \ |
139 | _DEVINC(net, icmpv6, , idev, field) | 152 | _DEVINC(net, icmpv6, , idev, field) |
140 | #define ICMP6_INC_STATS_BH(net, idev, field) \ | 153 | #define ICMP6_INC_STATS_BH(net, idev, field) \ |
diff --git a/include/net/iucv/af_iucv.h b/include/net/iucv/af_iucv.h index 85f80eadfa35..21ee49ffcbaf 100644 --- a/include/net/iucv/af_iucv.h +++ b/include/net/iucv/af_iucv.h | |||
@@ -73,8 +73,17 @@ struct iucv_sock { | |||
73 | struct sk_buff_head backlog_skb_q; | 73 | struct sk_buff_head backlog_skb_q; |
74 | struct sock_msg_q message_q; | 74 | struct sock_msg_q message_q; |
75 | unsigned int send_tag; | 75 | unsigned int send_tag; |
76 | u8 flags; | ||
77 | u16 msglimit; | ||
76 | }; | 78 | }; |
77 | 79 | ||
80 | /* iucv socket options (SOL_IUCV) */ | ||
81 | #define SO_IPRMDATA_MSG 0x0080 /* send/recv IPRM_DATA msgs */ | ||
82 | #define SO_MSGLIMIT 0x1000 /* get/set IUCV MSGLIMIT */ | ||
83 | |||
84 | /* iucv related control messages (scm) */ | ||
85 | #define SCM_IUCV_TRGCLS 0x0001 /* target class control message */ | ||
86 | |||
78 | struct iucv_sock_list { | 87 | struct iucv_sock_list { |
79 | struct hlist_head head; | 88 | struct hlist_head head; |
80 | rwlock_t lock; | 89 | rwlock_t lock; |
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 3b83a80e3fe0..c06104476973 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
@@ -19,7 +19,6 @@ | |||
19 | #include <linux/wireless.h> | 19 | #include <linux/wireless.h> |
20 | #include <linux/device.h> | 20 | #include <linux/device.h> |
21 | #include <linux/ieee80211.h> | 21 | #include <linux/ieee80211.h> |
22 | #include <net/wireless.h> | ||
23 | #include <net/cfg80211.h> | 22 | #include <net/cfg80211.h> |
24 | 23 | ||
25 | /** | 24 | /** |
@@ -74,22 +73,6 @@ | |||
74 | */ | 73 | */ |
75 | 74 | ||
76 | /** | 75 | /** |
77 | * struct ieee80211_ht_bss_info - describing BSS's HT characteristics | ||
78 | * | ||
79 | * This structure describes most essential parameters needed | ||
80 | * to describe 802.11n HT characteristics in a BSS. | ||
81 | * | ||
82 | * @primary_channel: channel number of primery channel | ||
83 | * @bss_cap: 802.11n's general BSS capabilities (e.g. channel width) | ||
84 | * @bss_op_mode: 802.11n's BSS operation modes (e.g. HT protection) | ||
85 | */ | ||
86 | struct ieee80211_ht_bss_info { | ||
87 | u8 primary_channel; | ||
88 | u8 bss_cap; /* use IEEE80211_HT_IE_CHA_ */ | ||
89 | u8 bss_op_mode; /* use IEEE80211_HT_IE_ */ | ||
90 | }; | ||
91 | |||
92 | /** | ||
93 | * enum ieee80211_max_queues - maximum number of queues | 76 | * enum ieee80211_max_queues - maximum number of queues |
94 | * | 77 | * |
95 | * @IEEE80211_MAX_QUEUES: Maximum number of regular device queues. | 78 | * @IEEE80211_MAX_QUEUES: Maximum number of regular device queues. |
@@ -150,6 +133,13 @@ struct ieee80211_low_level_stats { | |||
150 | * @BSS_CHANGED_ERP_SLOT: slot timing changed | 133 | * @BSS_CHANGED_ERP_SLOT: slot timing changed |
151 | * @BSS_CHANGED_HT: 802.11n parameters changed | 134 | * @BSS_CHANGED_HT: 802.11n parameters changed |
152 | * @BSS_CHANGED_BASIC_RATES: Basic rateset changed | 135 | * @BSS_CHANGED_BASIC_RATES: Basic rateset changed |
136 | * @BSS_CHANGED_BEACON_INT: Beacon interval changed | ||
137 | * @BSS_CHANGED_BSSID: BSSID changed, for whatever | ||
138 | * reason (IBSS and managed mode) | ||
139 | * @BSS_CHANGED_BEACON: Beacon data changed, retrieve | ||
140 | * new beacon (beaconing modes) | ||
141 | * @BSS_CHANGED_BEACON_ENABLED: Beaconing should be | ||
142 | * enabled/disabled (beaconing modes) | ||
153 | */ | 143 | */ |
154 | enum ieee80211_bss_change { | 144 | enum ieee80211_bss_change { |
155 | BSS_CHANGED_ASSOC = 1<<0, | 145 | BSS_CHANGED_ASSOC = 1<<0, |
@@ -158,14 +148,10 @@ enum ieee80211_bss_change { | |||
158 | BSS_CHANGED_ERP_SLOT = 1<<3, | 148 | BSS_CHANGED_ERP_SLOT = 1<<3, |
159 | BSS_CHANGED_HT = 1<<4, | 149 | BSS_CHANGED_HT = 1<<4, |
160 | BSS_CHANGED_BASIC_RATES = 1<<5, | 150 | BSS_CHANGED_BASIC_RATES = 1<<5, |
161 | }; | 151 | BSS_CHANGED_BEACON_INT = 1<<6, |
162 | 152 | BSS_CHANGED_BSSID = 1<<7, | |
163 | /** | 153 | BSS_CHANGED_BEACON = 1<<8, |
164 | * struct ieee80211_bss_ht_conf - BSS's changing HT configuration | 154 | BSS_CHANGED_BEACON_ENABLED = 1<<9, |
165 | * @operation_mode: HT operation mode (like in &struct ieee80211_ht_info) | ||
166 | */ | ||
167 | struct ieee80211_bss_ht_conf { | ||
168 | u16 operation_mode; | ||
169 | }; | 155 | }; |
170 | 156 | ||
171 | /** | 157 | /** |
@@ -187,12 +173,16 @@ struct ieee80211_bss_ht_conf { | |||
187 | * @timestamp: beacon timestamp | 173 | * @timestamp: beacon timestamp |
188 | * @beacon_int: beacon interval | 174 | * @beacon_int: beacon interval |
189 | * @assoc_capability: capabilities taken from assoc resp | 175 | * @assoc_capability: capabilities taken from assoc resp |
190 | * @ht: BSS's HT configuration | ||
191 | * @basic_rates: bitmap of basic rates, each bit stands for an | 176 | * @basic_rates: bitmap of basic rates, each bit stands for an |
192 | * index into the rate table configured by the driver in | 177 | * index into the rate table configured by the driver in |
193 | * the current band. | 178 | * the current band. |
179 | * @bssid: The BSSID for this BSS | ||
180 | * @enable_beacon: whether beaconing should be enabled or not | ||
181 | * @ht_operation_mode: HT operation mode (like in &struct ieee80211_ht_info). | ||
182 | * This field is only valid when the channel type is one of the HT types. | ||
194 | */ | 183 | */ |
195 | struct ieee80211_bss_conf { | 184 | struct ieee80211_bss_conf { |
185 | const u8 *bssid; | ||
196 | /* association related data */ | 186 | /* association related data */ |
197 | bool assoc; | 187 | bool assoc; |
198 | u16 aid; | 188 | u16 aid; |
@@ -200,12 +190,13 @@ struct ieee80211_bss_conf { | |||
200 | bool use_cts_prot; | 190 | bool use_cts_prot; |
201 | bool use_short_preamble; | 191 | bool use_short_preamble; |
202 | bool use_short_slot; | 192 | bool use_short_slot; |
193 | bool enable_beacon; | ||
203 | u8 dtim_period; | 194 | u8 dtim_period; |
204 | u16 beacon_int; | 195 | u16 beacon_int; |
205 | u16 assoc_capability; | 196 | u16 assoc_capability; |
206 | u64 timestamp; | 197 | u64 timestamp; |
207 | u32 basic_rates; | 198 | u32 basic_rates; |
208 | struct ieee80211_bss_ht_conf ht; | 199 | u16 ht_operation_mode; |
209 | }; | 200 | }; |
210 | 201 | ||
211 | /** | 202 | /** |
@@ -248,6 +239,8 @@ struct ieee80211_bss_conf { | |||
248 | * @IEEE80211_TX_INTFL_NEED_TXPROCESSING: completely internal to mac80211, | 239 | * @IEEE80211_TX_INTFL_NEED_TXPROCESSING: completely internal to mac80211, |
249 | * used to indicate that a pending frame requires TX processing before | 240 | * used to indicate that a pending frame requires TX processing before |
250 | * it can be sent out. | 241 | * it can be sent out. |
242 | * @IEEE80211_TX_INTFL_RETRIED: completely internal to mac80211, | ||
243 | * used to indicate that a frame was already retried due to PS | ||
251 | */ | 244 | */ |
252 | enum mac80211_tx_control_flags { | 245 | enum mac80211_tx_control_flags { |
253 | IEEE80211_TX_CTL_REQ_TX_STATUS = BIT(0), | 246 | IEEE80211_TX_CTL_REQ_TX_STATUS = BIT(0), |
@@ -265,6 +258,7 @@ enum mac80211_tx_control_flags { | |||
265 | IEEE80211_TX_CTL_RATE_CTRL_PROBE = BIT(12), | 258 | IEEE80211_TX_CTL_RATE_CTRL_PROBE = BIT(12), |
266 | IEEE80211_TX_INTFL_RCALGO = BIT(13), | 259 | IEEE80211_TX_INTFL_RCALGO = BIT(13), |
267 | IEEE80211_TX_INTFL_NEED_TXPROCESSING = BIT(14), | 260 | IEEE80211_TX_INTFL_NEED_TXPROCESSING = BIT(14), |
261 | IEEE80211_TX_INTFL_RETRIED = BIT(15), | ||
268 | }; | 262 | }; |
269 | 263 | ||
270 | /** | 264 | /** |
@@ -518,52 +512,76 @@ struct ieee80211_rx_status { | |||
518 | * Flags to define PHY configuration options | 512 | * Flags to define PHY configuration options |
519 | * | 513 | * |
520 | * @IEEE80211_CONF_RADIOTAP: add radiotap header at receive time (if supported) | 514 | * @IEEE80211_CONF_RADIOTAP: add radiotap header at receive time (if supported) |
521 | * @IEEE80211_CONF_PS: Enable 802.11 power save mode | 515 | * @IEEE80211_CONF_PS: Enable 802.11 power save mode (managed mode only) |
516 | * @IEEE80211_CONF_IDLE: The device is running, but idle; if the flag is set | ||
517 | * the driver should be prepared to handle configuration requests but | ||
518 | * may turn the device off as much as possible. Typically, this flag will | ||
519 | * be set when an interface is set UP but not associated or scanning, but | ||
520 | * it can also be unset in that case when monitor interfaces are active. | ||
522 | */ | 521 | */ |
523 | enum ieee80211_conf_flags { | 522 | enum ieee80211_conf_flags { |
524 | IEEE80211_CONF_RADIOTAP = (1<<0), | 523 | IEEE80211_CONF_RADIOTAP = (1<<0), |
525 | IEEE80211_CONF_PS = (1<<1), | 524 | IEEE80211_CONF_PS = (1<<1), |
525 | IEEE80211_CONF_IDLE = (1<<2), | ||
526 | }; | 526 | }; |
527 | 527 | ||
528 | 528 | ||
529 | /** | 529 | /** |
530 | * enum ieee80211_conf_changed - denotes which configuration changed | 530 | * enum ieee80211_conf_changed - denotes which configuration changed |
531 | * | 531 | * |
532 | * @IEEE80211_CONF_CHANGE_RADIO_ENABLED: the value of radio_enabled changed | 532 | * @_IEEE80211_CONF_CHANGE_RADIO_ENABLED: DEPRECATED |
533 | * @IEEE80211_CONF_CHANGE_BEACON_INTERVAL: the beacon interval changed | ||
534 | * @IEEE80211_CONF_CHANGE_LISTEN_INTERVAL: the listen interval changed | 533 | * @IEEE80211_CONF_CHANGE_LISTEN_INTERVAL: the listen interval changed |
535 | * @IEEE80211_CONF_CHANGE_RADIOTAP: the radiotap flag changed | 534 | * @IEEE80211_CONF_CHANGE_RADIOTAP: the radiotap flag changed |
536 | * @IEEE80211_CONF_CHANGE_PS: the PS flag changed | 535 | * @IEEE80211_CONF_CHANGE_PS: the PS flag or dynamic PS timeout changed |
537 | * @IEEE80211_CONF_CHANGE_DYNPS_TIMEOUT: the dynamic PS timeout changed | ||
538 | * @IEEE80211_CONF_CHANGE_POWER: the TX power changed | 536 | * @IEEE80211_CONF_CHANGE_POWER: the TX power changed |
539 | * @IEEE80211_CONF_CHANGE_CHANNEL: the channel/channel_type changed | 537 | * @IEEE80211_CONF_CHANGE_CHANNEL: the channel/channel_type changed |
540 | * @IEEE80211_CONF_CHANGE_RETRY_LIMITS: retry limits changed | 538 | * @IEEE80211_CONF_CHANGE_RETRY_LIMITS: retry limits changed |
539 | * @IEEE80211_CONF_CHANGE_IDLE: Idle flag changed | ||
541 | */ | 540 | */ |
542 | enum ieee80211_conf_changed { | 541 | enum ieee80211_conf_changed { |
543 | IEEE80211_CONF_CHANGE_RADIO_ENABLED = BIT(0), | 542 | _IEEE80211_CONF_CHANGE_RADIO_ENABLED = BIT(0), |
544 | IEEE80211_CONF_CHANGE_BEACON_INTERVAL = BIT(1), | ||
545 | IEEE80211_CONF_CHANGE_LISTEN_INTERVAL = BIT(2), | 543 | IEEE80211_CONF_CHANGE_LISTEN_INTERVAL = BIT(2), |
546 | IEEE80211_CONF_CHANGE_RADIOTAP = BIT(3), | 544 | IEEE80211_CONF_CHANGE_RADIOTAP = BIT(3), |
547 | IEEE80211_CONF_CHANGE_PS = BIT(4), | 545 | IEEE80211_CONF_CHANGE_PS = BIT(4), |
548 | IEEE80211_CONF_CHANGE_DYNPS_TIMEOUT = BIT(5), | 546 | IEEE80211_CONF_CHANGE_POWER = BIT(5), |
549 | IEEE80211_CONF_CHANGE_POWER = BIT(6), | 547 | IEEE80211_CONF_CHANGE_CHANNEL = BIT(6), |
550 | IEEE80211_CONF_CHANGE_CHANNEL = BIT(7), | 548 | IEEE80211_CONF_CHANGE_RETRY_LIMITS = BIT(7), |
551 | IEEE80211_CONF_CHANGE_RETRY_LIMITS = BIT(8), | 549 | IEEE80211_CONF_CHANGE_IDLE = BIT(8), |
552 | }; | 550 | }; |
553 | 551 | ||
552 | static inline __deprecated enum ieee80211_conf_changed | ||
553 | __IEEE80211_CONF_CHANGE_RADIO_ENABLED(void) | ||
554 | { | ||
555 | return _IEEE80211_CONF_CHANGE_RADIO_ENABLED; | ||
556 | } | ||
557 | #define IEEE80211_CONF_CHANGE_RADIO_ENABLED \ | ||
558 | __IEEE80211_CONF_CHANGE_RADIO_ENABLED() | ||
559 | |||
554 | /** | 560 | /** |
555 | * struct ieee80211_conf - configuration of the device | 561 | * struct ieee80211_conf - configuration of the device |
556 | * | 562 | * |
557 | * This struct indicates how the driver shall configure the hardware. | 563 | * This struct indicates how the driver shall configure the hardware. |
558 | * | 564 | * |
565 | * @flags: configuration flags defined above | ||
566 | * | ||
559 | * @radio_enabled: when zero, driver is required to switch off the radio. | 567 | * @radio_enabled: when zero, driver is required to switch off the radio. |
560 | * @beacon_int: beacon interval (TODO make interface config) | 568 | * @beacon_int: DEPRECATED, DO NOT USE |
569 | * | ||
561 | * @listen_interval: listen interval in units of beacon interval | 570 | * @listen_interval: listen interval in units of beacon interval |
562 | * @flags: configuration flags defined above | 571 | * @max_sleep_period: the maximum number of beacon intervals to sleep for |
572 | * before checking the beacon for a TIM bit (managed mode only); this | ||
573 | * value will be only achievable between DTIM frames, the hardware | ||
574 | * needs to check for the multicast traffic bit in DTIM beacons. | ||
575 | * This variable is valid only when the CONF_PS flag is set. | ||
576 | * @dynamic_ps_timeout: The dynamic powersave timeout (in ms), see the | ||
577 | * powersave documentation below. This variable is valid only when | ||
578 | * the CONF_PS flag is set. | ||
579 | * | ||
563 | * @power_level: requested transmit power (in dBm) | 580 | * @power_level: requested transmit power (in dBm) |
564 | * @dynamic_ps_timeout: dynamic powersave timeout (in ms) | 581 | * |
565 | * @channel: the channel to tune to | 582 | * @channel: the channel to tune to |
566 | * @channel_type: the channel (HT) type | 583 | * @channel_type: the channel (HT) type |
584 | * | ||
567 | * @long_frame_max_tx_count: Maximum number of transmissions for a "long" frame | 585 | * @long_frame_max_tx_count: Maximum number of transmissions for a "long" frame |
568 | * (a frame not RTS protected), called "dot11LongRetryLimit" in 802.11, | 586 | * (a frame not RTS protected), called "dot11LongRetryLimit" in 802.11, |
569 | * but actually means the number of transmissions not the number of retries | 587 | * but actually means the number of transmissions not the number of retries |
@@ -572,12 +590,13 @@ enum ieee80211_conf_changed { | |||
572 | * number of transmissions not the number of retries | 590 | * number of transmissions not the number of retries |
573 | */ | 591 | */ |
574 | struct ieee80211_conf { | 592 | struct ieee80211_conf { |
575 | int beacon_int; | 593 | int __deprecated beacon_int; |
576 | u32 flags; | 594 | u32 flags; |
577 | int power_level, dynamic_ps_timeout; | 595 | int power_level, dynamic_ps_timeout; |
596 | int max_sleep_period; | ||
578 | 597 | ||
579 | u16 listen_interval; | 598 | u16 listen_interval; |
580 | bool radio_enabled; | 599 | bool __deprecated radio_enabled; |
581 | 600 | ||
582 | u8 long_frame_max_tx_count, short_frame_max_tx_count; | 601 | u8 long_frame_max_tx_count, short_frame_max_tx_count; |
583 | 602 | ||
@@ -640,37 +659,6 @@ struct ieee80211_if_init_conf { | |||
640 | }; | 659 | }; |
641 | 660 | ||
642 | /** | 661 | /** |
643 | * enum ieee80211_if_conf_change - interface config change flags | ||
644 | * | ||
645 | * @IEEE80211_IFCC_BSSID: The BSSID changed. | ||
646 | * @IEEE80211_IFCC_BEACON: The beacon for this interface changed | ||
647 | * (currently AP and MESH only), use ieee80211_beacon_get(). | ||
648 | * @IEEE80211_IFCC_BEACON_ENABLED: The enable_beacon value changed. | ||
649 | */ | ||
650 | enum ieee80211_if_conf_change { | ||
651 | IEEE80211_IFCC_BSSID = BIT(0), | ||
652 | IEEE80211_IFCC_BEACON = BIT(1), | ||
653 | IEEE80211_IFCC_BEACON_ENABLED = BIT(2), | ||
654 | }; | ||
655 | |||
656 | /** | ||
657 | * struct ieee80211_if_conf - configuration of an interface | ||
658 | * | ||
659 | * @changed: parameters that have changed, see &enum ieee80211_if_conf_change. | ||
660 | * @bssid: BSSID of the network we are associated to/creating. | ||
661 | * @enable_beacon: Indicates whether beacons can be sent. | ||
662 | * This is valid only for AP/IBSS/MESH modes. | ||
663 | * | ||
664 | * This structure is passed to the config_interface() callback of | ||
665 | * &struct ieee80211_hw. | ||
666 | */ | ||
667 | struct ieee80211_if_conf { | ||
668 | u32 changed; | ||
669 | const u8 *bssid; | ||
670 | bool enable_beacon; | ||
671 | }; | ||
672 | |||
673 | /** | ||
674 | * enum ieee80211_key_alg - key algorithm | 662 | * enum ieee80211_key_alg - key algorithm |
675 | * @ALG_WEP: WEP40 or WEP104 | 663 | * @ALG_WEP: WEP40 or WEP104 |
676 | * @ALG_TKIP: TKIP | 664 | * @ALG_TKIP: TKIP |
@@ -685,16 +673,6 @@ enum ieee80211_key_alg { | |||
685 | }; | 673 | }; |
686 | 674 | ||
687 | /** | 675 | /** |
688 | * enum ieee80211_key_len - key length | ||
689 | * @LEN_WEP40: WEP 5-byte long key | ||
690 | * @LEN_WEP104: WEP 13-byte long key | ||
691 | */ | ||
692 | enum ieee80211_key_len { | ||
693 | LEN_WEP40 = 5, | ||
694 | LEN_WEP104 = 13, | ||
695 | }; | ||
696 | |||
697 | /** | ||
698 | * enum ieee80211_key_flags - key flags | 676 | * enum ieee80211_key_flags - key flags |
699 | * | 677 | * |
700 | * These flags are used for communication about keys between the driver | 678 | * These flags are used for communication about keys between the driver |
@@ -1109,11 +1087,9 @@ ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw, | |||
1109 | * need software support for parsing the TIM bitmap. This is also supported | 1087 | * need software support for parsing the TIM bitmap. This is also supported |
1110 | * by mac80211 by combining the %IEEE80211_HW_SUPPORTS_PS and | 1088 | * by mac80211 by combining the %IEEE80211_HW_SUPPORTS_PS and |
1111 | * %IEEE80211_HW_PS_NULLFUNC_STACK flags. The hardware is of course still | 1089 | * %IEEE80211_HW_PS_NULLFUNC_STACK flags. The hardware is of course still |
1112 | * required to pass up beacons. Additionally, in this case, mac80211 will | 1090 | * required to pass up beacons. The hardware is still required to handle |
1113 | * wake up the hardware when multicast traffic is announced in the beacon. | 1091 | * waking up for multicast traffic; if it cannot the driver must handle that |
1114 | * | 1092 | * as best as it can, mac80211 is too slow. |
1115 | * FIXME: I don't think we can be fast enough in software when we want to | ||
1116 | * receive multicast traffic? | ||
1117 | * | 1093 | * |
1118 | * Dynamic powersave mode is an extension to normal powersave mode in which | 1094 | * Dynamic powersave mode is an extension to normal powersave mode in which |
1119 | * the hardware stays awake for a user-specified period of time after sending | 1095 | * the hardware stays awake for a user-specified period of time after sending |
@@ -1134,11 +1110,53 @@ ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw, | |||
1134 | * way the host will only receive beacons where some relevant information | 1110 | * way the host will only receive beacons where some relevant information |
1135 | * (for example ERP protection or WMM settings) have changed. | 1111 | * (for example ERP protection or WMM settings) have changed. |
1136 | * | 1112 | * |
1137 | * Beacon filter support is informed with %IEEE80211_HW_BEACON_FILTER flag. | 1113 | * Beacon filter support is advertised with the %IEEE80211_HW_BEACON_FILTER |
1138 | * The driver needs to enable beacon filter support whenever power save is | 1114 | * hardware capability. The driver needs to enable beacon filter support |
1139 | * enabled, that is %IEEE80211_CONF_PS is set. When power save is enabled, | 1115 | * whenever power save is enabled, that is %IEEE80211_CONF_PS is set. When |
1140 | * the stack will not check for beacon miss at all and the driver needs to | 1116 | * power save is enabled, the stack will not check for beacon loss and the |
1141 | * notify about complete loss of beacons with ieee80211_beacon_loss(). | 1117 | * driver needs to notify about loss of beacons with ieee80211_beacon_loss(). |
1118 | * | ||
1119 | * The time (or number of beacons missed) until the firmware notifies the | ||
1120 | * driver of a beacon loss event (which in turn causes the driver to call | ||
1121 | * ieee80211_beacon_loss()) should be configurable and will be controlled | ||
1122 | * by mac80211 and the roaming algorithm in the future. | ||
1123 | * | ||
1124 | * Since there may be constantly changing information elements that nothing | ||
1125 | * in the software stack cares about, we will, in the future, have mac80211 | ||
1126 | * tell the driver which information elements are interesting in the sense | ||
1127 | * that we want to see changes in them. This will include | ||
1128 | * - a list of information element IDs | ||
1129 | * - a list of OUIs for the vendor information element | ||
1130 | * | ||
1131 | * Ideally, the hardware would filter out any beacons without changes in the | ||
1132 | * requested elements, but if it cannot support that it may, at the expense | ||
1133 | * of some efficiency, filter out only a subset. For example, if the device | ||
1134 | * doesn't support checking for OUIs it should pass up all changes in all | ||
1135 | * vendor information elements. | ||
1136 | * | ||
1137 | * Note that change, for the sake of simplification, also includes information | ||
1138 | * elements appearing or disappearing from the beacon. | ||
1139 | * | ||
1140 | * Some hardware supports an "ignore list" instead, just make sure nothing | ||
1141 | * that was requested is on the ignore list, and include commonly changing | ||
1142 | * information element IDs in the ignore list, for example 11 (BSS load) and | ||
1143 | * the various vendor-assigned IEs with unknown contents (128, 129, 133-136, | ||
1144 | * 149, 150, 155, 156, 173, 176, 178, 179, 219); for forward compatibility | ||
1145 | * it could also include some currently unused IDs. | ||
1146 | * | ||
1147 | * | ||
1148 | * In addition to these capabilities, hardware should support notifying the | ||
1149 | * host of changes in the beacon RSSI. This is relevant to implement roaming | ||
1150 | * when no traffic is flowing (when traffic is flowing we see the RSSI of | ||
1151 | * the received data packets). This can consist in notifying the host when | ||
1152 | * the RSSI changes significantly or when it drops below or rises above | ||
1153 | * configurable thresholds. In the future these thresholds will also be | ||
1154 | * configured by mac80211 (which gets them from userspace) to implement | ||
1155 | * them as the roaming algorithm requires. | ||
1156 | * | ||
1157 | * If the hardware cannot implement this, the driver should ask it to | ||
1158 | * periodically pass beacon frames to the host so that software can do the | ||
1159 | * signal strength threshold checking. | ||
1142 | */ | 1160 | */ |
1143 | 1161 | ||
1144 | /** | 1162 | /** |
@@ -1298,10 +1316,6 @@ enum ieee80211_ampdu_mlme_action { | |||
1298 | * This function should never fail but returns a negative error code | 1316 | * This function should never fail but returns a negative error code |
1299 | * if it does. | 1317 | * if it does. |
1300 | * | 1318 | * |
1301 | * @config_interface: Handler for configuration requests related to interfaces | ||
1302 | * (e.g. BSSID changes.) | ||
1303 | * Returns a negative error code which will be seen in userspace. | ||
1304 | * | ||
1305 | * @bss_info_changed: Handler for configuration requests related to BSS | 1319 | * @bss_info_changed: Handler for configuration requests related to BSS |
1306 | * parameters that may vary during BSS's lifespan, and may affect low | 1320 | * parameters that may vary during BSS's lifespan, and may affect low |
1307 | * level driver (e.g. assoc/disassoc status, erp parameters). | 1321 | * level driver (e.g. assoc/disassoc status, erp parameters). |
@@ -1330,11 +1344,14 @@ enum ieee80211_ampdu_mlme_action { | |||
1330 | * the scan state machine in stack. The scan must honour the channel | 1344 | * the scan state machine in stack. The scan must honour the channel |
1331 | * configuration done by the regulatory agent in the wiphy's | 1345 | * configuration done by the regulatory agent in the wiphy's |
1332 | * registered bands. The hardware (or the driver) needs to make sure | 1346 | * registered bands. The hardware (or the driver) needs to make sure |
1333 | * that power save is disabled. When the scan finishes, | 1347 | * that power save is disabled. |
1334 | * ieee80211_scan_completed() must be called; note that it also must | 1348 | * The @req ie/ie_len members are rewritten by mac80211 to contain the |
1335 | * be called when the scan cannot finish because the hardware is | 1349 | * entire IEs after the SSID, so that drivers need not look at these |
1336 | * turned off! Anything else is a bug! Returns a negative error code | 1350 | * at all but just send them after the SSID -- mac80211 includes the |
1337 | * which will be seen in userspace. | 1351 | * (extended) supported rates and HT information (where applicable). |
1352 | * When the scan finishes, ieee80211_scan_completed() must be called; | ||
1353 | * note that it also must be called when the scan cannot finish due to | ||
1354 | * any error unless this callback returned a negative error code. | ||
1338 | * | 1355 | * |
1339 | * @sw_scan_start: Notifier function that is called just before a software scan | 1356 | * @sw_scan_start: Notifier function that is called just before a software scan |
1340 | * is started. Can be NULL, if the driver doesn't need this notification. | 1357 | * is started. Can be NULL, if the driver doesn't need this notification. |
@@ -1390,6 +1407,10 @@ enum ieee80211_ampdu_mlme_action { | |||
1390 | * is the first frame we expect to perform the action on. Notice | 1407 | * is the first frame we expect to perform the action on. Notice |
1391 | * that TX/RX_STOP can pass NULL for this parameter. | 1408 | * that TX/RX_STOP can pass NULL for this parameter. |
1392 | * Returns a negative error code on failure. | 1409 | * Returns a negative error code on failure. |
1410 | * | ||
1411 | * @rfkill_poll: Poll rfkill hardware state. If you need this, you also | ||
1412 | * need to set wiphy->rfkill_poll to %true before registration, | ||
1413 | * and need to call wiphy_rfkill_set_hw_state() in the callback. | ||
1393 | */ | 1414 | */ |
1394 | struct ieee80211_ops { | 1415 | struct ieee80211_ops { |
1395 | int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb); | 1416 | int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb); |
@@ -1400,9 +1421,6 @@ struct ieee80211_ops { | |||
1400 | void (*remove_interface)(struct ieee80211_hw *hw, | 1421 | void (*remove_interface)(struct ieee80211_hw *hw, |
1401 | struct ieee80211_if_init_conf *conf); | 1422 | struct ieee80211_if_init_conf *conf); |
1402 | int (*config)(struct ieee80211_hw *hw, u32 changed); | 1423 | int (*config)(struct ieee80211_hw *hw, u32 changed); |
1403 | int (*config_interface)(struct ieee80211_hw *hw, | ||
1404 | struct ieee80211_vif *vif, | ||
1405 | struct ieee80211_if_conf *conf); | ||
1406 | void (*bss_info_changed)(struct ieee80211_hw *hw, | 1424 | void (*bss_info_changed)(struct ieee80211_hw *hw, |
1407 | struct ieee80211_vif *vif, | 1425 | struct ieee80211_vif *vif, |
1408 | struct ieee80211_bss_conf *info, | 1426 | struct ieee80211_bss_conf *info, |
@@ -1441,6 +1459,8 @@ struct ieee80211_ops { | |||
1441 | int (*ampdu_action)(struct ieee80211_hw *hw, | 1459 | int (*ampdu_action)(struct ieee80211_hw *hw, |
1442 | enum ieee80211_ampdu_mlme_action action, | 1460 | enum ieee80211_ampdu_mlme_action action, |
1443 | struct ieee80211_sta *sta, u16 tid, u16 *ssn); | 1461 | struct ieee80211_sta *sta, u16 tid, u16 *ssn); |
1462 | |||
1463 | void (*rfkill_poll)(struct ieee80211_hw *hw); | ||
1444 | }; | 1464 | }; |
1445 | 1465 | ||
1446 | /** | 1466 | /** |
@@ -1572,6 +1592,20 @@ void ieee80211_unregister_hw(struct ieee80211_hw *hw); | |||
1572 | */ | 1592 | */ |
1573 | void ieee80211_free_hw(struct ieee80211_hw *hw); | 1593 | void ieee80211_free_hw(struct ieee80211_hw *hw); |
1574 | 1594 | ||
1595 | /** | ||
1596 | * ieee80211_restart_hw - restart hardware completely | ||
1597 | * | ||
1598 | * Call this function when the hardware was restarted for some reason | ||
1599 | * (hardware error, ...) and the driver is unable to restore its state | ||
1600 | * by itself. mac80211 assumes that at this point the driver/hardware | ||
1601 | * is completely uninitialised and stopped, it starts the process by | ||
1602 | * calling the ->start() operation. The driver will need to reset all | ||
1603 | * internal state that it has prior to calling this function. | ||
1604 | * | ||
1605 | * @hw: the hardware to restart | ||
1606 | */ | ||
1607 | void ieee80211_restart_hw(struct ieee80211_hw *hw); | ||
1608 | |||
1575 | /* trick to avoid symbol clashes with the ieee80211 subsystem */ | 1609 | /* trick to avoid symbol clashes with the ieee80211 subsystem */ |
1576 | void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb, | 1610 | void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb, |
1577 | struct ieee80211_rx_status *status); | 1611 | struct ieee80211_rx_status *status); |
@@ -1775,24 +1809,6 @@ struct sk_buff * | |||
1775 | ieee80211_get_buffered_bc(struct ieee80211_hw *hw, struct ieee80211_vif *vif); | 1809 | ieee80211_get_buffered_bc(struct ieee80211_hw *hw, struct ieee80211_vif *vif); |
1776 | 1810 | ||
1777 | /** | 1811 | /** |
1778 | * ieee80211_get_hdrlen_from_skb - get header length from data | ||
1779 | * | ||
1780 | * Given an skb with a raw 802.11 header at the data pointer this function | ||
1781 | * returns the 802.11 header length in bytes (not including encryption | ||
1782 | * headers). If the data in the sk_buff is too short to contain a valid 802.11 | ||
1783 | * header the function returns 0. | ||
1784 | * | ||
1785 | * @skb: the frame | ||
1786 | */ | ||
1787 | unsigned int ieee80211_get_hdrlen_from_skb(const struct sk_buff *skb); | ||
1788 | |||
1789 | /** | ||
1790 | * ieee80211_hdrlen - get header length in bytes from frame control | ||
1791 | * @fc: frame control field in little-endian format | ||
1792 | */ | ||
1793 | unsigned int ieee80211_hdrlen(__le16 fc); | ||
1794 | |||
1795 | /** | ||
1796 | * ieee80211_get_tkip_key - get a TKIP rc4 for skb | 1812 | * ieee80211_get_tkip_key - get a TKIP rc4 for skb |
1797 | * | 1813 | * |
1798 | * This function computes a TKIP rc4 key for an skb. It computes | 1814 | * This function computes a TKIP rc4 key for an skb. It computes |
diff --git a/include/net/netfilter/ipv4/nf_conntrack_icmp.h b/include/net/netfilter/ipv4/nf_conntrack_icmp.h deleted file mode 100644 index 3dd22cff23ec..000000000000 --- a/include/net/netfilter/ipv4/nf_conntrack_icmp.h +++ /dev/null | |||
@@ -1,11 +0,0 @@ | |||
1 | #ifndef _NF_CONNTRACK_ICMP_H | ||
2 | #define _NF_CONNTRACK_ICMP_H | ||
3 | /* ICMP tracking. */ | ||
4 | #include <asm/atomic.h> | ||
5 | |||
6 | struct ip_ct_icmp | ||
7 | { | ||
8 | /* Optimization: when number in == number out, forget immediately. */ | ||
9 | atomic_t count; | ||
10 | }; | ||
11 | #endif /* _NF_CONNTRACK_ICMP_H */ | ||
diff --git a/include/net/netfilter/ipv6/nf_conntrack_icmpv6.h b/include/net/netfilter/ipv6/nf_conntrack_icmpv6.h index 86591afda29c..67edd50a398a 100644 --- a/include/net/netfilter/ipv6/nf_conntrack_icmpv6.h +++ b/include/net/netfilter/ipv6/nf_conntrack_icmpv6.h | |||
@@ -9,7 +9,6 @@ | |||
9 | 9 | ||
10 | #ifndef _NF_CONNTRACK_ICMPV6_H | 10 | #ifndef _NF_CONNTRACK_ICMPV6_H |
11 | #define _NF_CONNTRACK_ICMPV6_H | 11 | #define _NF_CONNTRACK_ICMPV6_H |
12 | #include <asm/atomic.h> | ||
13 | 12 | ||
14 | #ifndef ICMPV6_NI_QUERY | 13 | #ifndef ICMPV6_NI_QUERY |
15 | #define ICMPV6_NI_QUERY 139 | 14 | #define ICMPV6_NI_QUERY 139 |
@@ -18,10 +17,4 @@ | |||
18 | #define ICMPV6_NI_REPLY 140 | 17 | #define ICMPV6_NI_REPLY 140 |
19 | #endif | 18 | #endif |
20 | 19 | ||
21 | struct nf_ct_icmpv6 | ||
22 | { | ||
23 | /* Optimization: when number in == number out, forget immediately. */ | ||
24 | atomic_t count; | ||
25 | }; | ||
26 | |||
27 | #endif /* _NF_CONNTRACK_ICMPV6_H */ | 20 | #endif /* _NF_CONNTRACK_ICMPV6_H */ |
diff --git a/include/net/netfilter/nf_conntrack.h b/include/net/netfilter/nf_conntrack.h index 6c3f964de9e1..a632689b61b4 100644 --- a/include/net/netfilter/nf_conntrack.h +++ b/include/net/netfilter/nf_conntrack.h | |||
@@ -23,7 +23,6 @@ | |||
23 | #include <linux/netfilter/nf_conntrack_dccp.h> | 23 | #include <linux/netfilter/nf_conntrack_dccp.h> |
24 | #include <linux/netfilter/nf_conntrack_sctp.h> | 24 | #include <linux/netfilter/nf_conntrack_sctp.h> |
25 | #include <linux/netfilter/nf_conntrack_proto_gre.h> | 25 | #include <linux/netfilter/nf_conntrack_proto_gre.h> |
26 | #include <net/netfilter/ipv4/nf_conntrack_icmp.h> | ||
27 | #include <net/netfilter/ipv6/nf_conntrack_icmpv6.h> | 26 | #include <net/netfilter/ipv6/nf_conntrack_icmpv6.h> |
28 | 27 | ||
29 | #include <net/netfilter/nf_conntrack_tuple.h> | 28 | #include <net/netfilter/nf_conntrack_tuple.h> |
@@ -34,8 +33,6 @@ union nf_conntrack_proto { | |||
34 | struct nf_ct_dccp dccp; | 33 | struct nf_ct_dccp dccp; |
35 | struct ip_ct_sctp sctp; | 34 | struct ip_ct_sctp sctp; |
36 | struct ip_ct_tcp tcp; | 35 | struct ip_ct_tcp tcp; |
37 | struct ip_ct_icmp icmp; | ||
38 | struct nf_ct_icmpv6 icmpv6; | ||
39 | struct nf_ct_gre gre; | 36 | struct nf_ct_gre gre; |
40 | }; | 37 | }; |
41 | 38 | ||
@@ -96,6 +93,8 @@ struct nf_conn { | |||
96 | plus 1 for any connection(s) we are `master' for */ | 93 | plus 1 for any connection(s) we are `master' for */ |
97 | struct nf_conntrack ct_general; | 94 | struct nf_conntrack ct_general; |
98 | 95 | ||
96 | spinlock_t lock; | ||
97 | |||
99 | /* XXX should I move this to the tail ? - Y.K */ | 98 | /* XXX should I move this to the tail ? - Y.K */ |
100 | /* These are my tuples; original and reply */ | 99 | /* These are my tuples; original and reply */ |
101 | struct nf_conntrack_tuple_hash tuplehash[IP_CT_DIR_MAX]; | 100 | struct nf_conntrack_tuple_hash tuplehash[IP_CT_DIR_MAX]; |
@@ -144,6 +143,8 @@ static inline u_int8_t nf_ct_protonum(const struct nf_conn *ct) | |||
144 | return ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.protonum; | 143 | return ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.protonum; |
145 | } | 144 | } |
146 | 145 | ||
146 | #define nf_ct_tuple(ct, dir) (&(ct)->tuplehash[dir].tuple) | ||
147 | |||
147 | /* get master conntrack via master expectation */ | 148 | /* get master conntrack via master expectation */ |
148 | #define master_ct(conntr) (conntr->master) | 149 | #define master_ct(conntr) (conntr->master) |
149 | 150 | ||
@@ -200,8 +201,10 @@ extern struct nf_conntrack_tuple_hash * | |||
200 | __nf_conntrack_find(struct net *net, const struct nf_conntrack_tuple *tuple); | 201 | __nf_conntrack_find(struct net *net, const struct nf_conntrack_tuple *tuple); |
201 | 202 | ||
202 | extern void nf_conntrack_hash_insert(struct nf_conn *ct); | 203 | extern void nf_conntrack_hash_insert(struct nf_conn *ct); |
204 | extern void nf_ct_delete_from_lists(struct nf_conn *ct); | ||
205 | extern void nf_ct_insert_dying_list(struct nf_conn *ct); | ||
203 | 206 | ||
204 | extern void nf_conntrack_flush(struct net *net, u32 pid, int report); | 207 | extern void nf_conntrack_flush_report(struct net *net, u32 pid, int report); |
205 | 208 | ||
206 | extern bool nf_ct_get_tuplepr(const struct sk_buff *skb, | 209 | extern bool nf_ct_get_tuplepr(const struct sk_buff *skb, |
207 | unsigned int nhoff, u_int16_t l3num, | 210 | unsigned int nhoff, u_int16_t l3num, |
diff --git a/include/net/netfilter/nf_conntrack_ecache.h b/include/net/netfilter/nf_conntrack_ecache.h index 0ff0dc69ca4a..4f20d58e2ab7 100644 --- a/include/net/netfilter/nf_conntrack_ecache.h +++ b/include/net/netfilter/nf_conntrack_ecache.h | |||
@@ -6,17 +6,54 @@ | |||
6 | #define _NF_CONNTRACK_ECACHE_H | 6 | #define _NF_CONNTRACK_ECACHE_H |
7 | #include <net/netfilter/nf_conntrack.h> | 7 | #include <net/netfilter/nf_conntrack.h> |
8 | 8 | ||
9 | #include <linux/notifier.h> | ||
10 | #include <linux/interrupt.h> | ||
11 | #include <net/net_namespace.h> | 9 | #include <net/net_namespace.h> |
12 | #include <net/netfilter/nf_conntrack_expect.h> | 10 | #include <net/netfilter/nf_conntrack_expect.h> |
11 | #include <linux/netfilter/nf_conntrack_common.h> | ||
12 | #include <linux/netfilter/nf_conntrack_tuple_common.h> | ||
13 | #include <net/netfilter/nf_conntrack_extend.h> | ||
14 | |||
15 | /* Connection tracking event types */ | ||
16 | enum ip_conntrack_events | ||
17 | { | ||
18 | IPCT_NEW = 0, /* new conntrack */ | ||
19 | IPCT_RELATED = 1, /* related conntrack */ | ||
20 | IPCT_DESTROY = 2, /* destroyed conntrack */ | ||
21 | IPCT_STATUS = 3, /* status has changed */ | ||
22 | IPCT_PROTOINFO = 4, /* protocol information has changed */ | ||
23 | IPCT_HELPER = 5, /* new helper has been set */ | ||
24 | IPCT_MARK = 6, /* new mark has been set */ | ||
25 | IPCT_NATSEQADJ = 7, /* NAT is doing sequence adjustment */ | ||
26 | IPCT_SECMARK = 8, /* new security mark has been set */ | ||
27 | }; | ||
28 | |||
29 | enum ip_conntrack_expect_events { | ||
30 | IPEXP_NEW = 0, /* new expectation */ | ||
31 | }; | ||
13 | 32 | ||
14 | #ifdef CONFIG_NF_CONNTRACK_EVENTS | ||
15 | struct nf_conntrack_ecache { | 33 | struct nf_conntrack_ecache { |
16 | struct nf_conn *ct; | 34 | unsigned long cache; /* bitops want long */ |
17 | unsigned int events; | 35 | unsigned long missed; /* missed events */ |
36 | u32 pid; /* netlink pid of destroyer */ | ||
37 | }; | ||
38 | |||
39 | static inline struct nf_conntrack_ecache * | ||
40 | nf_ct_ecache_find(const struct nf_conn *ct) | ||
41 | { | ||
42 | return nf_ct_ext_find(ct, NF_CT_EXT_ECACHE); | ||
43 | } | ||
44 | |||
45 | static inline struct nf_conntrack_ecache * | ||
46 | nf_ct_ecache_ext_add(struct nf_conn *ct, gfp_t gfp) | ||
47 | { | ||
48 | struct net *net = nf_ct_net(ct); | ||
49 | |||
50 | if (!net->ct.sysctl_events) | ||
51 | return NULL; | ||
52 | |||
53 | return nf_ct_ext_add(ct, NF_CT_EXT_ECACHE, gfp); | ||
18 | }; | 54 | }; |
19 | 55 | ||
56 | #ifdef CONFIG_NF_CONNTRACK_EVENTS | ||
20 | /* This structure is passed to event handler */ | 57 | /* This structure is passed to event handler */ |
21 | struct nf_ct_event { | 58 | struct nf_ct_event { |
22 | struct nf_conn *ct; | 59 | struct nf_conn *ct; |
@@ -24,47 +61,96 @@ struct nf_ct_event { | |||
24 | int report; | 61 | int report; |
25 | }; | 62 | }; |
26 | 63 | ||
27 | extern struct atomic_notifier_head nf_conntrack_chain; | 64 | struct nf_ct_event_notifier { |
28 | extern int nf_conntrack_register_notifier(struct notifier_block *nb); | 65 | int (*fcn)(unsigned int events, struct nf_ct_event *item); |
29 | extern int nf_conntrack_unregister_notifier(struct notifier_block *nb); | 66 | }; |
67 | |||
68 | extern struct nf_ct_event_notifier *nf_conntrack_event_cb; | ||
69 | extern int nf_conntrack_register_notifier(struct nf_ct_event_notifier *nb); | ||
70 | extern void nf_conntrack_unregister_notifier(struct nf_ct_event_notifier *nb); | ||
30 | 71 | ||
31 | extern void nf_ct_deliver_cached_events(const struct nf_conn *ct); | 72 | extern void nf_ct_deliver_cached_events(struct nf_conn *ct); |
32 | extern void __nf_ct_event_cache_init(struct nf_conn *ct); | ||
33 | extern void nf_ct_event_cache_flush(struct net *net); | ||
34 | 73 | ||
35 | static inline void | 74 | static inline void |
36 | nf_conntrack_event_cache(enum ip_conntrack_events event, struct nf_conn *ct) | 75 | nf_conntrack_event_cache(enum ip_conntrack_events event, struct nf_conn *ct) |
37 | { | 76 | { |
77 | struct nf_conntrack_ecache *e; | ||
78 | |||
79 | if (nf_conntrack_event_cb == NULL) | ||
80 | return; | ||
81 | |||
82 | e = nf_ct_ecache_find(ct); | ||
83 | if (e == NULL) | ||
84 | return; | ||
85 | |||
86 | set_bit(event, &e->cache); | ||
87 | } | ||
88 | |||
89 | static inline int | ||
90 | nf_conntrack_eventmask_report(unsigned int eventmask, | ||
91 | struct nf_conn *ct, | ||
92 | u32 pid, | ||
93 | int report) | ||
94 | { | ||
95 | int ret = 0; | ||
38 | struct net *net = nf_ct_net(ct); | 96 | struct net *net = nf_ct_net(ct); |
39 | struct nf_conntrack_ecache *ecache; | 97 | struct nf_ct_event_notifier *notify; |
40 | 98 | struct nf_conntrack_ecache *e; | |
41 | local_bh_disable(); | 99 | |
42 | ecache = per_cpu_ptr(net->ct.ecache, raw_smp_processor_id()); | 100 | rcu_read_lock(); |
43 | if (ct != ecache->ct) | 101 | notify = rcu_dereference(nf_conntrack_event_cb); |
44 | __nf_ct_event_cache_init(ct); | 102 | if (notify == NULL) |
45 | ecache->events |= event; | 103 | goto out_unlock; |
46 | local_bh_enable(); | 104 | |
105 | if (!net->ct.sysctl_events) | ||
106 | goto out_unlock; | ||
107 | |||
108 | e = nf_ct_ecache_find(ct); | ||
109 | if (e == NULL) | ||
110 | goto out_unlock; | ||
111 | |||
112 | if (nf_ct_is_confirmed(ct) && !nf_ct_is_dying(ct)) { | ||
113 | struct nf_ct_event item = { | ||
114 | .ct = ct, | ||
115 | .pid = e->pid ? e->pid : pid, | ||
116 | .report = report | ||
117 | }; | ||
118 | /* This is a resent of a destroy event? If so, skip missed */ | ||
119 | unsigned long missed = e->pid ? 0 : e->missed; | ||
120 | |||
121 | ret = notify->fcn(eventmask | missed, &item); | ||
122 | if (unlikely(ret < 0 || missed)) { | ||
123 | spin_lock_bh(&ct->lock); | ||
124 | if (ret < 0) { | ||
125 | /* This is a destroy event that has been | ||
126 | * triggered by a process, we store the PID | ||
127 | * to include it in the retransmission. */ | ||
128 | if (eventmask & (1 << IPCT_DESTROY) && | ||
129 | e->pid == 0 && pid != 0) | ||
130 | e->pid = pid; | ||
131 | else | ||
132 | e->missed |= eventmask; | ||
133 | } else | ||
134 | e->missed &= ~missed; | ||
135 | spin_unlock_bh(&ct->lock); | ||
136 | } | ||
137 | } | ||
138 | out_unlock: | ||
139 | rcu_read_unlock(); | ||
140 | return ret; | ||
47 | } | 141 | } |
48 | 142 | ||
49 | static inline void | 143 | static inline int |
50 | nf_conntrack_event_report(enum ip_conntrack_events event, | 144 | nf_conntrack_event_report(enum ip_conntrack_events event, struct nf_conn *ct, |
51 | struct nf_conn *ct, | 145 | u32 pid, int report) |
52 | u32 pid, | ||
53 | int report) | ||
54 | { | 146 | { |
55 | struct nf_ct_event item = { | 147 | return nf_conntrack_eventmask_report(1 << event, ct, pid, report); |
56 | .ct = ct, | ||
57 | .pid = pid, | ||
58 | .report = report | ||
59 | }; | ||
60 | if (nf_ct_is_confirmed(ct) && !nf_ct_is_dying(ct)) | ||
61 | atomic_notifier_call_chain(&nf_conntrack_chain, event, &item); | ||
62 | } | 148 | } |
63 | 149 | ||
64 | static inline void | 150 | static inline int |
65 | nf_conntrack_event(enum ip_conntrack_events event, struct nf_conn *ct) | 151 | nf_conntrack_event(enum ip_conntrack_events event, struct nf_conn *ct) |
66 | { | 152 | { |
67 | nf_conntrack_event_report(event, ct, 0, 0); | 153 | return nf_conntrack_eventmask_report(1 << event, ct, 0, 0); |
68 | } | 154 | } |
69 | 155 | ||
70 | struct nf_exp_event { | 156 | struct nf_exp_event { |
@@ -73,9 +159,13 @@ struct nf_exp_event { | |||
73 | int report; | 159 | int report; |
74 | }; | 160 | }; |
75 | 161 | ||
76 | extern struct atomic_notifier_head nf_ct_expect_chain; | 162 | struct nf_exp_event_notifier { |
77 | extern int nf_ct_expect_register_notifier(struct notifier_block *nb); | 163 | int (*fcn)(unsigned int events, struct nf_exp_event *item); |
78 | extern int nf_ct_expect_unregister_notifier(struct notifier_block *nb); | 164 | }; |
165 | |||
166 | extern struct nf_exp_event_notifier *nf_expect_event_cb; | ||
167 | extern int nf_ct_expect_register_notifier(struct nf_exp_event_notifier *nb); | ||
168 | extern void nf_ct_expect_unregister_notifier(struct nf_exp_event_notifier *nb); | ||
79 | 169 | ||
80 | static inline void | 170 | static inline void |
81 | nf_ct_expect_event_report(enum ip_conntrack_expect_events event, | 171 | nf_ct_expect_event_report(enum ip_conntrack_expect_events event, |
@@ -83,12 +173,27 @@ nf_ct_expect_event_report(enum ip_conntrack_expect_events event, | |||
83 | u32 pid, | 173 | u32 pid, |
84 | int report) | 174 | int report) |
85 | { | 175 | { |
86 | struct nf_exp_event item = { | 176 | struct net *net = nf_ct_exp_net(exp); |
87 | .exp = exp, | 177 | struct nf_exp_event_notifier *notify; |
88 | .pid = pid, | 178 | |
89 | .report = report | 179 | rcu_read_lock(); |
90 | }; | 180 | notify = rcu_dereference(nf_expect_event_cb); |
91 | atomic_notifier_call_chain(&nf_ct_expect_chain, event, &item); | 181 | if (notify == NULL) |
182 | goto out_unlock; | ||
183 | |||
184 | if (!net->ct.sysctl_events) | ||
185 | goto out_unlock; | ||
186 | |||
187 | { | ||
188 | struct nf_exp_event item = { | ||
189 | .exp = exp, | ||
190 | .pid = pid, | ||
191 | .report = report | ||
192 | }; | ||
193 | notify->fcn(1 << event, &item); | ||
194 | } | ||
195 | out_unlock: | ||
196 | rcu_read_unlock(); | ||
92 | } | 197 | } |
93 | 198 | ||
94 | static inline void | 199 | static inline void |
@@ -105,12 +210,16 @@ extern void nf_conntrack_ecache_fini(struct net *net); | |||
105 | 210 | ||
106 | static inline void nf_conntrack_event_cache(enum ip_conntrack_events event, | 211 | static inline void nf_conntrack_event_cache(enum ip_conntrack_events event, |
107 | struct nf_conn *ct) {} | 212 | struct nf_conn *ct) {} |
108 | static inline void nf_conntrack_event(enum ip_conntrack_events event, | 213 | static inline int nf_conntrack_eventmask_report(unsigned int eventmask, |
109 | struct nf_conn *ct) {} | 214 | struct nf_conn *ct, |
110 | static inline void nf_conntrack_event_report(enum ip_conntrack_events event, | 215 | u32 pid, |
111 | struct nf_conn *ct, | 216 | int report) { return 0; } |
112 | u32 pid, | 217 | static inline int nf_conntrack_event(enum ip_conntrack_events event, |
113 | int report) {} | 218 | struct nf_conn *ct) { return 0; } |
219 | static inline int nf_conntrack_event_report(enum ip_conntrack_events event, | ||
220 | struct nf_conn *ct, | ||
221 | u32 pid, | ||
222 | int report) { return 0; } | ||
114 | static inline void nf_ct_deliver_cached_events(const struct nf_conn *ct) {} | 223 | static inline void nf_ct_deliver_cached_events(const struct nf_conn *ct) {} |
115 | static inline void nf_ct_expect_event(enum ip_conntrack_expect_events event, | 224 | static inline void nf_ct_expect_event(enum ip_conntrack_expect_events event, |
116 | struct nf_conntrack_expect *exp) {} | 225 | struct nf_conntrack_expect *exp) {} |
@@ -118,7 +227,6 @@ static inline void nf_ct_expect_event_report(enum ip_conntrack_expect_events e, | |||
118 | struct nf_conntrack_expect *exp, | 227 | struct nf_conntrack_expect *exp, |
119 | u32 pid, | 228 | u32 pid, |
120 | int report) {} | 229 | int report) {} |
121 | static inline void nf_ct_event_cache_flush(struct net *net) {} | ||
122 | 230 | ||
123 | static inline int nf_conntrack_ecache_init(struct net *net) | 231 | static inline int nf_conntrack_ecache_init(struct net *net) |
124 | { | 232 | { |
diff --git a/include/net/netfilter/nf_conntrack_extend.h b/include/net/netfilter/nf_conntrack_extend.h index da8ee52613a5..7f8fc5d123c5 100644 --- a/include/net/netfilter/nf_conntrack_extend.h +++ b/include/net/netfilter/nf_conntrack_extend.h | |||
@@ -8,12 +8,14 @@ enum nf_ct_ext_id | |||
8 | NF_CT_EXT_HELPER, | 8 | NF_CT_EXT_HELPER, |
9 | NF_CT_EXT_NAT, | 9 | NF_CT_EXT_NAT, |
10 | NF_CT_EXT_ACCT, | 10 | NF_CT_EXT_ACCT, |
11 | NF_CT_EXT_ECACHE, | ||
11 | NF_CT_EXT_NUM, | 12 | NF_CT_EXT_NUM, |
12 | }; | 13 | }; |
13 | 14 | ||
14 | #define NF_CT_EXT_HELPER_TYPE struct nf_conn_help | 15 | #define NF_CT_EXT_HELPER_TYPE struct nf_conn_help |
15 | #define NF_CT_EXT_NAT_TYPE struct nf_conn_nat | 16 | #define NF_CT_EXT_NAT_TYPE struct nf_conn_nat |
16 | #define NF_CT_EXT_ACCT_TYPE struct nf_conn_counter | 17 | #define NF_CT_EXT_ACCT_TYPE struct nf_conn_counter |
18 | #define NF_CT_EXT_ECACHE_TYPE struct nf_conntrack_ecache | ||
17 | 19 | ||
18 | /* Extensions: optional stuff which isn't permanently in struct. */ | 20 | /* Extensions: optional stuff which isn't permanently in struct. */ |
19 | struct nf_ct_ext { | 21 | struct nf_ct_ext { |
diff --git a/include/net/netfilter/nf_conntrack_helper.h b/include/net/netfilter/nf_conntrack_helper.h index ee2a4b369a04..1b7068000927 100644 --- a/include/net/netfilter/nf_conntrack_helper.h +++ b/include/net/netfilter/nf_conntrack_helper.h | |||
@@ -50,6 +50,8 @@ extern struct nf_conn_help *nf_ct_helper_ext_add(struct nf_conn *ct, gfp_t gfp); | |||
50 | 50 | ||
51 | extern int __nf_ct_try_assign_helper(struct nf_conn *ct, gfp_t flags); | 51 | extern int __nf_ct_try_assign_helper(struct nf_conn *ct, gfp_t flags); |
52 | 52 | ||
53 | extern void nf_ct_helper_destroy(struct nf_conn *ct); | ||
54 | |||
53 | static inline struct nf_conn_help *nfct_help(const struct nf_conn *ct) | 55 | static inline struct nf_conn_help *nfct_help(const struct nf_conn *ct) |
54 | { | 56 | { |
55 | return nf_ct_ext_find(ct, NF_CT_EXT_HELPER); | 57 | return nf_ct_ext_find(ct, NF_CT_EXT_HELPER); |
diff --git a/include/net/netfilter/nf_conntrack_l4proto.h b/include/net/netfilter/nf_conntrack_l4proto.h index ba32ed7bdabe..3767fb41e541 100644 --- a/include/net/netfilter/nf_conntrack_l4proto.h +++ b/include/net/netfilter/nf_conntrack_l4proto.h | |||
@@ -59,11 +59,11 @@ struct nf_conntrack_l4proto | |||
59 | const struct nf_conntrack_tuple *); | 59 | const struct nf_conntrack_tuple *); |
60 | 60 | ||
61 | /* Print out the private part of the conntrack. */ | 61 | /* Print out the private part of the conntrack. */ |
62 | int (*print_conntrack)(struct seq_file *s, const struct nf_conn *); | 62 | int (*print_conntrack)(struct seq_file *s, struct nf_conn *); |
63 | 63 | ||
64 | /* convert protoinfo to nfnetink attributes */ | 64 | /* convert protoinfo to nfnetink attributes */ |
65 | int (*to_nlattr)(struct sk_buff *skb, struct nlattr *nla, | 65 | int (*to_nlattr)(struct sk_buff *skb, struct nlattr *nla, |
66 | const struct nf_conn *ct); | 66 | struct nf_conn *ct); |
67 | /* Calculate protoinfo nlattr size */ | 67 | /* Calculate protoinfo nlattr size */ |
68 | int (*nlattr_size)(void); | 68 | int (*nlattr_size)(void); |
69 | 69 | ||
diff --git a/include/net/netlink.h b/include/net/netlink.h index eddb50289d6d..007bdb07dabb 100644 --- a/include/net/netlink.h +++ b/include/net/netlink.h | |||
@@ -940,6 +940,15 @@ static inline u64 nla_get_u64(const struct nlattr *nla) | |||
940 | } | 940 | } |
941 | 941 | ||
942 | /** | 942 | /** |
943 | * nla_get_be64 - return payload of __be64 attribute | ||
944 | * @nla: __be64 netlink attribute | ||
945 | */ | ||
946 | static inline __be64 nla_get_be64(const struct nlattr *nla) | ||
947 | { | ||
948 | return *(__be64 *) nla_data(nla); | ||
949 | } | ||
950 | |||
951 | /** | ||
943 | * nla_get_flag - return payload of flag attribute | 952 | * nla_get_flag - return payload of flag attribute |
944 | * @nla: flag netlink attribute | 953 | * @nla: flag netlink attribute |
945 | */ | 954 | */ |
diff --git a/include/net/netns/conntrack.h b/include/net/netns/conntrack.h index 9dc58402bc09..ba1ba0c5efd1 100644 --- a/include/net/netns/conntrack.h +++ b/include/net/netns/conntrack.h | |||
@@ -14,16 +14,17 @@ struct netns_ct { | |||
14 | struct hlist_nulls_head *hash; | 14 | struct hlist_nulls_head *hash; |
15 | struct hlist_head *expect_hash; | 15 | struct hlist_head *expect_hash; |
16 | struct hlist_nulls_head unconfirmed; | 16 | struct hlist_nulls_head unconfirmed; |
17 | struct hlist_nulls_head dying; | ||
17 | struct ip_conntrack_stat *stat; | 18 | struct ip_conntrack_stat *stat; |
18 | #ifdef CONFIG_NF_CONNTRACK_EVENTS | 19 | int sysctl_events; |
19 | struct nf_conntrack_ecache *ecache; | 20 | unsigned int sysctl_events_retry_timeout; |
20 | #endif | ||
21 | int sysctl_acct; | 21 | int sysctl_acct; |
22 | int sysctl_checksum; | 22 | int sysctl_checksum; |
23 | unsigned int sysctl_log_invalid; /* Log invalid packets */ | 23 | unsigned int sysctl_log_invalid; /* Log invalid packets */ |
24 | #ifdef CONFIG_SYSCTL | 24 | #ifdef CONFIG_SYSCTL |
25 | struct ctl_table_header *sysctl_header; | 25 | struct ctl_table_header *sysctl_header; |
26 | struct ctl_table_header *acct_sysctl_header; | 26 | struct ctl_table_header *acct_sysctl_header; |
27 | struct ctl_table_header *event_sysctl_header; | ||
27 | #endif | 28 | #endif |
28 | int hash_vmalloc; | 29 | int hash_vmalloc; |
29 | int expect_vmalloc; | 30 | int expect_vmalloc; |
diff --git a/include/net/pkt_sched.h b/include/net/pkt_sched.h index e37fe3129c17..82a3191375f5 100644 --- a/include/net/pkt_sched.h +++ b/include/net/pkt_sched.h | |||
@@ -41,16 +41,17 @@ static inline void *qdisc_priv(struct Qdisc *q) | |||
41 | typedef u64 psched_time_t; | 41 | typedef u64 psched_time_t; |
42 | typedef long psched_tdiff_t; | 42 | typedef long psched_tdiff_t; |
43 | 43 | ||
44 | /* Avoid doing 64 bit divide by 1000 */ | 44 | /* Avoid doing 64 bit divide */ |
45 | #define PSCHED_US2NS(x) ((s64)(x) << 10) | 45 | #define PSCHED_SHIFT 6 |
46 | #define PSCHED_NS2US(x) ((x) >> 10) | 46 | #define PSCHED_TICKS2NS(x) ((s64)(x) << PSCHED_SHIFT) |
47 | #define PSCHED_NS2TICKS(x) ((x) >> PSCHED_SHIFT) | ||
47 | 48 | ||
48 | #define PSCHED_TICKS_PER_SEC PSCHED_NS2US(NSEC_PER_SEC) | 49 | #define PSCHED_TICKS_PER_SEC PSCHED_NS2TICKS(NSEC_PER_SEC) |
49 | #define PSCHED_PASTPERFECT 0 | 50 | #define PSCHED_PASTPERFECT 0 |
50 | 51 | ||
51 | static inline psched_time_t psched_get_time(void) | 52 | static inline psched_time_t psched_get_time(void) |
52 | { | 53 | { |
53 | return PSCHED_NS2US(ktime_to_ns(ktime_get())); | 54 | return PSCHED_NS2TICKS(ktime_to_ns(ktime_get())); |
54 | } | 55 | } |
55 | 56 | ||
56 | static inline psched_tdiff_t | 57 | static inline psched_tdiff_t |
diff --git a/include/net/regulatory.h b/include/net/regulatory.h new file mode 100644 index 000000000000..47995b81c5d7 --- /dev/null +++ b/include/net/regulatory.h | |||
@@ -0,0 +1,101 @@ | |||
1 | #ifndef __NET_REGULATORY_H | ||
2 | #define __NET_REGULATORY_H | ||
3 | /* | ||
4 | * regulatory support structures | ||
5 | * | ||
6 | * Copyright 2008-2009 Luis R. Rodriguez <lrodriguez@atheros.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | |||
14 | /** | ||
15 | * enum environment_cap - Environment parsed from country IE | ||
16 | * @ENVIRON_ANY: indicates country IE applies to both indoor and | ||
17 | * outdoor operation. | ||
18 | * @ENVIRON_INDOOR: indicates country IE applies only to indoor operation | ||
19 | * @ENVIRON_OUTDOOR: indicates country IE applies only to outdoor operation | ||
20 | */ | ||
21 | enum environment_cap { | ||
22 | ENVIRON_ANY, | ||
23 | ENVIRON_INDOOR, | ||
24 | ENVIRON_OUTDOOR, | ||
25 | }; | ||
26 | |||
27 | /** | ||
28 | * struct regulatory_request - used to keep track of regulatory requests | ||
29 | * | ||
30 | * @wiphy_idx: this is set if this request's initiator is | ||
31 | * %REGDOM_SET_BY_COUNTRY_IE or %REGDOM_SET_BY_DRIVER. This | ||
32 | * can be used by the wireless core to deal with conflicts | ||
33 | * and potentially inform users of which devices specifically | ||
34 | * cased the conflicts. | ||
35 | * @initiator: indicates who sent this request, could be any of | ||
36 | * of those set in nl80211_reg_initiator (%NL80211_REGDOM_SET_BY_*) | ||
37 | * @alpha2: the ISO / IEC 3166 alpha2 country code of the requested | ||
38 | * regulatory domain. We have a few special codes: | ||
39 | * 00 - World regulatory domain | ||
40 | * 99 - built by driver but a specific alpha2 cannot be determined | ||
41 | * 98 - result of an intersection between two regulatory domains | ||
42 | * @intersect: indicates whether the wireless core should intersect | ||
43 | * the requested regulatory domain with the presently set regulatory | ||
44 | * domain. | ||
45 | * @country_ie_checksum: checksum of the last processed and accepted | ||
46 | * country IE | ||
47 | * @country_ie_env: lets us know if the AP is telling us we are outdoor, | ||
48 | * indoor, or if it doesn't matter | ||
49 | * @list: used to insert into the reg_requests_list linked list | ||
50 | */ | ||
51 | struct regulatory_request { | ||
52 | int wiphy_idx; | ||
53 | enum nl80211_reg_initiator initiator; | ||
54 | char alpha2[2]; | ||
55 | bool intersect; | ||
56 | u32 country_ie_checksum; | ||
57 | enum environment_cap country_ie_env; | ||
58 | struct list_head list; | ||
59 | }; | ||
60 | |||
61 | struct ieee80211_freq_range { | ||
62 | u32 start_freq_khz; | ||
63 | u32 end_freq_khz; | ||
64 | u32 max_bandwidth_khz; | ||
65 | }; | ||
66 | |||
67 | struct ieee80211_power_rule { | ||
68 | u32 max_antenna_gain; | ||
69 | u32 max_eirp; | ||
70 | }; | ||
71 | |||
72 | struct ieee80211_reg_rule { | ||
73 | struct ieee80211_freq_range freq_range; | ||
74 | struct ieee80211_power_rule power_rule; | ||
75 | u32 flags; | ||
76 | }; | ||
77 | |||
78 | struct ieee80211_regdomain { | ||
79 | u32 n_reg_rules; | ||
80 | char alpha2[2]; | ||
81 | struct ieee80211_reg_rule reg_rules[]; | ||
82 | }; | ||
83 | |||
84 | #define MHZ_TO_KHZ(freq) ((freq) * 1000) | ||
85 | #define KHZ_TO_MHZ(freq) ((freq) / 1000) | ||
86 | #define DBI_TO_MBI(gain) ((gain) * 100) | ||
87 | #define MBI_TO_DBI(gain) ((gain) / 100) | ||
88 | #define DBM_TO_MBM(gain) ((gain) * 100) | ||
89 | #define MBM_TO_DBM(gain) ((gain) / 100) | ||
90 | |||
91 | #define REG_RULE(start, end, bw, gain, eirp, reg_flags) \ | ||
92 | { \ | ||
93 | .freq_range.start_freq_khz = MHZ_TO_KHZ(start), \ | ||
94 | .freq_range.end_freq_khz = MHZ_TO_KHZ(end), \ | ||
95 | .freq_range.max_bandwidth_khz = MHZ_TO_KHZ(bw), \ | ||
96 | .power_rule.max_antenna_gain = DBI_TO_MBI(gain),\ | ||
97 | .power_rule.max_eirp = DBM_TO_MBM(eirp), \ | ||
98 | .flags = reg_flags, \ | ||
99 | } | ||
100 | |||
101 | #endif | ||
diff --git a/include/net/route.h b/include/net/route.h index 4e8cae0e5841..40f6346ef496 100644 --- a/include/net/route.h +++ b/include/net/route.h | |||
@@ -210,7 +210,7 @@ static inline struct inet_peer *rt_get_peer(struct rtable *rt) | |||
210 | 210 | ||
211 | static inline int inet_iif(const struct sk_buff *skb) | 211 | static inline int inet_iif(const struct sk_buff *skb) |
212 | { | 212 | { |
213 | return skb->rtable->rt_iif; | 213 | return skb_rtable(skb)->rt_iif; |
214 | } | 214 | } |
215 | 215 | ||
216 | #endif /* _ROUTE_H */ | 216 | #endif /* _ROUTE_H */ |
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h index 23f08fe1d50a..edfcacf3250e 100644 --- a/include/net/sctp/structs.h +++ b/include/net/sctp/structs.h | |||
@@ -1939,10 +1939,8 @@ void sctp_association_free(struct sctp_association *); | |||
1939 | void sctp_association_put(struct sctp_association *); | 1939 | void sctp_association_put(struct sctp_association *); |
1940 | void sctp_association_hold(struct sctp_association *); | 1940 | void sctp_association_hold(struct sctp_association *); |
1941 | 1941 | ||
1942 | struct sctp_transport *sctp_assoc_choose_init_transport( | 1942 | struct sctp_transport *sctp_assoc_choose_alter_transport( |
1943 | struct sctp_association *); | 1943 | struct sctp_association *, struct sctp_transport *); |
1944 | struct sctp_transport *sctp_assoc_choose_shutdown_transport( | ||
1945 | struct sctp_association *); | ||
1946 | void sctp_assoc_update_retran_path(struct sctp_association *); | 1944 | void sctp_assoc_update_retran_path(struct sctp_association *); |
1947 | struct sctp_transport *sctp_assoc_lookup_paddr(const struct sctp_association *, | 1945 | struct sctp_transport *sctp_assoc_lookup_paddr(const struct sctp_association *, |
1948 | const union sctp_addr *); | 1946 | const union sctp_addr *); |
diff --git a/include/net/sctp/user.h b/include/net/sctp/user.h index b259fc5798fb..1580c04f68bc 100644 --- a/include/net/sctp/user.h +++ b/include/net/sctp/user.h | |||
@@ -147,6 +147,8 @@ enum sctp_optname { | |||
147 | #define SCTP_GET_LOCAL_ADDRS SCTP_GET_LOCAL_ADDRS | 147 | #define SCTP_GET_LOCAL_ADDRS SCTP_GET_LOCAL_ADDRS |
148 | SCTP_SOCKOPT_CONNECTX, /* CONNECTX requests. */ | 148 | SCTP_SOCKOPT_CONNECTX, /* CONNECTX requests. */ |
149 | #define SCTP_SOCKOPT_CONNECTX SCTP_SOCKOPT_CONNECTX | 149 | #define SCTP_SOCKOPT_CONNECTX SCTP_SOCKOPT_CONNECTX |
150 | SCTP_SOCKOPT_CONNECTX3, /* CONNECTX requests. (new implementation) */ | ||
151 | #define SCTP_SOCKOPT_CONNECTX3 SCTP_SOCKOPT_CONNECTX3 | ||
150 | }; | 152 | }; |
151 | 153 | ||
152 | /* | 154 | /* |
diff --git a/include/net/snmp.h b/include/net/snmp.h index 57c93628695f..8c842e06bec8 100644 --- a/include/net/snmp.h +++ b/include/net/snmp.h | |||
@@ -153,6 +153,11 @@ struct linux_xfrm_mib { | |||
153 | per_cpu_ptr(mib[!in_softirq()], get_cpu())->mibs[field]--; \ | 153 | per_cpu_ptr(mib[!in_softirq()], get_cpu())->mibs[field]--; \ |
154 | put_cpu(); \ | 154 | put_cpu(); \ |
155 | } while (0) | 155 | } while (0) |
156 | #define SNMP_ADD_STATS(mib, field, addend) \ | ||
157 | do { \ | ||
158 | per_cpu_ptr(mib[!in_softirq()], get_cpu())->mibs[field] += addend; \ | ||
159 | put_cpu(); \ | ||
160 | } while (0) | ||
156 | #define SNMP_ADD_STATS_BH(mib, field, addend) \ | 161 | #define SNMP_ADD_STATS_BH(mib, field, addend) \ |
157 | (per_cpu_ptr(mib[0], raw_smp_processor_id())->mibs[field] += addend) | 162 | (per_cpu_ptr(mib[0], raw_smp_processor_id())->mibs[field] += addend) |
158 | #define SNMP_ADD_STATS_USER(mib, field, addend) \ | 163 | #define SNMP_ADD_STATS_USER(mib, field, addend) \ |
@@ -160,5 +165,17 @@ struct linux_xfrm_mib { | |||
160 | per_cpu_ptr(mib[1], get_cpu())->mibs[field] += addend; \ | 165 | per_cpu_ptr(mib[1], get_cpu())->mibs[field] += addend; \ |
161 | put_cpu(); \ | 166 | put_cpu(); \ |
162 | } while (0) | 167 | } while (0) |
163 | 168 | #define SNMP_UPD_PO_STATS(mib, basefield, addend) \ | |
169 | do { \ | ||
170 | __typeof__(mib[0]) ptr = per_cpu_ptr(mib[!in_softirq()], get_cpu());\ | ||
171 | ptr->mibs[basefield##PKTS]++; \ | ||
172 | ptr->mibs[basefield##OCTETS] += addend;\ | ||
173 | put_cpu(); \ | ||
174 | } while (0) | ||
175 | #define SNMP_UPD_PO_STATS_BH(mib, basefield, addend) \ | ||
176 | do { \ | ||
177 | __typeof__(mib[0]) ptr = per_cpu_ptr(mib[!in_softirq()], raw_smp_processor_id());\ | ||
178 | ptr->mibs[basefield##PKTS]++; \ | ||
179 | ptr->mibs[basefield##OCTETS] += addend;\ | ||
180 | } while (0) | ||
164 | #endif | 181 | #endif |
diff --git a/include/net/sock.h b/include/net/sock.h index 4bb1ff9fd15b..010e14a93c92 100644 --- a/include/net/sock.h +++ b/include/net/sock.h | |||
@@ -1217,9 +1217,13 @@ static inline int skb_copy_to_page(struct sock *sk, char __user *from, | |||
1217 | 1217 | ||
1218 | static inline void skb_set_owner_w(struct sk_buff *skb, struct sock *sk) | 1218 | static inline void skb_set_owner_w(struct sk_buff *skb, struct sock *sk) |
1219 | { | 1219 | { |
1220 | sock_hold(sk); | ||
1221 | skb->sk = sk; | 1220 | skb->sk = sk; |
1222 | skb->destructor = sock_wfree; | 1221 | skb->destructor = sock_wfree; |
1222 | /* | ||
1223 | * We used to take a refcount on sk, but following operation | ||
1224 | * is enough to guarantee sk_free() wont free this sock until | ||
1225 | * all in-flight packets are completed | ||
1226 | */ | ||
1223 | atomic_add(skb->truesize, &sk->sk_wmem_alloc); | 1227 | atomic_add(skb->truesize, &sk->sk_wmem_alloc); |
1224 | } | 1228 | } |
1225 | 1229 | ||
diff --git a/include/net/tcp.h b/include/net/tcp.h index 646dbe3962ea..19f4150f4d4d 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h | |||
@@ -266,6 +266,19 @@ static inline int tcp_too_many_orphans(struct sock *sk, int num) | |||
266 | atomic_read(&tcp_memory_allocated) > sysctl_tcp_mem[2]); | 266 | atomic_read(&tcp_memory_allocated) > sysctl_tcp_mem[2]); |
267 | } | 267 | } |
268 | 268 | ||
269 | /* syncookies: remember time of last synqueue overflow */ | ||
270 | static inline void tcp_synq_overflow(struct sock *sk) | ||
271 | { | ||
272 | tcp_sk(sk)->rx_opt.ts_recent_stamp = jiffies; | ||
273 | } | ||
274 | |||
275 | /* syncookies: no recent synqueue overflow on this listening socket? */ | ||
276 | static inline int tcp_synq_no_recent_overflow(const struct sock *sk) | ||
277 | { | ||
278 | unsigned long last_overflow = tcp_sk(sk)->rx_opt.ts_recent_stamp; | ||
279 | return time_after(jiffies, last_overflow + TCP_TIMEOUT_INIT); | ||
280 | } | ||
281 | |||
269 | extern struct proto tcp_prot; | 282 | extern struct proto tcp_prot; |
270 | 283 | ||
271 | #define TCP_INC_STATS(net, field) SNMP_INC_STATS((net)->mib.tcp_statistics, field) | 284 | #define TCP_INC_STATS(net, field) SNMP_INC_STATS((net)->mib.tcp_statistics, field) |
@@ -889,30 +902,32 @@ static inline int tcp_prequeue(struct sock *sk, struct sk_buff *skb) | |||
889 | { | 902 | { |
890 | struct tcp_sock *tp = tcp_sk(sk); | 903 | struct tcp_sock *tp = tcp_sk(sk); |
891 | 904 | ||
892 | if (!sysctl_tcp_low_latency && tp->ucopy.task) { | 905 | if (sysctl_tcp_low_latency || !tp->ucopy.task) |
893 | __skb_queue_tail(&tp->ucopy.prequeue, skb); | 906 | return 0; |
894 | tp->ucopy.memory += skb->truesize; | 907 | |
895 | if (tp->ucopy.memory > sk->sk_rcvbuf) { | 908 | __skb_queue_tail(&tp->ucopy.prequeue, skb); |
896 | struct sk_buff *skb1; | 909 | tp->ucopy.memory += skb->truesize; |
897 | 910 | if (tp->ucopy.memory > sk->sk_rcvbuf) { | |
898 | BUG_ON(sock_owned_by_user(sk)); | 911 | struct sk_buff *skb1; |
899 | 912 | ||
900 | while ((skb1 = __skb_dequeue(&tp->ucopy.prequeue)) != NULL) { | 913 | BUG_ON(sock_owned_by_user(sk)); |
901 | sk_backlog_rcv(sk, skb1); | 914 | |
902 | NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPPREQUEUEDROPPED); | 915 | while ((skb1 = __skb_dequeue(&tp->ucopy.prequeue)) != NULL) { |
903 | } | 916 | sk_backlog_rcv(sk, skb1); |
904 | 917 | NET_INC_STATS_BH(sock_net(sk), | |
905 | tp->ucopy.memory = 0; | 918 | LINUX_MIB_TCPPREQUEUEDROPPED); |
906 | } else if (skb_queue_len(&tp->ucopy.prequeue) == 1) { | ||
907 | wake_up_interruptible(sk->sk_sleep); | ||
908 | if (!inet_csk_ack_scheduled(sk)) | ||
909 | inet_csk_reset_xmit_timer(sk, ICSK_TIME_DACK, | ||
910 | (3 * tcp_rto_min(sk)) / 4, | ||
911 | TCP_RTO_MAX); | ||
912 | } | 919 | } |
913 | return 1; | 920 | |
921 | tp->ucopy.memory = 0; | ||
922 | } else if (skb_queue_len(&tp->ucopy.prequeue) == 1) { | ||
923 | wake_up_interruptible_poll(sk->sk_sleep, | ||
924 | POLLIN | POLLRDNORM | POLLRDBAND); | ||
925 | if (!inet_csk_ack_scheduled(sk)) | ||
926 | inet_csk_reset_xmit_timer(sk, ICSK_TIME_DACK, | ||
927 | (3 * tcp_rto_min(sk)) / 4, | ||
928 | TCP_RTO_MAX); | ||
914 | } | 929 | } |
915 | return 0; | 930 | return 1; |
916 | } | 931 | } |
917 | 932 | ||
918 | 933 | ||
diff --git a/include/net/wimax.h b/include/net/wimax.h index 6b3824edb39e..2af7bf839f23 100644 --- a/include/net/wimax.h +++ b/include/net/wimax.h | |||
@@ -253,7 +253,6 @@ | |||
253 | struct net_device; | 253 | struct net_device; |
254 | struct genl_info; | 254 | struct genl_info; |
255 | struct wimax_dev; | 255 | struct wimax_dev; |
256 | struct input_dev; | ||
257 | 256 | ||
258 | /** | 257 | /** |
259 | * struct wimax_dev - Generic WiMAX device | 258 | * struct wimax_dev - Generic WiMAX device |
@@ -293,8 +292,8 @@ struct input_dev; | |||
293 | * See wimax_reset()'s documentation. | 292 | * See wimax_reset()'s documentation. |
294 | * | 293 | * |
295 | * @name: [fill] A way to identify this device. We need to register a | 294 | * @name: [fill] A way to identify this device. We need to register a |
296 | * name with many subsystems (input for RFKILL, workqueue | 295 | * name with many subsystems (rfkill, workqueue creation, etc). |
297 | * creation, etc). We can't use the network device name as that | 296 | * We can't use the network device name as that |
298 | * might change and in some instances we don't know it yet (until | 297 | * might change and in some instances we don't know it yet (until |
299 | * we don't call register_netdev()). So we generate an unique one | 298 | * we don't call register_netdev()). So we generate an unique one |
300 | * using the driver name and device bus id, place it here and use | 299 | * using the driver name and device bus id, place it here and use |
@@ -316,9 +315,6 @@ struct input_dev; | |||
316 | * | 315 | * |
317 | * @rfkill: [private] integration into the RF-Kill infrastructure. | 316 | * @rfkill: [private] integration into the RF-Kill infrastructure. |
318 | * | 317 | * |
319 | * @rfkill_input: [private] virtual input device to process the | ||
320 | * hardware RF Kill switches. | ||
321 | * | ||
322 | * @rf_sw: [private] State of the software radio switch (OFF/ON) | 318 | * @rf_sw: [private] State of the software radio switch (OFF/ON) |
323 | * | 319 | * |
324 | * @rf_hw: [private] State of the hardware radio switch (OFF/ON) | 320 | * @rf_hw: [private] State of the hardware radio switch (OFF/ON) |
diff --git a/include/net/wireless.h b/include/net/wireless.h deleted file mode 100644 index 64a76208580c..000000000000 --- a/include/net/wireless.h +++ /dev/null | |||
@@ -1,472 +0,0 @@ | |||
1 | #ifndef __NET_WIRELESS_H | ||
2 | #define __NET_WIRELESS_H | ||
3 | |||
4 | /* | ||
5 | * 802.11 device management | ||
6 | * | ||
7 | * Copyright 2007 Johannes Berg <johannes@sipsolutions.net> | ||
8 | */ | ||
9 | |||
10 | #include <linux/netdevice.h> | ||
11 | #include <linux/debugfs.h> | ||
12 | #include <linux/list.h> | ||
13 | #include <linux/ieee80211.h> | ||
14 | #include <net/cfg80211.h> | ||
15 | |||
16 | /** | ||
17 | * enum ieee80211_band - supported frequency bands | ||
18 | * | ||
19 | * The bands are assigned this way because the supported | ||
20 | * bitrates differ in these bands. | ||
21 | * | ||
22 | * @IEEE80211_BAND_2GHZ: 2.4GHz ISM band | ||
23 | * @IEEE80211_BAND_5GHZ: around 5GHz band (4.9-5.7) | ||
24 | */ | ||
25 | enum ieee80211_band { | ||
26 | IEEE80211_BAND_2GHZ, | ||
27 | IEEE80211_BAND_5GHZ, | ||
28 | |||
29 | /* keep last */ | ||
30 | IEEE80211_NUM_BANDS | ||
31 | }; | ||
32 | |||
33 | /** | ||
34 | * enum ieee80211_channel_flags - channel flags | ||
35 | * | ||
36 | * Channel flags set by the regulatory control code. | ||
37 | * | ||
38 | * @IEEE80211_CHAN_DISABLED: This channel is disabled. | ||
39 | * @IEEE80211_CHAN_PASSIVE_SCAN: Only passive scanning is permitted | ||
40 | * on this channel. | ||
41 | * @IEEE80211_CHAN_NO_IBSS: IBSS is not allowed on this channel. | ||
42 | * @IEEE80211_CHAN_RADAR: Radar detection is required on this channel. | ||
43 | * @IEEE80211_CHAN_NO_FAT_ABOVE: extension channel above this channel | ||
44 | * is not permitted. | ||
45 | * @IEEE80211_CHAN_NO_FAT_BELOW: extension channel below this channel | ||
46 | * is not permitted. | ||
47 | */ | ||
48 | enum ieee80211_channel_flags { | ||
49 | IEEE80211_CHAN_DISABLED = 1<<0, | ||
50 | IEEE80211_CHAN_PASSIVE_SCAN = 1<<1, | ||
51 | IEEE80211_CHAN_NO_IBSS = 1<<2, | ||
52 | IEEE80211_CHAN_RADAR = 1<<3, | ||
53 | IEEE80211_CHAN_NO_FAT_ABOVE = 1<<4, | ||
54 | IEEE80211_CHAN_NO_FAT_BELOW = 1<<5, | ||
55 | }; | ||
56 | |||
57 | /** | ||
58 | * struct ieee80211_channel - channel definition | ||
59 | * | ||
60 | * This structure describes a single channel for use | ||
61 | * with cfg80211. | ||
62 | * | ||
63 | * @center_freq: center frequency in MHz | ||
64 | * @max_bandwidth: maximum allowed bandwidth for this channel, in MHz | ||
65 | * @hw_value: hardware-specific value for the channel | ||
66 | * @flags: channel flags from &enum ieee80211_channel_flags. | ||
67 | * @orig_flags: channel flags at registration time, used by regulatory | ||
68 | * code to support devices with additional restrictions | ||
69 | * @band: band this channel belongs to. | ||
70 | * @max_antenna_gain: maximum antenna gain in dBi | ||
71 | * @max_power: maximum transmission power (in dBm) | ||
72 | * @beacon_found: helper to regulatory code to indicate when a beacon | ||
73 | * has been found on this channel. Use regulatory_hint_found_beacon() | ||
74 | * to enable this, this is is useful only on 5 GHz band. | ||
75 | * @orig_mag: internal use | ||
76 | * @orig_mpwr: internal use | ||
77 | */ | ||
78 | struct ieee80211_channel { | ||
79 | enum ieee80211_band band; | ||
80 | u16 center_freq; | ||
81 | u8 max_bandwidth; | ||
82 | u16 hw_value; | ||
83 | u32 flags; | ||
84 | int max_antenna_gain; | ||
85 | int max_power; | ||
86 | bool beacon_found; | ||
87 | u32 orig_flags; | ||
88 | int orig_mag, orig_mpwr; | ||
89 | }; | ||
90 | |||
91 | /** | ||
92 | * enum ieee80211_rate_flags - rate flags | ||
93 | * | ||
94 | * Hardware/specification flags for rates. These are structured | ||
95 | * in a way that allows using the same bitrate structure for | ||
96 | * different bands/PHY modes. | ||
97 | * | ||
98 | * @IEEE80211_RATE_SHORT_PREAMBLE: Hardware can send with short | ||
99 | * preamble on this bitrate; only relevant in 2.4GHz band and | ||
100 | * with CCK rates. | ||
101 | * @IEEE80211_RATE_MANDATORY_A: This bitrate is a mandatory rate | ||
102 | * when used with 802.11a (on the 5 GHz band); filled by the | ||
103 | * core code when registering the wiphy. | ||
104 | * @IEEE80211_RATE_MANDATORY_B: This bitrate is a mandatory rate | ||
105 | * when used with 802.11b (on the 2.4 GHz band); filled by the | ||
106 | * core code when registering the wiphy. | ||
107 | * @IEEE80211_RATE_MANDATORY_G: This bitrate is a mandatory rate | ||
108 | * when used with 802.11g (on the 2.4 GHz band); filled by the | ||
109 | * core code when registering the wiphy. | ||
110 | * @IEEE80211_RATE_ERP_G: This is an ERP rate in 802.11g mode. | ||
111 | */ | ||
112 | enum ieee80211_rate_flags { | ||
113 | IEEE80211_RATE_SHORT_PREAMBLE = 1<<0, | ||
114 | IEEE80211_RATE_MANDATORY_A = 1<<1, | ||
115 | IEEE80211_RATE_MANDATORY_B = 1<<2, | ||
116 | IEEE80211_RATE_MANDATORY_G = 1<<3, | ||
117 | IEEE80211_RATE_ERP_G = 1<<4, | ||
118 | }; | ||
119 | |||
120 | /** | ||
121 | * struct ieee80211_rate - bitrate definition | ||
122 | * | ||
123 | * This structure describes a bitrate that an 802.11 PHY can | ||
124 | * operate with. The two values @hw_value and @hw_value_short | ||
125 | * are only for driver use when pointers to this structure are | ||
126 | * passed around. | ||
127 | * | ||
128 | * @flags: rate-specific flags | ||
129 | * @bitrate: bitrate in units of 100 Kbps | ||
130 | * @hw_value: driver/hardware value for this rate | ||
131 | * @hw_value_short: driver/hardware value for this rate when | ||
132 | * short preamble is used | ||
133 | */ | ||
134 | struct ieee80211_rate { | ||
135 | u32 flags; | ||
136 | u16 bitrate; | ||
137 | u16 hw_value, hw_value_short; | ||
138 | }; | ||
139 | |||
140 | /** | ||
141 | * struct ieee80211_sta_ht_cap - STA's HT capabilities | ||
142 | * | ||
143 | * This structure describes most essential parameters needed | ||
144 | * to describe 802.11n HT capabilities for an STA. | ||
145 | * | ||
146 | * @ht_supported: is HT supported by the STA | ||
147 | * @cap: HT capabilities map as described in 802.11n spec | ||
148 | * @ampdu_factor: Maximum A-MPDU length factor | ||
149 | * @ampdu_density: Minimum A-MPDU spacing | ||
150 | * @mcs: Supported MCS rates | ||
151 | */ | ||
152 | struct ieee80211_sta_ht_cap { | ||
153 | u16 cap; /* use IEEE80211_HT_CAP_ */ | ||
154 | bool ht_supported; | ||
155 | u8 ampdu_factor; | ||
156 | u8 ampdu_density; | ||
157 | struct ieee80211_mcs_info mcs; | ||
158 | }; | ||
159 | |||
160 | /** | ||
161 | * struct ieee80211_supported_band - frequency band definition | ||
162 | * | ||
163 | * This structure describes a frequency band a wiphy | ||
164 | * is able to operate in. | ||
165 | * | ||
166 | * @channels: Array of channels the hardware can operate in | ||
167 | * in this band. | ||
168 | * @band: the band this structure represents | ||
169 | * @n_channels: Number of channels in @channels | ||
170 | * @bitrates: Array of bitrates the hardware can operate with | ||
171 | * in this band. Must be sorted to give a valid "supported | ||
172 | * rates" IE, i.e. CCK rates first, then OFDM. | ||
173 | * @n_bitrates: Number of bitrates in @bitrates | ||
174 | */ | ||
175 | struct ieee80211_supported_band { | ||
176 | struct ieee80211_channel *channels; | ||
177 | struct ieee80211_rate *bitrates; | ||
178 | enum ieee80211_band band; | ||
179 | int n_channels; | ||
180 | int n_bitrates; | ||
181 | struct ieee80211_sta_ht_cap ht_cap; | ||
182 | }; | ||
183 | |||
184 | /** | ||
185 | * struct wiphy - wireless hardware description | ||
186 | * @idx: the wiphy index assigned to this item | ||
187 | * @class_dev: the class device representing /sys/class/ieee80211/<wiphy-name> | ||
188 | * @custom_regulatory: tells us the driver for this device | ||
189 | * has its own custom regulatory domain and cannot identify the | ||
190 | * ISO / IEC 3166 alpha2 it belongs to. When this is enabled | ||
191 | * we will disregard the first regulatory hint (when the | ||
192 | * initiator is %REGDOM_SET_BY_CORE). | ||
193 | * @strict_regulatory: tells us the driver for this device will ignore | ||
194 | * regulatory domain settings until it gets its own regulatory domain | ||
195 | * via its regulatory_hint(). After its gets its own regulatory domain | ||
196 | * it will only allow further regulatory domain settings to further | ||
197 | * enhance compliance. For example if channel 13 and 14 are disabled | ||
198 | * by this regulatory domain no user regulatory domain can enable these | ||
199 | * channels at a later time. This can be used for devices which do not | ||
200 | * have calibration information gauranteed for frequencies or settings | ||
201 | * outside of its regulatory domain. | ||
202 | * @reg_notifier: the driver's regulatory notification callback | ||
203 | * @regd: the driver's regulatory domain, if one was requested via | ||
204 | * the regulatory_hint() API. This can be used by the driver | ||
205 | * on the reg_notifier() if it chooses to ignore future | ||
206 | * regulatory domain changes caused by other drivers. | ||
207 | * @signal_type: signal type reported in &struct cfg80211_bss. | ||
208 | */ | ||
209 | struct wiphy { | ||
210 | /* assign these fields before you register the wiphy */ | ||
211 | |||
212 | /* permanent MAC address */ | ||
213 | u8 perm_addr[ETH_ALEN]; | ||
214 | |||
215 | /* Supported interface modes, OR together BIT(NL80211_IFTYPE_...) */ | ||
216 | u16 interface_modes; | ||
217 | |||
218 | bool custom_regulatory; | ||
219 | bool strict_regulatory; | ||
220 | |||
221 | enum cfg80211_signal_type signal_type; | ||
222 | |||
223 | int bss_priv_size; | ||
224 | u8 max_scan_ssids; | ||
225 | |||
226 | /* If multiple wiphys are registered and you're handed e.g. | ||
227 | * a regular netdev with assigned ieee80211_ptr, you won't | ||
228 | * know whether it points to a wiphy your driver has registered | ||
229 | * or not. Assign this to something global to your driver to | ||
230 | * help determine whether you own this wiphy or not. */ | ||
231 | void *privid; | ||
232 | |||
233 | struct ieee80211_supported_band *bands[IEEE80211_NUM_BANDS]; | ||
234 | |||
235 | /* Lets us get back the wiphy on the callback */ | ||
236 | int (*reg_notifier)(struct wiphy *wiphy, | ||
237 | struct regulatory_request *request); | ||
238 | |||
239 | /* fields below are read-only, assigned by cfg80211 */ | ||
240 | |||
241 | const struct ieee80211_regdomain *regd; | ||
242 | |||
243 | /* the item in /sys/class/ieee80211/ points to this, | ||
244 | * you need use set_wiphy_dev() (see below) */ | ||
245 | struct device dev; | ||
246 | |||
247 | /* dir in debugfs: ieee80211/<wiphyname> */ | ||
248 | struct dentry *debugfsdir; | ||
249 | |||
250 | char priv[0] __attribute__((__aligned__(NETDEV_ALIGN))); | ||
251 | }; | ||
252 | |||
253 | /** struct wireless_dev - wireless per-netdev state | ||
254 | * | ||
255 | * This structure must be allocated by the driver/stack | ||
256 | * that uses the ieee80211_ptr field in struct net_device | ||
257 | * (this is intentional so it can be allocated along with | ||
258 | * the netdev.) | ||
259 | * | ||
260 | * @wiphy: pointer to hardware description | ||
261 | * @iftype: interface type | ||
262 | */ | ||
263 | struct wireless_dev { | ||
264 | struct wiphy *wiphy; | ||
265 | enum nl80211_iftype iftype; | ||
266 | |||
267 | /* private to the generic wireless code */ | ||
268 | struct list_head list; | ||
269 | struct net_device *netdev; | ||
270 | }; | ||
271 | |||
272 | /** | ||
273 | * wiphy_priv - return priv from wiphy | ||
274 | */ | ||
275 | static inline void *wiphy_priv(struct wiphy *wiphy) | ||
276 | { | ||
277 | BUG_ON(!wiphy); | ||
278 | return &wiphy->priv; | ||
279 | } | ||
280 | |||
281 | /** | ||
282 | * set_wiphy_dev - set device pointer for wiphy | ||
283 | */ | ||
284 | static inline void set_wiphy_dev(struct wiphy *wiphy, struct device *dev) | ||
285 | { | ||
286 | wiphy->dev.parent = dev; | ||
287 | } | ||
288 | |||
289 | /** | ||
290 | * wiphy_dev - get wiphy dev pointer | ||
291 | */ | ||
292 | static inline struct device *wiphy_dev(struct wiphy *wiphy) | ||
293 | { | ||
294 | return wiphy->dev.parent; | ||
295 | } | ||
296 | |||
297 | /** | ||
298 | * wiphy_name - get wiphy name | ||
299 | */ | ||
300 | static inline const char *wiphy_name(struct wiphy *wiphy) | ||
301 | { | ||
302 | return dev_name(&wiphy->dev); | ||
303 | } | ||
304 | |||
305 | /** | ||
306 | * wdev_priv - return wiphy priv from wireless_dev | ||
307 | */ | ||
308 | static inline void *wdev_priv(struct wireless_dev *wdev) | ||
309 | { | ||
310 | BUG_ON(!wdev); | ||
311 | return wiphy_priv(wdev->wiphy); | ||
312 | } | ||
313 | |||
314 | /** | ||
315 | * wiphy_new - create a new wiphy for use with cfg80211 | ||
316 | * | ||
317 | * create a new wiphy and associate the given operations with it. | ||
318 | * @sizeof_priv bytes are allocated for private use. | ||
319 | * | ||
320 | * the returned pointer must be assigned to each netdev's | ||
321 | * ieee80211_ptr for proper operation. | ||
322 | */ | ||
323 | struct wiphy *wiphy_new(struct cfg80211_ops *ops, int sizeof_priv); | ||
324 | |||
325 | /** | ||
326 | * wiphy_register - register a wiphy with cfg80211 | ||
327 | * | ||
328 | * register the given wiphy | ||
329 | * | ||
330 | * Returns a non-negative wiphy index or a negative error code. | ||
331 | */ | ||
332 | extern int wiphy_register(struct wiphy *wiphy); | ||
333 | |||
334 | /** | ||
335 | * wiphy_unregister - deregister a wiphy from cfg80211 | ||
336 | * | ||
337 | * unregister a device with the given priv pointer. | ||
338 | * After this call, no more requests can be made with this priv | ||
339 | * pointer, but the call may sleep to wait for an outstanding | ||
340 | * request that is being handled. | ||
341 | */ | ||
342 | extern void wiphy_unregister(struct wiphy *wiphy); | ||
343 | |||
344 | /** | ||
345 | * wiphy_free - free wiphy | ||
346 | */ | ||
347 | extern void wiphy_free(struct wiphy *wiphy); | ||
348 | |||
349 | /** | ||
350 | * ieee80211_channel_to_frequency - convert channel number to frequency | ||
351 | */ | ||
352 | extern int ieee80211_channel_to_frequency(int chan); | ||
353 | |||
354 | /** | ||
355 | * ieee80211_frequency_to_channel - convert frequency to channel number | ||
356 | */ | ||
357 | extern int ieee80211_frequency_to_channel(int freq); | ||
358 | |||
359 | /* | ||
360 | * Name indirection necessary because the ieee80211 code also has | ||
361 | * a function named "ieee80211_get_channel", so if you include | ||
362 | * cfg80211's header file you get cfg80211's version, if you try | ||
363 | * to include both header files you'll (rightfully!) get a symbol | ||
364 | * clash. | ||
365 | */ | ||
366 | extern struct ieee80211_channel *__ieee80211_get_channel(struct wiphy *wiphy, | ||
367 | int freq); | ||
368 | /** | ||
369 | * ieee80211_get_channel - get channel struct from wiphy for specified frequency | ||
370 | */ | ||
371 | static inline struct ieee80211_channel * | ||
372 | ieee80211_get_channel(struct wiphy *wiphy, int freq) | ||
373 | { | ||
374 | return __ieee80211_get_channel(wiphy, freq); | ||
375 | } | ||
376 | |||
377 | /** | ||
378 | * ieee80211_get_response_rate - get basic rate for a given rate | ||
379 | * | ||
380 | * @sband: the band to look for rates in | ||
381 | * @basic_rates: bitmap of basic rates | ||
382 | * @bitrate: the bitrate for which to find the basic rate | ||
383 | * | ||
384 | * This function returns the basic rate corresponding to a given | ||
385 | * bitrate, that is the next lower bitrate contained in the basic | ||
386 | * rate map, which is, for this function, given as a bitmap of | ||
387 | * indices of rates in the band's bitrate table. | ||
388 | */ | ||
389 | struct ieee80211_rate * | ||
390 | ieee80211_get_response_rate(struct ieee80211_supported_band *sband, | ||
391 | u32 basic_rates, int bitrate); | ||
392 | |||
393 | /** | ||
394 | * regulatory_hint - driver hint to the wireless core a regulatory domain | ||
395 | * @wiphy: the wireless device giving the hint (used only for reporting | ||
396 | * conflicts) | ||
397 | * @alpha2: the ISO/IEC 3166 alpha2 the driver claims its regulatory domain | ||
398 | * should be in. If @rd is set this should be NULL. Note that if you | ||
399 | * set this to NULL you should still set rd->alpha2 to some accepted | ||
400 | * alpha2. | ||
401 | * | ||
402 | * Wireless drivers can use this function to hint to the wireless core | ||
403 | * what it believes should be the current regulatory domain by | ||
404 | * giving it an ISO/IEC 3166 alpha2 country code it knows its regulatory | ||
405 | * domain should be in or by providing a completely build regulatory domain. | ||
406 | * If the driver provides an ISO/IEC 3166 alpha2 userspace will be queried | ||
407 | * for a regulatory domain structure for the respective country. | ||
408 | * | ||
409 | * The wiphy must have been registered to cfg80211 prior to this call. | ||
410 | * For cfg80211 drivers this means you must first use wiphy_register(), | ||
411 | * for mac80211 drivers you must first use ieee80211_register_hw(). | ||
412 | * | ||
413 | * Drivers should check the return value, its possible you can get | ||
414 | * an -ENOMEM. | ||
415 | */ | ||
416 | extern int regulatory_hint(struct wiphy *wiphy, const char *alpha2); | ||
417 | |||
418 | /** | ||
419 | * regulatory_hint_11d - hints a country IE as a regulatory domain | ||
420 | * @wiphy: the wireless device giving the hint (used only for reporting | ||
421 | * conflicts) | ||
422 | * @country_ie: pointer to the country IE | ||
423 | * @country_ie_len: length of the country IE | ||
424 | * | ||
425 | * We will intersect the rd with the what CRDA tells us should apply | ||
426 | * for the alpha2 this country IE belongs to, this prevents APs from | ||
427 | * sending us incorrect or outdated information against a country. | ||
428 | */ | ||
429 | extern void regulatory_hint_11d(struct wiphy *wiphy, | ||
430 | u8 *country_ie, | ||
431 | u8 country_ie_len); | ||
432 | /** | ||
433 | * wiphy_apply_custom_regulatory - apply a custom driver regulatory domain | ||
434 | * @wiphy: the wireless device we want to process the regulatory domain on | ||
435 | * @regd: the custom regulatory domain to use for this wiphy | ||
436 | * | ||
437 | * Drivers can sometimes have custom regulatory domains which do not apply | ||
438 | * to a specific country. Drivers can use this to apply such custom regulatory | ||
439 | * domains. This routine must be called prior to wiphy registration. The | ||
440 | * custom regulatory domain will be trusted completely and as such previous | ||
441 | * default channel settings will be disregarded. If no rule is found for a | ||
442 | * channel on the regulatory domain the channel will be disabled. | ||
443 | */ | ||
444 | extern void wiphy_apply_custom_regulatory( | ||
445 | struct wiphy *wiphy, | ||
446 | const struct ieee80211_regdomain *regd); | ||
447 | |||
448 | /** | ||
449 | * freq_reg_info - get regulatory information for the given frequency | ||
450 | * @wiphy: the wiphy for which we want to process this rule for | ||
451 | * @center_freq: Frequency in KHz for which we want regulatory information for | ||
452 | * @bandwidth: the bandwidth requirement you have in KHz, if you do not have one | ||
453 | * you can set this to 0. If this frequency is allowed we then set | ||
454 | * this value to the maximum allowed bandwidth. | ||
455 | * @reg_rule: the regulatory rule which we have for this frequency | ||
456 | * | ||
457 | * Use this function to get the regulatory rule for a specific frequency on | ||
458 | * a given wireless device. If the device has a specific regulatory domain | ||
459 | * it wants to follow we respect that unless a country IE has been received | ||
460 | * and processed already. | ||
461 | * | ||
462 | * Returns 0 if it was able to find a valid regulatory rule which does | ||
463 | * apply to the given center_freq otherwise it returns non-zero. It will | ||
464 | * also return -ERANGE if we determine the given center_freq does not even have | ||
465 | * a regulatory rule for a frequency range in the center_freq's band. See | ||
466 | * freq_in_rule_band() for our current definition of a band -- this is purely | ||
467 | * subjective and right now its 802.11 specific. | ||
468 | */ | ||
469 | extern int freq_reg_info(struct wiphy *wiphy, u32 center_freq, u32 *bandwidth, | ||
470 | const struct ieee80211_reg_rule **reg_rule); | ||
471 | |||
472 | #endif /* __NET_WIRELESS_H */ | ||
diff --git a/include/net/xfrm.h b/include/net/xfrm.h index 2e9f5c0018ae..736bca450886 100644 --- a/include/net/xfrm.h +++ b/include/net/xfrm.h | |||
@@ -994,7 +994,7 @@ static inline int __xfrm_policy_check2(struct sock *sk, int dir, | |||
994 | return __xfrm_policy_check(sk, ndir, skb, family); | 994 | return __xfrm_policy_check(sk, ndir, skb, family); |
995 | 995 | ||
996 | return (!net->xfrm.policy_count[dir] && !skb->sp) || | 996 | return (!net->xfrm.policy_count[dir] && !skb->sp) || |
997 | (skb->dst->flags & DST_NOPOLICY) || | 997 | (skb_dst(skb)->flags & DST_NOPOLICY) || |
998 | __xfrm_policy_check(sk, ndir, skb, family); | 998 | __xfrm_policy_check(sk, ndir, skb, family); |
999 | } | 999 | } |
1000 | 1000 | ||
@@ -1048,7 +1048,7 @@ static inline int xfrm_route_forward(struct sk_buff *skb, unsigned short family) | |||
1048 | struct net *net = dev_net(skb->dev); | 1048 | struct net *net = dev_net(skb->dev); |
1049 | 1049 | ||
1050 | return !net->xfrm.policy_count[XFRM_POLICY_OUT] || | 1050 | return !net->xfrm.policy_count[XFRM_POLICY_OUT] || |
1051 | (skb->dst->flags & DST_NOXFRM) || | 1051 | (skb_dst(skb)->flags & DST_NOXFRM) || |
1052 | __xfrm_route_forward(skb, family); | 1052 | __xfrm_route_forward(skb, family); |
1053 | } | 1053 | } |
1054 | 1054 | ||
diff --git a/include/scsi/libfcoe.h b/include/scsi/libfcoe.h index 666cc131732e..b2410605b740 100644 --- a/include/scsi/libfcoe.h +++ b/include/scsi/libfcoe.h | |||
@@ -73,6 +73,7 @@ enum fip_state { | |||
73 | * @link: current link status for libfc. | 73 | * @link: current link status for libfc. |
74 | * @last_link: last link state reported to libfc. | 74 | * @last_link: last link state reported to libfc. |
75 | * @map_dest: use the FC_MAP mode for destination MAC addresses. | 75 | * @map_dest: use the FC_MAP mode for destination MAC addresses. |
76 | * @spma: supports SPMA server-provided MACs mode | ||
76 | * @dest_addr: MAC address of the selected FC forwarder. | 77 | * @dest_addr: MAC address of the selected FC forwarder. |
77 | * @ctl_src_addr: the native MAC address of our local port. | 78 | * @ctl_src_addr: the native MAC address of our local port. |
78 | * @data_src_addr: the assigned MAC address for the local port after FLOGI. | 79 | * @data_src_addr: the assigned MAC address for the local port after FLOGI. |
@@ -104,6 +105,7 @@ struct fcoe_ctlr { | |||
104 | u8 link; | 105 | u8 link; |
105 | u8 last_link; | 106 | u8 last_link; |
106 | u8 map_dest; | 107 | u8 map_dest; |
108 | u8 spma; | ||
107 | u8 dest_addr[ETH_ALEN]; | 109 | u8 dest_addr[ETH_ALEN]; |
108 | u8 ctl_src_addr[ETH_ALEN]; | 110 | u8 ctl_src_addr[ETH_ALEN]; |
109 | u8 data_src_addr[ETH_ALEN]; | 111 | u8 data_src_addr[ETH_ALEN]; |
diff --git a/include/trace/events/napi.h b/include/trace/events/napi.h new file mode 100644 index 000000000000..a8989c4547e7 --- /dev/null +++ b/include/trace/events/napi.h | |||
@@ -0,0 +1,11 @@ | |||
1 | #ifndef _TRACE_NAPI_H_ | ||
2 | #define _TRACE_NAPI_H_ | ||
3 | |||
4 | #include <linux/netdevice.h> | ||
5 | #include <linux/tracepoint.h> | ||
6 | |||
7 | DECLARE_TRACE(napi_poll, | ||
8 | TP_PROTO(struct napi_struct *napi), | ||
9 | TP_ARGS(napi)); | ||
10 | |||
11 | #endif | ||