diff options
Diffstat (limited to 'include/linux')
51 files changed, 1385 insertions, 433 deletions
diff --git a/include/linux/brcmphy.h b/include/linux/brcmphy.h new file mode 100644 index 000000000000..9b64b6d67873 --- /dev/null +++ b/include/linux/brcmphy.h | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | #define PHY_BRCM_WIRESPEED_ENABLE 0x00000001 | ||
| 2 | #define PHY_BRCM_AUTO_PWRDWN_ENABLE 0x00000002 | ||
| 3 | #define PHY_BRCM_APD_CLK125_ENABLE 0x00000004 | ||
| 4 | #define PHY_BRCM_STD_IBND_DISABLE 0x00000008 | ||
| 5 | #define PHY_BRCM_EXT_IBND_RX_ENABLE 0x00000010 | ||
| 6 | #define PHY_BRCM_EXT_IBND_TX_ENABLE 0x00000020 | ||
diff --git a/include/linux/dccp.h b/include/linux/dccp.h index aa0737019e37..6080449fbec9 100644 --- a/include/linux/dccp.h +++ b/include/linux/dccp.h | |||
| @@ -364,8 +364,6 @@ static inline unsigned int dccp_hdr_len(const struct sk_buff *skb) | |||
| 364 | /* FIXME: for now we're default to 1 but it should really be 0 */ | 364 | /* FIXME: for now we're default to 1 but it should really be 0 */ |
| 365 | #define DCCPF_INITIAL_SEND_NDP_COUNT 1 | 365 | #define DCCPF_INITIAL_SEND_NDP_COUNT 1 |
| 366 | 366 | ||
| 367 | #define DCCP_NDP_LIMIT 0xFFFFFF | ||
| 368 | |||
| 369 | /** | 367 | /** |
| 370 | * struct dccp_minisock - Minimal DCCP connection representation | 368 | * struct dccp_minisock - Minimal DCCP connection representation |
| 371 | * | 369 | * |
| @@ -437,7 +435,7 @@ extern int dccp_parse_options(struct sock *sk, struct dccp_request_sock *dreq, | |||
| 437 | struct sk_buff *skb); | 435 | struct sk_buff *skb); |
| 438 | 436 | ||
| 439 | struct dccp_options_received { | 437 | struct dccp_options_received { |
| 440 | u32 dccpor_ndp; /* only 24 bits */ | 438 | u64 dccpor_ndp:48; |
| 441 | u32 dccpor_timestamp; | 439 | u32 dccpor_timestamp; |
| 442 | u32 dccpor_timestamp_echo; | 440 | u32 dccpor_timestamp_echo; |
| 443 | u32 dccpor_elapsed_time; | 441 | u32 dccpor_elapsed_time; |
| @@ -533,7 +531,7 @@ struct dccp_sock { | |||
| 533 | __u16 dccps_r_ack_ratio; | 531 | __u16 dccps_r_ack_ratio; |
| 534 | __u16 dccps_pcslen; | 532 | __u16 dccps_pcslen; |
| 535 | __u16 dccps_pcrlen; | 533 | __u16 dccps_pcrlen; |
| 536 | unsigned long dccps_ndp_count; | 534 | __u64 dccps_ndp_count:48; |
| 537 | unsigned long dccps_rate_last; | 535 | unsigned long dccps_rate_last; |
| 538 | struct dccp_minisock dccps_minisock; | 536 | struct dccp_minisock dccps_minisock; |
| 539 | struct dccp_ackvec *dccps_hc_rx_ackvec; | 537 | struct dccp_ackvec *dccps_hc_rx_ackvec; |
diff --git a/include/linux/dm9000.h b/include/linux/dm9000.h index a3750462f9e3..fc82446b6425 100644 --- a/include/linux/dm9000.h +++ b/include/linux/dm9000.h | |||
| @@ -21,6 +21,7 @@ | |||
| 21 | #define DM9000_PLATF_32BITONLY (0x0004) | 21 | #define DM9000_PLATF_32BITONLY (0x0004) |
| 22 | #define DM9000_PLATF_EXT_PHY (0x0008) | 22 | #define DM9000_PLATF_EXT_PHY (0x0008) |
| 23 | #define DM9000_PLATF_NO_EEPROM (0x0010) | 23 | #define DM9000_PLATF_NO_EEPROM (0x0010) |
| 24 | #define DM9000_PLATF_SIMPLE_PHY (0x0020) /* Use NSR to find LinkStatus */ | ||
| 24 | 25 | ||
| 25 | /* platfrom data for platfrom device structure's platfrom_data field */ | 26 | /* platfrom data for platfrom device structure's platfrom_data field */ |
| 26 | 27 | ||
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h index c8d216357865..8bb5e87df365 100644 --- a/include/linux/ethtool.h +++ b/include/linux/ethtool.h | |||
| @@ -272,6 +272,12 @@ enum ethtool_flags { | |||
| 272 | ETH_FLAG_LRO = (1 << 15), /* LRO is enabled */ | 272 | ETH_FLAG_LRO = (1 << 15), /* LRO is enabled */ |
| 273 | }; | 273 | }; |
| 274 | 274 | ||
| 275 | struct ethtool_rxnfc { | ||
| 276 | __u32 cmd; | ||
| 277 | __u32 flow_type; | ||
| 278 | __u64 data; | ||
| 279 | }; | ||
| 280 | |||
| 275 | #ifdef __KERNEL__ | 281 | #ifdef __KERNEL__ |
| 276 | 282 | ||
| 277 | struct net_device; | 283 | struct net_device; |
| @@ -396,6 +402,8 @@ struct ethtool_ops { | |||
| 396 | /* the following hooks are obsolete */ | 402 | /* the following hooks are obsolete */ |
| 397 | int (*self_test_count)(struct net_device *);/* use get_sset_count */ | 403 | int (*self_test_count)(struct net_device *);/* use get_sset_count */ |
| 398 | int (*get_stats_count)(struct net_device *);/* use get_sset_count */ | 404 | int (*get_stats_count)(struct net_device *);/* use get_sset_count */ |
| 405 | int (*get_rxhash)(struct net_device *, struct ethtool_rxnfc *); | ||
| 406 | int (*set_rxhash)(struct net_device *, struct ethtool_rxnfc *); | ||
| 399 | }; | 407 | }; |
| 400 | #endif /* __KERNEL__ */ | 408 | #endif /* __KERNEL__ */ |
| 401 | 409 | ||
| @@ -442,6 +450,9 @@ struct ethtool_ops { | |||
| 442 | #define ETHTOOL_GPFLAGS 0x00000027 /* Get driver-private flags bitmap */ | 450 | #define ETHTOOL_GPFLAGS 0x00000027 /* Get driver-private flags bitmap */ |
| 443 | #define ETHTOOL_SPFLAGS 0x00000028 /* Set driver-private flags bitmap */ | 451 | #define ETHTOOL_SPFLAGS 0x00000028 /* Set driver-private flags bitmap */ |
| 444 | 452 | ||
| 453 | #define ETHTOOL_GRXFH 0x00000029 /* Get RX flow hash configuration */ | ||
| 454 | #define ETHTOOL_SRXFH 0x0000002a /* Set RX flow hash configuration */ | ||
| 455 | |||
| 445 | /* compatibility with older code */ | 456 | /* compatibility with older code */ |
| 446 | #define SPARC_ETH_GSET ETHTOOL_GSET | 457 | #define SPARC_ETH_GSET ETHTOOL_GSET |
| 447 | #define SPARC_ETH_SSET ETHTOOL_SSET | 458 | #define SPARC_ETH_SSET ETHTOOL_SSET |
| @@ -528,4 +539,26 @@ struct ethtool_ops { | |||
| 528 | #define WAKE_MAGIC (1 << 5) | 539 | #define WAKE_MAGIC (1 << 5) |
| 529 | #define WAKE_MAGICSECURE (1 << 6) /* only meaningful if WAKE_MAGIC */ | 540 | #define WAKE_MAGICSECURE (1 << 6) /* only meaningful if WAKE_MAGIC */ |
| 530 | 541 | ||
| 542 | /* L3-L4 network traffic flow types */ | ||
| 543 | #define TCP_V4_FLOW 0x01 | ||
| 544 | #define UDP_V4_FLOW 0x02 | ||
| 545 | #define SCTP_V4_FLOW 0x03 | ||
| 546 | #define AH_ESP_V4_FLOW 0x04 | ||
| 547 | #define TCP_V6_FLOW 0x05 | ||
| 548 | #define UDP_V6_FLOW 0x06 | ||
| 549 | #define SCTP_V6_FLOW 0x07 | ||
| 550 | #define AH_ESP_V6_FLOW 0x08 | ||
| 551 | |||
| 552 | /* L3-L4 network traffic flow hash options */ | ||
| 553 | #define RXH_DEV_PORT (1 << 0) | ||
| 554 | #define RXH_L2DA (1 << 1) | ||
| 555 | #define RXH_VLAN (1 << 2) | ||
| 556 | #define RXH_L3_PROTO (1 << 3) | ||
| 557 | #define RXH_IP_SRC (1 << 4) | ||
| 558 | #define RXH_IP_DST (1 << 5) | ||
| 559 | #define RXH_L4_B_0_1 (1 << 6) /* src port in case of TCP/UDP/SCTP */ | ||
| 560 | #define RXH_L4_B_2_3 (1 << 7) /* dst port in case of TCP/UDP/SCTP */ | ||
| 561 | #define RXH_DISCARD (1 << 31) | ||
| 562 | |||
| 563 | |||
| 531 | #endif /* _LINUX_ETHTOOL_H */ | 564 | #endif /* _LINUX_ETHTOOL_H */ |
diff --git a/include/linux/hdlc.h b/include/linux/hdlc.h index 6115545a5b9c..c59769693bee 100644 --- a/include/linux/hdlc.h +++ b/include/linux/hdlc.h | |||
| @@ -45,7 +45,6 @@ struct hdlc_proto { | |||
| 45 | 45 | ||
| 46 | /* Pointed to by dev->priv */ | 46 | /* Pointed to by dev->priv */ |
| 47 | typedef struct hdlc_device { | 47 | typedef struct hdlc_device { |
| 48 | struct net_device_stats stats; | ||
| 49 | /* used by HDLC layer to take control over HDLC device from hw driver*/ | 48 | /* used by HDLC layer to take control over HDLC device from hw driver*/ |
| 50 | int (*attach)(struct net_device *dev, | 49 | int (*attach)(struct net_device *dev, |
| 51 | unsigned short encoding, unsigned short parity); | 50 | unsigned short encoding, unsigned short parity); |
| @@ -109,12 +108,6 @@ int attach_hdlc_protocol(struct net_device *dev, struct hdlc_proto *proto, | |||
| 109 | /* May be used by hardware driver to gain control over HDLC device */ | 108 | /* May be used by hardware driver to gain control over HDLC device */ |
| 110 | void detach_hdlc_protocol(struct net_device *dev); | 109 | void detach_hdlc_protocol(struct net_device *dev); |
| 111 | 110 | ||
| 112 | static __inline__ struct net_device_stats *hdlc_stats(struct net_device *dev) | ||
| 113 | { | ||
| 114 | return &dev_to_hdlc(dev)->stats; | ||
| 115 | } | ||
| 116 | |||
| 117 | |||
| 118 | static __inline__ __be16 hdlc_type_trans(struct sk_buff *skb, | 111 | static __inline__ __be16 hdlc_type_trans(struct sk_buff *skb, |
| 119 | struct net_device *dev) | 112 | struct net_device *dev) |
| 120 | { | 113 | { |
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index 0b5e03eae6d2..a1630ba0b87c 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h | |||
| @@ -98,6 +98,9 @@ | |||
| 98 | 98 | ||
| 99 | #define IEEE80211_MAX_SSID_LEN 32 | 99 | #define IEEE80211_MAX_SSID_LEN 32 |
| 100 | #define IEEE80211_MAX_MESH_ID_LEN 32 | 100 | #define IEEE80211_MAX_MESH_ID_LEN 32 |
| 101 | #define IEEE80211_QOS_CTL_LEN 2 | ||
| 102 | #define IEEE80211_QOS_CTL_TID_MASK 0x000F | ||
| 103 | #define IEEE80211_QOS_CTL_TAG1D_MASK 0x0007 | ||
| 101 | 104 | ||
| 102 | struct ieee80211_hdr { | 105 | struct ieee80211_hdr { |
| 103 | __le16 frame_control; | 106 | __le16 frame_control; |
| @@ -109,6 +112,355 @@ struct ieee80211_hdr { | |||
| 109 | u8 addr4[6]; | 112 | u8 addr4[6]; |
| 110 | } __attribute__ ((packed)); | 113 | } __attribute__ ((packed)); |
| 111 | 114 | ||
| 115 | /** | ||
| 116 | * ieee80211_has_tods - check if IEEE80211_FCTL_TODS is set | ||
| 117 | * @fc: frame control bytes in little-endian byteorder | ||
| 118 | */ | ||
| 119 | static inline int ieee80211_has_tods(__le16 fc) | ||
| 120 | { | ||
| 121 | return (fc & cpu_to_le16(IEEE80211_FCTL_TODS)) != 0; | ||
| 122 | } | ||
| 123 | |||
| 124 | /** | ||
| 125 | * ieee80211_has_fromds - check if IEEE80211_FCTL_FROMDS is set | ||
| 126 | * @fc: frame control bytes in little-endian byteorder | ||
| 127 | */ | ||
| 128 | static inline int ieee80211_has_fromds(__le16 fc) | ||
| 129 | { | ||
| 130 | return (fc & cpu_to_le16(IEEE80211_FCTL_FROMDS)) != 0; | ||
| 131 | } | ||
| 132 | |||
| 133 | /** | ||
| 134 | * ieee80211_has_a4 - check if IEEE80211_FCTL_TODS and IEEE80211_FCTL_FROMDS are set | ||
| 135 | * @fc: frame control bytes in little-endian byteorder | ||
| 136 | */ | ||
| 137 | static inline int ieee80211_has_a4(__le16 fc) | ||
| 138 | { | ||
| 139 | __le16 tmp = cpu_to_le16(IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS); | ||
| 140 | return (fc & tmp) == tmp; | ||
| 141 | } | ||
| 142 | |||
| 143 | /** | ||
| 144 | * ieee80211_has_morefrags - check if IEEE80211_FCTL_MOREFRAGS is set | ||
| 145 | * @fc: frame control bytes in little-endian byteorder | ||
| 146 | */ | ||
| 147 | static inline int ieee80211_has_morefrags(__le16 fc) | ||
| 148 | { | ||
| 149 | return (fc & cpu_to_le16(IEEE80211_FCTL_MOREFRAGS)) != 0; | ||
| 150 | } | ||
| 151 | |||
| 152 | /** | ||
| 153 | * ieee80211_has_retry - check if IEEE80211_FCTL_RETRY is set | ||
| 154 | * @fc: frame control bytes in little-endian byteorder | ||
| 155 | */ | ||
| 156 | static inline int ieee80211_has_retry(__le16 fc) | ||
| 157 | { | ||
| 158 | return (fc & cpu_to_le16(IEEE80211_FCTL_RETRY)) != 0; | ||
| 159 | } | ||
| 160 | |||
| 161 | /** | ||
| 162 | * ieee80211_has_pm - check if IEEE80211_FCTL_PM is set | ||
| 163 | * @fc: frame control bytes in little-endian byteorder | ||
| 164 | */ | ||
| 165 | static inline int ieee80211_has_pm(__le16 fc) | ||
| 166 | { | ||
| 167 | return (fc & cpu_to_le16(IEEE80211_FCTL_PM)) != 0; | ||
| 168 | } | ||
| 169 | |||
| 170 | /** | ||
| 171 | * ieee80211_has_moredata - check if IEEE80211_FCTL_MOREDATA is set | ||
| 172 | * @fc: frame control bytes in little-endian byteorder | ||
| 173 | */ | ||
| 174 | static inline int ieee80211_has_moredata(__le16 fc) | ||
| 175 | { | ||
| 176 | return (fc & cpu_to_le16(IEEE80211_FCTL_MOREDATA)) != 0; | ||
| 177 | } | ||
| 178 | |||
| 179 | /** | ||
| 180 | * ieee80211_has_protected - check if IEEE80211_FCTL_PROTECTED is set | ||
| 181 | * @fc: frame control bytes in little-endian byteorder | ||
| 182 | */ | ||
| 183 | static inline int ieee80211_has_protected(__le16 fc) | ||
| 184 | { | ||
| 185 | return (fc & cpu_to_le16(IEEE80211_FCTL_PROTECTED)) != 0; | ||
| 186 | } | ||
| 187 | |||
| 188 | /** | ||
| 189 | * ieee80211_has_order - check if IEEE80211_FCTL_ORDER is set | ||
| 190 | * @fc: frame control bytes in little-endian byteorder | ||
| 191 | */ | ||
| 192 | static inline int ieee80211_has_order(__le16 fc) | ||
| 193 | { | ||
| 194 | return (fc & cpu_to_le16(IEEE80211_FCTL_ORDER)) != 0; | ||
| 195 | } | ||
| 196 | |||
| 197 | /** | ||
| 198 | * ieee80211_is_mgmt - check if type is IEEE80211_FTYPE_MGMT | ||
| 199 | * @fc: frame control bytes in little-endian byteorder | ||
| 200 | */ | ||
| 201 | static inline int ieee80211_is_mgmt(__le16 fc) | ||
| 202 | { | ||
| 203 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE)) == | ||
| 204 | cpu_to_le16(IEEE80211_FTYPE_MGMT); | ||
| 205 | } | ||
| 206 | |||
| 207 | /** | ||
| 208 | * ieee80211_is_ctl - check if type is IEEE80211_FTYPE_CTL | ||
| 209 | * @fc: frame control bytes in little-endian byteorder | ||
| 210 | */ | ||
| 211 | static inline int ieee80211_is_ctl(__le16 fc) | ||
| 212 | { | ||
| 213 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE)) == | ||
| 214 | cpu_to_le16(IEEE80211_FTYPE_CTL); | ||
| 215 | } | ||
| 216 | |||
| 217 | /** | ||
| 218 | * ieee80211_is_data - check if type is IEEE80211_FTYPE_DATA | ||
| 219 | * @fc: frame control bytes in little-endian byteorder | ||
| 220 | */ | ||
| 221 | static inline int ieee80211_is_data(__le16 fc) | ||
| 222 | { | ||
| 223 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE)) == | ||
| 224 | cpu_to_le16(IEEE80211_FTYPE_DATA); | ||
| 225 | } | ||
| 226 | |||
| 227 | /** | ||
| 228 | * ieee80211_is_data_qos - check if type is IEEE80211_FTYPE_DATA and IEEE80211_STYPE_QOS_DATA is set | ||
| 229 | * @fc: frame control bytes in little-endian byteorder | ||
| 230 | */ | ||
| 231 | static inline int ieee80211_is_data_qos(__le16 fc) | ||
| 232 | { | ||
| 233 | /* | ||
| 234 | * mask with QOS_DATA rather than IEEE80211_FCTL_STYPE as we just need | ||
| 235 | * to check the one bit | ||
| 236 | */ | ||
| 237 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_STYPE_QOS_DATA)) == | ||
| 238 | cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_QOS_DATA); | ||
| 239 | } | ||
| 240 | |||
| 241 | /** | ||
| 242 | * ieee80211_is_data_present - check if type is IEEE80211_FTYPE_DATA and has data | ||
| 243 | * @fc: frame control bytes in little-endian byteorder | ||
| 244 | */ | ||
| 245 | static inline int ieee80211_is_data_present(__le16 fc) | ||
| 246 | { | ||
| 247 | /* | ||
| 248 | * mask with 0x40 and test that that bit is clear to only return true | ||
| 249 | * for the data-containing substypes. | ||
| 250 | */ | ||
| 251 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | 0x40)) == | ||
| 252 | cpu_to_le16(IEEE80211_FTYPE_DATA); | ||
| 253 | } | ||
| 254 | |||
| 255 | /** | ||
| 256 | * ieee80211_is_assoc_req - check if IEEE80211_FTYPE_MGMT && IEEE80211_STYPE_ASSOC_REQ | ||
| 257 | * @fc: frame control bytes in little-endian byteorder | ||
| 258 | */ | ||
| 259 | static inline int ieee80211_is_assoc_req(__le16 fc) | ||
| 260 | { | ||
| 261 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == | ||
| 262 | cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_ASSOC_REQ); | ||
| 263 | } | ||
| 264 | |||
| 265 | /** | ||
| 266 | * ieee80211_is_assoc_resp - check if IEEE80211_FTYPE_MGMT && IEEE80211_STYPE_ASSOC_RESP | ||
| 267 | * @fc: frame control bytes in little-endian byteorder | ||
| 268 | */ | ||
| 269 | static inline int ieee80211_is_assoc_resp(__le16 fc) | ||
| 270 | { | ||
| 271 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == | ||
| 272 | cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_ASSOC_RESP); | ||
| 273 | } | ||
| 274 | |||
| 275 | /** | ||
| 276 | * ieee80211_is_reassoc_req - check if IEEE80211_FTYPE_MGMT && IEEE80211_STYPE_REASSOC_REQ | ||
| 277 | * @fc: frame control bytes in little-endian byteorder | ||
| 278 | */ | ||
| 279 | static inline int ieee80211_is_reassoc_req(__le16 fc) | ||
| 280 | { | ||
| 281 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == | ||
| 282 | cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_REASSOC_REQ); | ||
| 283 | } | ||
| 284 | |||
| 285 | /** | ||
| 286 | * ieee80211_is_reassoc_resp - check if IEEE80211_FTYPE_MGMT && IEEE80211_STYPE_REASSOC_RESP | ||
| 287 | * @fc: frame control bytes in little-endian byteorder | ||
| 288 | */ | ||
| 289 | static inline int ieee80211_is_reassoc_resp(__le16 fc) | ||
| 290 | { | ||
| 291 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == | ||
| 292 | cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_REASSOC_RESP); | ||
| 293 | } | ||
| 294 | |||
| 295 | /** | ||
| 296 | * ieee80211_is_probe_req - check if IEEE80211_FTYPE_MGMT && IEEE80211_STYPE_PROBE_REQ | ||
| 297 | * @fc: frame control bytes in little-endian byteorder | ||
| 298 | */ | ||
| 299 | static inline int ieee80211_is_probe_req(__le16 fc) | ||
| 300 | { | ||
| 301 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == | ||
| 302 | cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_PROBE_REQ); | ||
| 303 | } | ||
| 304 | |||
| 305 | /** | ||
| 306 | * ieee80211_is_probe_resp - check if IEEE80211_FTYPE_MGMT && IEEE80211_STYPE_PROBE_RESP | ||
| 307 | * @fc: frame control bytes in little-endian byteorder | ||
| 308 | */ | ||
| 309 | static inline int ieee80211_is_probe_resp(__le16 fc) | ||
| 310 | { | ||
| 311 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == | ||
| 312 | cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_PROBE_RESP); | ||
| 313 | } | ||
| 314 | |||
| 315 | /** | ||
| 316 | * ieee80211_is_beacon - check if IEEE80211_FTYPE_MGMT && IEEE80211_STYPE_BEACON | ||
| 317 | * @fc: frame control bytes in little-endian byteorder | ||
| 318 | */ | ||
| 319 | static inline int ieee80211_is_beacon(__le16 fc) | ||
| 320 | { | ||
| 321 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == | ||
| 322 | cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_BEACON); | ||
| 323 | } | ||
| 324 | |||
| 325 | /** | ||
| 326 | * ieee80211_is_atim - check if IEEE80211_FTYPE_MGMT && IEEE80211_STYPE_ATIM | ||
| 327 | * @fc: frame control bytes in little-endian byteorder | ||
| 328 | */ | ||
| 329 | static inline int ieee80211_is_atim(__le16 fc) | ||
| 330 | { | ||
| 331 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == | ||
| 332 | cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_ATIM); | ||
| 333 | } | ||
| 334 | |||
| 335 | /** | ||
| 336 | * ieee80211_is_disassoc - check if IEEE80211_FTYPE_MGMT && IEEE80211_STYPE_DISASSOC | ||
| 337 | * @fc: frame control bytes in little-endian byteorder | ||
| 338 | */ | ||
| 339 | static inline int ieee80211_is_disassoc(__le16 fc) | ||
| 340 | { | ||
| 341 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == | ||
| 342 | cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_DISASSOC); | ||
| 343 | } | ||
| 344 | |||
| 345 | /** | ||
| 346 | * ieee80211_is_auth - check if IEEE80211_FTYPE_MGMT && IEEE80211_STYPE_AUTH | ||
| 347 | * @fc: frame control bytes in little-endian byteorder | ||
| 348 | */ | ||
| 349 | static inline int ieee80211_is_auth(__le16 fc) | ||
| 350 | { | ||
| 351 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == | ||
| 352 | cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_AUTH); | ||
| 353 | } | ||
| 354 | |||
| 355 | /** | ||
| 356 | * ieee80211_is_deauth - check if IEEE80211_FTYPE_MGMT && IEEE80211_STYPE_DEAUTH | ||
| 357 | * @fc: frame control bytes in little-endian byteorder | ||
| 358 | */ | ||
| 359 | static inline int ieee80211_is_deauth(__le16 fc) | ||
| 360 | { | ||
| 361 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == | ||
| 362 | cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_DEAUTH); | ||
| 363 | } | ||
| 364 | |||
| 365 | /** | ||
| 366 | * ieee80211_is_action - check if IEEE80211_FTYPE_MGMT && IEEE80211_STYPE_ACTION | ||
| 367 | * @fc: frame control bytes in little-endian byteorder | ||
| 368 | */ | ||
| 369 | static inline int ieee80211_is_action(__le16 fc) | ||
| 370 | { | ||
| 371 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == | ||
| 372 | cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_ACTION); | ||
| 373 | } | ||
| 374 | |||
| 375 | /** | ||
| 376 | * ieee80211_is_back_req - check if IEEE80211_FTYPE_CTL && IEEE80211_STYPE_BACK_REQ | ||
| 377 | * @fc: frame control bytes in little-endian byteorder | ||
| 378 | */ | ||
| 379 | static inline int ieee80211_is_back_req(__le16 fc) | ||
| 380 | { | ||
| 381 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == | ||
| 382 | cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_BACK_REQ); | ||
| 383 | } | ||
| 384 | |||
| 385 | /** | ||
| 386 | * ieee80211_is_back - check if IEEE80211_FTYPE_CTL && IEEE80211_STYPE_BACK | ||
| 387 | * @fc: frame control bytes in little-endian byteorder | ||
| 388 | */ | ||
| 389 | static inline int ieee80211_is_back(__le16 fc) | ||
| 390 | { | ||
| 391 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == | ||
| 392 | cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_BACK); | ||
| 393 | } | ||
| 394 | |||
| 395 | /** | ||
| 396 | * ieee80211_is_pspoll - check if IEEE80211_FTYPE_CTL && IEEE80211_STYPE_PSPOLL | ||
| 397 | * @fc: frame control bytes in little-endian byteorder | ||
| 398 | */ | ||
| 399 | static inline int ieee80211_is_pspoll(__le16 fc) | ||
| 400 | { | ||
| 401 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == | ||
| 402 | cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_PSPOLL); | ||
| 403 | } | ||
| 404 | |||
| 405 | /** | ||
| 406 | * ieee80211_is_rts - check if IEEE80211_FTYPE_CTL && IEEE80211_STYPE_RTS | ||
| 407 | * @fc: frame control bytes in little-endian byteorder | ||
| 408 | */ | ||
| 409 | static inline int ieee80211_is_rts(__le16 fc) | ||
| 410 | { | ||
| 411 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == | ||
| 412 | cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_RTS); | ||
| 413 | } | ||
| 414 | |||
| 415 | /** | ||
| 416 | * ieee80211_is_cts - check if IEEE80211_FTYPE_CTL && IEEE80211_STYPE_CTS | ||
| 417 | * @fc: frame control bytes in little-endian byteorder | ||
| 418 | */ | ||
| 419 | static inline int ieee80211_is_cts(__le16 fc) | ||
| 420 | { | ||
| 421 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == | ||
| 422 | cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_CTS); | ||
| 423 | } | ||
| 424 | |||
| 425 | /** | ||
| 426 | * ieee80211_is_ack - check if IEEE80211_FTYPE_CTL && IEEE80211_STYPE_ACK | ||
| 427 | * @fc: frame control bytes in little-endian byteorder | ||
| 428 | */ | ||
| 429 | static inline int ieee80211_is_ack(__le16 fc) | ||
| 430 | { | ||
| 431 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == | ||
| 432 | cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_ACK); | ||
| 433 | } | ||
| 434 | |||
| 435 | /** | ||
| 436 | * ieee80211_is_cfend - check if IEEE80211_FTYPE_CTL && IEEE80211_STYPE_CFEND | ||
| 437 | * @fc: frame control bytes in little-endian byteorder | ||
| 438 | */ | ||
| 439 | static inline int ieee80211_is_cfend(__le16 fc) | ||
| 440 | { | ||
| 441 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == | ||
| 442 | cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_CFEND); | ||
| 443 | } | ||
| 444 | |||
| 445 | /** | ||
| 446 | * ieee80211_is_cfendack - check if IEEE80211_FTYPE_CTL && IEEE80211_STYPE_CFENDACK | ||
| 447 | * @fc: frame control bytes in little-endian byteorder | ||
| 448 | */ | ||
| 449 | static inline int ieee80211_is_cfendack(__le16 fc) | ||
| 450 | { | ||
| 451 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == | ||
| 452 | cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_CFENDACK); | ||
| 453 | } | ||
| 454 | |||
| 455 | /** | ||
| 456 | * ieee80211_is_nullfunc - check if FTYPE=IEEE80211_FTYPE_DATA and STYPE=IEEE80211_STYPE_NULLFUNC | ||
| 457 | * @fc: frame control bytes in little-endian byteorder | ||
| 458 | */ | ||
| 459 | static inline int ieee80211_is_nullfunc(__le16 fc) | ||
| 460 | { | ||
| 461 | return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) == | ||
| 462 | cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_NULLFUNC); | ||
| 463 | } | ||
| 112 | 464 | ||
| 113 | struct ieee80211s_hdr { | 465 | struct ieee80211s_hdr { |
| 114 | u8 flags; | 466 | u8 flags; |
| @@ -119,6 +471,40 @@ struct ieee80211s_hdr { | |||
| 119 | u8 eaddr3[6]; | 471 | u8 eaddr3[6]; |
| 120 | } __attribute__ ((packed)); | 472 | } __attribute__ ((packed)); |
| 121 | 473 | ||
| 474 | /** | ||
| 475 | * struct ieee80211_quiet_ie | ||
| 476 | * | ||
| 477 | * This structure refers to "Quiet information element" | ||
| 478 | */ | ||
| 479 | struct ieee80211_quiet_ie { | ||
| 480 | u8 count; | ||
| 481 | u8 period; | ||
| 482 | __le16 duration; | ||
| 483 | __le16 offset; | ||
| 484 | } __attribute__ ((packed)); | ||
| 485 | |||
| 486 | /** | ||
| 487 | * struct ieee80211_msrment_ie | ||
| 488 | * | ||
| 489 | * This structure refers to "Measurement Request/Report information element" | ||
| 490 | */ | ||
| 491 | struct ieee80211_msrment_ie { | ||
| 492 | u8 token; | ||
| 493 | u8 mode; | ||
| 494 | u8 type; | ||
| 495 | u8 request[0]; | ||
| 496 | } __attribute__ ((packed)); | ||
| 497 | |||
| 498 | /** | ||
| 499 | * struct ieee80211_channel_sw_ie | ||
| 500 | * | ||
| 501 | * This structure refers to "Channel Switch Announcement information element" | ||
| 502 | */ | ||
| 503 | struct ieee80211_channel_sw_ie { | ||
| 504 | u8 mode; | ||
| 505 | u8 new_ch_num; | ||
| 506 | u8 count; | ||
| 507 | } __attribute__ ((packed)); | ||
| 122 | 508 | ||
| 123 | struct ieee80211_mgmt { | 509 | struct ieee80211_mgmt { |
| 124 | __le16 frame_control; | 510 | __le16 frame_control; |
| @@ -194,13 +580,18 @@ struct ieee80211_mgmt { | |||
| 194 | u8 action_code; | 580 | u8 action_code; |
| 195 | u8 element_id; | 581 | u8 element_id; |
| 196 | u8 length; | 582 | u8 length; |
| 197 | u8 switch_mode; | 583 | struct ieee80211_channel_sw_ie sw_elem; |
| 198 | u8 new_chan; | ||
| 199 | u8 switch_count; | ||
| 200 | } __attribute__((packed)) chan_switch; | 584 | } __attribute__((packed)) chan_switch; |
| 201 | struct{ | 585 | struct{ |
| 202 | u8 action_code; | 586 | u8 action_code; |
| 203 | u8 dialog_token; | 587 | u8 dialog_token; |
| 588 | u8 element_id; | ||
| 589 | u8 length; | ||
| 590 | struct ieee80211_msrment_ie msr_elem; | ||
| 591 | } __attribute__((packed)) measurement; | ||
| 592 | struct{ | ||
| 593 | u8 action_code; | ||
| 594 | u8 dialog_token; | ||
| 204 | __le16 capab; | 595 | __le16 capab; |
| 205 | __le16 timeout; | 596 | __le16 timeout; |
| 206 | __le16 start_seq_num; | 597 | __le16 start_seq_num; |
| @@ -269,6 +660,10 @@ struct ieee80211_bar { | |||
| 269 | __le16 start_seq_num; | 660 | __le16 start_seq_num; |
| 270 | } __attribute__((packed)); | 661 | } __attribute__((packed)); |
| 271 | 662 | ||
| 663 | /* 802.11 BAR control masks */ | ||
| 664 | #define IEEE80211_BAR_CTRL_ACK_POLICY_NORMAL 0x0000 | ||
| 665 | #define IEEE80211_BAR_CTRL_CBMTID_COMPRESSED_BA 0x0004 | ||
| 666 | |||
| 272 | /** | 667 | /** |
| 273 | * struct ieee80211_ht_cap - HT capabilities | 668 | * struct ieee80211_ht_cap - HT capabilities |
| 274 | * | 669 | * |
| @@ -306,20 +701,33 @@ struct ieee80211_ht_addt_info { | |||
| 306 | #define IEEE80211_HT_CAP_SGI_40 0x0040 | 701 | #define IEEE80211_HT_CAP_SGI_40 0x0040 |
| 307 | #define IEEE80211_HT_CAP_DELAY_BA 0x0400 | 702 | #define IEEE80211_HT_CAP_DELAY_BA 0x0400 |
| 308 | #define IEEE80211_HT_CAP_MAX_AMSDU 0x0800 | 703 | #define IEEE80211_HT_CAP_MAX_AMSDU 0x0800 |
| 704 | /* 802.11n HT capability AMPDU settings */ | ||
| 309 | #define IEEE80211_HT_CAP_AMPDU_FACTOR 0x03 | 705 | #define IEEE80211_HT_CAP_AMPDU_FACTOR 0x03 |
| 310 | #define IEEE80211_HT_CAP_AMPDU_DENSITY 0x1C | 706 | #define IEEE80211_HT_CAP_AMPDU_DENSITY 0x1C |
| 707 | /* 802.11n HT capability MSC set */ | ||
| 708 | #define IEEE80211_SUPP_MCS_SET_UEQM 4 | ||
| 709 | #define IEEE80211_HT_CAP_MAX_STREAMS 4 | ||
| 710 | #define IEEE80211_SUPP_MCS_SET_LEN 10 | ||
| 711 | /* maximum streams the spec allows */ | ||
| 712 | #define IEEE80211_HT_CAP_MCS_TX_DEFINED 0x01 | ||
| 713 | #define IEEE80211_HT_CAP_MCS_TX_RX_DIFF 0x02 | ||
| 714 | #define IEEE80211_HT_CAP_MCS_TX_STREAMS 0x0C | ||
| 715 | #define IEEE80211_HT_CAP_MCS_TX_UEQM 0x10 | ||
| 311 | /* 802.11n HT IE masks */ | 716 | /* 802.11n HT IE masks */ |
| 312 | #define IEEE80211_HT_IE_CHA_SEC_OFFSET 0x03 | 717 | #define IEEE80211_HT_IE_CHA_SEC_OFFSET 0x03 |
| 718 | #define IEEE80211_HT_IE_CHA_SEC_NONE 0x00 | ||
| 719 | #define IEEE80211_HT_IE_CHA_SEC_ABOVE 0x01 | ||
| 720 | #define IEEE80211_HT_IE_CHA_SEC_BELOW 0x03 | ||
| 313 | #define IEEE80211_HT_IE_CHA_WIDTH 0x04 | 721 | #define IEEE80211_HT_IE_CHA_WIDTH 0x04 |
| 314 | #define IEEE80211_HT_IE_HT_PROTECTION 0x0003 | 722 | #define IEEE80211_HT_IE_HT_PROTECTION 0x0003 |
| 315 | #define IEEE80211_HT_IE_NON_GF_STA_PRSNT 0x0004 | 723 | #define IEEE80211_HT_IE_NON_GF_STA_PRSNT 0x0004 |
| 316 | #define IEEE80211_HT_IE_NON_HT_STA_PRSNT 0x0010 | 724 | #define IEEE80211_HT_IE_NON_HT_STA_PRSNT 0x0010 |
| 317 | 725 | ||
| 318 | /* MIMO Power Save Modes */ | 726 | /* MIMO Power Save Modes */ |
| 319 | #define WLAN_HT_CAP_MIMO_PS_STATIC 0 | 727 | #define WLAN_HT_CAP_MIMO_PS_STATIC 0 |
| 320 | #define WLAN_HT_CAP_MIMO_PS_DYNAMIC 1 | 728 | #define WLAN_HT_CAP_MIMO_PS_DYNAMIC 1 |
| 321 | #define WLAN_HT_CAP_MIMO_PS_INVALID 2 | 729 | #define WLAN_HT_CAP_MIMO_PS_INVALID 2 |
| 322 | #define WLAN_HT_CAP_MIMO_PS_DISABLED 3 | 730 | #define WLAN_HT_CAP_MIMO_PS_DISABLED 3 |
| 323 | 731 | ||
| 324 | /* Authentication algorithms */ | 732 | /* Authentication algorithms */ |
| 325 | #define WLAN_AUTH_OPEN 0 | 733 | #define WLAN_AUTH_OPEN 0 |
| @@ -337,11 +745,21 @@ struct ieee80211_ht_addt_info { | |||
| 337 | #define WLAN_CAPABILITY_SHORT_PREAMBLE (1<<5) | 745 | #define WLAN_CAPABILITY_SHORT_PREAMBLE (1<<5) |
| 338 | #define WLAN_CAPABILITY_PBCC (1<<6) | 746 | #define WLAN_CAPABILITY_PBCC (1<<6) |
| 339 | #define WLAN_CAPABILITY_CHANNEL_AGILITY (1<<7) | 747 | #define WLAN_CAPABILITY_CHANNEL_AGILITY (1<<7) |
| 748 | |||
| 340 | /* 802.11h */ | 749 | /* 802.11h */ |
| 341 | #define WLAN_CAPABILITY_SPECTRUM_MGMT (1<<8) | 750 | #define WLAN_CAPABILITY_SPECTRUM_MGMT (1<<8) |
| 342 | #define WLAN_CAPABILITY_QOS (1<<9) | 751 | #define WLAN_CAPABILITY_QOS (1<<9) |
| 343 | #define WLAN_CAPABILITY_SHORT_SLOT_TIME (1<<10) | 752 | #define WLAN_CAPABILITY_SHORT_SLOT_TIME (1<<10) |
| 344 | #define WLAN_CAPABILITY_DSSS_OFDM (1<<13) | 753 | #define WLAN_CAPABILITY_DSSS_OFDM (1<<13) |
| 754 | /* measurement */ | ||
| 755 | #define IEEE80211_SPCT_MSR_RPRT_MODE_LATE (1<<0) | ||
| 756 | #define IEEE80211_SPCT_MSR_RPRT_MODE_INCAPABLE (1<<1) | ||
| 757 | #define IEEE80211_SPCT_MSR_RPRT_MODE_REFUSED (1<<2) | ||
| 758 | |||
| 759 | #define IEEE80211_SPCT_MSR_RPRT_TYPE_BASIC 0 | ||
| 760 | #define IEEE80211_SPCT_MSR_RPRT_TYPE_CCA 1 | ||
| 761 | #define IEEE80211_SPCT_MSR_RPRT_TYPE_RPI 2 | ||
| 762 | |||
| 345 | 763 | ||
| 346 | /* 802.11g ERP information element */ | 764 | /* 802.11g ERP information element */ |
| 347 | #define WLAN_ERP_NON_ERP_PRESENT (1<<0) | 765 | #define WLAN_ERP_NON_ERP_PRESENT (1<<0) |
| @@ -512,6 +930,15 @@ enum ieee80211_category { | |||
| 512 | WLAN_CATEGORY_WMM = 17, | 930 | WLAN_CATEGORY_WMM = 17, |
| 513 | }; | 931 | }; |
| 514 | 932 | ||
| 933 | /* SPECTRUM_MGMT action code */ | ||
| 934 | enum ieee80211_spectrum_mgmt_actioncode { | ||
| 935 | WLAN_ACTION_SPCT_MSR_REQ = 0, | ||
| 936 | WLAN_ACTION_SPCT_MSR_RPRT = 1, | ||
| 937 | WLAN_ACTION_SPCT_TPC_REQ = 2, | ||
| 938 | WLAN_ACTION_SPCT_TPC_RPRT = 3, | ||
| 939 | WLAN_ACTION_SPCT_CHL_SWITCH = 4, | ||
| 940 | }; | ||
| 941 | |||
| 515 | /* BACK action code */ | 942 | /* BACK action code */ |
| 516 | enum ieee80211_back_actioncode { | 943 | enum ieee80211_back_actioncode { |
| 517 | WLAN_ACTION_ADDBA_REQ = 0, | 944 | WLAN_ACTION_ADDBA_REQ = 0, |
| @@ -540,63 +967,57 @@ enum ieee80211_back_parties { | |||
| 540 | #define WLAN_MAX_KEY_LEN 32 | 967 | #define WLAN_MAX_KEY_LEN 32 |
| 541 | 968 | ||
| 542 | /** | 969 | /** |
| 970 | * ieee80211_get_qos_ctl - get pointer to qos control bytes | ||
| 971 | * @hdr: the frame | ||
| 972 | * | ||
| 973 | * The qos ctrl bytes come after the frame_control, duration, seq_num | ||
| 974 | * and 3 or 4 addresses of length ETH_ALEN. | ||
| 975 | * 3 addr: 2 + 2 + 2 + 3*6 = 24 | ||
| 976 | * 4 addr: 2 + 2 + 2 + 4*6 = 30 | ||
| 977 | */ | ||
| 978 | static inline u8 *ieee80211_get_qos_ctl(struct ieee80211_hdr *hdr) | ||
| 979 | { | ||
| 980 | if (ieee80211_has_a4(hdr->frame_control)) | ||
| 981 | return (u8 *)hdr + 30; | ||
| 982 | else | ||
| 983 | return (u8 *)hdr + 24; | ||
| 984 | } | ||
| 985 | |||
| 986 | /** | ||
| 543 | * ieee80211_get_SA - get pointer to SA | 987 | * ieee80211_get_SA - get pointer to SA |
| 988 | * @hdr: the frame | ||
| 544 | * | 989 | * |
| 545 | * Given an 802.11 frame, this function returns the offset | 990 | * Given an 802.11 frame, this function returns the offset |
| 546 | * to the source address (SA). It does not verify that the | 991 | * to the source address (SA). It does not verify that the |
| 547 | * header is long enough to contain the address, and the | 992 | * header is long enough to contain the address, and the |
| 548 | * header must be long enough to contain the frame control | 993 | * header must be long enough to contain the frame control |
| 549 | * field. | 994 | * field. |
| 550 | * | ||
| 551 | * @hdr: the frame | ||
| 552 | */ | 995 | */ |
| 553 | static inline u8 *ieee80211_get_SA(struct ieee80211_hdr *hdr) | 996 | static inline u8 *ieee80211_get_SA(struct ieee80211_hdr *hdr) |
| 554 | { | 997 | { |
| 555 | u8 *raw = (u8 *) hdr; | 998 | if (ieee80211_has_a4(hdr->frame_control)) |
| 556 | u8 tofrom = (*(raw+1)) & 3; /* get the TODS and FROMDS bits */ | 999 | return hdr->addr4; |
| 557 | 1000 | if (ieee80211_has_fromds(hdr->frame_control)) | |
| 558 | switch (tofrom) { | 1001 | return hdr->addr3; |
| 559 | case 2: | ||
| 560 | return hdr->addr3; | ||
| 561 | case 3: | ||
| 562 | return hdr->addr4; | ||
| 563 | } | ||
| 564 | return hdr->addr2; | 1002 | return hdr->addr2; |
| 565 | } | 1003 | } |
| 566 | 1004 | ||
| 567 | /** | 1005 | /** |
| 568 | * ieee80211_get_DA - get pointer to DA | 1006 | * ieee80211_get_DA - get pointer to DA |
| 1007 | * @hdr: the frame | ||
| 569 | * | 1008 | * |
| 570 | * Given an 802.11 frame, this function returns the offset | 1009 | * Given an 802.11 frame, this function returns the offset |
| 571 | * to the destination address (DA). It does not verify that | 1010 | * to the destination address (DA). It does not verify that |
| 572 | * the header is long enough to contain the address, and the | 1011 | * the header is long enough to contain the address, and the |
| 573 | * header must be long enough to contain the frame control | 1012 | * header must be long enough to contain the frame control |
| 574 | * field. | 1013 | * field. |
| 575 | * | ||
| 576 | * @hdr: the frame | ||
| 577 | */ | 1014 | */ |
| 578 | static inline u8 *ieee80211_get_DA(struct ieee80211_hdr *hdr) | 1015 | static inline u8 *ieee80211_get_DA(struct ieee80211_hdr *hdr) |
| 579 | { | 1016 | { |
| 580 | u8 *raw = (u8 *) hdr; | 1017 | if (ieee80211_has_tods(hdr->frame_control)) |
| 581 | u8 to_ds = (*(raw+1)) & 1; /* get the TODS bit */ | ||
| 582 | |||
| 583 | if (to_ds) | ||
| 584 | return hdr->addr3; | 1018 | return hdr->addr3; |
| 585 | return hdr->addr1; | 1019 | else |
| 586 | } | 1020 | return hdr->addr1; |
| 587 | |||
| 588 | /** | ||
| 589 | * ieee80211_get_morefrag - determine whether the MOREFRAGS bit is set | ||
| 590 | * | ||
| 591 | * This function determines whether the "more fragments" bit is set | ||
| 592 | * in the frame. | ||
| 593 | * | ||
| 594 | * @hdr: the frame | ||
| 595 | */ | ||
| 596 | static inline int ieee80211_get_morefrag(struct ieee80211_hdr *hdr) | ||
| 597 | { | ||
| 598 | return (le16_to_cpu(hdr->frame_control) & | ||
| 599 | IEEE80211_FCTL_MOREFRAGS) != 0; | ||
| 600 | } | 1021 | } |
| 601 | 1022 | ||
| 602 | #endif /* IEEE80211_H */ | 1023 | #endif /* IEEE80211_H */ |
diff --git a/include/linux/if_bridge.h b/include/linux/if_bridge.h index 950e13d09e06..6badb3e2c4e4 100644 --- a/include/linux/if_bridge.h +++ b/include/linux/if_bridge.h | |||
| @@ -4,8 +4,6 @@ | |||
| 4 | * Authors: | 4 | * Authors: |
| 5 | * Lennert Buytenhek <buytenh@gnu.org> | 5 | * Lennert Buytenhek <buytenh@gnu.org> |
| 6 | * | 6 | * |
| 7 | * $Id: if_bridge.h,v 1.1 2000/02/18 16:47:01 davem Exp $ | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or | 7 | * This program is free software; you can redistribute it and/or |
| 10 | * modify it under the terms of the GNU General Public License | 8 | * modify it under the terms of the GNU General Public License |
| 11 | * as published by the Free Software Foundation; either version | 9 | * as published by the Free Software Foundation; either version |
diff --git a/include/linux/if_packet.h b/include/linux/if_packet.h index ad09609227ff..18db0668065a 100644 --- a/include/linux/if_packet.h +++ b/include/linux/if_packet.h | |||
| @@ -43,6 +43,9 @@ struct sockaddr_ll | |||
| 43 | #define PACKET_COPY_THRESH 7 | 43 | #define PACKET_COPY_THRESH 7 |
| 44 | #define PACKET_AUXDATA 8 | 44 | #define PACKET_AUXDATA 8 |
| 45 | #define PACKET_ORIGDEV 9 | 45 | #define PACKET_ORIGDEV 9 |
| 46 | #define PACKET_VERSION 10 | ||
| 47 | #define PACKET_HDRLEN 11 | ||
| 48 | #define PACKET_RESERVE 12 | ||
| 46 | 49 | ||
| 47 | struct tpacket_stats | 50 | struct tpacket_stats |
| 48 | { | 51 | { |
| @@ -57,6 +60,7 @@ struct tpacket_auxdata | |||
| 57 | __u32 tp_snaplen; | 60 | __u32 tp_snaplen; |
| 58 | __u16 tp_mac; | 61 | __u16 tp_mac; |
| 59 | __u16 tp_net; | 62 | __u16 tp_net; |
| 63 | __u16 tp_vlan_tci; | ||
| 60 | }; | 64 | }; |
| 61 | 65 | ||
| 62 | struct tpacket_hdr | 66 | struct tpacket_hdr |
| @@ -79,6 +83,26 @@ struct tpacket_hdr | |||
| 79 | #define TPACKET_ALIGN(x) (((x)+TPACKET_ALIGNMENT-1)&~(TPACKET_ALIGNMENT-1)) | 83 | #define TPACKET_ALIGN(x) (((x)+TPACKET_ALIGNMENT-1)&~(TPACKET_ALIGNMENT-1)) |
| 80 | #define TPACKET_HDRLEN (TPACKET_ALIGN(sizeof(struct tpacket_hdr)) + sizeof(struct sockaddr_ll)) | 84 | #define TPACKET_HDRLEN (TPACKET_ALIGN(sizeof(struct tpacket_hdr)) + sizeof(struct sockaddr_ll)) |
| 81 | 85 | ||
| 86 | struct tpacket2_hdr | ||
| 87 | { | ||
| 88 | __u32 tp_status; | ||
| 89 | __u32 tp_len; | ||
| 90 | __u32 tp_snaplen; | ||
| 91 | __u16 tp_mac; | ||
| 92 | __u16 tp_net; | ||
| 93 | __u32 tp_sec; | ||
| 94 | __u32 tp_nsec; | ||
| 95 | __u16 tp_vlan_tci; | ||
| 96 | }; | ||
| 97 | |||
| 98 | #define TPACKET2_HDRLEN (TPACKET_ALIGN(sizeof(struct tpacket2_hdr)) + sizeof(struct sockaddr_ll)) | ||
| 99 | |||
| 100 | enum tpacket_versions | ||
| 101 | { | ||
| 102 | TPACKET_V1, | ||
| 103 | TPACKET_V2, | ||
| 104 | }; | ||
| 105 | |||
| 82 | /* | 106 | /* |
| 83 | Frame structure: | 107 | Frame structure: |
| 84 | 108 | ||
diff --git a/include/linux/if_ppp.h b/include/linux/if_ppp.h index 0f2f70d4e48c..c3b1f8562709 100644 --- a/include/linux/if_ppp.h +++ b/include/linux/if_ppp.h | |||
| @@ -1,5 +1,3 @@ | |||
| 1 | /* $Id: if_ppp.h,v 1.21 2000/03/27 06:03:36 paulus Exp $ */ | ||
| 2 | |||
| 3 | /* | 1 | /* |
| 4 | * if_ppp.h - Point-to-Point Protocol definitions. | 2 | * if_ppp.h - Point-to-Point Protocol definitions. |
| 5 | * | 3 | * |
diff --git a/include/linux/if_tun.h b/include/linux/if_tun.h index 8c71fe2fb1f5..4c6307ad9fdb 100644 --- a/include/linux/if_tun.h +++ b/include/linux/if_tun.h | |||
| @@ -11,14 +11,13 @@ | |||
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 13 | * GNU General Public License for more details. | 13 | * GNU General Public License for more details. |
| 14 | * | ||
| 15 | * $Id: if_tun.h,v 1.2 2001/06/01 18:39:47 davem Exp $ | ||
| 16 | */ | 14 | */ |
| 17 | 15 | ||
| 18 | #ifndef __IF_TUN_H | 16 | #ifndef __IF_TUN_H |
| 19 | #define __IF_TUN_H | 17 | #define __IF_TUN_H |
| 20 | 18 | ||
| 21 | #include <linux/types.h> | 19 | #include <linux/types.h> |
| 20 | #include <linux/if_ether.h> | ||
| 22 | 21 | ||
| 23 | /* Read queue size */ | 22 | /* Read queue size */ |
| 24 | #define TUN_READQ_SIZE 500 | 23 | #define TUN_READQ_SIZE 500 |
| @@ -33,6 +32,7 @@ | |||
| 33 | #define TUN_NO_PI 0x0040 | 32 | #define TUN_NO_PI 0x0040 |
| 34 | #define TUN_ONE_QUEUE 0x0080 | 33 | #define TUN_ONE_QUEUE 0x0080 |
| 35 | #define TUN_PERSIST 0x0100 | 34 | #define TUN_PERSIST 0x0100 |
| 35 | #define TUN_VNET_HDR 0x0200 | ||
| 36 | 36 | ||
| 37 | /* Ioctl defines */ | 37 | /* Ioctl defines */ |
| 38 | #define TUNSETNOCSUM _IOW('T', 200, int) | 38 | #define TUNSETNOCSUM _IOW('T', 200, int) |
| @@ -42,17 +42,43 @@ | |||
| 42 | #define TUNSETOWNER _IOW('T', 204, int) | 42 | #define TUNSETOWNER _IOW('T', 204, int) |
| 43 | #define TUNSETLINK _IOW('T', 205, int) | 43 | #define TUNSETLINK _IOW('T', 205, int) |
| 44 | #define TUNSETGROUP _IOW('T', 206, int) | 44 | #define TUNSETGROUP _IOW('T', 206, int) |
| 45 | #define TUNGETFEATURES _IOR('T', 207, unsigned int) | ||
| 46 | #define TUNSETOFFLOAD _IOW('T', 208, unsigned int) | ||
| 47 | #define TUNSETTXFILTER _IOW('T', 209, unsigned int) | ||
| 45 | 48 | ||
| 46 | /* TUNSETIFF ifr flags */ | 49 | /* TUNSETIFF ifr flags */ |
| 47 | #define IFF_TUN 0x0001 | 50 | #define IFF_TUN 0x0001 |
| 48 | #define IFF_TAP 0x0002 | 51 | #define IFF_TAP 0x0002 |
| 49 | #define IFF_NO_PI 0x1000 | 52 | #define IFF_NO_PI 0x1000 |
| 50 | #define IFF_ONE_QUEUE 0x2000 | 53 | #define IFF_ONE_QUEUE 0x2000 |
| 54 | #define IFF_VNET_HDR 0x4000 | ||
| 55 | |||
| 56 | /* Features for GSO (TUNSETOFFLOAD). */ | ||
| 57 | #define TUN_F_CSUM 0x01 /* You can hand me unchecksummed packets. */ | ||
| 58 | #define TUN_F_TSO4 0x02 /* I can handle TSO for IPv4 packets */ | ||
| 59 | #define TUN_F_TSO6 0x04 /* I can handle TSO for IPv6 packets */ | ||
| 60 | #define TUN_F_TSO_ECN 0x08 /* I can handle TSO with ECN bits. */ | ||
| 51 | 61 | ||
| 62 | /* Protocol info prepended to the packets (when IFF_NO_PI is not set) */ | ||
| 63 | #define TUN_PKT_STRIP 0x0001 | ||
| 52 | struct tun_pi { | 64 | struct tun_pi { |
| 53 | unsigned short flags; | 65 | __u16 flags; |
| 54 | __be16 proto; | 66 | __be16 proto; |
| 55 | }; | 67 | }; |
| 56 | #define TUN_PKT_STRIP 0x0001 | 68 | |
| 69 | /* | ||
| 70 | * Filter spec (used for SETXXFILTER ioctls) | ||
| 71 | * This stuff is applicable only to the TAP (Ethernet) devices. | ||
| 72 | * If the count is zero the filter is disabled and the driver accepts | ||
| 73 | * all packets (promisc mode). | ||
| 74 | * If the filter is enabled in order to accept broadcast packets | ||
| 75 | * broadcast addr must be explicitly included in the addr list. | ||
| 76 | */ | ||
| 77 | #define TUN_FLT_ALLMULTI 0x0001 /* Accept all multicast packets */ | ||
| 78 | struct tun_filter { | ||
| 79 | __u16 flags; /* TUN_FLT_ flags see above */ | ||
| 80 | __u16 count; /* Number of addresses */ | ||
| 81 | __u8 addr[0][ETH_ALEN]; | ||
| 82 | }; | ||
| 57 | 83 | ||
| 58 | #endif /* __IF_TUN_H */ | 84 | #endif /* __IF_TUN_H */ |
diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h index 15ace02b7b24..9e7b49b8062d 100644 --- a/include/linux/if_vlan.h +++ b/include/linux/if_vlan.h | |||
| @@ -14,10 +14,6 @@ | |||
| 14 | #define _LINUX_IF_VLAN_H_ | 14 | #define _LINUX_IF_VLAN_H_ |
| 15 | 15 | ||
| 16 | #ifdef __KERNEL__ | 16 | #ifdef __KERNEL__ |
| 17 | |||
| 18 | /* externally defined structs */ | ||
| 19 | struct hlist_node; | ||
| 20 | |||
| 21 | #include <linux/netdevice.h> | 17 | #include <linux/netdevice.h> |
| 22 | #include <linux/etherdevice.h> | 18 | #include <linux/etherdevice.h> |
| 23 | 19 | ||
| @@ -91,7 +87,7 @@ struct vlan_group { | |||
| 91 | }; | 87 | }; |
| 92 | 88 | ||
| 93 | static inline struct net_device *vlan_group_get_device(struct vlan_group *vg, | 89 | static inline struct net_device *vlan_group_get_device(struct vlan_group *vg, |
| 94 | unsigned int vlan_id) | 90 | u16 vlan_id) |
| 95 | { | 91 | { |
| 96 | struct net_device **array; | 92 | struct net_device **array; |
| 97 | array = vg->vlan_devices_arrays[vlan_id / VLAN_GROUP_ARRAY_PART_LEN]; | 93 | array = vg->vlan_devices_arrays[vlan_id / VLAN_GROUP_ARRAY_PART_LEN]; |
| @@ -99,7 +95,7 @@ static inline struct net_device *vlan_group_get_device(struct vlan_group *vg, | |||
| 99 | } | 95 | } |
| 100 | 96 | ||
| 101 | static inline void vlan_group_set_device(struct vlan_group *vg, | 97 | static inline void vlan_group_set_device(struct vlan_group *vg, |
| 102 | unsigned int vlan_id, | 98 | u16 vlan_id, |
| 103 | struct net_device *dev) | 99 | struct net_device *dev) |
| 104 | { | 100 | { |
| 105 | struct net_device **array; | 101 | struct net_device **array; |
| @@ -109,164 +105,81 @@ static inline void vlan_group_set_device(struct vlan_group *vg, | |||
| 109 | array[vlan_id % VLAN_GROUP_ARRAY_PART_LEN] = dev; | 105 | array[vlan_id % VLAN_GROUP_ARRAY_PART_LEN] = dev; |
| 110 | } | 106 | } |
| 111 | 107 | ||
| 112 | struct vlan_priority_tci_mapping { | 108 | #define vlan_tx_tag_present(__skb) ((__skb)->vlan_tci) |
| 113 | u32 priority; | 109 | #define vlan_tx_tag_get(__skb) ((__skb)->vlan_tci) |
| 114 | unsigned short vlan_qos; /* This should be shifted when first set, so we only do it | ||
| 115 | * at provisioning time. | ||
| 116 | * ((skb->priority << 13) & 0xE000) | ||
| 117 | */ | ||
| 118 | struct vlan_priority_tci_mapping *next; | ||
| 119 | }; | ||
| 120 | 110 | ||
| 121 | /* Holds information that makes sense if this device is a VLAN device. */ | 111 | #if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE) |
| 122 | struct vlan_dev_info { | 112 | extern struct net_device *vlan_dev_real_dev(const struct net_device *dev); |
| 123 | /** This will be the mapping that correlates skb->priority to | 113 | extern u16 vlan_dev_vlan_id(const struct net_device *dev); |
| 124 | * 3 bits of VLAN QOS tags... | ||
| 125 | */ | ||
| 126 | unsigned int nr_ingress_mappings; | ||
| 127 | u32 ingress_priority_map[8]; | ||
| 128 | |||
| 129 | unsigned int nr_egress_mappings; | ||
| 130 | struct vlan_priority_tci_mapping *egress_priority_map[16]; /* hash table */ | ||
| 131 | |||
| 132 | unsigned short vlan_id; /* The VLAN Identifier for this interface. */ | ||
| 133 | unsigned short flags; /* (1 << 0) re_order_header This option will cause the | ||
| 134 | * VLAN code to move around the ethernet header on | ||
| 135 | * ingress to make the skb look **exactly** like it | ||
| 136 | * came in from an ethernet port. This destroys some of | ||
| 137 | * the VLAN information in the skb, but it fixes programs | ||
| 138 | * like DHCP that use packet-filtering and don't understand | ||
| 139 | * 802.1Q | ||
| 140 | */ | ||
| 141 | struct net_device *real_dev; /* the underlying device/interface */ | ||
| 142 | unsigned char real_dev_addr[ETH_ALEN]; | ||
| 143 | struct proc_dir_entry *dent; /* Holds the proc data */ | ||
| 144 | unsigned long cnt_inc_headroom_on_tx; /* How many times did we have to grow the skb on TX. */ | ||
| 145 | unsigned long cnt_encap_on_xmit; /* How many times did we have to encapsulate the skb on TX. */ | ||
| 146 | }; | ||
| 147 | 114 | ||
| 148 | static inline struct vlan_dev_info *vlan_dev_info(const struct net_device *dev) | 115 | extern int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp, |
| 116 | u16 vlan_tci, int polling); | ||
| 117 | #else | ||
| 118 | static inline struct net_device *vlan_dev_real_dev(const struct net_device *dev) | ||
| 149 | { | 119 | { |
| 150 | return netdev_priv(dev); | 120 | BUG(); |
| 121 | return NULL; | ||
| 151 | } | 122 | } |
| 152 | 123 | ||
| 153 | /* inline functions */ | 124 | static inline u16 vlan_dev_vlan_id(const struct net_device *dev) |
| 154 | static inline __u32 vlan_get_ingress_priority(struct net_device *dev, | ||
| 155 | unsigned short vlan_tag) | ||
| 156 | { | 125 | { |
| 157 | struct vlan_dev_info *vip = vlan_dev_info(dev); | 126 | BUG(); |
| 158 | 127 | return 0; | |
| 159 | return vip->ingress_priority_map[(vlan_tag >> 13) & 0x7]; | ||
| 160 | } | 128 | } |
| 161 | 129 | ||
| 162 | /* VLAN tx hw acceleration helpers. */ | 130 | static inline int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp, |
| 163 | struct vlan_skb_tx_cookie { | 131 | u16 vlan_tci, int polling) |
| 164 | u32 magic; | ||
| 165 | u32 vlan_tag; | ||
| 166 | }; | ||
| 167 | |||
| 168 | #define VLAN_TX_COOKIE_MAGIC 0x564c414e /* "VLAN" in ascii. */ | ||
| 169 | #define VLAN_TX_SKB_CB(__skb) ((struct vlan_skb_tx_cookie *)&((__skb)->cb[0])) | ||
| 170 | #define vlan_tx_tag_present(__skb) \ | ||
| 171 | (VLAN_TX_SKB_CB(__skb)->magic == VLAN_TX_COOKIE_MAGIC) | ||
| 172 | #define vlan_tx_tag_get(__skb) (VLAN_TX_SKB_CB(__skb)->vlan_tag) | ||
| 173 | |||
| 174 | /* VLAN rx hw acceleration helper. This acts like netif_{rx,receive_skb}(). */ | ||
| 175 | static inline int __vlan_hwaccel_rx(struct sk_buff *skb, | ||
| 176 | struct vlan_group *grp, | ||
| 177 | unsigned short vlan_tag, int polling) | ||
| 178 | { | 132 | { |
| 179 | struct net_device_stats *stats; | 133 | BUG(); |
| 180 | 134 | return NET_XMIT_SUCCESS; | |
| 181 | if (skb_bond_should_drop(skb)) { | ||
| 182 | dev_kfree_skb_any(skb); | ||
| 183 | return NET_RX_DROP; | ||
| 184 | } | ||
| 185 | |||
| 186 | skb->dev = vlan_group_get_device(grp, vlan_tag & VLAN_VID_MASK); | ||
| 187 | if (skb->dev == NULL) { | ||
| 188 | dev_kfree_skb_any(skb); | ||
| 189 | |||
| 190 | /* Not NET_RX_DROP, this is not being dropped | ||
| 191 | * due to congestion. | ||
| 192 | */ | ||
| 193 | return 0; | ||
| 194 | } | ||
| 195 | |||
| 196 | skb->dev->last_rx = jiffies; | ||
| 197 | |||
| 198 | stats = &skb->dev->stats; | ||
| 199 | stats->rx_packets++; | ||
| 200 | stats->rx_bytes += skb->len; | ||
| 201 | |||
| 202 | skb->priority = vlan_get_ingress_priority(skb->dev, vlan_tag); | ||
| 203 | switch (skb->pkt_type) { | ||
| 204 | case PACKET_BROADCAST: | ||
| 205 | break; | ||
| 206 | |||
| 207 | case PACKET_MULTICAST: | ||
| 208 | stats->multicast++; | ||
| 209 | break; | ||
| 210 | |||
| 211 | case PACKET_OTHERHOST: | ||
| 212 | /* Our lower layer thinks this is not local, let's make sure. | ||
| 213 | * This allows the VLAN to have a different MAC than the underlying | ||
| 214 | * device, and still route correctly. | ||
| 215 | */ | ||
| 216 | if (!compare_ether_addr(eth_hdr(skb)->h_dest, | ||
| 217 | skb->dev->dev_addr)) | ||
| 218 | skb->pkt_type = PACKET_HOST; | ||
| 219 | break; | ||
| 220 | }; | ||
| 221 | |||
| 222 | return (polling ? netif_receive_skb(skb) : netif_rx(skb)); | ||
| 223 | } | 135 | } |
| 136 | #endif | ||
| 224 | 137 | ||
| 138 | /** | ||
| 139 | * vlan_hwaccel_rx - netif_rx wrapper for VLAN RX acceleration | ||
| 140 | * @skb: buffer | ||
| 141 | * @grp: vlan group | ||
| 142 | * @vlan_tci: VLAN TCI as received from the card | ||
| 143 | */ | ||
| 225 | static inline int vlan_hwaccel_rx(struct sk_buff *skb, | 144 | static inline int vlan_hwaccel_rx(struct sk_buff *skb, |
| 226 | struct vlan_group *grp, | 145 | struct vlan_group *grp, |
| 227 | unsigned short vlan_tag) | 146 | u16 vlan_tci) |
| 228 | { | 147 | { |
| 229 | return __vlan_hwaccel_rx(skb, grp, vlan_tag, 0); | 148 | return __vlan_hwaccel_rx(skb, grp, vlan_tci, 0); |
| 230 | } | 149 | } |
| 231 | 150 | ||
| 151 | /** | ||
| 152 | * vlan_hwaccel_receive_skb - netif_receive_skb wrapper for VLAN RX acceleration | ||
| 153 | * @skb: buffer | ||
| 154 | * @grp: vlan group | ||
| 155 | * @vlan_tci: VLAN TCI as received from the card | ||
| 156 | */ | ||
| 232 | static inline int vlan_hwaccel_receive_skb(struct sk_buff *skb, | 157 | static inline int vlan_hwaccel_receive_skb(struct sk_buff *skb, |
| 233 | struct vlan_group *grp, | 158 | struct vlan_group *grp, |
| 234 | unsigned short vlan_tag) | 159 | u16 vlan_tci) |
| 235 | { | 160 | { |
| 236 | return __vlan_hwaccel_rx(skb, grp, vlan_tag, 1); | 161 | return __vlan_hwaccel_rx(skb, grp, vlan_tci, 1); |
| 237 | } | 162 | } |
| 238 | 163 | ||
| 239 | /** | 164 | /** |
| 240 | * __vlan_put_tag - regular VLAN tag inserting | 165 | * __vlan_put_tag - regular VLAN tag inserting |
| 241 | * @skb: skbuff to tag | 166 | * @skb: skbuff to tag |
| 242 | * @tag: VLAN tag to insert | 167 | * @vlan_tci: VLAN TCI to insert |
| 243 | * | 168 | * |
| 244 | * Inserts the VLAN tag into @skb as part of the payload | 169 | * Inserts the VLAN tag into @skb as part of the payload |
| 245 | * Returns a VLAN tagged skb. If a new skb is created, @skb is freed. | 170 | * Returns a VLAN tagged skb. If a new skb is created, @skb is freed. |
| 246 | * | 171 | * |
| 247 | * Following the skb_unshare() example, in case of error, the calling function | 172 | * Following the skb_unshare() example, in case of error, the calling function |
| 248 | * doesn't have to worry about freeing the original skb. | 173 | * doesn't have to worry about freeing the original skb. |
| 249 | */ | 174 | */ |
| 250 | static inline struct sk_buff *__vlan_put_tag(struct sk_buff *skb, unsigned short tag) | 175 | static inline struct sk_buff *__vlan_put_tag(struct sk_buff *skb, u16 vlan_tci) |
| 251 | { | 176 | { |
| 252 | struct vlan_ethhdr *veth; | 177 | struct vlan_ethhdr *veth; |
| 253 | 178 | ||
| 254 | if (skb_headroom(skb) < VLAN_HLEN) { | 179 | if (skb_cow_head(skb, VLAN_HLEN) < 0) { |
| 255 | struct sk_buff *sk_tmp = skb; | 180 | kfree_skb(skb); |
| 256 | skb = skb_realloc_headroom(sk_tmp, VLAN_HLEN); | 181 | return NULL; |
| 257 | kfree_skb(sk_tmp); | ||
| 258 | if (!skb) { | ||
| 259 | printk(KERN_ERR "vlan: failed to realloc headroom\n"); | ||
| 260 | return NULL; | ||
| 261 | } | ||
| 262 | } else { | ||
| 263 | skb = skb_unshare(skb, GFP_ATOMIC); | ||
| 264 | if (!skb) { | ||
| 265 | printk(KERN_ERR "vlan: failed to unshare skbuff\n"); | ||
| 266 | return NULL; | ||
| 267 | } | ||
| 268 | } | 182 | } |
| 269 | |||
| 270 | veth = (struct vlan_ethhdr *)skb_push(skb, VLAN_HLEN); | 183 | veth = (struct vlan_ethhdr *)skb_push(skb, VLAN_HLEN); |
| 271 | 184 | ||
| 272 | /* Move the mac addresses to the beginning of the new header. */ | 185 | /* Move the mac addresses to the beginning of the new header. */ |
| @@ -275,12 +188,10 @@ static inline struct sk_buff *__vlan_put_tag(struct sk_buff *skb, unsigned short | |||
| 275 | /* first, the ethernet type */ | 188 | /* first, the ethernet type */ |
| 276 | veth->h_vlan_proto = htons(ETH_P_8021Q); | 189 | veth->h_vlan_proto = htons(ETH_P_8021Q); |
| 277 | 190 | ||
| 278 | /* now, the tag */ | 191 | /* now, the TCI */ |
| 279 | veth->h_vlan_TCI = htons(tag); | 192 | veth->h_vlan_TCI = htons(vlan_tci); |
| 280 | 193 | ||
| 281 | skb->protocol = htons(ETH_P_8021Q); | 194 | skb->protocol = htons(ETH_P_8021Q); |
| 282 | skb->mac_header -= VLAN_HLEN; | ||
| 283 | skb->network_header -= VLAN_HLEN; | ||
| 284 | 195 | ||
| 285 | return skb; | 196 | return skb; |
| 286 | } | 197 | } |
| @@ -288,18 +199,14 @@ static inline struct sk_buff *__vlan_put_tag(struct sk_buff *skb, unsigned short | |||
| 288 | /** | 199 | /** |
| 289 | * __vlan_hwaccel_put_tag - hardware accelerated VLAN inserting | 200 | * __vlan_hwaccel_put_tag - hardware accelerated VLAN inserting |
| 290 | * @skb: skbuff to tag | 201 | * @skb: skbuff to tag |
| 291 | * @tag: VLAN tag to insert | 202 | * @vlan_tci: VLAN TCI to insert |
| 292 | * | 203 | * |
| 293 | * Puts the VLAN tag in @skb->cb[] and lets the device do the rest | 204 | * Puts the VLAN TCI in @skb->vlan_tci and lets the device do the rest |
| 294 | */ | 205 | */ |
| 295 | static inline struct sk_buff *__vlan_hwaccel_put_tag(struct sk_buff *skb, unsigned short tag) | 206 | static inline struct sk_buff *__vlan_hwaccel_put_tag(struct sk_buff *skb, |
| 207 | u16 vlan_tci) | ||
| 296 | { | 208 | { |
| 297 | struct vlan_skb_tx_cookie *cookie; | 209 | skb->vlan_tci = vlan_tci; |
| 298 | |||
| 299 | cookie = VLAN_TX_SKB_CB(skb); | ||
| 300 | cookie->magic = VLAN_TX_COOKIE_MAGIC; | ||
| 301 | cookie->vlan_tag = tag; | ||
| 302 | |||
| 303 | return skb; | 210 | return skb; |
| 304 | } | 211 | } |
| 305 | 212 | ||
| @@ -308,28 +215,28 @@ static inline struct sk_buff *__vlan_hwaccel_put_tag(struct sk_buff *skb, unsign | |||
| 308 | /** | 215 | /** |
| 309 | * vlan_put_tag - inserts VLAN tag according to device features | 216 | * vlan_put_tag - inserts VLAN tag according to device features |
| 310 | * @skb: skbuff to tag | 217 | * @skb: skbuff to tag |
| 311 | * @tag: VLAN tag to insert | 218 | * @vlan_tci: VLAN TCI to insert |
| 312 | * | 219 | * |
| 313 | * Assumes skb->dev is the target that will xmit this frame. | 220 | * Assumes skb->dev is the target that will xmit this frame. |
| 314 | * Returns a VLAN tagged skb. | 221 | * Returns a VLAN tagged skb. |
| 315 | */ | 222 | */ |
| 316 | static inline struct sk_buff *vlan_put_tag(struct sk_buff *skb, unsigned short tag) | 223 | static inline struct sk_buff *vlan_put_tag(struct sk_buff *skb, u16 vlan_tci) |
| 317 | { | 224 | { |
| 318 | if (skb->dev->features & NETIF_F_HW_VLAN_TX) { | 225 | if (skb->dev->features & NETIF_F_HW_VLAN_TX) { |
| 319 | return __vlan_hwaccel_put_tag(skb, tag); | 226 | return __vlan_hwaccel_put_tag(skb, vlan_tci); |
| 320 | } else { | 227 | } else { |
| 321 | return __vlan_put_tag(skb, tag); | 228 | return __vlan_put_tag(skb, vlan_tci); |
| 322 | } | 229 | } |
| 323 | } | 230 | } |
| 324 | 231 | ||
| 325 | /** | 232 | /** |
| 326 | * __vlan_get_tag - get the VLAN ID that is part of the payload | 233 | * __vlan_get_tag - get the VLAN ID that is part of the payload |
| 327 | * @skb: skbuff to query | 234 | * @skb: skbuff to query |
| 328 | * @tag: buffer to store vlaue | 235 | * @vlan_tci: buffer to store vlaue |
| 329 | * | 236 | * |
| 330 | * Returns error if the skb is not of VLAN type | 237 | * Returns error if the skb is not of VLAN type |
| 331 | */ | 238 | */ |
| 332 | static inline int __vlan_get_tag(const struct sk_buff *skb, unsigned short *tag) | 239 | static inline int __vlan_get_tag(const struct sk_buff *skb, u16 *vlan_tci) |
| 333 | { | 240 | { |
| 334 | struct vlan_ethhdr *veth = (struct vlan_ethhdr *)skb->data; | 241 | struct vlan_ethhdr *veth = (struct vlan_ethhdr *)skb->data; |
| 335 | 242 | ||
| @@ -337,29 +244,25 @@ static inline int __vlan_get_tag(const struct sk_buff *skb, unsigned short *tag) | |||
| 337 | return -EINVAL; | 244 | return -EINVAL; |
| 338 | } | 245 | } |
| 339 | 246 | ||
| 340 | *tag = ntohs(veth->h_vlan_TCI); | 247 | *vlan_tci = ntohs(veth->h_vlan_TCI); |
| 341 | |||
| 342 | return 0; | 248 | return 0; |
| 343 | } | 249 | } |
| 344 | 250 | ||
| 345 | /** | 251 | /** |
| 346 | * __vlan_hwaccel_get_tag - get the VLAN ID that is in @skb->cb[] | 252 | * __vlan_hwaccel_get_tag - get the VLAN ID that is in @skb->cb[] |
| 347 | * @skb: skbuff to query | 253 | * @skb: skbuff to query |
| 348 | * @tag: buffer to store vlaue | 254 | * @vlan_tci: buffer to store vlaue |
| 349 | * | 255 | * |
| 350 | * Returns error if @skb->cb[] is not set correctly | 256 | * Returns error if @skb->vlan_tci is not set correctly |
| 351 | */ | 257 | */ |
| 352 | static inline int __vlan_hwaccel_get_tag(const struct sk_buff *skb, | 258 | static inline int __vlan_hwaccel_get_tag(const struct sk_buff *skb, |
| 353 | unsigned short *tag) | 259 | u16 *vlan_tci) |
| 354 | { | 260 | { |
| 355 | struct vlan_skb_tx_cookie *cookie; | 261 | if (vlan_tx_tag_present(skb)) { |
| 356 | 262 | *vlan_tci = skb->vlan_tci; | |
| 357 | cookie = VLAN_TX_SKB_CB(skb); | ||
| 358 | if (cookie->magic == VLAN_TX_COOKIE_MAGIC) { | ||
| 359 | *tag = cookie->vlan_tag; | ||
| 360 | return 0; | 263 | return 0; |
| 361 | } else { | 264 | } else { |
| 362 | *tag = 0; | 265 | *vlan_tci = 0; |
| 363 | return -EINVAL; | 266 | return -EINVAL; |
| 364 | } | 267 | } |
| 365 | } | 268 | } |
| @@ -369,16 +272,16 @@ static inline int __vlan_hwaccel_get_tag(const struct sk_buff *skb, | |||
| 369 | /** | 272 | /** |
| 370 | * vlan_get_tag - get the VLAN ID from the skb | 273 | * vlan_get_tag - get the VLAN ID from the skb |
| 371 | * @skb: skbuff to query | 274 | * @skb: skbuff to query |
| 372 | * @tag: buffer to store vlaue | 275 | * @vlan_tci: buffer to store vlaue |
| 373 | * | 276 | * |
| 374 | * Returns error if the skb is not VLAN tagged | 277 | * Returns error if the skb is not VLAN tagged |
| 375 | */ | 278 | */ |
| 376 | static inline int vlan_get_tag(const struct sk_buff *skb, unsigned short *tag) | 279 | static inline int vlan_get_tag(const struct sk_buff *skb, u16 *vlan_tci) |
| 377 | { | 280 | { |
| 378 | if (skb->dev->features & NETIF_F_HW_VLAN_TX) { | 281 | if (skb->dev->features & NETIF_F_HW_VLAN_TX) { |
| 379 | return __vlan_hwaccel_get_tag(skb, tag); | 282 | return __vlan_hwaccel_get_tag(skb, vlan_tci); |
| 380 | } else { | 283 | } else { |
| 381 | return __vlan_get_tag(skb, tag); | 284 | return __vlan_get_tag(skb, vlan_tci); |
| 382 | } | 285 | } |
| 383 | } | 286 | } |
| 384 | 287 | ||
| @@ -402,6 +305,7 @@ enum vlan_ioctl_cmds { | |||
| 402 | 305 | ||
| 403 | enum vlan_flags { | 306 | enum vlan_flags { |
| 404 | VLAN_FLAG_REORDER_HDR = 0x1, | 307 | VLAN_FLAG_REORDER_HDR = 0x1, |
| 308 | VLAN_FLAG_GVRP = 0x2, | ||
| 405 | }; | 309 | }; |
| 406 | 310 | ||
| 407 | enum vlan_name_types { | 311 | enum vlan_name_types { |
diff --git a/include/linux/igmp.h b/include/linux/igmp.h index f5a1a0db2e8e..7bb3c095c15b 100644 --- a/include/linux/igmp.h +++ b/include/linux/igmp.h | |||
| @@ -228,7 +228,6 @@ extern int ip_mc_msfget(struct sock *sk, struct ip_msfilter *msf, | |||
| 228 | extern int ip_mc_gsfget(struct sock *sk, struct group_filter *gsf, | 228 | extern int ip_mc_gsfget(struct sock *sk, struct group_filter *gsf, |
| 229 | struct group_filter __user *optval, int __user *optlen); | 229 | struct group_filter __user *optval, int __user *optlen); |
| 230 | extern int ip_mc_sf_allow(struct sock *sk, __be32 local, __be32 rmt, int dif); | 230 | extern int ip_mc_sf_allow(struct sock *sk, __be32 local, __be32 rmt, int dif); |
| 231 | extern void ip_mr_init(void); | ||
| 232 | extern void ip_mc_init_dev(struct in_device *); | 231 | extern void ip_mc_init_dev(struct in_device *); |
| 233 | extern void ip_mc_destroy_dev(struct in_device *); | 232 | extern void ip_mc_destroy_dev(struct in_device *); |
| 234 | extern void ip_mc_up(struct in_device *); | 233 | extern void ip_mc_up(struct in_device *); |
diff --git a/include/linux/ip6_tunnel.h b/include/linux/ip6_tunnel.h index af3f4a70f3df..1e7cc4af40de 100644 --- a/include/linux/ip6_tunnel.h +++ b/include/linux/ip6_tunnel.h | |||
| @@ -1,7 +1,3 @@ | |||
| 1 | /* | ||
| 2 | * $Id$ | ||
| 3 | */ | ||
| 4 | |||
| 5 | #ifndef _IP6_TUNNEL_H | 1 | #ifndef _IP6_TUNNEL_H |
| 6 | #define _IP6_TUNNEL_H | 2 | #define _IP6_TUNNEL_H |
| 7 | 3 | ||
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h index cde056e08181..391ad0843a46 100644 --- a/include/linux/ipv6.h +++ b/include/linux/ipv6.h | |||
| @@ -163,6 +163,8 @@ struct ipv6_devconf { | |||
| 163 | #ifdef CONFIG_IPV6_MROUTE | 163 | #ifdef CONFIG_IPV6_MROUTE |
| 164 | __s32 mc_forwarding; | 164 | __s32 mc_forwarding; |
| 165 | #endif | 165 | #endif |
| 166 | __s32 disable_ipv6; | ||
| 167 | __s32 accept_dad; | ||
| 166 | void *sysctl; | 168 | void *sysctl; |
| 167 | }; | 169 | }; |
| 168 | 170 | ||
| @@ -194,6 +196,8 @@ enum { | |||
| 194 | DEVCONF_OPTIMISTIC_DAD, | 196 | DEVCONF_OPTIMISTIC_DAD, |
| 195 | DEVCONF_ACCEPT_SOURCE_ROUTE, | 197 | DEVCONF_ACCEPT_SOURCE_ROUTE, |
| 196 | DEVCONF_MC_FORWARDING, | 198 | DEVCONF_MC_FORWARDING, |
| 199 | DEVCONF_DISABLE_IPV6, | ||
| 200 | DEVCONF_ACCEPT_DAD, | ||
| 197 | DEVCONF_MAX | 201 | DEVCONF_MAX |
| 198 | }; | 202 | }; |
| 199 | 203 | ||
diff --git a/include/linux/mroute.h b/include/linux/mroute.h index de4decfa1bfc..07112ee9293a 100644 --- a/include/linux/mroute.h +++ b/include/linux/mroute.h | |||
| @@ -144,11 +144,37 @@ static inline int ip_mroute_opt(int opt) | |||
| 144 | } | 144 | } |
| 145 | #endif | 145 | #endif |
| 146 | 146 | ||
| 147 | #ifdef CONFIG_IP_MROUTE | ||
| 147 | extern int ip_mroute_setsockopt(struct sock *, int, char __user *, int); | 148 | extern int ip_mroute_setsockopt(struct sock *, int, char __user *, int); |
| 148 | extern int ip_mroute_getsockopt(struct sock *, int, char __user *, int __user *); | 149 | extern int ip_mroute_getsockopt(struct sock *, int, char __user *, int __user *); |
| 149 | extern int ipmr_ioctl(struct sock *sk, int cmd, void __user *arg); | 150 | extern int ipmr_ioctl(struct sock *sk, int cmd, void __user *arg); |
| 150 | extern void ip_mr_init(void); | 151 | extern int ip_mr_init(void); |
| 152 | #else | ||
| 153 | static inline | ||
| 154 | int ip_mroute_setsockopt(struct sock *sock, | ||
| 155 | int optname, char __user *optval, int optlen) | ||
| 156 | { | ||
| 157 | return -ENOPROTOOPT; | ||
| 158 | } | ||
| 159 | |||
| 160 | static inline | ||
| 161 | int ip_mroute_getsockopt(struct sock *sock, | ||
| 162 | int optname, char __user *optval, int __user *optlen) | ||
| 163 | { | ||
| 164 | return -ENOPROTOOPT; | ||
| 165 | } | ||
| 151 | 166 | ||
| 167 | static inline | ||
| 168 | int ipmr_ioctl(struct sock *sk, int cmd, void __user *arg) | ||
| 169 | { | ||
| 170 | return -ENOIOCTLCMD; | ||
| 171 | } | ||
| 172 | |||
| 173 | static inline int ip_mr_init(void) | ||
| 174 | { | ||
| 175 | return 0; | ||
| 176 | } | ||
| 177 | #endif | ||
| 152 | 178 | ||
| 153 | struct vif_device | 179 | struct vif_device |
| 154 | { | 180 | { |
diff --git a/include/linux/mroute6.h b/include/linux/mroute6.h index e7989593142b..5cf50473a10f 100644 --- a/include/linux/mroute6.h +++ b/include/linux/mroute6.h | |||
| @@ -131,11 +131,44 @@ static inline int ip6_mroute_opt(int opt) | |||
| 131 | 131 | ||
| 132 | struct sock; | 132 | struct sock; |
| 133 | 133 | ||
| 134 | #ifdef CONFIG_IPV6_MROUTE | ||
| 134 | extern int ip6_mroute_setsockopt(struct sock *, int, char __user *, int); | 135 | extern int ip6_mroute_setsockopt(struct sock *, int, char __user *, int); |
| 135 | extern int ip6_mroute_getsockopt(struct sock *, int, char __user *, int __user *); | 136 | extern int ip6_mroute_getsockopt(struct sock *, int, char __user *, int __user *); |
| 136 | extern int ip6_mr_input(struct sk_buff *skb); | 137 | extern int ip6_mr_input(struct sk_buff *skb); |
| 137 | extern int ip6mr_ioctl(struct sock *sk, int cmd, void __user *arg); | 138 | extern int ip6mr_ioctl(struct sock *sk, int cmd, void __user *arg); |
| 138 | extern void ip6_mr_init(void); | 139 | extern int ip6_mr_init(void); |
| 140 | extern void ip6_mr_cleanup(void); | ||
| 141 | #else | ||
| 142 | static inline | ||
| 143 | int ip6_mroute_setsockopt(struct sock *sock, | ||
| 144 | int optname, char __user *optval, int optlen) | ||
| 145 | { | ||
| 146 | return -ENOPROTOOPT; | ||
| 147 | } | ||
| 148 | |||
| 149 | static inline | ||
| 150 | int ip6_mroute_getsockopt(struct sock *sock, | ||
| 151 | int optname, char __user *optval, int __user *optlen) | ||
| 152 | { | ||
| 153 | return -ENOPROTOOPT; | ||
| 154 | } | ||
| 155 | |||
| 156 | static inline | ||
| 157 | int ip6mr_ioctl(struct sock *sk, int cmd, void __user *arg) | ||
| 158 | { | ||
| 159 | return -ENOIOCTLCMD; | ||
| 160 | } | ||
| 161 | |||
| 162 | static inline int ip6_mr_init(void) | ||
| 163 | { | ||
| 164 | return 0; | ||
| 165 | } | ||
| 166 | |||
| 167 | static inline void ip6_mr_cleanup(void) | ||
| 168 | { | ||
| 169 | return; | ||
| 170 | } | ||
| 171 | #endif | ||
| 139 | 172 | ||
| 140 | struct mif_device | 173 | struct mif_device |
| 141 | { | 174 | { |
diff --git a/include/linux/mv643xx_eth.h b/include/linux/mv643xx_eth.h index a15cdd4a8e58..12078577aef6 100644 --- a/include/linux/mv643xx_eth.h +++ b/include/linux/mv643xx_eth.h | |||
| @@ -17,30 +17,59 @@ | |||
| 17 | 17 | ||
| 18 | struct mv643xx_eth_shared_platform_data { | 18 | struct mv643xx_eth_shared_platform_data { |
| 19 | struct mbus_dram_target_info *dram; | 19 | struct mbus_dram_target_info *dram; |
| 20 | unsigned int t_clk; | 20 | unsigned int t_clk; |
| 21 | }; | 21 | }; |
| 22 | 22 | ||
| 23 | struct mv643xx_eth_platform_data { | 23 | struct mv643xx_eth_platform_data { |
| 24 | /* | ||
| 25 | * Pointer back to our parent instance, and our port number. | ||
| 26 | */ | ||
| 24 | struct platform_device *shared; | 27 | struct platform_device *shared; |
| 25 | int port_number; | 28 | int port_number; |
| 26 | 29 | ||
| 30 | /* | ||
| 31 | * Whether a PHY is present, and if yes, at which address. | ||
| 32 | */ | ||
| 27 | struct platform_device *shared_smi; | 33 | struct platform_device *shared_smi; |
| 34 | int force_phy_addr; | ||
| 35 | int phy_addr; | ||
| 28 | 36 | ||
| 29 | u16 force_phy_addr; /* force override if phy_addr == 0 */ | 37 | /* |
| 30 | u16 phy_addr; | 38 | * Use this MAC address if it is valid, overriding the |
| 31 | 39 | * address that is already in the hardware. | |
| 32 | /* If speed is 0, then speed and duplex are autonegotiated. */ | 40 | */ |
| 33 | int speed; /* 0, SPEED_10, SPEED_100, SPEED_1000 */ | 41 | u8 mac_addr[6]; |
| 34 | int duplex; /* DUPLEX_HALF or DUPLEX_FULL */ | 42 | |
| 35 | 43 | /* | |
| 36 | /* non-zero values of the following fields override defaults */ | 44 | * If speed is 0, autonegotiation is enabled. |
| 37 | u32 tx_queue_size; | 45 | * Valid values for speed: 0, SPEED_10, SPEED_100, SPEED_1000. |
| 38 | u32 rx_queue_size; | 46 | * Valid values for duplex: DUPLEX_HALF, DUPLEX_FULL. |
| 39 | u32 tx_sram_addr; | 47 | */ |
| 40 | u32 tx_sram_size; | 48 | int speed; |
| 41 | u32 rx_sram_addr; | 49 | int duplex; |
| 42 | u32 rx_sram_size; | 50 | |
| 43 | u8 mac_addr[6]; /* mac address if non-zero*/ | 51 | /* |
| 52 | * Which RX/TX queues to use. | ||
| 53 | */ | ||
| 54 | int rx_queue_mask; | ||
| 55 | int tx_queue_mask; | ||
| 56 | |||
| 57 | /* | ||
| 58 | * Override default RX/TX queue sizes if nonzero. | ||
| 59 | */ | ||
| 60 | int rx_queue_size; | ||
| 61 | int tx_queue_size; | ||
| 62 | |||
| 63 | /* | ||
| 64 | * Use on-chip SRAM for RX/TX descriptors if size is nonzero | ||
| 65 | * and sufficient to contain all descriptors for the requested | ||
| 66 | * ring sizes. | ||
| 67 | */ | ||
| 68 | unsigned long rx_sram_addr; | ||
| 69 | int rx_sram_size; | ||
| 70 | unsigned long tx_sram_addr; | ||
| 71 | int tx_sram_size; | ||
| 44 | }; | 72 | }; |
| 45 | 73 | ||
| 46 | #endif /* __LINUX_MV643XX_ETH_H */ | 74 | |
| 75 | #endif | ||
diff --git a/include/linux/net.h b/include/linux/net.h index 71f7dd559285..150a48c68d52 100644 --- a/include/linux/net.h +++ b/include/linux/net.h | |||
| @@ -106,23 +106,23 @@ enum sock_shutdown_cmd { | |||
| 106 | /** | 106 | /** |
| 107 | * struct socket - general BSD socket | 107 | * struct socket - general BSD socket |
| 108 | * @state: socket state (%SS_CONNECTED, etc) | 108 | * @state: socket state (%SS_CONNECTED, etc) |
| 109 | * @type: socket type (%SOCK_STREAM, etc) | ||
| 109 | * @flags: socket flags (%SOCK_ASYNC_NOSPACE, etc) | 110 | * @flags: socket flags (%SOCK_ASYNC_NOSPACE, etc) |
| 110 | * @ops: protocol specific socket operations | 111 | * @ops: protocol specific socket operations |
| 111 | * @fasync_list: Asynchronous wake up list | 112 | * @fasync_list: Asynchronous wake up list |
| 112 | * @file: File back pointer for gc | 113 | * @file: File back pointer for gc |
| 113 | * @sk: internal networking protocol agnostic socket representation | 114 | * @sk: internal networking protocol agnostic socket representation |
| 114 | * @wait: wait queue for several uses | 115 | * @wait: wait queue for several uses |
| 115 | * @type: socket type (%SOCK_STREAM, etc) | ||
| 116 | */ | 116 | */ |
| 117 | struct socket { | 117 | struct socket { |
| 118 | socket_state state; | 118 | socket_state state; |
| 119 | short type; | ||
| 119 | unsigned long flags; | 120 | unsigned long flags; |
| 120 | const struct proto_ops *ops; | 121 | const struct proto_ops *ops; |
| 121 | struct fasync_struct *fasync_list; | 122 | struct fasync_struct *fasync_list; |
| 122 | struct file *file; | 123 | struct file *file; |
| 123 | struct sock *sk; | 124 | struct sock *sk; |
| 124 | wait_queue_head_t wait; | 125 | wait_queue_head_t wait; |
| 125 | short type; | ||
| 126 | }; | 126 | }; |
| 127 | 127 | ||
| 128 | struct vm_area_struct; | 128 | struct vm_area_struct; |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 25f87102ab66..812bcd8b4363 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
| @@ -118,14 +118,6 @@ struct wireless_dev; | |||
| 118 | 118 | ||
| 119 | #endif /* __KERNEL__ */ | 119 | #endif /* __KERNEL__ */ |
| 120 | 120 | ||
| 121 | struct net_device_subqueue | ||
| 122 | { | ||
| 123 | /* Give a control state for each queue. This struct may contain | ||
| 124 | * per-queue locks in the future. | ||
| 125 | */ | ||
| 126 | unsigned long state; | ||
| 127 | }; | ||
| 128 | |||
| 129 | /* | 121 | /* |
| 130 | * Network device statistics. Akin to the 2.0 ether stats but | 122 | * Network device statistics. Akin to the 2.0 ether stats but |
| 131 | * with byte counters. | 123 | * with byte counters. |
| @@ -281,14 +273,11 @@ struct header_ops { | |||
| 281 | 273 | ||
| 282 | enum netdev_state_t | 274 | enum netdev_state_t |
| 283 | { | 275 | { |
| 284 | __LINK_STATE_XOFF=0, | ||
| 285 | __LINK_STATE_START, | 276 | __LINK_STATE_START, |
| 286 | __LINK_STATE_PRESENT, | 277 | __LINK_STATE_PRESENT, |
| 287 | __LINK_STATE_SCHED, | ||
| 288 | __LINK_STATE_NOCARRIER, | 278 | __LINK_STATE_NOCARRIER, |
| 289 | __LINK_STATE_LINKWATCH_PENDING, | 279 | __LINK_STATE_LINKWATCH_PENDING, |
| 290 | __LINK_STATE_DORMANT, | 280 | __LINK_STATE_DORMANT, |
| 291 | __LINK_STATE_QDISC_RUNNING, | ||
| 292 | }; | 281 | }; |
| 293 | 282 | ||
| 294 | 283 | ||
| @@ -448,6 +437,20 @@ static inline void napi_synchronize(const struct napi_struct *n) | |||
| 448 | # define napi_synchronize(n) barrier() | 437 | # define napi_synchronize(n) barrier() |
| 449 | #endif | 438 | #endif |
| 450 | 439 | ||
| 440 | enum netdev_queue_state_t | ||
| 441 | { | ||
| 442 | __QUEUE_STATE_XOFF, | ||
| 443 | }; | ||
| 444 | |||
| 445 | struct netdev_queue { | ||
| 446 | struct net_device *dev; | ||
| 447 | struct Qdisc *qdisc; | ||
| 448 | unsigned long state; | ||
| 449 | spinlock_t _xmit_lock; | ||
| 450 | int xmit_lock_owner; | ||
| 451 | struct Qdisc *qdisc_sleeping; | ||
| 452 | } ____cacheline_aligned_in_smp; | ||
| 453 | |||
| 451 | /* | 454 | /* |
| 452 | * The DEVICE structure. | 455 | * The DEVICE structure. |
| 453 | * Actually, this whole structure is a big mistake. It mixes I/O | 456 | * Actually, this whole structure is a big mistake. It mixes I/O |
| @@ -516,7 +519,6 @@ struct net_device | |||
| 516 | #define NETIF_F_LLTX 4096 /* LockLess TX - deprecated. Please */ | 519 | #define NETIF_F_LLTX 4096 /* LockLess TX - deprecated. Please */ |
| 517 | /* do not use LLTX in new drivers */ | 520 | /* do not use LLTX in new drivers */ |
| 518 | #define NETIF_F_NETNS_LOCAL 8192 /* Does not change network namespaces */ | 521 | #define NETIF_F_NETNS_LOCAL 8192 /* Does not change network namespaces */ |
| 519 | #define NETIF_F_MULTI_QUEUE 16384 /* Has multiple TX/RX queues */ | ||
| 520 | #define NETIF_F_LRO 32768 /* large receive offload */ | 522 | #define NETIF_F_LRO 32768 /* large receive offload */ |
| 521 | 523 | ||
| 522 | /* Segmentation offload features */ | 524 | /* Segmentation offload features */ |
| @@ -537,8 +539,6 @@ struct net_device | |||
| 537 | #define NETIF_F_V6_CSUM (NETIF_F_GEN_CSUM | NETIF_F_IPV6_CSUM) | 539 | #define NETIF_F_V6_CSUM (NETIF_F_GEN_CSUM | NETIF_F_IPV6_CSUM) |
| 538 | #define NETIF_F_ALL_CSUM (NETIF_F_V4_CSUM | NETIF_F_V6_CSUM) | 540 | #define NETIF_F_ALL_CSUM (NETIF_F_V4_CSUM | NETIF_F_V6_CSUM) |
| 539 | 541 | ||
| 540 | struct net_device *next_sched; | ||
| 541 | |||
| 542 | /* Interface index. Unique device identifier */ | 542 | /* Interface index. Unique device identifier */ |
| 543 | int ifindex; | 543 | int ifindex; |
| 544 | int iflink; | 544 | int iflink; |
| @@ -594,13 +594,14 @@ struct net_device | |||
| 594 | unsigned char addr_len; /* hardware address length */ | 594 | unsigned char addr_len; /* hardware address length */ |
| 595 | unsigned short dev_id; /* for shared network cards */ | 595 | unsigned short dev_id; /* for shared network cards */ |
| 596 | 596 | ||
| 597 | spinlock_t addr_list_lock; | ||
| 597 | struct dev_addr_list *uc_list; /* Secondary unicast mac addresses */ | 598 | struct dev_addr_list *uc_list; /* Secondary unicast mac addresses */ |
| 598 | int uc_count; /* Number of installed ucasts */ | 599 | int uc_count; /* Number of installed ucasts */ |
| 599 | int uc_promisc; | 600 | int uc_promisc; |
| 600 | struct dev_addr_list *mc_list; /* Multicast mac addresses */ | 601 | struct dev_addr_list *mc_list; /* Multicast mac addresses */ |
| 601 | int mc_count; /* Number of installed mcasts */ | 602 | int mc_count; /* Number of installed mcasts */ |
| 602 | int promiscuity; | 603 | unsigned int promiscuity; |
| 603 | int allmulti; | 604 | unsigned int allmulti; |
| 604 | 605 | ||
| 605 | 606 | ||
| 606 | /* Protocol specific pointers */ | 607 | /* Protocol specific pointers */ |
| @@ -624,32 +625,21 @@ struct net_device | |||
| 624 | 625 | ||
| 625 | unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */ | 626 | unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */ |
| 626 | 627 | ||
| 627 | /* ingress path synchronizer */ | 628 | struct netdev_queue rx_queue; |
| 628 | spinlock_t ingress_lock; | ||
| 629 | struct Qdisc *qdisc_ingress; | ||
| 630 | 629 | ||
| 631 | /* | 630 | struct netdev_queue *_tx ____cacheline_aligned_in_smp; |
| 632 | * Cache line mostly used on queue transmit path (qdisc) | ||
| 633 | */ | ||
| 634 | /* device queue lock */ | ||
| 635 | spinlock_t queue_lock ____cacheline_aligned_in_smp; | ||
| 636 | struct Qdisc *qdisc; | ||
| 637 | struct Qdisc *qdisc_sleeping; | ||
| 638 | struct list_head qdisc_list; | ||
| 639 | unsigned long tx_queue_len; /* Max frames per queue allowed */ | ||
| 640 | 631 | ||
| 641 | /* Partially transmitted GSO packet. */ | 632 | /* Number of TX queues allocated at alloc_netdev_mq() time */ |
| 642 | struct sk_buff *gso_skb; | 633 | unsigned int num_tx_queues; |
| 634 | |||
| 635 | /* Number of TX queues currently active in device */ | ||
| 636 | unsigned int real_num_tx_queues; | ||
| 637 | |||
| 638 | unsigned long tx_queue_len; /* Max frames per queue allowed */ | ||
| 643 | 639 | ||
| 644 | /* | 640 | /* |
| 645 | * One part is mostly used on xmit path (device) | 641 | * One part is mostly used on xmit path (device) |
| 646 | */ | 642 | */ |
| 647 | /* hard_start_xmit synchronizer */ | ||
| 648 | spinlock_t _xmit_lock ____cacheline_aligned_in_smp; | ||
| 649 | /* cpu id of processor entered to hard_start_xmit or -1, | ||
| 650 | if nobody entered there. | ||
| 651 | */ | ||
| 652 | int xmit_lock_owner; | ||
| 653 | void *priv; /* pointer to private data */ | 643 | void *priv; /* pointer to private data */ |
| 654 | int (*hard_start_xmit) (struct sk_buff *skb, | 644 | int (*hard_start_xmit) (struct sk_buff *skb, |
| 655 | struct net_device *dev); | 645 | struct net_device *dev); |
| @@ -728,6 +718,9 @@ struct net_device | |||
| 728 | void (*poll_controller)(struct net_device *dev); | 718 | void (*poll_controller)(struct net_device *dev); |
| 729 | #endif | 719 | #endif |
| 730 | 720 | ||
| 721 | u16 (*select_queue)(struct net_device *dev, | ||
| 722 | struct sk_buff *skb); | ||
| 723 | |||
| 731 | #ifdef CONFIG_NET_NS | 724 | #ifdef CONFIG_NET_NS |
| 732 | /* Network namespace this network device is inside */ | 725 | /* Network namespace this network device is inside */ |
| 733 | struct net *nd_net; | 726 | struct net *nd_net; |
| @@ -740,6 +733,8 @@ struct net_device | |||
| 740 | struct net_bridge_port *br_port; | 733 | struct net_bridge_port *br_port; |
| 741 | /* macvlan */ | 734 | /* macvlan */ |
| 742 | struct macvlan_port *macvlan_port; | 735 | struct macvlan_port *macvlan_port; |
| 736 | /* GARP */ | ||
| 737 | struct garp_port *garp_port; | ||
| 743 | 738 | ||
| 744 | /* class/net/name entry */ | 739 | /* class/net/name entry */ |
| 745 | struct device dev; | 740 | struct device dev; |
| @@ -755,16 +750,31 @@ struct net_device | |||
| 755 | /* for setting kernel sock attribute on TCP connection setup */ | 750 | /* for setting kernel sock attribute on TCP connection setup */ |
| 756 | #define GSO_MAX_SIZE 65536 | 751 | #define GSO_MAX_SIZE 65536 |
| 757 | unsigned int gso_max_size; | 752 | unsigned int gso_max_size; |
| 758 | |||
| 759 | /* The TX queue control structures */ | ||
| 760 | unsigned int egress_subqueue_count; | ||
| 761 | struct net_device_subqueue egress_subqueue[1]; | ||
| 762 | }; | 753 | }; |
| 763 | #define to_net_dev(d) container_of(d, struct net_device, dev) | 754 | #define to_net_dev(d) container_of(d, struct net_device, dev) |
| 764 | 755 | ||
| 765 | #define NETDEV_ALIGN 32 | 756 | #define NETDEV_ALIGN 32 |
| 766 | #define NETDEV_ALIGN_CONST (NETDEV_ALIGN - 1) | 757 | #define NETDEV_ALIGN_CONST (NETDEV_ALIGN - 1) |
| 767 | 758 | ||
| 759 | static inline | ||
| 760 | struct netdev_queue *netdev_get_tx_queue(const struct net_device *dev, | ||
| 761 | unsigned int index) | ||
| 762 | { | ||
| 763 | return &dev->_tx[index]; | ||
| 764 | } | ||
| 765 | |||
| 766 | static inline void netdev_for_each_tx_queue(struct net_device *dev, | ||
| 767 | void (*f)(struct net_device *, | ||
| 768 | struct netdev_queue *, | ||
| 769 | void *), | ||
| 770 | void *arg) | ||
| 771 | { | ||
| 772 | unsigned int i; | ||
| 773 | |||
| 774 | for (i = 0; i < dev->num_tx_queues; i++) | ||
| 775 | f(dev, &dev->_tx[i], arg); | ||
| 776 | } | ||
| 777 | |||
| 768 | /* | 778 | /* |
| 769 | * Net namespace inlines | 779 | * Net namespace inlines |
| 770 | */ | 780 | */ |
| @@ -795,7 +805,9 @@ void dev_net_set(struct net_device *dev, struct net *net) | |||
| 795 | */ | 805 | */ |
| 796 | static inline void *netdev_priv(const struct net_device *dev) | 806 | static inline void *netdev_priv(const struct net_device *dev) |
| 797 | { | 807 | { |
| 798 | return dev->priv; | 808 | return (char *)dev + ((sizeof(struct net_device) |
| 809 | + NETDEV_ALIGN_CONST) | ||
| 810 | & ~NETDEV_ALIGN_CONST); | ||
| 799 | } | 811 | } |
| 800 | 812 | ||
| 801 | /* Set the sysfs physical device reference for the network logical device | 813 | /* Set the sysfs physical device reference for the network logical device |
| @@ -830,6 +842,19 @@ static inline void netif_napi_add(struct net_device *dev, | |||
| 830 | set_bit(NAPI_STATE_SCHED, &napi->state); | 842 | set_bit(NAPI_STATE_SCHED, &napi->state); |
| 831 | } | 843 | } |
| 832 | 844 | ||
| 845 | /** | ||
| 846 | * netif_napi_del - remove a napi context | ||
| 847 | * @napi: napi context | ||
| 848 | * | ||
| 849 | * netif_napi_del() removes a napi context from the network device napi list | ||
| 850 | */ | ||
| 851 | static inline void netif_napi_del(struct napi_struct *napi) | ||
| 852 | { | ||
| 853 | #ifdef CONFIG_NETPOLL | ||
| 854 | list_del(&napi->dev_list); | ||
| 855 | #endif | ||
| 856 | } | ||
| 857 | |||
| 833 | struct packet_type { | 858 | struct packet_type { |
| 834 | __be16 type; /* This is really htons(ether_type). */ | 859 | __be16 type; /* This is really htons(ether_type). */ |
| 835 | struct net_device *dev; /* NULL is wildcarded here */ | 860 | struct net_device *dev; /* NULL is wildcarded here */ |
| @@ -890,6 +915,7 @@ extern struct net_device *__dev_get_by_name(struct net *net, const char *name); | |||
| 890 | extern int dev_alloc_name(struct net_device *dev, const char *name); | 915 | extern int dev_alloc_name(struct net_device *dev, const char *name); |
| 891 | extern int dev_open(struct net_device *dev); | 916 | extern int dev_open(struct net_device *dev); |
| 892 | extern int dev_close(struct net_device *dev); | 917 | extern int dev_close(struct net_device *dev); |
| 918 | extern void dev_disable_lro(struct net_device *dev); | ||
| 893 | extern int dev_queue_xmit(struct sk_buff *skb); | 919 | extern int dev_queue_xmit(struct sk_buff *skb); |
| 894 | extern int register_netdevice(struct net_device *dev); | 920 | extern int register_netdevice(struct net_device *dev); |
| 895 | extern void unregister_netdevice(struct net_device *dev); | 921 | extern void unregister_netdevice(struct net_device *dev); |
| @@ -939,7 +965,7 @@ static inline int unregister_gifconf(unsigned int family) | |||
| 939 | */ | 965 | */ |
| 940 | struct softnet_data | 966 | struct softnet_data |
| 941 | { | 967 | { |
| 942 | struct net_device *output_queue; | 968 | struct Qdisc *output_queue; |
| 943 | struct sk_buff_head input_pkt_queue; | 969 | struct sk_buff_head input_pkt_queue; |
| 944 | struct list_head poll_list; | 970 | struct list_head poll_list; |
| 945 | struct sk_buff *completion_queue; | 971 | struct sk_buff *completion_queue; |
| @@ -954,12 +980,20 @@ DECLARE_PER_CPU(struct softnet_data,softnet_data); | |||
| 954 | 980 | ||
| 955 | #define HAVE_NETIF_QUEUE | 981 | #define HAVE_NETIF_QUEUE |
| 956 | 982 | ||
| 957 | extern void __netif_schedule(struct net_device *dev); | 983 | extern void __netif_schedule(struct Qdisc *q); |
| 958 | 984 | ||
| 959 | static inline void netif_schedule(struct net_device *dev) | 985 | static inline void netif_schedule_queue(struct netdev_queue *txq) |
| 960 | { | 986 | { |
| 961 | if (!test_bit(__LINK_STATE_XOFF, &dev->state)) | 987 | if (!test_bit(__QUEUE_STATE_XOFF, &txq->state)) |
| 962 | __netif_schedule(dev); | 988 | __netif_schedule(txq->qdisc); |
| 989 | } | ||
| 990 | |||
| 991 | static inline void netif_tx_schedule_all(struct net_device *dev) | ||
| 992 | { | ||
| 993 | unsigned int i; | ||
| 994 | |||
| 995 | for (i = 0; i < dev->num_tx_queues; i++) | ||
| 996 | netif_schedule_queue(netdev_get_tx_queue(dev, i)); | ||
| 963 | } | 997 | } |
| 964 | 998 | ||
| 965 | /** | 999 | /** |
| @@ -968,9 +1002,24 @@ static inline void netif_schedule(struct net_device *dev) | |||
| 968 | * | 1002 | * |
| 969 | * Allow upper layers to call the device hard_start_xmit routine. | 1003 | * Allow upper layers to call the device hard_start_xmit routine. |
| 970 | */ | 1004 | */ |
| 1005 | static inline void netif_tx_start_queue(struct netdev_queue *dev_queue) | ||
| 1006 | { | ||
| 1007 | clear_bit(__QUEUE_STATE_XOFF, &dev_queue->state); | ||
| 1008 | } | ||
| 1009 | |||
| 971 | static inline void netif_start_queue(struct net_device *dev) | 1010 | static inline void netif_start_queue(struct net_device *dev) |
| 972 | { | 1011 | { |
| 973 | clear_bit(__LINK_STATE_XOFF, &dev->state); | 1012 | netif_tx_start_queue(netdev_get_tx_queue(dev, 0)); |
| 1013 | } | ||
| 1014 | |||
| 1015 | static inline void netif_tx_start_all_queues(struct net_device *dev) | ||
| 1016 | { | ||
| 1017 | unsigned int i; | ||
| 1018 | |||
| 1019 | for (i = 0; i < dev->num_tx_queues; i++) { | ||
| 1020 | struct netdev_queue *txq = netdev_get_tx_queue(dev, i); | ||
| 1021 | netif_tx_start_queue(txq); | ||
| 1022 | } | ||
| 974 | } | 1023 | } |
| 975 | 1024 | ||
| 976 | /** | 1025 | /** |
| @@ -980,16 +1029,31 @@ static inline void netif_start_queue(struct net_device *dev) | |||
| 980 | * Allow upper layers to call the device hard_start_xmit routine. | 1029 | * Allow upper layers to call the device hard_start_xmit routine. |
| 981 | * Used for flow control when transmit resources are available. | 1030 | * Used for flow control when transmit resources are available. |
| 982 | */ | 1031 | */ |
| 983 | static inline void netif_wake_queue(struct net_device *dev) | 1032 | static inline void netif_tx_wake_queue(struct netdev_queue *dev_queue) |
| 984 | { | 1033 | { |
| 985 | #ifdef CONFIG_NETPOLL_TRAP | 1034 | #ifdef CONFIG_NETPOLL_TRAP |
| 986 | if (netpoll_trap()) { | 1035 | if (netpoll_trap()) { |
| 987 | clear_bit(__LINK_STATE_XOFF, &dev->state); | 1036 | clear_bit(__QUEUE_STATE_XOFF, &dev_queue->state); |
| 988 | return; | 1037 | return; |
| 989 | } | 1038 | } |
| 990 | #endif | 1039 | #endif |
| 991 | if (test_and_clear_bit(__LINK_STATE_XOFF, &dev->state)) | 1040 | if (test_and_clear_bit(__QUEUE_STATE_XOFF, &dev_queue->state)) |
| 992 | __netif_schedule(dev); | 1041 | __netif_schedule(dev_queue->qdisc); |
| 1042 | } | ||
| 1043 | |||
| 1044 | static inline void netif_wake_queue(struct net_device *dev) | ||
| 1045 | { | ||
| 1046 | netif_tx_wake_queue(netdev_get_tx_queue(dev, 0)); | ||
| 1047 | } | ||
| 1048 | |||
| 1049 | static inline void netif_tx_wake_all_queues(struct net_device *dev) | ||
| 1050 | { | ||
| 1051 | unsigned int i; | ||
| 1052 | |||
| 1053 | for (i = 0; i < dev->num_tx_queues; i++) { | ||
| 1054 | struct netdev_queue *txq = netdev_get_tx_queue(dev, i); | ||
| 1055 | netif_tx_wake_queue(txq); | ||
| 1056 | } | ||
| 993 | } | 1057 | } |
| 994 | 1058 | ||
| 995 | /** | 1059 | /** |
| @@ -999,9 +1063,24 @@ static inline void netif_wake_queue(struct net_device *dev) | |||
| 999 | * Stop upper layers calling the device hard_start_xmit routine. | 1063 | * Stop upper layers calling the device hard_start_xmit routine. |
| 1000 | * Used for flow control when transmit resources are unavailable. | 1064 | * Used for flow control when transmit resources are unavailable. |
| 1001 | */ | 1065 | */ |
| 1066 | static inline void netif_tx_stop_queue(struct netdev_queue *dev_queue) | ||
| 1067 | { | ||
| 1068 | set_bit(__QUEUE_STATE_XOFF, &dev_queue->state); | ||
| 1069 | } | ||
| 1070 | |||
| 1002 | static inline void netif_stop_queue(struct net_device *dev) | 1071 | static inline void netif_stop_queue(struct net_device *dev) |
| 1003 | { | 1072 | { |
| 1004 | set_bit(__LINK_STATE_XOFF, &dev->state); | 1073 | netif_tx_stop_queue(netdev_get_tx_queue(dev, 0)); |
| 1074 | } | ||
| 1075 | |||
| 1076 | static inline void netif_tx_stop_all_queues(struct net_device *dev) | ||
| 1077 | { | ||
| 1078 | unsigned int i; | ||
| 1079 | |||
| 1080 | for (i = 0; i < dev->num_tx_queues; i++) { | ||
| 1081 | struct netdev_queue *txq = netdev_get_tx_queue(dev, i); | ||
| 1082 | netif_tx_stop_queue(txq); | ||
| 1083 | } | ||
| 1005 | } | 1084 | } |
| 1006 | 1085 | ||
| 1007 | /** | 1086 | /** |
| @@ -1010,9 +1089,14 @@ static inline void netif_stop_queue(struct net_device *dev) | |||
| 1010 | * | 1089 | * |
| 1011 | * Test if transmit queue on device is currently unable to send. | 1090 | * Test if transmit queue on device is currently unable to send. |
| 1012 | */ | 1091 | */ |
| 1092 | static inline int netif_tx_queue_stopped(const struct netdev_queue *dev_queue) | ||
| 1093 | { | ||
| 1094 | return test_bit(__QUEUE_STATE_XOFF, &dev_queue->state); | ||
| 1095 | } | ||
| 1096 | |||
| 1013 | static inline int netif_queue_stopped(const struct net_device *dev) | 1097 | static inline int netif_queue_stopped(const struct net_device *dev) |
| 1014 | { | 1098 | { |
| 1015 | return test_bit(__LINK_STATE_XOFF, &dev->state); | 1099 | return netif_tx_queue_stopped(netdev_get_tx_queue(dev, 0)); |
| 1016 | } | 1100 | } |
| 1017 | 1101 | ||
| 1018 | /** | 1102 | /** |
| @@ -1042,9 +1126,8 @@ static inline int netif_running(const struct net_device *dev) | |||
| 1042 | */ | 1126 | */ |
| 1043 | static inline void netif_start_subqueue(struct net_device *dev, u16 queue_index) | 1127 | static inline void netif_start_subqueue(struct net_device *dev, u16 queue_index) |
| 1044 | { | 1128 | { |
| 1045 | #ifdef CONFIG_NETDEVICES_MULTIQUEUE | 1129 | struct netdev_queue *txq = netdev_get_tx_queue(dev, queue_index); |
| 1046 | clear_bit(__LINK_STATE_XOFF, &dev->egress_subqueue[queue_index].state); | 1130 | clear_bit(__QUEUE_STATE_XOFF, &txq->state); |
| 1047 | #endif | ||
| 1048 | } | 1131 | } |
| 1049 | 1132 | ||
| 1050 | /** | 1133 | /** |
| @@ -1056,13 +1139,12 @@ static inline void netif_start_subqueue(struct net_device *dev, u16 queue_index) | |||
| 1056 | */ | 1139 | */ |
| 1057 | static inline void netif_stop_subqueue(struct net_device *dev, u16 queue_index) | 1140 | static inline void netif_stop_subqueue(struct net_device *dev, u16 queue_index) |
| 1058 | { | 1141 | { |
| 1059 | #ifdef CONFIG_NETDEVICES_MULTIQUEUE | 1142 | struct netdev_queue *txq = netdev_get_tx_queue(dev, queue_index); |
| 1060 | #ifdef CONFIG_NETPOLL_TRAP | 1143 | #ifdef CONFIG_NETPOLL_TRAP |
| 1061 | if (netpoll_trap()) | 1144 | if (netpoll_trap()) |
| 1062 | return; | 1145 | return; |
| 1063 | #endif | 1146 | #endif |
| 1064 | set_bit(__LINK_STATE_XOFF, &dev->egress_subqueue[queue_index].state); | 1147 | set_bit(__QUEUE_STATE_XOFF, &txq->state); |
| 1065 | #endif | ||
| 1066 | } | 1148 | } |
| 1067 | 1149 | ||
| 1068 | /** | 1150 | /** |
| @@ -1075,12 +1157,8 @@ static inline void netif_stop_subqueue(struct net_device *dev, u16 queue_index) | |||
| 1075 | static inline int __netif_subqueue_stopped(const struct net_device *dev, | 1157 | static inline int __netif_subqueue_stopped(const struct net_device *dev, |
| 1076 | u16 queue_index) | 1158 | u16 queue_index) |
| 1077 | { | 1159 | { |
| 1078 | #ifdef CONFIG_NETDEVICES_MULTIQUEUE | 1160 | struct netdev_queue *txq = netdev_get_tx_queue(dev, queue_index); |
| 1079 | return test_bit(__LINK_STATE_XOFF, | 1161 | return test_bit(__QUEUE_STATE_XOFF, &txq->state); |
| 1080 | &dev->egress_subqueue[queue_index].state); | ||
| 1081 | #else | ||
| 1082 | return 0; | ||
| 1083 | #endif | ||
| 1084 | } | 1162 | } |
| 1085 | 1163 | ||
| 1086 | static inline int netif_subqueue_stopped(const struct net_device *dev, | 1164 | static inline int netif_subqueue_stopped(const struct net_device *dev, |
| @@ -1098,15 +1176,13 @@ static inline int netif_subqueue_stopped(const struct net_device *dev, | |||
| 1098 | */ | 1176 | */ |
| 1099 | static inline void netif_wake_subqueue(struct net_device *dev, u16 queue_index) | 1177 | static inline void netif_wake_subqueue(struct net_device *dev, u16 queue_index) |
| 1100 | { | 1178 | { |
| 1101 | #ifdef CONFIG_NETDEVICES_MULTIQUEUE | 1179 | struct netdev_queue *txq = netdev_get_tx_queue(dev, queue_index); |
| 1102 | #ifdef CONFIG_NETPOLL_TRAP | 1180 | #ifdef CONFIG_NETPOLL_TRAP |
| 1103 | if (netpoll_trap()) | 1181 | if (netpoll_trap()) |
| 1104 | return; | 1182 | return; |
| 1105 | #endif | 1183 | #endif |
| 1106 | if (test_and_clear_bit(__LINK_STATE_XOFF, | 1184 | if (test_and_clear_bit(__QUEUE_STATE_XOFF, &txq->state)) |
| 1107 | &dev->egress_subqueue[queue_index].state)) | 1185 | __netif_schedule(txq->qdisc); |
| 1108 | __netif_schedule(dev); | ||
| 1109 | #endif | ||
| 1110 | } | 1186 | } |
| 1111 | 1187 | ||
| 1112 | /** | 1188 | /** |
| @@ -1114,15 +1190,10 @@ static inline void netif_wake_subqueue(struct net_device *dev, u16 queue_index) | |||
| 1114 | * @dev: network device | 1190 | * @dev: network device |
| 1115 | * | 1191 | * |
| 1116 | * Check if device has multiple transmit queues | 1192 | * Check if device has multiple transmit queues |
| 1117 | * Always falls if NETDEVICE_MULTIQUEUE is not configured | ||
| 1118 | */ | 1193 | */ |
| 1119 | static inline int netif_is_multiqueue(const struct net_device *dev) | 1194 | static inline int netif_is_multiqueue(const struct net_device *dev) |
| 1120 | { | 1195 | { |
| 1121 | #ifdef CONFIG_NETDEVICES_MULTIQUEUE | 1196 | return (dev->num_tx_queues > 1); |
| 1122 | return (!!(NETIF_F_MULTI_QUEUE & dev->features)); | ||
| 1123 | #else | ||
| 1124 | return 0; | ||
| 1125 | #endif | ||
| 1126 | } | 1197 | } |
| 1127 | 1198 | ||
| 1128 | /* Use this variant when it is known for sure that it | 1199 | /* Use this variant when it is known for sure that it |
| @@ -1142,6 +1213,7 @@ extern int netif_rx(struct sk_buff *skb); | |||
| 1142 | extern int netif_rx_ni(struct sk_buff *skb); | 1213 | extern int netif_rx_ni(struct sk_buff *skb); |
| 1143 | #define HAVE_NETIF_RECEIVE_SKB 1 | 1214 | #define HAVE_NETIF_RECEIVE_SKB 1 |
| 1144 | extern int netif_receive_skb(struct sk_buff *skb); | 1215 | extern int netif_receive_skb(struct sk_buff *skb); |
| 1216 | extern void netif_nit_deliver(struct sk_buff *skb); | ||
| 1145 | extern int dev_valid_name(const char *name); | 1217 | extern int dev_valid_name(const char *name); |
| 1146 | extern int dev_ioctl(struct net *net, unsigned int cmd, void __user *); | 1218 | extern int dev_ioctl(struct net *net, unsigned int cmd, void __user *); |
| 1147 | extern int dev_ethtool(struct net *net, struct ifreq *); | 1219 | extern int dev_ethtool(struct net *net, struct ifreq *); |
| @@ -1154,7 +1226,8 @@ extern int dev_set_mtu(struct net_device *, int); | |||
| 1154 | extern int dev_set_mac_address(struct net_device *, | 1226 | extern int dev_set_mac_address(struct net_device *, |
| 1155 | struct sockaddr *); | 1227 | struct sockaddr *); |
| 1156 | extern int dev_hard_start_xmit(struct sk_buff *skb, | 1228 | extern int dev_hard_start_xmit(struct sk_buff *skb, |
| 1157 | struct net_device *dev); | 1229 | struct net_device *dev, |
| 1230 | struct netdev_queue *txq); | ||
| 1158 | 1231 | ||
| 1159 | extern int netdev_budget; | 1232 | extern int netdev_budget; |
| 1160 | 1233 | ||
| @@ -1397,62 +1470,121 @@ static inline void netif_rx_complete(struct net_device *dev, | |||
| 1397 | * | 1470 | * |
| 1398 | * Get network device transmit lock | 1471 | * Get network device transmit lock |
| 1399 | */ | 1472 | */ |
| 1400 | static inline void __netif_tx_lock(struct net_device *dev, int cpu) | 1473 | static inline void __netif_tx_lock(struct netdev_queue *txq, int cpu) |
| 1401 | { | 1474 | { |
| 1402 | spin_lock(&dev->_xmit_lock); | 1475 | spin_lock(&txq->_xmit_lock); |
| 1403 | dev->xmit_lock_owner = cpu; | 1476 | txq->xmit_lock_owner = cpu; |
| 1477 | } | ||
| 1478 | |||
| 1479 | static inline void __netif_tx_lock_bh(struct netdev_queue *txq) | ||
| 1480 | { | ||
| 1481 | spin_lock_bh(&txq->_xmit_lock); | ||
| 1482 | txq->xmit_lock_owner = smp_processor_id(); | ||
| 1404 | } | 1483 | } |
| 1405 | 1484 | ||
| 1406 | static inline void netif_tx_lock(struct net_device *dev) | 1485 | static inline void netif_tx_lock(struct net_device *dev) |
| 1407 | { | 1486 | { |
| 1408 | __netif_tx_lock(dev, smp_processor_id()); | 1487 | int cpu = smp_processor_id(); |
| 1488 | unsigned int i; | ||
| 1489 | |||
| 1490 | for (i = 0; i < dev->num_tx_queues; i++) { | ||
| 1491 | struct netdev_queue *txq = netdev_get_tx_queue(dev, i); | ||
| 1492 | __netif_tx_lock(txq, cpu); | ||
| 1493 | } | ||
| 1409 | } | 1494 | } |
| 1410 | 1495 | ||
| 1411 | static inline void netif_tx_lock_bh(struct net_device *dev) | 1496 | static inline void netif_tx_lock_bh(struct net_device *dev) |
| 1412 | { | 1497 | { |
| 1413 | spin_lock_bh(&dev->_xmit_lock); | 1498 | local_bh_disable(); |
| 1414 | dev->xmit_lock_owner = smp_processor_id(); | 1499 | netif_tx_lock(dev); |
| 1415 | } | 1500 | } |
| 1416 | 1501 | ||
| 1417 | static inline int netif_tx_trylock(struct net_device *dev) | 1502 | static inline int __netif_tx_trylock(struct netdev_queue *txq) |
| 1418 | { | 1503 | { |
| 1419 | int ok = spin_trylock(&dev->_xmit_lock); | 1504 | int ok = spin_trylock(&txq->_xmit_lock); |
| 1420 | if (likely(ok)) | 1505 | if (likely(ok)) |
| 1421 | dev->xmit_lock_owner = smp_processor_id(); | 1506 | txq->xmit_lock_owner = smp_processor_id(); |
| 1422 | return ok; | 1507 | return ok; |
| 1423 | } | 1508 | } |
| 1424 | 1509 | ||
| 1510 | static inline int netif_tx_trylock(struct net_device *dev) | ||
| 1511 | { | ||
| 1512 | return __netif_tx_trylock(netdev_get_tx_queue(dev, 0)); | ||
| 1513 | } | ||
| 1514 | |||
| 1515 | static inline void __netif_tx_unlock(struct netdev_queue *txq) | ||
| 1516 | { | ||
| 1517 | txq->xmit_lock_owner = -1; | ||
| 1518 | spin_unlock(&txq->_xmit_lock); | ||
| 1519 | } | ||
| 1520 | |||
| 1521 | static inline void __netif_tx_unlock_bh(struct netdev_queue *txq) | ||
| 1522 | { | ||
| 1523 | txq->xmit_lock_owner = -1; | ||
| 1524 | spin_unlock_bh(&txq->_xmit_lock); | ||
| 1525 | } | ||
| 1526 | |||
| 1425 | static inline void netif_tx_unlock(struct net_device *dev) | 1527 | static inline void netif_tx_unlock(struct net_device *dev) |
| 1426 | { | 1528 | { |
| 1427 | dev->xmit_lock_owner = -1; | 1529 | unsigned int i; |
| 1428 | spin_unlock(&dev->_xmit_lock); | 1530 | |
| 1531 | for (i = 0; i < dev->num_tx_queues; i++) { | ||
| 1532 | struct netdev_queue *txq = netdev_get_tx_queue(dev, i); | ||
| 1533 | __netif_tx_unlock(txq); | ||
| 1534 | } | ||
| 1535 | |||
| 1429 | } | 1536 | } |
| 1430 | 1537 | ||
| 1431 | static inline void netif_tx_unlock_bh(struct net_device *dev) | 1538 | static inline void netif_tx_unlock_bh(struct net_device *dev) |
| 1432 | { | 1539 | { |
| 1433 | dev->xmit_lock_owner = -1; | 1540 | netif_tx_unlock(dev); |
| 1434 | spin_unlock_bh(&dev->_xmit_lock); | 1541 | local_bh_enable(); |
| 1435 | } | 1542 | } |
| 1436 | 1543 | ||
| 1437 | #define HARD_TX_LOCK(dev, cpu) { \ | 1544 | #define HARD_TX_LOCK(dev, txq, cpu) { \ |
| 1438 | if ((dev->features & NETIF_F_LLTX) == 0) { \ | 1545 | if ((dev->features & NETIF_F_LLTX) == 0) { \ |
| 1439 | __netif_tx_lock(dev, cpu); \ | 1546 | __netif_tx_lock(txq, cpu); \ |
| 1440 | } \ | 1547 | } \ |
| 1441 | } | 1548 | } |
| 1442 | 1549 | ||
| 1443 | #define HARD_TX_UNLOCK(dev) { \ | 1550 | #define HARD_TX_UNLOCK(dev, txq) { \ |
| 1444 | if ((dev->features & NETIF_F_LLTX) == 0) { \ | 1551 | if ((dev->features & NETIF_F_LLTX) == 0) { \ |
| 1445 | netif_tx_unlock(dev); \ | 1552 | __netif_tx_unlock(txq); \ |
| 1446 | } \ | 1553 | } \ |
| 1447 | } | 1554 | } |
| 1448 | 1555 | ||
| 1449 | static inline void netif_tx_disable(struct net_device *dev) | 1556 | static inline void netif_tx_disable(struct net_device *dev) |
| 1450 | { | 1557 | { |
| 1558 | unsigned int i; | ||
| 1559 | |||
| 1451 | netif_tx_lock_bh(dev); | 1560 | netif_tx_lock_bh(dev); |
| 1452 | netif_stop_queue(dev); | 1561 | for (i = 0; i < dev->num_tx_queues; i++) { |
| 1562 | struct netdev_queue *txq = netdev_get_tx_queue(dev, i); | ||
| 1563 | netif_tx_stop_queue(txq); | ||
| 1564 | } | ||
| 1453 | netif_tx_unlock_bh(dev); | 1565 | netif_tx_unlock_bh(dev); |
| 1454 | } | 1566 | } |
| 1455 | 1567 | ||
| 1568 | static inline void netif_addr_lock(struct net_device *dev) | ||
| 1569 | { | ||
| 1570 | spin_lock(&dev->addr_list_lock); | ||
| 1571 | } | ||
| 1572 | |||
| 1573 | static inline void netif_addr_lock_bh(struct net_device *dev) | ||
| 1574 | { | ||
| 1575 | spin_lock_bh(&dev->addr_list_lock); | ||
| 1576 | } | ||
| 1577 | |||
| 1578 | static inline void netif_addr_unlock(struct net_device *dev) | ||
| 1579 | { | ||
| 1580 | spin_unlock(&dev->addr_list_lock); | ||
| 1581 | } | ||
| 1582 | |||
| 1583 | static inline void netif_addr_unlock_bh(struct net_device *dev) | ||
| 1584 | { | ||
| 1585 | spin_unlock_bh(&dev->addr_list_lock); | ||
| 1586 | } | ||
| 1587 | |||
| 1456 | /* These functions live elsewhere (drivers/net/net_init.c, but related) */ | 1588 | /* These functions live elsewhere (drivers/net/net_init.c, but related) */ |
| 1457 | 1589 | ||
| 1458 | extern void ether_setup(struct net_device *dev); | 1590 | extern void ether_setup(struct net_device *dev); |
| @@ -1480,9 +1612,10 @@ extern int __dev_addr_delete(struct dev_addr_list **list, int *count, void *ad | |||
| 1480 | extern int __dev_addr_add(struct dev_addr_list **list, int *count, void *addr, int alen, int newonly); | 1612 | extern int __dev_addr_add(struct dev_addr_list **list, int *count, void *addr, int alen, int newonly); |
| 1481 | extern int __dev_addr_sync(struct dev_addr_list **to, int *to_count, struct dev_addr_list **from, int *from_count); | 1613 | extern int __dev_addr_sync(struct dev_addr_list **to, int *to_count, struct dev_addr_list **from, int *from_count); |
| 1482 | extern void __dev_addr_unsync(struct dev_addr_list **to, int *to_count, struct dev_addr_list **from, int *from_count); | 1614 | extern void __dev_addr_unsync(struct dev_addr_list **to, int *to_count, struct dev_addr_list **from, int *from_count); |
| 1483 | extern void dev_set_promiscuity(struct net_device *dev, int inc); | 1615 | extern int dev_set_promiscuity(struct net_device *dev, int inc); |
| 1484 | extern void dev_set_allmulti(struct net_device *dev, int inc); | 1616 | extern int dev_set_allmulti(struct net_device *dev, int inc); |
| 1485 | extern void netdev_state_change(struct net_device *dev); | 1617 | extern void netdev_state_change(struct net_device *dev); |
| 1618 | extern void netdev_bonding_change(struct net_device *dev); | ||
| 1486 | extern void netdev_features_change(struct net_device *dev); | 1619 | extern void netdev_features_change(struct net_device *dev); |
| 1487 | /* Load a device via the kmod */ | 1620 | /* Load a device via the kmod */ |
| 1488 | extern void dev_load(struct net *net, const char *name); | 1621 | extern void dev_load(struct net *net, const char *name); |
| @@ -1509,6 +1642,9 @@ extern void *dev_seq_next(struct seq_file *seq, void *v, loff_t *pos); | |||
| 1509 | extern void dev_seq_stop(struct seq_file *seq, void *v); | 1642 | extern void dev_seq_stop(struct seq_file *seq, void *v); |
| 1510 | #endif | 1643 | #endif |
| 1511 | 1644 | ||
| 1645 | extern int netdev_class_create_file(struct class_attribute *class_attr); | ||
| 1646 | extern void netdev_class_remove_file(struct class_attribute *class_attr); | ||
| 1647 | |||
| 1512 | extern void linkwatch_run_queue(void); | 1648 | extern void linkwatch_run_queue(void); |
| 1513 | 1649 | ||
| 1514 | extern int netdev_compute_features(unsigned long all, unsigned long one); | 1650 | extern int netdev_compute_features(unsigned long all, unsigned long one); |
diff --git a/include/linux/netfilter/nfnetlink_conntrack.h b/include/linux/netfilter/nfnetlink_conntrack.h index 0a383ac083cb..759bc043dc65 100644 --- a/include/linux/netfilter/nfnetlink_conntrack.h +++ b/include/linux/netfilter/nfnetlink_conntrack.h | |||
| @@ -81,6 +81,7 @@ enum ctattr_protoinfo { | |||
| 81 | CTA_PROTOINFO_UNSPEC, | 81 | CTA_PROTOINFO_UNSPEC, |
| 82 | CTA_PROTOINFO_TCP, | 82 | CTA_PROTOINFO_TCP, |
| 83 | CTA_PROTOINFO_DCCP, | 83 | CTA_PROTOINFO_DCCP, |
| 84 | CTA_PROTOINFO_SCTP, | ||
| 84 | __CTA_PROTOINFO_MAX | 85 | __CTA_PROTOINFO_MAX |
| 85 | }; | 86 | }; |
| 86 | #define CTA_PROTOINFO_MAX (__CTA_PROTOINFO_MAX - 1) | 87 | #define CTA_PROTOINFO_MAX (__CTA_PROTOINFO_MAX - 1) |
| @@ -103,6 +104,15 @@ enum ctattr_protoinfo_dccp { | |||
| 103 | }; | 104 | }; |
| 104 | #define CTA_PROTOINFO_DCCP_MAX (__CTA_PROTOINFO_DCCP_MAX - 1) | 105 | #define CTA_PROTOINFO_DCCP_MAX (__CTA_PROTOINFO_DCCP_MAX - 1) |
| 105 | 106 | ||
| 107 | enum ctattr_protoinfo_sctp { | ||
| 108 | CTA_PROTOINFO_SCTP_UNSPEC, | ||
| 109 | CTA_PROTOINFO_SCTP_STATE, | ||
| 110 | CTA_PROTOINFO_SCTP_VTAG_ORIGINAL, | ||
| 111 | CTA_PROTOINFO_SCTP_VTAG_REPLY, | ||
| 112 | __CTA_PROTOINFO_SCTP_MAX | ||
| 113 | }; | ||
| 114 | #define CTA_PROTOINFO_SCTP_MAX (__CTA_PROTOINFO_SCTP_MAX - 1) | ||
| 115 | |||
| 106 | enum ctattr_counters { | 116 | enum ctattr_counters { |
| 107 | CTA_COUNTERS_UNSPEC, | 117 | CTA_COUNTERS_UNSPEC, |
| 108 | CTA_COUNTERS_PACKETS, /* old 64bit counters */ | 118 | CTA_COUNTERS_PACKETS, /* old 64bit counters */ |
diff --git a/include/linux/netfilter/xt_string.h b/include/linux/netfilter/xt_string.h index bb21dd1aee2d..8a6ba7bbef9f 100644 --- a/include/linux/netfilter/xt_string.h +++ b/include/linux/netfilter/xt_string.h | |||
| @@ -4,6 +4,11 @@ | |||
| 4 | #define XT_STRING_MAX_PATTERN_SIZE 128 | 4 | #define XT_STRING_MAX_PATTERN_SIZE 128 |
| 5 | #define XT_STRING_MAX_ALGO_NAME_SIZE 16 | 5 | #define XT_STRING_MAX_ALGO_NAME_SIZE 16 |
| 6 | 6 | ||
| 7 | enum { | ||
| 8 | XT_STRING_FLAG_INVERT = 0x01, | ||
| 9 | XT_STRING_FLAG_IGNORECASE = 0x02 | ||
| 10 | }; | ||
| 11 | |||
| 7 | struct xt_string_info | 12 | struct xt_string_info |
| 8 | { | 13 | { |
| 9 | u_int16_t from_offset; | 14 | u_int16_t from_offset; |
| @@ -11,7 +16,15 @@ struct xt_string_info | |||
| 11 | char algo[XT_STRING_MAX_ALGO_NAME_SIZE]; | 16 | char algo[XT_STRING_MAX_ALGO_NAME_SIZE]; |
| 12 | char pattern[XT_STRING_MAX_PATTERN_SIZE]; | 17 | char pattern[XT_STRING_MAX_PATTERN_SIZE]; |
| 13 | u_int8_t patlen; | 18 | u_int8_t patlen; |
| 14 | u_int8_t invert; | 19 | union { |
| 20 | struct { | ||
| 21 | u_int8_t invert; | ||
| 22 | } v0; | ||
| 23 | |||
| 24 | struct { | ||
| 25 | u_int8_t flags; | ||
| 26 | } v1; | ||
| 27 | } u; | ||
| 15 | 28 | ||
| 16 | /* Used internally by the kernel */ | 29 | /* Used internally by the kernel */ |
| 17 | struct ts_config __attribute__((aligned(8))) *config; | 30 | struct ts_config __attribute__((aligned(8))) *config; |
diff --git a/include/linux/netfilter_bridge/ebt_ip6.h b/include/linux/netfilter_bridge/ebt_ip6.h new file mode 100644 index 000000000000..2273c3ae33ca --- /dev/null +++ b/include/linux/netfilter_bridge/ebt_ip6.h | |||
| @@ -0,0 +1,40 @@ | |||
| 1 | /* | ||
| 2 | * ebt_ip6 | ||
| 3 | * | ||
| 4 | * Authors: | ||
| 5 | * Kuo-Lang Tseng <kuo-lang.tseng@intel.com> | ||
| 6 | * Manohar Castelino <manohar.r.castelino@intel.com> | ||
| 7 | * | ||
| 8 | * Jan 11, 2008 | ||
| 9 | * | ||
| 10 | */ | ||
| 11 | |||
| 12 | #ifndef __LINUX_BRIDGE_EBT_IP6_H | ||
| 13 | #define __LINUX_BRIDGE_EBT_IP6_H | ||
| 14 | |||
| 15 | #define EBT_IP6_SOURCE 0x01 | ||
| 16 | #define EBT_IP6_DEST 0x02 | ||
| 17 | #define EBT_IP6_TCLASS 0x04 | ||
| 18 | #define EBT_IP6_PROTO 0x08 | ||
| 19 | #define EBT_IP6_SPORT 0x10 | ||
| 20 | #define EBT_IP6_DPORT 0x20 | ||
| 21 | #define EBT_IP6_MASK (EBT_IP6_SOURCE | EBT_IP6_DEST | EBT_IP6_TCLASS |\ | ||
| 22 | EBT_IP6_PROTO | EBT_IP6_SPORT | EBT_IP6_DPORT) | ||
| 23 | #define EBT_IP6_MATCH "ip6" | ||
| 24 | |||
| 25 | /* the same values are used for the invflags */ | ||
| 26 | struct ebt_ip6_info | ||
| 27 | { | ||
| 28 | struct in6_addr saddr; | ||
| 29 | struct in6_addr daddr; | ||
| 30 | struct in6_addr smsk; | ||
| 31 | struct in6_addr dmsk; | ||
| 32 | uint8_t tclass; | ||
| 33 | uint8_t protocol; | ||
| 34 | uint8_t bitmask; | ||
| 35 | uint8_t invflags; | ||
| 36 | uint16_t sport[2]; | ||
| 37 | uint16_t dport[2]; | ||
| 38 | }; | ||
| 39 | |||
| 40 | #endif | ||
diff --git a/include/linux/netfilter_bridge/ebt_log.h b/include/linux/netfilter_bridge/ebt_log.h index 96e231ae7554..b76e653157e5 100644 --- a/include/linux/netfilter_bridge/ebt_log.h +++ b/include/linux/netfilter_bridge/ebt_log.h | |||
| @@ -4,7 +4,8 @@ | |||
| 4 | #define EBT_LOG_IP 0x01 /* if the frame is made by ip, log the ip information */ | 4 | #define EBT_LOG_IP 0x01 /* if the frame is made by ip, log the ip information */ |
| 5 | #define EBT_LOG_ARP 0x02 | 5 | #define EBT_LOG_ARP 0x02 |
| 6 | #define EBT_LOG_NFLOG 0x04 | 6 | #define EBT_LOG_NFLOG 0x04 |
| 7 | #define EBT_LOG_MASK (EBT_LOG_IP | EBT_LOG_ARP) | 7 | #define EBT_LOG_IP6 0x08 |
| 8 | #define EBT_LOG_MASK (EBT_LOG_IP | EBT_LOG_ARP | EBT_LOG_IP6) | ||
| 8 | #define EBT_LOG_PREFIX_SIZE 30 | 9 | #define EBT_LOG_PREFIX_SIZE 30 |
| 9 | #define EBT_LOG_WATCHER "log" | 10 | #define EBT_LOG_WATCHER "log" |
| 10 | 11 | ||
diff --git a/include/linux/netfilter_ipv4.h b/include/linux/netfilter_ipv4.h index 650318b0c405..29c7727ff0e8 100644 --- a/include/linux/netfilter_ipv4.h +++ b/include/linux/netfilter_ipv4.h | |||
| @@ -60,6 +60,7 @@ enum nf_ip_hook_priorities { | |||
| 60 | NF_IP_PRI_MANGLE = -150, | 60 | NF_IP_PRI_MANGLE = -150, |
| 61 | NF_IP_PRI_NAT_DST = -100, | 61 | NF_IP_PRI_NAT_DST = -100, |
| 62 | NF_IP_PRI_FILTER = 0, | 62 | NF_IP_PRI_FILTER = 0, |
| 63 | NF_IP_PRI_SECURITY = 50, | ||
| 63 | NF_IP_PRI_NAT_SRC = 100, | 64 | NF_IP_PRI_NAT_SRC = 100, |
| 64 | NF_IP_PRI_SELINUX_LAST = 225, | 65 | NF_IP_PRI_SELINUX_LAST = 225, |
| 65 | NF_IP_PRI_CONNTRACK_CONFIRM = INT_MAX, | 66 | NF_IP_PRI_CONNTRACK_CONFIRM = INT_MAX, |
diff --git a/include/linux/netfilter_ipv6.h b/include/linux/netfilter_ipv6.h index 3475a65dae9b..d654873aa25a 100644 --- a/include/linux/netfilter_ipv6.h +++ b/include/linux/netfilter_ipv6.h | |||
| @@ -64,11 +64,14 @@ enum nf_ip6_hook_priorities { | |||
| 64 | NF_IP6_PRI_MANGLE = -150, | 64 | NF_IP6_PRI_MANGLE = -150, |
| 65 | NF_IP6_PRI_NAT_DST = -100, | 65 | NF_IP6_PRI_NAT_DST = -100, |
| 66 | NF_IP6_PRI_FILTER = 0, | 66 | NF_IP6_PRI_FILTER = 0, |
| 67 | NF_IP6_PRI_SECURITY = 50, | ||
| 67 | NF_IP6_PRI_NAT_SRC = 100, | 68 | NF_IP6_PRI_NAT_SRC = 100, |
| 68 | NF_IP6_PRI_SELINUX_LAST = 225, | 69 | NF_IP6_PRI_SELINUX_LAST = 225, |
| 69 | NF_IP6_PRI_LAST = INT_MAX, | 70 | NF_IP6_PRI_LAST = INT_MAX, |
| 70 | }; | 71 | }; |
| 71 | 72 | ||
| 73 | #ifdef __KERNEL__ | ||
| 74 | |||
| 72 | #ifdef CONFIG_NETFILTER | 75 | #ifdef CONFIG_NETFILTER |
| 73 | extern int ip6_route_me_harder(struct sk_buff *skb); | 76 | extern int ip6_route_me_harder(struct sk_buff *skb); |
| 74 | extern __sum16 nf_ip6_checksum(struct sk_buff *skb, unsigned int hook, | 77 | extern __sum16 nf_ip6_checksum(struct sk_buff *skb, unsigned int hook, |
| @@ -81,4 +84,6 @@ static inline int ipv6_netfilter_init(void) { return 0; } | |||
| 81 | static inline void ipv6_netfilter_fini(void) { return; } | 84 | static inline void ipv6_netfilter_fini(void) { return; } |
| 82 | #endif /* CONFIG_NETFILTER */ | 85 | #endif /* CONFIG_NETFILTER */ |
| 83 | 86 | ||
| 87 | #endif /* __KERNEL__ */ | ||
| 88 | |||
| 84 | #endif /*__LINUX_IP6_NETFILTER_H*/ | 89 | #endif /*__LINUX_IP6_NETFILTER_H*/ |
diff --git a/include/linux/netlink.h b/include/linux/netlink.h index bec1062a25a1..9ff1b54908f3 100644 --- a/include/linux/netlink.h +++ b/include/linux/netlink.h | |||
| @@ -193,7 +193,7 @@ extern int netlink_unregister_notifier(struct notifier_block *nb); | |||
| 193 | 193 | ||
| 194 | /* finegrained unicast helpers: */ | 194 | /* finegrained unicast helpers: */ |
| 195 | struct sock *netlink_getsockbyfilp(struct file *filp); | 195 | struct sock *netlink_getsockbyfilp(struct file *filp); |
| 196 | int netlink_attachskb(struct sock *sk, struct sk_buff *skb, int nonblock, | 196 | int netlink_attachskb(struct sock *sk, struct sk_buff *skb, |
| 197 | long *timeo, struct sock *ssk); | 197 | long *timeo, struct sock *ssk); |
| 198 | void netlink_detachskb(struct sock *sk, struct sk_buff *skb); | 198 | void netlink_detachskb(struct sock *sk, struct sk_buff *skb); |
| 199 | int netlink_sendskb(struct sock *sk, struct sk_buff *skb); | 199 | int netlink_sendskb(struct sock *sk, struct sk_buff *skb); |
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h index ea6517e58b04..2be7c63bc0f2 100644 --- a/include/linux/nl80211.h +++ b/include/linux/nl80211.h | |||
| @@ -122,13 +122,13 @@ enum nl80211_commands { | |||
| 122 | NL80211_CMD_NEW_STATION, | 122 | NL80211_CMD_NEW_STATION, |
| 123 | NL80211_CMD_DEL_STATION, | 123 | NL80211_CMD_DEL_STATION, |
| 124 | 124 | ||
| 125 | /* add commands here */ | ||
| 126 | |||
| 127 | NL80211_CMD_GET_MPATH, | 125 | NL80211_CMD_GET_MPATH, |
| 128 | NL80211_CMD_SET_MPATH, | 126 | NL80211_CMD_SET_MPATH, |
| 129 | NL80211_CMD_NEW_MPATH, | 127 | NL80211_CMD_NEW_MPATH, |
| 130 | NL80211_CMD_DEL_MPATH, | 128 | NL80211_CMD_DEL_MPATH, |
| 131 | 129 | ||
| 130 | /* add commands here */ | ||
| 131 | |||
| 132 | /* used to define NL80211_CMD_MAX below */ | 132 | /* used to define NL80211_CMD_MAX below */ |
| 133 | __NL80211_CMD_AFTER_LAST, | 133 | __NL80211_CMD_AFTER_LAST, |
| 134 | NL80211_CMD_MAX = __NL80211_CMD_AFTER_LAST - 1 | 134 | NL80211_CMD_MAX = __NL80211_CMD_AFTER_LAST - 1 |
| @@ -230,18 +230,21 @@ enum nl80211_attrs { | |||
| 230 | 230 | ||
| 231 | NL80211_ATTR_MNTR_FLAGS, | 231 | NL80211_ATTR_MNTR_FLAGS, |
| 232 | 232 | ||
| 233 | /* add attributes here, update the policy in nl80211.c */ | ||
| 234 | |||
| 235 | NL80211_ATTR_MESH_ID, | 233 | NL80211_ATTR_MESH_ID, |
| 236 | NL80211_ATTR_STA_PLINK_ACTION, | 234 | NL80211_ATTR_STA_PLINK_ACTION, |
| 237 | NL80211_ATTR_MPATH_NEXT_HOP, | 235 | NL80211_ATTR_MPATH_NEXT_HOP, |
| 238 | NL80211_ATTR_MPATH_INFO, | 236 | NL80211_ATTR_MPATH_INFO, |
| 239 | 237 | ||
| 238 | /* add attributes here, update the policy in nl80211.c */ | ||
| 239 | |||
| 240 | __NL80211_ATTR_AFTER_LAST, | 240 | __NL80211_ATTR_AFTER_LAST, |
| 241 | NL80211_ATTR_MAX = __NL80211_ATTR_AFTER_LAST - 1 | 241 | NL80211_ATTR_MAX = __NL80211_ATTR_AFTER_LAST - 1 |
| 242 | }; | 242 | }; |
| 243 | 243 | ||
| 244 | #define NL80211_MAX_SUPP_RATES 32 | 244 | #define NL80211_MAX_SUPP_RATES 32 |
| 245 | #define NL80211_TKIP_DATA_OFFSET_ENCR_KEY 0 | ||
| 246 | #define NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY 16 | ||
| 247 | #define NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY 24 | ||
| 245 | 248 | ||
| 246 | /** | 249 | /** |
| 247 | * enum nl80211_iftype - (virtual) interface types | 250 | * enum nl80211_iftype - (virtual) interface types |
diff --git a/include/linux/notifier.h b/include/linux/notifier.h index 0ff6224d172a..bd3d72ddf333 100644 --- a/include/linux/notifier.h +++ b/include/linux/notifier.h | |||
| @@ -197,6 +197,7 @@ static inline int notifier_to_errno(int ret) | |||
| 197 | #define NETDEV_GOING_DOWN 0x0009 | 197 | #define NETDEV_GOING_DOWN 0x0009 |
| 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 | 201 | ||
| 201 | #define SYS_DOWN 0x0001 /* Notify of system down */ | 202 | #define SYS_DOWN 0x0001 /* Notify of system down */ |
| 202 | #define SYS_RESTART SYS_DOWN | 203 | #define SYS_RESTART SYS_DOWN |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 6be6a7943d8b..d8507eb394cf 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -1950,6 +1950,8 @@ | |||
| 1950 | #define PCI_DEVICE_ID_NX2_5708 0x164c | 1950 | #define PCI_DEVICE_ID_NX2_5708 0x164c |
| 1951 | #define PCI_DEVICE_ID_TIGON3_5702FE 0x164d | 1951 | #define PCI_DEVICE_ID_TIGON3_5702FE 0x164d |
| 1952 | #define PCI_DEVICE_ID_NX2_57710 0x164e | 1952 | #define PCI_DEVICE_ID_NX2_57710 0x164e |
| 1953 | #define PCI_DEVICE_ID_NX2_57711 0x164f | ||
| 1954 | #define PCI_DEVICE_ID_NX2_57711E 0x1650 | ||
| 1953 | #define PCI_DEVICE_ID_TIGON3_5705 0x1653 | 1955 | #define PCI_DEVICE_ID_TIGON3_5705 0x1653 |
| 1954 | #define PCI_DEVICE_ID_TIGON3_5705_2 0x1654 | 1956 | #define PCI_DEVICE_ID_TIGON3_5705_2 0x1654 |
| 1955 | #define PCI_DEVICE_ID_TIGON3_5720 0x1658 | 1957 | #define PCI_DEVICE_ID_TIGON3_5720 0x1658 |
| @@ -1982,6 +1984,7 @@ | |||
| 1982 | #define PCI_DEVICE_ID_TIGON3_5787M 0x1693 | 1984 | #define PCI_DEVICE_ID_TIGON3_5787M 0x1693 |
| 1983 | #define PCI_DEVICE_ID_TIGON3_5782 0x1696 | 1985 | #define PCI_DEVICE_ID_TIGON3_5782 0x1696 |
| 1984 | #define PCI_DEVICE_ID_TIGON3_5784 0x1698 | 1986 | #define PCI_DEVICE_ID_TIGON3_5784 0x1698 |
| 1987 | #define PCI_DEVICE_ID_TIGON3_5785 0x1699 | ||
| 1985 | #define PCI_DEVICE_ID_TIGON3_5786 0x169a | 1988 | #define PCI_DEVICE_ID_TIGON3_5786 0x169a |
| 1986 | #define PCI_DEVICE_ID_TIGON3_5787 0x169b | 1989 | #define PCI_DEVICE_ID_TIGON3_5787 0x169b |
| 1987 | #define PCI_DEVICE_ID_TIGON3_5788 0x169c | 1990 | #define PCI_DEVICE_ID_TIGON3_5788 0x169c |
diff --git a/include/linux/pkt_cls.h b/include/linux/pkt_cls.h index 99efbed81fa2..7cf7824df778 100644 --- a/include/linux/pkt_cls.h +++ b/include/linux/pkt_cls.h | |||
| @@ -374,6 +374,7 @@ enum | |||
| 374 | TCA_FLOW_ACT, | 374 | TCA_FLOW_ACT, |
| 375 | TCA_FLOW_POLICE, | 375 | TCA_FLOW_POLICE, |
| 376 | TCA_FLOW_EMATCHES, | 376 | TCA_FLOW_EMATCHES, |
| 377 | TCA_FLOW_PERTURB, | ||
| 377 | __TCA_FLOW_MAX | 378 | __TCA_FLOW_MAX |
| 378 | }; | 379 | }; |
| 379 | 380 | ||
diff --git a/include/linux/pkt_sched.h b/include/linux/pkt_sched.h index dbb7ac37960d..e5de421ac7b4 100644 --- a/include/linux/pkt_sched.h +++ b/include/linux/pkt_sched.h | |||
| @@ -85,6 +85,26 @@ struct tc_ratespec | |||
| 85 | 85 | ||
| 86 | #define TC_RTAB_SIZE 1024 | 86 | #define TC_RTAB_SIZE 1024 |
| 87 | 87 | ||
| 88 | struct tc_sizespec { | ||
| 89 | unsigned char cell_log; | ||
| 90 | unsigned char size_log; | ||
| 91 | short cell_align; | ||
| 92 | int overhead; | ||
| 93 | unsigned int linklayer; | ||
| 94 | unsigned int mpu; | ||
| 95 | unsigned int mtu; | ||
| 96 | unsigned int tsize; | ||
| 97 | }; | ||
| 98 | |||
| 99 | enum { | ||
| 100 | TCA_STAB_UNSPEC, | ||
| 101 | TCA_STAB_BASE, | ||
| 102 | TCA_STAB_DATA, | ||
| 103 | __TCA_STAB_MAX | ||
| 104 | }; | ||
| 105 | |||
| 106 | #define TCA_STAB_MAX (__TCA_STAB_MAX - 1) | ||
| 107 | |||
| 88 | /* FIFO section */ | 108 | /* FIFO section */ |
| 89 | 109 | ||
| 90 | struct tc_fifo_qopt | 110 | struct tc_fifo_qopt |
| @@ -103,15 +123,6 @@ struct tc_prio_qopt | |||
| 103 | __u8 priomap[TC_PRIO_MAX+1]; /* Map: logical priority -> PRIO band */ | 123 | __u8 priomap[TC_PRIO_MAX+1]; /* Map: logical priority -> PRIO band */ |
| 104 | }; | 124 | }; |
| 105 | 125 | ||
| 106 | enum | ||
| 107 | { | ||
| 108 | TCA_PRIO_UNSPEC, | ||
| 109 | TCA_PRIO_MQ, | ||
| 110 | __TCA_PRIO_MAX | ||
| 111 | }; | ||
| 112 | |||
| 113 | #define TCA_PRIO_MAX (__TCA_PRIO_MAX - 1) | ||
| 114 | |||
| 115 | /* TBF section */ | 126 | /* TBF section */ |
| 116 | 127 | ||
| 117 | struct tc_tbf_qopt | 128 | struct tc_tbf_qopt |
diff --git a/include/linux/ppp-comp.h b/include/linux/ppp-comp.h index e86a7a5cf355..b8d4ddd22736 100644 --- a/include/linux/ppp-comp.h +++ b/include/linux/ppp-comp.h | |||
| @@ -23,8 +23,6 @@ | |||
| 23 | * ON AN "AS IS" BASIS, AND THE AUSTRALIAN NATIONAL UNIVERSITY HAS NO | 23 | * ON AN "AS IS" BASIS, AND THE AUSTRALIAN NATIONAL UNIVERSITY HAS NO |
| 24 | * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, | 24 | * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, |
| 25 | * OR MODIFICATIONS. | 25 | * OR MODIFICATIONS. |
| 26 | * | ||
| 27 | * $Id: ppp-comp.h,v 1.6 1997/11/27 06:04:44 paulus Exp $ | ||
| 28 | */ | 26 | */ |
| 29 | 27 | ||
| 30 | /* | 28 | /* |
diff --git a/include/linux/ppp_defs.h b/include/linux/ppp_defs.h index c6b13ff85028..6e8adc77522c 100644 --- a/include/linux/ppp_defs.h +++ b/include/linux/ppp_defs.h | |||
| @@ -1,5 +1,3 @@ | |||
| 1 | /* $Id: ppp_defs.h,v 1.2 1994/09/21 01:31:06 paulus Exp $ */ | ||
| 2 | |||
| 3 | /* | 1 | /* |
| 4 | * ppp_defs.h - PPP definitions. | 2 | * ppp_defs.h - PPP definitions. |
| 5 | * | 3 | * |
diff --git a/include/linux/rfkill.h b/include/linux/rfkill.h index e3ab21d7fc7f..c5f6e54ec6ae 100644 --- a/include/linux/rfkill.h +++ b/include/linux/rfkill.h | |||
| @@ -34,26 +34,37 @@ | |||
| 34 | * RFKILL_TYPE_BLUETOOTH: switch is on a bluetooth device. | 34 | * RFKILL_TYPE_BLUETOOTH: switch is on a bluetooth device. |
| 35 | * RFKILL_TYPE_UWB: switch is on a ultra wideband device. | 35 | * RFKILL_TYPE_UWB: switch is on a ultra wideband device. |
| 36 | * RFKILL_TYPE_WIMAX: switch is on a WiMAX device. | 36 | * RFKILL_TYPE_WIMAX: switch is on a WiMAX device. |
| 37 | * RFKILL_TYPE_WWAN: switch is on a wireless WAN device. | ||
| 37 | */ | 38 | */ |
| 38 | enum rfkill_type { | 39 | enum rfkill_type { |
| 39 | RFKILL_TYPE_WLAN , | 40 | RFKILL_TYPE_WLAN , |
| 40 | RFKILL_TYPE_BLUETOOTH, | 41 | RFKILL_TYPE_BLUETOOTH, |
| 41 | RFKILL_TYPE_UWB, | 42 | RFKILL_TYPE_UWB, |
| 42 | RFKILL_TYPE_WIMAX, | 43 | RFKILL_TYPE_WIMAX, |
| 44 | RFKILL_TYPE_WWAN, | ||
| 43 | RFKILL_TYPE_MAX, | 45 | RFKILL_TYPE_MAX, |
| 44 | }; | 46 | }; |
| 45 | 47 | ||
| 46 | enum rfkill_state { | 48 | enum rfkill_state { |
| 47 | RFKILL_STATE_OFF = 0, | 49 | RFKILL_STATE_SOFT_BLOCKED = 0, /* Radio output blocked */ |
| 48 | RFKILL_STATE_ON = 1, | 50 | RFKILL_STATE_UNBLOCKED = 1, /* Radio output allowed */ |
| 51 | RFKILL_STATE_HARD_BLOCKED = 2, /* Output blocked, non-overrideable */ | ||
| 49 | }; | 52 | }; |
| 50 | 53 | ||
| 54 | /* | ||
| 55 | * These are DEPRECATED, drivers using them should be verified to | ||
| 56 | * comply with the rfkill usage guidelines in Documentation/rfkill.txt | ||
| 57 | * and then converted to use the new names for rfkill_state | ||
| 58 | */ | ||
| 59 | #define RFKILL_STATE_OFF RFKILL_STATE_SOFT_BLOCKED | ||
| 60 | #define RFKILL_STATE_ON RFKILL_STATE_UNBLOCKED | ||
| 61 | |||
| 51 | /** | 62 | /** |
| 52 | * struct rfkill - rfkill control structure. | 63 | * struct rfkill - rfkill control structure. |
| 53 | * @name: Name of the switch. | 64 | * @name: Name of the switch. |
| 54 | * @type: Radio type which the button controls, the value stored | 65 | * @type: Radio type which the button controls, the value stored |
| 55 | * here should be a value from enum rfkill_type. | 66 | * here should be a value from enum rfkill_type. |
| 56 | * @state: State of the switch (on/off). | 67 | * @state: State of the switch, "UNBLOCKED" means radio can operate. |
| 57 | * @user_claim_unsupported: Whether the hardware supports exclusive | 68 | * @user_claim_unsupported: Whether the hardware supports exclusive |
| 58 | * RF-kill control by userspace. Set this before registering. | 69 | * RF-kill control by userspace. Set this before registering. |
| 59 | * @user_claim: Set when the switch is controlled exlusively by userspace. | 70 | * @user_claim: Set when the switch is controlled exlusively by userspace. |
| @@ -61,6 +72,12 @@ enum rfkill_state { | |||
| 61 | * @data: Pointer to the RF button drivers private data which will be | 72 | * @data: Pointer to the RF button drivers private data which will be |
| 62 | * passed along when toggling radio state. | 73 | * passed along when toggling radio state. |
| 63 | * @toggle_radio(): Mandatory handler to control state of the radio. | 74 | * @toggle_radio(): Mandatory handler to control state of the radio. |
| 75 | * only RFKILL_STATE_SOFT_BLOCKED and RFKILL_STATE_UNBLOCKED are | ||
| 76 | * valid parameters. | ||
| 77 | * @get_state(): handler to read current radio state from hardware, | ||
| 78 | * may be called from atomic context, should return 0 on success. | ||
| 79 | * Either this handler OR judicious use of rfkill_force_state() is | ||
| 80 | * MANDATORY for any driver capable of RFKILL_STATE_HARD_BLOCKED. | ||
| 64 | * @led_trigger: A LED trigger for this button's LED. | 81 | * @led_trigger: A LED trigger for this button's LED. |
| 65 | * @dev: Device structure integrating the switch into device tree. | 82 | * @dev: Device structure integrating the switch into device tree. |
| 66 | * @node: Used to place switch into list of all switches known to the | 83 | * @node: Used to place switch into list of all switches known to the |
| @@ -80,6 +97,7 @@ struct rfkill { | |||
| 80 | 97 | ||
| 81 | void *data; | 98 | void *data; |
| 82 | int (*toggle_radio)(void *data, enum rfkill_state state); | 99 | int (*toggle_radio)(void *data, enum rfkill_state state); |
| 100 | int (*get_state)(void *data, enum rfkill_state *state); | ||
| 83 | 101 | ||
| 84 | #ifdef CONFIG_RFKILL_LEDS | 102 | #ifdef CONFIG_RFKILL_LEDS |
| 85 | struct led_trigger led_trigger; | 103 | struct led_trigger led_trigger; |
| @@ -95,6 +113,21 @@ void rfkill_free(struct rfkill *rfkill); | |||
| 95 | int rfkill_register(struct rfkill *rfkill); | 113 | int rfkill_register(struct rfkill *rfkill); |
| 96 | void rfkill_unregister(struct rfkill *rfkill); | 114 | void rfkill_unregister(struct rfkill *rfkill); |
| 97 | 115 | ||
| 116 | int rfkill_force_state(struct rfkill *rfkill, enum rfkill_state state); | ||
| 117 | |||
| 118 | /** | ||
| 119 | * rfkill_state_complement - return complementar state | ||
| 120 | * @state: state to return the complement of | ||
| 121 | * | ||
| 122 | * Returns RFKILL_STATE_SOFT_BLOCKED if @state is RFKILL_STATE_UNBLOCKED, | ||
| 123 | * returns RFKILL_STATE_UNBLOCKED otherwise. | ||
| 124 | */ | ||
| 125 | static inline enum rfkill_state rfkill_state_complement(enum rfkill_state state) | ||
| 126 | { | ||
| 127 | return (state == RFKILL_STATE_UNBLOCKED) ? | ||
| 128 | RFKILL_STATE_SOFT_BLOCKED : RFKILL_STATE_UNBLOCKED; | ||
| 129 | } | ||
| 130 | |||
| 98 | /** | 131 | /** |
| 99 | * rfkill_get_led_name - Get the LED trigger name for the button's LED. | 132 | * rfkill_get_led_name - Get the LED trigger name for the button's LED. |
| 100 | * This function might return a NULL pointer if registering of the | 133 | * This function might return a NULL pointer if registering of the |
| @@ -110,4 +143,11 @@ static inline char *rfkill_get_led_name(struct rfkill *rfkill) | |||
| 110 | #endif | 143 | #endif |
| 111 | } | 144 | } |
| 112 | 145 | ||
| 146 | /* rfkill notification chain */ | ||
| 147 | #define RFKILL_STATE_CHANGED 0x0001 /* state of a normal rfkill | ||
| 148 | switch has changed */ | ||
| 149 | |||
| 150 | int register_rfkill_notifier(struct notifier_block *nb); | ||
| 151 | int unregister_rfkill_notifier(struct notifier_block *nb); | ||
| 152 | |||
| 113 | #endif /* RFKILL_H */ | 153 | #endif /* RFKILL_H */ |
diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h index b358c704d102..f4d386c191f5 100644 --- a/include/linux/rtnetlink.h +++ b/include/linux/rtnetlink.h | |||
| @@ -482,6 +482,7 @@ enum | |||
| 482 | TCA_RATE, | 482 | TCA_RATE, |
| 483 | TCA_FCNT, | 483 | TCA_FCNT, |
| 484 | TCA_STATS2, | 484 | TCA_STATS2, |
| 485 | TCA_STAB, | ||
| 485 | __TCA_MAX | 486 | __TCA_MAX |
| 486 | }; | 487 | }; |
| 487 | 488 | ||
diff --git a/include/linux/seq_file_net.h b/include/linux/seq_file_net.h index 4ac52542a563..32c89bbe24a2 100644 --- a/include/linux/seq_file_net.h +++ b/include/linux/seq_file_net.h | |||
| @@ -14,7 +14,10 @@ struct seq_net_private { | |||
| 14 | 14 | ||
| 15 | int seq_open_net(struct inode *, struct file *, | 15 | int seq_open_net(struct inode *, struct file *, |
| 16 | const struct seq_operations *, int); | 16 | const struct seq_operations *, int); |
| 17 | int single_open_net(struct inode *, struct file *file, | ||
| 18 | int (*show)(struct seq_file *, void *)); | ||
| 17 | int seq_release_net(struct inode *, struct file *); | 19 | int seq_release_net(struct inode *, struct file *); |
| 20 | int single_release_net(struct inode *, struct file *); | ||
| 18 | static inline struct net *seq_file_net(struct seq_file *seq) | 21 | static inline struct net *seq_file_net(struct seq_file *seq) |
| 19 | { | 22 | { |
| 20 | #ifdef CONFIG_NET_NS | 23 | #ifdef CONFIG_NET_NS |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 299ec4b31412..7ea44f6621f2 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
| @@ -246,6 +246,7 @@ typedef unsigned char *sk_buff_data_t; | |||
| 246 | * @dma_cookie: a cookie to one of several possible DMA operations | 246 | * @dma_cookie: a cookie to one of several possible DMA operations |
| 247 | * done by skb DMA functions | 247 | * done by skb DMA functions |
| 248 | * @secmark: security marking | 248 | * @secmark: security marking |
| 249 | * @vlan_tci: vlan tag control information | ||
| 249 | */ | 250 | */ |
| 250 | 251 | ||
| 251 | struct sk_buff { | 252 | struct sk_buff { |
| @@ -305,9 +306,7 @@ struct sk_buff { | |||
| 305 | #endif | 306 | #endif |
| 306 | 307 | ||
| 307 | int iif; | 308 | int iif; |
| 308 | #ifdef CONFIG_NETDEVICES_MULTIQUEUE | ||
| 309 | __u16 queue_mapping; | 309 | __u16 queue_mapping; |
| 310 | #endif | ||
| 311 | #ifdef CONFIG_NET_SCHED | 310 | #ifdef CONFIG_NET_SCHED |
| 312 | __u16 tc_index; /* traffic control index */ | 311 | __u16 tc_index; /* traffic control index */ |
| 313 | #ifdef CONFIG_NET_CLS_ACT | 312 | #ifdef CONFIG_NET_CLS_ACT |
| @@ -328,6 +327,8 @@ struct sk_buff { | |||
| 328 | 327 | ||
| 329 | __u32 mark; | 328 | __u32 mark; |
| 330 | 329 | ||
| 330 | __u16 vlan_tci; | ||
| 331 | |||
| 331 | sk_buff_data_t transport_header; | 332 | sk_buff_data_t transport_header; |
| 332 | sk_buff_data_t network_header; | 333 | sk_buff_data_t network_header; |
| 333 | sk_buff_data_t mac_header; | 334 | sk_buff_data_t mac_header; |
| @@ -1671,25 +1672,17 @@ static inline void skb_init_secmark(struct sk_buff *skb) | |||
| 1671 | 1672 | ||
| 1672 | static inline void skb_set_queue_mapping(struct sk_buff *skb, u16 queue_mapping) | 1673 | static inline void skb_set_queue_mapping(struct sk_buff *skb, u16 queue_mapping) |
| 1673 | { | 1674 | { |
| 1674 | #ifdef CONFIG_NETDEVICES_MULTIQUEUE | ||
| 1675 | skb->queue_mapping = queue_mapping; | 1675 | skb->queue_mapping = queue_mapping; |
| 1676 | #endif | ||
| 1677 | } | 1676 | } |
| 1678 | 1677 | ||
| 1679 | static inline u16 skb_get_queue_mapping(struct sk_buff *skb) | 1678 | static inline u16 skb_get_queue_mapping(struct sk_buff *skb) |
| 1680 | { | 1679 | { |
| 1681 | #ifdef CONFIG_NETDEVICES_MULTIQUEUE | ||
| 1682 | return skb->queue_mapping; | 1680 | return skb->queue_mapping; |
| 1683 | #else | ||
| 1684 | return 0; | ||
| 1685 | #endif | ||
| 1686 | } | 1681 | } |
| 1687 | 1682 | ||
| 1688 | static inline void skb_copy_queue_mapping(struct sk_buff *to, const struct sk_buff *from) | 1683 | static inline void skb_copy_queue_mapping(struct sk_buff *to, const struct sk_buff *from) |
| 1689 | { | 1684 | { |
| 1690 | #ifdef CONFIG_NETDEVICES_MULTIQUEUE | ||
| 1691 | to->queue_mapping = from->queue_mapping; | 1685 | to->queue_mapping = from->queue_mapping; |
| 1692 | #endif | ||
| 1693 | } | 1686 | } |
| 1694 | 1687 | ||
| 1695 | static inline int skb_is_gso(const struct sk_buff *skb) | 1688 | static inline int skb_is_gso(const struct sk_buff *skb) |
| @@ -1702,6 +1695,20 @@ static inline int skb_is_gso_v6(const struct sk_buff *skb) | |||
| 1702 | return skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6; | 1695 | return skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6; |
| 1703 | } | 1696 | } |
| 1704 | 1697 | ||
| 1698 | extern void __skb_warn_lro_forwarding(const struct sk_buff *skb); | ||
| 1699 | |||
| 1700 | static inline bool skb_warn_if_lro(const struct sk_buff *skb) | ||
| 1701 | { | ||
| 1702 | /* LRO sets gso_size but not gso_type, whereas if GSO is really | ||
| 1703 | * wanted then gso_type will be set. */ | ||
| 1704 | struct skb_shared_info *shinfo = skb_shinfo(skb); | ||
| 1705 | if (shinfo->gso_size != 0 && unlikely(shinfo->gso_type == 0)) { | ||
| 1706 | __skb_warn_lro_forwarding(skb); | ||
| 1707 | return true; | ||
| 1708 | } | ||
| 1709 | return false; | ||
| 1710 | } | ||
| 1711 | |||
| 1705 | static inline void skb_forward_csum(struct sk_buff *skb) | 1712 | static inline void skb_forward_csum(struct sk_buff *skb) |
| 1706 | { | 1713 | { |
| 1707 | /* Unfortunately we don't support this one. Any brave souls? */ | 1714 | /* Unfortunately we don't support this one. Any brave souls? */ |
diff --git a/include/linux/smc911x.h b/include/linux/smc911x.h new file mode 100644 index 000000000000..b58f54c24183 --- /dev/null +++ b/include/linux/smc911x.h | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | #ifndef __SMC911X_H__ | ||
| 2 | #define __SMC911X_H__ | ||
| 3 | |||
| 4 | #define SMC911X_USE_16BIT (1 << 0) | ||
| 5 | #define SMC911X_USE_32BIT (1 << 1) | ||
| 6 | |||
| 7 | struct smc911x_platdata { | ||
| 8 | unsigned long flags; | ||
| 9 | unsigned long irq_flags; /* IRQF_... */ | ||
| 10 | }; | ||
| 11 | |||
| 12 | #endif /* __SMC911X_H__ */ | ||
diff --git a/include/linux/socket.h b/include/linux/socket.h index bd2b30a74e76..950af631e7fb 100644 --- a/include/linux/socket.h +++ b/include/linux/socket.h | |||
| @@ -306,10 +306,10 @@ extern int csum_partial_copy_fromiovecend(unsigned char *kdata, | |||
| 306 | int offset, | 306 | int offset, |
| 307 | unsigned int len, __wsum *csump); | 307 | unsigned int len, __wsum *csump); |
| 308 | 308 | ||
| 309 | extern int verify_iovec(struct msghdr *m, struct iovec *iov, char *address, int mode); | 309 | extern int verify_iovec(struct msghdr *m, struct iovec *iov, struct sockaddr *address, int mode); |
| 310 | extern int memcpy_toiovec(struct iovec *v, unsigned char *kdata, int len); | 310 | extern int memcpy_toiovec(struct iovec *v, unsigned char *kdata, int len); |
| 311 | extern int move_addr_to_user(void *kaddr, int klen, void __user *uaddr, int __user *ulen); | 311 | extern int move_addr_to_user(struct sockaddr *kaddr, int klen, void __user *uaddr, int __user *ulen); |
| 312 | extern int move_addr_to_kernel(void __user *uaddr, int ulen, void *kaddr); | 312 | extern int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr *kaddr); |
| 313 | extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data); | 313 | extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data); |
| 314 | 314 | ||
| 315 | #endif | 315 | #endif |
diff --git a/include/linux/sonet.h b/include/linux/sonet.h index 753680296e17..67ad11fcf88b 100644 --- a/include/linux/sonet.h +++ b/include/linux/sonet.h | |||
| @@ -34,7 +34,7 @@ struct sonet_stats { | |||
| 34 | /* clear error insertion */ | 34 | /* clear error insertion */ |
| 35 | #define SONET_GETDIAG _IOR('a',ATMIOC_PHYTYP+4,int) | 35 | #define SONET_GETDIAG _IOR('a',ATMIOC_PHYTYP+4,int) |
| 36 | /* query error insertion */ | 36 | /* query error insertion */ |
| 37 | #define SONET_SETFRAMING _IO('a',ATMIOC_PHYTYP+5) | 37 | #define SONET_SETFRAMING _IOW('a',ATMIOC_PHYTYP+5,int) |
| 38 | /* set framing mode (SONET/SDH) */ | 38 | /* set framing mode (SONET/SDH) */ |
| 39 | #define SONET_GETFRAMING _IOR('a',ATMIOC_PHYTYP+6,int) | 39 | #define SONET_GETFRAMING _IOR('a',ATMIOC_PHYTYP+6,int) |
| 40 | /* get framing mode */ | 40 | /* get framing mode */ |
diff --git a/include/linux/ssb/ssb.h b/include/linux/ssb/ssb.h index 50dfd0dc4093..4bf8cade9dbc 100644 --- a/include/linux/ssb/ssb.h +++ b/include/linux/ssb/ssb.h | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | #include <linux/spinlock.h> | 7 | #include <linux/spinlock.h> |
| 8 | #include <linux/pci.h> | 8 | #include <linux/pci.h> |
| 9 | #include <linux/mod_devicetable.h> | 9 | #include <linux/mod_devicetable.h> |
| 10 | #include <linux/dma-mapping.h> | ||
| 10 | 11 | ||
| 11 | #include <linux/ssb/ssb_regs.h> | 12 | #include <linux/ssb/ssb_regs.h> |
| 12 | 13 | ||
| @@ -137,9 +138,6 @@ struct ssb_device { | |||
| 137 | const struct ssb_bus_ops *ops; | 138 | const struct ssb_bus_ops *ops; |
| 138 | 139 | ||
| 139 | struct device *dev; | 140 | struct device *dev; |
| 140 | /* Pointer to the device that has to be used for | ||
| 141 | * any DMA related operation. */ | ||
| 142 | struct device *dma_dev; | ||
| 143 | 141 | ||
| 144 | struct ssb_bus *bus; | 142 | struct ssb_bus *bus; |
| 145 | struct ssb_device_id id; | 143 | struct ssb_device_id id; |
| @@ -399,13 +397,151 @@ static inline void ssb_block_write(struct ssb_device *dev, const void *buffer, | |||
| 399 | #endif /* CONFIG_SSB_BLOCKIO */ | 397 | #endif /* CONFIG_SSB_BLOCKIO */ |
| 400 | 398 | ||
| 401 | 399 | ||
| 400 | /* The SSB DMA API. Use this API for any DMA operation on the device. | ||
| 401 | * This API basically is a wrapper that calls the correct DMA API for | ||
| 402 | * the host device type the SSB device is attached to. */ | ||
| 403 | |||
| 402 | /* Translation (routing) bits that need to be ORed to DMA | 404 | /* Translation (routing) bits that need to be ORed to DMA |
| 403 | * addresses before they are given to a device. */ | 405 | * addresses before they are given to a device. */ |
| 404 | extern u32 ssb_dma_translation(struct ssb_device *dev); | 406 | extern u32 ssb_dma_translation(struct ssb_device *dev); |
| 405 | #define SSB_DMA_TRANSLATION_MASK 0xC0000000 | 407 | #define SSB_DMA_TRANSLATION_MASK 0xC0000000 |
| 406 | #define SSB_DMA_TRANSLATION_SHIFT 30 | 408 | #define SSB_DMA_TRANSLATION_SHIFT 30 |
| 407 | 409 | ||
| 408 | extern int ssb_dma_set_mask(struct ssb_device *ssb_dev, u64 mask); | 410 | extern int ssb_dma_set_mask(struct ssb_device *dev, u64 mask); |
| 411 | |||
| 412 | extern void * ssb_dma_alloc_consistent(struct ssb_device *dev, size_t size, | ||
| 413 | dma_addr_t *dma_handle, gfp_t gfp_flags); | ||
| 414 | extern void ssb_dma_free_consistent(struct ssb_device *dev, size_t size, | ||
| 415 | void *vaddr, dma_addr_t dma_handle, | ||
| 416 | gfp_t gfp_flags); | ||
| 417 | |||
| 418 | static inline void __cold __ssb_dma_not_implemented(struct ssb_device *dev) | ||
| 419 | { | ||
| 420 | #ifdef CONFIG_SSB_DEBUG | ||
| 421 | printk(KERN_ERR "SSB: BUG! Calling DMA API for " | ||
| 422 | "unsupported bustype %d\n", dev->bus->bustype); | ||
| 423 | #endif /* DEBUG */ | ||
| 424 | } | ||
| 425 | |||
| 426 | static inline int ssb_dma_mapping_error(struct ssb_device *dev, dma_addr_t addr) | ||
| 427 | { | ||
| 428 | switch (dev->bus->bustype) { | ||
| 429 | case SSB_BUSTYPE_PCI: | ||
| 430 | return pci_dma_mapping_error(addr); | ||
| 431 | case SSB_BUSTYPE_SSB: | ||
| 432 | return dma_mapping_error(addr); | ||
| 433 | default: | ||
| 434 | __ssb_dma_not_implemented(dev); | ||
| 435 | } | ||
| 436 | return -ENOSYS; | ||
| 437 | } | ||
| 438 | |||
| 439 | static inline dma_addr_t ssb_dma_map_single(struct ssb_device *dev, void *p, | ||
| 440 | size_t size, enum dma_data_direction dir) | ||
| 441 | { | ||
| 442 | switch (dev->bus->bustype) { | ||
| 443 | case SSB_BUSTYPE_PCI: | ||
| 444 | return pci_map_single(dev->bus->host_pci, p, size, dir); | ||
| 445 | case SSB_BUSTYPE_SSB: | ||
| 446 | return dma_map_single(dev->dev, p, size, dir); | ||
| 447 | default: | ||
| 448 | __ssb_dma_not_implemented(dev); | ||
| 449 | } | ||
| 450 | return 0; | ||
| 451 | } | ||
| 452 | |||
| 453 | static inline void ssb_dma_unmap_single(struct ssb_device *dev, dma_addr_t dma_addr, | ||
| 454 | size_t size, enum dma_data_direction dir) | ||
| 455 | { | ||
| 456 | switch (dev->bus->bustype) { | ||
| 457 | case SSB_BUSTYPE_PCI: | ||
| 458 | pci_unmap_single(dev->bus->host_pci, dma_addr, size, dir); | ||
| 459 | return; | ||
| 460 | case SSB_BUSTYPE_SSB: | ||
| 461 | dma_unmap_single(dev->dev, dma_addr, size, dir); | ||
| 462 | return; | ||
| 463 | default: | ||
| 464 | __ssb_dma_not_implemented(dev); | ||
| 465 | } | ||
| 466 | } | ||
| 467 | |||
| 468 | static inline void ssb_dma_sync_single_for_cpu(struct ssb_device *dev, | ||
| 469 | dma_addr_t dma_addr, | ||
| 470 | size_t size, | ||
| 471 | enum dma_data_direction dir) | ||
| 472 | { | ||
| 473 | switch (dev->bus->bustype) { | ||
| 474 | case SSB_BUSTYPE_PCI: | ||
| 475 | pci_dma_sync_single_for_cpu(dev->bus->host_pci, dma_addr, | ||
| 476 | size, dir); | ||
| 477 | return; | ||
| 478 | case SSB_BUSTYPE_SSB: | ||
| 479 | dma_sync_single_for_cpu(dev->dev, dma_addr, size, dir); | ||
| 480 | return; | ||
| 481 | default: | ||
| 482 | __ssb_dma_not_implemented(dev); | ||
| 483 | } | ||
| 484 | } | ||
| 485 | |||
| 486 | static inline void ssb_dma_sync_single_for_device(struct ssb_device *dev, | ||
| 487 | dma_addr_t dma_addr, | ||
| 488 | size_t size, | ||
| 489 | enum dma_data_direction dir) | ||
| 490 | { | ||
| 491 | switch (dev->bus->bustype) { | ||
| 492 | case SSB_BUSTYPE_PCI: | ||
| 493 | pci_dma_sync_single_for_device(dev->bus->host_pci, dma_addr, | ||
| 494 | size, dir); | ||
| 495 | return; | ||
| 496 | case SSB_BUSTYPE_SSB: | ||
| 497 | dma_sync_single_for_device(dev->dev, dma_addr, size, dir); | ||
| 498 | return; | ||
| 499 | default: | ||
| 500 | __ssb_dma_not_implemented(dev); | ||
| 501 | } | ||
| 502 | } | ||
| 503 | |||
| 504 | static inline void ssb_dma_sync_single_range_for_cpu(struct ssb_device *dev, | ||
| 505 | dma_addr_t dma_addr, | ||
| 506 | unsigned long offset, | ||
| 507 | size_t size, | ||
| 508 | enum dma_data_direction dir) | ||
| 509 | { | ||
| 510 | switch (dev->bus->bustype) { | ||
| 511 | case SSB_BUSTYPE_PCI: | ||
| 512 | /* Just sync everything. That's all the PCI API can do. */ | ||
| 513 | pci_dma_sync_single_for_cpu(dev->bus->host_pci, dma_addr, | ||
| 514 | offset + size, dir); | ||
| 515 | return; | ||
| 516 | case SSB_BUSTYPE_SSB: | ||
| 517 | dma_sync_single_range_for_cpu(dev->dev, dma_addr, offset, | ||
| 518 | size, dir); | ||
| 519 | return; | ||
| 520 | default: | ||
| 521 | __ssb_dma_not_implemented(dev); | ||
| 522 | } | ||
| 523 | } | ||
| 524 | |||
| 525 | static inline void ssb_dma_sync_single_range_for_device(struct ssb_device *dev, | ||
| 526 | dma_addr_t dma_addr, | ||
| 527 | unsigned long offset, | ||
| 528 | size_t size, | ||
| 529 | enum dma_data_direction dir) | ||
| 530 | { | ||
| 531 | switch (dev->bus->bustype) { | ||
| 532 | case SSB_BUSTYPE_PCI: | ||
| 533 | /* Just sync everything. That's all the PCI API can do. */ | ||
| 534 | pci_dma_sync_single_for_device(dev->bus->host_pci, dma_addr, | ||
| 535 | offset + size, dir); | ||
| 536 | return; | ||
| 537 | case SSB_BUSTYPE_SSB: | ||
| 538 | dma_sync_single_range_for_device(dev->dev, dma_addr, offset, | ||
| 539 | size, dir); | ||
| 540 | return; | ||
| 541 | default: | ||
| 542 | __ssb_dma_not_implemented(dev); | ||
| 543 | } | ||
| 544 | } | ||
| 409 | 545 | ||
| 410 | 546 | ||
| 411 | #ifdef CONFIG_SSB_PCIHOST | 547 | #ifdef CONFIG_SSB_PCIHOST |
diff --git a/include/linux/sunrpc/auth_gss.h b/include/linux/sunrpc/auth_gss.h index fec6899bf355..d48d4e605f74 100644 --- a/include/linux/sunrpc/auth_gss.h +++ b/include/linux/sunrpc/auth_gss.h | |||
| @@ -7,8 +7,6 @@ | |||
| 7 | * Andy Adamson <andros@umich.edu> | 7 | * Andy Adamson <andros@umich.edu> |
| 8 | * Bruce Fields <bfields@umich.edu> | 8 | * Bruce Fields <bfields@umich.edu> |
| 9 | * Copyright (c) 2000 The Regents of the University of Michigan | 9 | * Copyright (c) 2000 The Regents of the University of Michigan |
| 10 | * | ||
| 11 | * $Id$ | ||
| 12 | */ | 10 | */ |
| 13 | 11 | ||
| 14 | #ifndef _LINUX_SUNRPC_AUTH_GSS_H | 12 | #ifndef _LINUX_SUNRPC_AUTH_GSS_H |
diff --git a/include/linux/sunrpc/gss_api.h b/include/linux/sunrpc/gss_api.h index 459c5fc11d51..03f33330ece2 100644 --- a/include/linux/sunrpc/gss_api.h +++ b/include/linux/sunrpc/gss_api.h | |||
| @@ -7,8 +7,6 @@ | |||
| 7 | * Andy Adamson <andros@umich.edu> | 7 | * Andy Adamson <andros@umich.edu> |
| 8 | * Bruce Fields <bfields@umich.edu> | 8 | * Bruce Fields <bfields@umich.edu> |
| 9 | * Copyright (c) 2000 The Regents of the University of Michigan | 9 | * Copyright (c) 2000 The Regents of the University of Michigan |
| 10 | * | ||
| 11 | * $Id$ | ||
| 12 | */ | 10 | */ |
| 13 | 11 | ||
| 14 | #ifndef _LINUX_SUNRPC_GSS_API_H | 12 | #ifndef _LINUX_SUNRPC_GSS_API_H |
diff --git a/include/linux/sunrpc/svcauth_gss.h b/include/linux/sunrpc/svcauth_gss.h index 417a1def56db..c9165d9771a8 100644 --- a/include/linux/sunrpc/svcauth_gss.h +++ b/include/linux/sunrpc/svcauth_gss.h | |||
| @@ -3,9 +3,6 @@ | |||
| 3 | * | 3 | * |
| 4 | * Bruce Fields <bfields@umich.edu> | 4 | * Bruce Fields <bfields@umich.edu> |
| 5 | * Copyright (c) 2002 The Regents of the Unviersity of Michigan | 5 | * Copyright (c) 2002 The Regents of the Unviersity of Michigan |
| 6 | * | ||
| 7 | * $Id$ | ||
| 8 | * | ||
| 9 | */ | 6 | */ |
| 10 | 7 | ||
| 11 | #ifndef _LINUX_SUNRPC_SVCAUTH_GSS_H | 8 | #ifndef _LINUX_SUNRPC_SVCAUTH_GSS_H |
diff --git a/include/linux/tcp.h b/include/linux/tcp.h index b31b6b74aa28..2e2557388e36 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h | |||
| @@ -224,6 +224,12 @@ struct tcp_options_received { | |||
| 224 | u16 mss_clamp; /* Maximal mss, negotiated at connection setup */ | 224 | u16 mss_clamp; /* Maximal mss, negotiated at connection setup */ |
| 225 | }; | 225 | }; |
| 226 | 226 | ||
| 227 | /* This is the max number of SACKS that we'll generate and process. It's safe | ||
| 228 | * to increse this, although since: | ||
| 229 | * size = TCPOLEN_SACK_BASE_ALIGNED (4) + n * TCPOLEN_SACK_PERBLOCK (8) | ||
| 230 | * only four options will fit in a standard TCP header */ | ||
| 231 | #define TCP_NUM_SACKS 4 | ||
| 232 | |||
| 227 | struct tcp_request_sock { | 233 | struct tcp_request_sock { |
| 228 | struct inet_request_sock req; | 234 | struct inet_request_sock req; |
| 229 | #ifdef CONFIG_TCP_MD5SIG | 235 | #ifdef CONFIG_TCP_MD5SIG |
| @@ -291,10 +297,9 @@ struct tcp_sock { | |||
| 291 | u32 rcv_ssthresh; /* Current window clamp */ | 297 | u32 rcv_ssthresh; /* Current window clamp */ |
| 292 | 298 | ||
| 293 | u32 frto_highmark; /* snd_nxt when RTO occurred */ | 299 | u32 frto_highmark; /* snd_nxt when RTO occurred */ |
| 294 | u8 reordering; /* Packet reordering metric. */ | 300 | u16 advmss; /* Advertised MSS */ |
| 295 | u8 frto_counter; /* Number of new acks after RTO */ | 301 | u8 frto_counter; /* Number of new acks after RTO */ |
| 296 | u8 nonagle; /* Disable Nagle algorithm? */ | 302 | u8 nonagle; /* Disable Nagle algorithm? */ |
| 297 | u8 keepalive_probes; /* num of allowed keep alive probes */ | ||
| 298 | 303 | ||
| 299 | /* RTT measurement */ | 304 | /* RTT measurement */ |
| 300 | u32 srtt; /* smoothed round trip time << 3 */ | 305 | u32 srtt; /* smoothed round trip time << 3 */ |
| @@ -305,6 +310,10 @@ struct tcp_sock { | |||
| 305 | 310 | ||
| 306 | u32 packets_out; /* Packets which are "in flight" */ | 311 | u32 packets_out; /* Packets which are "in flight" */ |
| 307 | u32 retrans_out; /* Retransmitted packets out */ | 312 | u32 retrans_out; /* Retransmitted packets out */ |
| 313 | |||
| 314 | u16 urg_data; /* Saved octet of OOB data and control flags */ | ||
| 315 | u8 urg_mode; /* In urgent mode */ | ||
| 316 | u8 ecn_flags; /* ECN status bits. */ | ||
| 308 | /* | 317 | /* |
| 309 | * Options received (usually on last packet, some only on SYN packets). | 318 | * Options received (usually on last packet, some only on SYN packets). |
| 310 | */ | 319 | */ |
| @@ -320,13 +329,24 @@ struct tcp_sock { | |||
| 320 | u32 snd_cwnd_used; | 329 | u32 snd_cwnd_used; |
| 321 | u32 snd_cwnd_stamp; | 330 | u32 snd_cwnd_stamp; |
| 322 | 331 | ||
| 323 | struct sk_buff_head out_of_order_queue; /* Out of order segments go here */ | ||
| 324 | |||
| 325 | u32 rcv_wnd; /* Current receiver window */ | 332 | u32 rcv_wnd; /* Current receiver window */ |
| 326 | u32 write_seq; /* Tail(+1) of data held in tcp send buffer */ | 333 | u32 write_seq; /* Tail(+1) of data held in tcp send buffer */ |
| 327 | u32 pushed_seq; /* Last pushed seq, required to talk to windows */ | 334 | u32 pushed_seq; /* Last pushed seq, required to talk to windows */ |
| 335 | u32 lost_out; /* Lost packets */ | ||
| 336 | u32 sacked_out; /* SACK'd packets */ | ||
| 337 | u32 fackets_out; /* FACK'd packets */ | ||
| 338 | u32 tso_deferred; | ||
| 339 | u32 bytes_acked; /* Appropriate Byte Counting - RFC3465 */ | ||
| 328 | 340 | ||
| 329 | /* SACKs data */ | 341 | /* from STCP, retrans queue hinting */ |
| 342 | struct sk_buff* lost_skb_hint; | ||
| 343 | struct sk_buff *scoreboard_skb_hint; | ||
| 344 | struct sk_buff *retransmit_skb_hint; | ||
| 345 | struct sk_buff *forward_skb_hint; | ||
| 346 | |||
| 347 | struct sk_buff_head out_of_order_queue; /* Out of order segments go here */ | ||
| 348 | |||
| 349 | /* SACKs data, these 2 need to be together (see tcp_build_and_update_options) */ | ||
| 330 | struct tcp_sack_block duplicate_sack[1]; /* D-SACK block */ | 350 | struct tcp_sack_block duplicate_sack[1]; /* D-SACK block */ |
| 331 | struct tcp_sack_block selective_acks[4]; /* The SACKS themselves*/ | 351 | struct tcp_sack_block selective_acks[4]; /* The SACKS themselves*/ |
| 332 | 352 | ||
| @@ -337,23 +357,14 @@ struct tcp_sock { | |||
| 337 | * sacked_out > 0) | 357 | * sacked_out > 0) |
| 338 | */ | 358 | */ |
| 339 | 359 | ||
| 340 | /* from STCP, retrans queue hinting */ | ||
| 341 | struct sk_buff* lost_skb_hint; | ||
| 342 | |||
| 343 | struct sk_buff *scoreboard_skb_hint; | ||
| 344 | struct sk_buff *retransmit_skb_hint; | ||
| 345 | struct sk_buff *forward_skb_hint; | ||
| 346 | |||
| 347 | int lost_cnt_hint; | 360 | int lost_cnt_hint; |
| 348 | int retransmit_cnt_hint; | 361 | int retransmit_cnt_hint; |
| 349 | 362 | ||
| 350 | u32 lost_retrans_low; /* Sent seq after any rxmit (lowest) */ | 363 | u32 lost_retrans_low; /* Sent seq after any rxmit (lowest) */ |
| 351 | 364 | ||
| 352 | u16 advmss; /* Advertised MSS */ | 365 | u8 reordering; /* Packet reordering metric. */ |
| 366 | u8 keepalive_probes; /* num of allowed keep alive probes */ | ||
| 353 | u32 prior_ssthresh; /* ssthresh saved at recovery start */ | 367 | u32 prior_ssthresh; /* ssthresh saved at recovery start */ |
| 354 | u32 lost_out; /* Lost packets */ | ||
| 355 | u32 sacked_out; /* SACK'd packets */ | ||
| 356 | u32 fackets_out; /* FACK'd packets */ | ||
| 357 | u32 high_seq; /* snd_nxt at onset of congestion */ | 368 | u32 high_seq; /* snd_nxt at onset of congestion */ |
| 358 | 369 | ||
| 359 | u32 retrans_stamp; /* Timestamp of the last retransmit, | 370 | u32 retrans_stamp; /* Timestamp of the last retransmit, |
| @@ -361,23 +372,16 @@ struct tcp_sock { | |||
| 361 | * the first SYN. */ | 372 | * the first SYN. */ |
| 362 | u32 undo_marker; /* tracking retrans started here. */ | 373 | u32 undo_marker; /* tracking retrans started here. */ |
| 363 | int undo_retrans; /* number of undoable retransmissions. */ | 374 | int undo_retrans; /* number of undoable retransmissions. */ |
| 375 | u32 total_retrans; /* Total retransmits for entire connection */ | ||
| 376 | |||
| 364 | u32 urg_seq; /* Seq of received urgent pointer */ | 377 | u32 urg_seq; /* Seq of received urgent pointer */ |
| 365 | u16 urg_data; /* Saved octet of OOB data and control flags */ | ||
| 366 | u8 urg_mode; /* In urgent mode */ | ||
| 367 | u8 ecn_flags; /* ECN status bits. */ | ||
| 368 | u32 snd_up; /* Urgent pointer */ | 378 | u32 snd_up; /* Urgent pointer */ |
| 369 | 379 | ||
| 370 | u32 total_retrans; /* Total retransmits for entire connection */ | ||
| 371 | u32 bytes_acked; /* Appropriate Byte Counting - RFC3465 */ | ||
| 372 | |||
| 373 | unsigned int keepalive_time; /* time before keep alive takes place */ | 380 | unsigned int keepalive_time; /* time before keep alive takes place */ |
| 374 | unsigned int keepalive_intvl; /* time interval between keep alive probes */ | 381 | unsigned int keepalive_intvl; /* time interval between keep alive probes */ |
| 375 | int linger2; | ||
| 376 | 382 | ||
| 377 | unsigned long last_synq_overflow; | 383 | unsigned long last_synq_overflow; |
| 378 | 384 | ||
| 379 | u32 tso_deferred; | ||
| 380 | |||
| 381 | /* Receiver side RTT estimation */ | 385 | /* Receiver side RTT estimation */ |
| 382 | struct { | 386 | struct { |
| 383 | u32 rtt; | 387 | u32 rtt; |
| @@ -405,6 +409,8 @@ struct tcp_sock { | |||
| 405 | /* TCP MD5 Signagure Option information */ | 409 | /* TCP MD5 Signagure Option information */ |
| 406 | struct tcp_md5sig_info *md5sig_info; | 410 | struct tcp_md5sig_info *md5sig_info; |
| 407 | #endif | 411 | #endif |
| 412 | |||
| 413 | int linger2; | ||
| 408 | }; | 414 | }; |
| 409 | 415 | ||
| 410 | static inline struct tcp_sock *tcp_sk(const struct sock *sk) | 416 | static inline struct tcp_sock *tcp_sk(const struct sock *sk) |
diff --git a/include/linux/textsearch.h b/include/linux/textsearch.h index 6f371f24160b..d9a85d616385 100644 --- a/include/linux/textsearch.h +++ b/include/linux/textsearch.h | |||
| @@ -10,10 +10,8 @@ | |||
| 10 | 10 | ||
| 11 | struct ts_config; | 11 | struct ts_config; |
| 12 | 12 | ||
| 13 | /** | 13 | #define TS_AUTOLOAD 1 /* Automatically load textsearch modules when needed */ |
| 14 | * TS_AUTOLOAD - Automatically load textsearch modules when needed | 14 | #define TS_IGNORECASE 2 /* Searches string case insensitively */ |
| 15 | */ | ||
| 16 | #define TS_AUTOLOAD 1 | ||
| 17 | 15 | ||
| 18 | /** | 16 | /** |
| 19 | * struct ts_state - search state | 17 | * struct ts_state - search state |
| @@ -39,7 +37,7 @@ struct ts_state | |||
| 39 | struct ts_ops | 37 | struct ts_ops |
| 40 | { | 38 | { |
| 41 | const char *name; | 39 | const char *name; |
| 42 | struct ts_config * (*init)(const void *, unsigned int, gfp_t); | 40 | struct ts_config * (*init)(const void *, unsigned int, gfp_t, int); |
| 43 | unsigned int (*find)(struct ts_config *, | 41 | unsigned int (*find)(struct ts_config *, |
| 44 | struct ts_state *); | 42 | struct ts_state *); |
| 45 | void (*destroy)(struct ts_config *); | 43 | void (*destroy)(struct ts_config *); |
| @@ -52,12 +50,14 @@ struct ts_ops | |||
| 52 | /** | 50 | /** |
| 53 | * struct ts_config - search configuration | 51 | * struct ts_config - search configuration |
| 54 | * @ops: operations of chosen algorithm | 52 | * @ops: operations of chosen algorithm |
| 53 | * @flags: flags | ||
| 55 | * @get_next_block: callback to fetch the next block to search in | 54 | * @get_next_block: callback to fetch the next block to search in |
| 56 | * @finish: callback to finalize a search | 55 | * @finish: callback to finalize a search |
| 57 | */ | 56 | */ |
| 58 | struct ts_config | 57 | struct ts_config |
| 59 | { | 58 | { |
| 60 | struct ts_ops *ops; | 59 | struct ts_ops *ops; |
| 60 | int flags; | ||
| 61 | 61 | ||
| 62 | /** | 62 | /** |
| 63 | * get_next_block - fetch next block of data | 63 | * get_next_block - fetch next block of data |
| @@ -162,11 +162,10 @@ static inline struct ts_config *alloc_ts_config(size_t payload, | |||
| 162 | { | 162 | { |
| 163 | struct ts_config *conf; | 163 | struct ts_config *conf; |
| 164 | 164 | ||
| 165 | conf = kmalloc(TS_PRIV_ALIGN(sizeof(*conf)) + payload, gfp_mask); | 165 | conf = kzalloc(TS_PRIV_ALIGN(sizeof(*conf)) + payload, gfp_mask); |
| 166 | if (conf == NULL) | 166 | if (conf == NULL) |
| 167 | return ERR_PTR(-ENOMEM); | 167 | return ERR_PTR(-ENOMEM); |
| 168 | 168 | ||
| 169 | memset(conf, 0, TS_PRIV_ALIGN(sizeof(*conf)) + payload); | ||
| 170 | return conf; | 169 | return conf; |
| 171 | } | 170 | } |
| 172 | 171 | ||
diff --git a/include/linux/tipc_config.h b/include/linux/tipc_config.h index b0c916d1f375..2bc6fa4adeb5 100644 --- a/include/linux/tipc_config.h +++ b/include/linux/tipc_config.h | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | * include/linux/tipc_config.h: Include file for TIPC configuration interface | 2 | * include/linux/tipc_config.h: Include file for TIPC configuration interface |
| 3 | * | 3 | * |
| 4 | * Copyright (c) 2003-2006, Ericsson AB | 4 | * Copyright (c) 2003-2006, Ericsson AB |
| 5 | * Copyright (c) 2005, Wind River Systems | 5 | * Copyright (c) 2005-2007, Wind River Systems |
| 6 | * All rights reserved. | 6 | * All rights reserved. |
| 7 | * | 7 | * |
| 8 | * Redistribution and use in source and binary forms, with or without | 8 | * Redistribution and use in source and binary forms, with or without |
| @@ -136,6 +136,14 @@ | |||
| 136 | #define TIPC_CMD_SET_NETID 0x800B /* tx unsigned, rx none */ | 136 | #define TIPC_CMD_SET_NETID 0x800B /* tx unsigned, rx none */ |
| 137 | 137 | ||
| 138 | /* | 138 | /* |
| 139 | * Reserved commands: | ||
| 140 | * May not be issued by any process. | ||
| 141 | * Used internally by TIPC. | ||
| 142 | */ | ||
| 143 | |||
| 144 | #define TIPC_CMD_NOT_NET_ADMIN 0xC001 /* tx none, rx none */ | ||
| 145 | |||
| 146 | /* | ||
| 139 | * TLV types defined for TIPC | 147 | * TLV types defined for TIPC |
| 140 | */ | 148 | */ |
| 141 | 149 | ||
diff --git a/include/linux/udp.h b/include/linux/udp.h index 581ca2c14c52..0cf5c4c0ec81 100644 --- a/include/linux/udp.h +++ b/include/linux/udp.h | |||
| @@ -38,6 +38,7 @@ struct udphdr { | |||
| 38 | #ifdef __KERNEL__ | 38 | #ifdef __KERNEL__ |
| 39 | #include <net/inet_sock.h> | 39 | #include <net/inet_sock.h> |
| 40 | #include <linux/skbuff.h> | 40 | #include <linux/skbuff.h> |
| 41 | #include <net/netns/hash.h> | ||
| 41 | 42 | ||
| 42 | static inline struct udphdr *udp_hdr(const struct sk_buff *skb) | 43 | static inline struct udphdr *udp_hdr(const struct sk_buff *skb) |
| 43 | { | 44 | { |
| @@ -46,6 +47,11 @@ static inline struct udphdr *udp_hdr(const struct sk_buff *skb) | |||
| 46 | 47 | ||
| 47 | #define UDP_HTABLE_SIZE 128 | 48 | #define UDP_HTABLE_SIZE 128 |
| 48 | 49 | ||
| 50 | static inline int udp_hashfn(struct net *net, const unsigned num) | ||
| 51 | { | ||
| 52 | return (num + net_hash_mix(net)) & (UDP_HTABLE_SIZE - 1); | ||
| 53 | } | ||
| 54 | |||
| 49 | struct udp_sock { | 55 | struct udp_sock { |
| 50 | /* inet_sock has to be the first member */ | 56 | /* inet_sock has to be the first member */ |
| 51 | struct inet_sock inet; | 57 | struct inet_sock inet; |
diff --git a/include/linux/usb/rndis_host.h b/include/linux/usb/rndis_host.h index 29d6458ecb8d..0a6e6d4b929a 100644 --- a/include/linux/usb/rndis_host.h +++ b/include/linux/usb/rndis_host.h | |||
| @@ -260,7 +260,8 @@ struct rndis_keepalive_c { /* IN (optionally OUT) */ | |||
| 260 | 260 | ||
| 261 | 261 | ||
| 262 | extern void rndis_status(struct usbnet *dev, struct urb *urb); | 262 | extern void rndis_status(struct usbnet *dev, struct urb *urb); |
| 263 | extern int rndis_command(struct usbnet *dev, struct rndis_msg_hdr *buf); | 263 | extern int |
| 264 | rndis_command(struct usbnet *dev, struct rndis_msg_hdr *buf, int buflen); | ||
| 264 | extern int | 265 | extern int |
| 265 | generic_rndis_bind(struct usbnet *dev, struct usb_interface *intf, int flags); | 266 | generic_rndis_bind(struct usbnet *dev, struct usb_interface *intf, int flags); |
| 266 | extern void rndis_unbind(struct usbnet *dev, struct usb_interface *intf); | 267 | extern void rndis_unbind(struct usbnet *dev, struct usb_interface *intf); |
diff --git a/include/linux/wanrouter.h b/include/linux/wanrouter.h index 3add87465b1f..e0aa39612eba 100644 --- a/include/linux/wanrouter.h +++ b/include/linux/wanrouter.h | |||
| @@ -522,7 +522,7 @@ extern int wanrouter_proc_init(void); | |||
| 522 | extern void wanrouter_proc_cleanup(void); | 522 | extern void wanrouter_proc_cleanup(void); |
| 523 | extern int wanrouter_proc_add(struct wan_device *wandev); | 523 | extern int wanrouter_proc_add(struct wan_device *wandev); |
| 524 | extern int wanrouter_proc_delete(struct wan_device *wandev); | 524 | extern int wanrouter_proc_delete(struct wan_device *wandev); |
| 525 | extern int wanrouter_ioctl( struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg); | 525 | extern long wanrouter_ioctl(struct file *file, unsigned int cmd, unsigned long arg); |
| 526 | 526 | ||
| 527 | /* Public Data */ | 527 | /* Public Data */ |
| 528 | /* list of registered devices */ | 528 | /* list of registered devices */ |
diff --git a/include/linux/wireless.h b/include/linux/wireless.h index 0a9b5b41ed67..d7958f9b52cb 100644 --- a/include/linux/wireless.h +++ b/include/linux/wireless.h | |||
| @@ -611,6 +611,7 @@ | |||
| 611 | #define IW_ENCODE_ALG_WEP 1 | 611 | #define IW_ENCODE_ALG_WEP 1 |
| 612 | #define IW_ENCODE_ALG_TKIP 2 | 612 | #define IW_ENCODE_ALG_TKIP 2 |
| 613 | #define IW_ENCODE_ALG_CCMP 3 | 613 | #define IW_ENCODE_ALG_CCMP 3 |
| 614 | #define IW_ENCODE_ALG_PMK 4 | ||
| 614 | /* struct iw_encode_ext ->ext_flags */ | 615 | /* struct iw_encode_ext ->ext_flags */ |
| 615 | #define IW_ENCODE_EXT_TX_SEQ_VALID 0x00000001 | 616 | #define IW_ENCODE_EXT_TX_SEQ_VALID 0x00000001 |
| 616 | #define IW_ENCODE_EXT_RX_SEQ_VALID 0x00000002 | 617 | #define IW_ENCODE_EXT_RX_SEQ_VALID 0x00000002 |
| @@ -630,6 +631,7 @@ | |||
| 630 | #define IW_ENC_CAPA_WPA2 0x00000002 | 631 | #define IW_ENC_CAPA_WPA2 0x00000002 |
| 631 | #define IW_ENC_CAPA_CIPHER_TKIP 0x00000004 | 632 | #define IW_ENC_CAPA_CIPHER_TKIP 0x00000004 |
| 632 | #define IW_ENC_CAPA_CIPHER_CCMP 0x00000008 | 633 | #define IW_ENC_CAPA_CIPHER_CCMP 0x00000008 |
| 634 | #define IW_ENC_CAPA_4WAY_HANDSHAKE 0x00000010 | ||
| 633 | 635 | ||
| 634 | /* Event capability macros - in (struct iw_range *)->event_capa | 636 | /* Event capability macros - in (struct iw_range *)->event_capa |
| 635 | * Because we have more than 32 possible events, we use an array of | 637 | * Because we have more than 32 possible events, we use an array of |
| @@ -675,6 +677,19 @@ struct iw_point | |||
| 675 | __u16 flags; /* Optional params */ | 677 | __u16 flags; /* Optional params */ |
| 676 | }; | 678 | }; |
| 677 | 679 | ||
| 680 | #ifdef __KERNEL__ | ||
| 681 | #ifdef CONFIG_COMPAT | ||
| 682 | |||
| 683 | #include <linux/compat.h> | ||
| 684 | |||
| 685 | struct compat_iw_point { | ||
| 686 | compat_caddr_t pointer; | ||
| 687 | __u16 length; | ||
| 688 | __u16 flags; | ||
| 689 | }; | ||
| 690 | #endif | ||
| 691 | #endif | ||
| 692 | |||
| 678 | /* | 693 | /* |
| 679 | * A frequency | 694 | * A frequency |
| 680 | * For numbers lower than 10^9, we encode the number in 'm' and | 695 | * For numbers lower than 10^9, we encode the number in 'm' and |
| @@ -1098,6 +1113,21 @@ struct iw_event | |||
| 1098 | #define IW_EV_POINT_LEN (IW_EV_LCP_LEN + sizeof(struct iw_point) - \ | 1113 | #define IW_EV_POINT_LEN (IW_EV_LCP_LEN + sizeof(struct iw_point) - \ |
| 1099 | IW_EV_POINT_OFF) | 1114 | IW_EV_POINT_OFF) |
| 1100 | 1115 | ||
| 1116 | #ifdef __KERNEL__ | ||
| 1117 | #ifdef CONFIG_COMPAT | ||
| 1118 | struct __compat_iw_event { | ||
| 1119 | __u16 len; /* Real length of this stuff */ | ||
| 1120 | __u16 cmd; /* Wireless IOCTL */ | ||
| 1121 | compat_caddr_t pointer; | ||
| 1122 | }; | ||
| 1123 | #define IW_EV_COMPAT_LCP_LEN offsetof(struct __compat_iw_event, pointer) | ||
| 1124 | #define IW_EV_COMPAT_POINT_OFF offsetof(struct compat_iw_point, length) | ||
| 1125 | #define IW_EV_COMPAT_POINT_LEN \ | ||
| 1126 | (IW_EV_COMPAT_LCP_LEN + sizeof(struct compat_iw_point) - \ | ||
| 1127 | IW_EV_COMPAT_POINT_OFF) | ||
| 1128 | #endif | ||
| 1129 | #endif | ||
| 1130 | |||
| 1101 | /* Size of the Event prefix when packed in stream */ | 1131 | /* Size of the Event prefix when packed in stream */ |
| 1102 | #define IW_EV_LCP_PK_LEN (4) | 1132 | #define IW_EV_LCP_PK_LEN (4) |
| 1103 | /* Size of the various events when packed in stream */ | 1133 | /* Size of the various events when packed in stream */ |
