mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-23 23:42:43 +00:00
mac80211: assume 2-byte aligning for 802.11 packets, slightly improves code size and performance
SVN-Revision: 34910
This commit is contained in:
parent
41a039f464
commit
29d737a976
@ -28,6 +28,33 @@
|
|||||||
if (rate_flags & IEEE80211_TX_RC_USE_RTS_CTS) {
|
if (rate_flags & IEEE80211_TX_RC_USE_RTS_CTS) {
|
||||||
--- a/include/net/mac80211.h
|
--- a/include/net/mac80211.h
|
||||||
+++ b/include/net/mac80211.h
|
+++ b/include/net/mac80211.h
|
||||||
|
@@ -173,7 +173,7 @@ struct ieee80211_chanctx_conf {
|
||||||
|
|
||||||
|
u8 rx_chains_static, rx_chains_dynamic;
|
||||||
|
|
||||||
|
- u8 drv_priv[0] __attribute__((__aligned__(sizeof(void *))));
|
||||||
|
+ u8 drv_priv[0] __aligned(sizeof(void *));
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
@@ -1059,7 +1059,7 @@ struct ieee80211_vif {
|
||||||
|
u32 driver_flags;
|
||||||
|
|
||||||
|
/* must be last */
|
||||||
|
- u8 drv_priv[0] __attribute__((__aligned__(sizeof(void *))));
|
||||||
|
+ u8 drv_priv[0] __aligned(sizeof(void *));
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline bool ieee80211_vif_is_mesh(struct ieee80211_vif *vif)
|
||||||
|
@@ -1209,7 +1209,7 @@ struct ieee80211_sta {
|
||||||
|
u8 max_sp;
|
||||||
|
|
||||||
|
/* must be last */
|
||||||
|
- u8 drv_priv[0] __attribute__((__aligned__(sizeof(void *))));
|
||||||
|
+ u8 drv_priv[0] __aligned(sizeof(void *));
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
@@ -1369,6 +1369,10 @@ struct ieee80211_tx_control {
|
@@ -1369,6 +1369,10 @@ struct ieee80211_tx_control {
|
||||||
* @IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF: Use the P2P Device address for any
|
* @IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF: Use the P2P Device address for any
|
||||||
* P2P Interface. This will be honoured even if more than one interface
|
* P2P Interface. This will be honoured even if more than one interface
|
||||||
@ -826,3 +853,354 @@
|
|||||||
|
|
||||||
void ieee80211_recalc_smps_chanctx(struct ieee80211_local *local,
|
void ieee80211_recalc_smps_chanctx(struct ieee80211_local *local,
|
||||||
struct ieee80211_chanctx *chanctx);
|
struct ieee80211_chanctx *chanctx);
|
||||||
|
--- a/include/linux/ieee80211.h
|
||||||
|
+++ b/include/linux/ieee80211.h
|
||||||
|
@@ -180,7 +180,7 @@ struct ieee80211_hdr {
|
||||||
|
u8 addr3[6];
|
||||||
|
__le16 seq_ctrl;
|
||||||
|
u8 addr4[6];
|
||||||
|
-} __attribute__ ((packed));
|
||||||
|
+} __packed;
|
||||||
|
|
||||||
|
struct ieee80211_hdr_3addr {
|
||||||
|
__le16 frame_control;
|
||||||
|
@@ -189,7 +189,7 @@ struct ieee80211_hdr_3addr {
|
||||||
|
u8 addr2[6];
|
||||||
|
u8 addr3[6];
|
||||||
|
__le16 seq_ctrl;
|
||||||
|
-} __attribute__ ((packed));
|
||||||
|
+} __packed;
|
||||||
|
|
||||||
|
struct ieee80211_qos_hdr {
|
||||||
|
__le16 frame_control;
|
||||||
|
@@ -199,7 +199,7 @@ struct ieee80211_qos_hdr {
|
||||||
|
u8 addr3[6];
|
||||||
|
__le16 seq_ctrl;
|
||||||
|
__le16 qos_ctrl;
|
||||||
|
-} __attribute__ ((packed));
|
||||||
|
+} __packed;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ieee80211_has_tods - check if IEEE80211_FCTL_TODS is set
|
||||||
|
@@ -576,7 +576,7 @@ struct ieee80211s_hdr {
|
||||||
|
__le32 seqnum;
|
||||||
|
u8 eaddr1[6];
|
||||||
|
u8 eaddr2[6];
|
||||||
|
-} __attribute__ ((packed));
|
||||||
|
+} __packed;
|
||||||
|
|
||||||
|
/* Mesh flags */
|
||||||
|
#define MESH_FLAGS_AE_A4 0x1
|
||||||
|
@@ -614,7 +614,7 @@ struct ieee80211_quiet_ie {
|
||||||
|
u8 period;
|
||||||
|
__le16 duration;
|
||||||
|
__le16 offset;
|
||||||
|
-} __attribute__ ((packed));
|
||||||
|
+} __packed;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct ieee80211_msrment_ie
|
||||||
|
@@ -626,7 +626,7 @@ struct ieee80211_msrment_ie {
|
||||||
|
u8 mode;
|
||||||
|
u8 type;
|
||||||
|
u8 request[0];
|
||||||
|
-} __attribute__ ((packed));
|
||||||
|
+} __packed;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct ieee80211_channel_sw_ie
|
||||||
|
@@ -637,7 +637,7 @@ struct ieee80211_channel_sw_ie {
|
||||||
|
u8 mode;
|
||||||
|
u8 new_ch_num;
|
||||||
|
u8 count;
|
||||||
|
-} __attribute__ ((packed));
|
||||||
|
+} __packed;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct ieee80211_tim
|
||||||
|
@@ -650,7 +650,7 @@ struct ieee80211_tim_ie {
|
||||||
|
u8 bitmap_ctrl;
|
||||||
|
/* variable size: 1 - 251 bytes */
|
||||||
|
u8 virtual_map[1];
|
||||||
|
-} __attribute__ ((packed));
|
||||||
|
+} __packed;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct ieee80211_meshconf_ie
|
||||||
|
@@ -665,7 +665,7 @@ struct ieee80211_meshconf_ie {
|
||||||
|
u8 meshconf_auth;
|
||||||
|
u8 meshconf_form;
|
||||||
|
u8 meshconf_cap;
|
||||||
|
-} __attribute__ ((packed));
|
||||||
|
+} __packed;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enum mesh_config_capab_flags - Mesh Configuration IE capability field flags
|
||||||
|
@@ -695,7 +695,7 @@ struct ieee80211_rann_ie {
|
||||||
|
__le32 rann_seq;
|
||||||
|
__le32 rann_interval;
|
||||||
|
__le32 rann_metric;
|
||||||
|
-} __attribute__ ((packed));
|
||||||
|
+} __packed;
|
||||||
|
|
||||||
|
enum ieee80211_rann_flags {
|
||||||
|
RANN_FLAG_IS_GATE = 1 << 0,
|
||||||
|
@@ -717,33 +717,33 @@ struct ieee80211_mgmt {
|
||||||
|
__le16 status_code;
|
||||||
|
/* possibly followed by Challenge text */
|
||||||
|
u8 variable[0];
|
||||||
|
- } __attribute__ ((packed)) auth;
|
||||||
|
+ } __packed auth;
|
||||||
|
struct {
|
||||||
|
__le16 reason_code;
|
||||||
|
- } __attribute__ ((packed)) deauth;
|
||||||
|
+ } __packed deauth;
|
||||||
|
struct {
|
||||||
|
__le16 capab_info;
|
||||||
|
__le16 listen_interval;
|
||||||
|
/* followed by SSID and Supported rates */
|
||||||
|
u8 variable[0];
|
||||||
|
- } __attribute__ ((packed)) assoc_req;
|
||||||
|
+ } __packed assoc_req;
|
||||||
|
struct {
|
||||||
|
__le16 capab_info;
|
||||||
|
__le16 status_code;
|
||||||
|
__le16 aid;
|
||||||
|
/* followed by Supported rates */
|
||||||
|
u8 variable[0];
|
||||||
|
- } __attribute__ ((packed)) assoc_resp, reassoc_resp;
|
||||||
|
+ } __packed assoc_resp, reassoc_resp;
|
||||||
|
struct {
|
||||||
|
__le16 capab_info;
|
||||||
|
__le16 listen_interval;
|
||||||
|
u8 current_ap[6];
|
||||||
|
/* followed by SSID and Supported rates */
|
||||||
|
u8 variable[0];
|
||||||
|
- } __attribute__ ((packed)) reassoc_req;
|
||||||
|
+ } __packed reassoc_req;
|
||||||
|
struct {
|
||||||
|
__le16 reason_code;
|
||||||
|
- } __attribute__ ((packed)) disassoc;
|
||||||
|
+ } __packed disassoc;
|
||||||
|
struct {
|
||||||
|
__le64 timestamp;
|
||||||
|
__le16 beacon_int;
|
||||||
|
@@ -751,11 +751,11 @@ struct ieee80211_mgmt {
|
||||||
|
/* followed by some of SSID, Supported rates,
|
||||||
|
* FH Params, DS Params, CF Params, IBSS Params, TIM */
|
||||||
|
u8 variable[0];
|
||||||
|
- } __attribute__ ((packed)) beacon;
|
||||||
|
+ } __packed beacon;
|
||||||
|
struct {
|
||||||
|
/* only variable items: SSID, Supported rates */
|
||||||
|
u8 variable[0];
|
||||||
|
- } __attribute__ ((packed)) probe_req;
|
||||||
|
+ } __packed probe_req;
|
||||||
|
struct {
|
||||||
|
__le64 timestamp;
|
||||||
|
__le16 beacon_int;
|
||||||
|
@@ -763,7 +763,7 @@ struct ieee80211_mgmt {
|
||||||
|
/* followed by some of SSID, Supported rates,
|
||||||
|
* FH Params, DS Params, CF Params, IBSS Params */
|
||||||
|
u8 variable[0];
|
||||||
|
- } __attribute__ ((packed)) probe_resp;
|
||||||
|
+ } __packed probe_resp;
|
||||||
|
struct {
|
||||||
|
u8 category;
|
||||||
|
union {
|
||||||
|
@@ -772,55 +772,55 @@ struct ieee80211_mgmt {
|
||||||
|
u8 dialog_token;
|
||||||
|
u8 status_code;
|
||||||
|
u8 variable[0];
|
||||||
|
- } __attribute__ ((packed)) wme_action;
|
||||||
|
+ } __packed wme_action;
|
||||||
|
struct{
|
||||||
|
u8 action_code;
|
||||||
|
u8 element_id;
|
||||||
|
u8 length;
|
||||||
|
struct ieee80211_channel_sw_ie sw_elem;
|
||||||
|
- } __attribute__((packed)) chan_switch;
|
||||||
|
+ } __packed chan_switch;
|
||||||
|
struct{
|
||||||
|
u8 action_code;
|
||||||
|
u8 dialog_token;
|
||||||
|
u8 element_id;
|
||||||
|
u8 length;
|
||||||
|
struct ieee80211_msrment_ie msr_elem;
|
||||||
|
- } __attribute__((packed)) measurement;
|
||||||
|
+ } __packed measurement;
|
||||||
|
struct{
|
||||||
|
u8 action_code;
|
||||||
|
u8 dialog_token;
|
||||||
|
__le16 capab;
|
||||||
|
__le16 timeout;
|
||||||
|
__le16 start_seq_num;
|
||||||
|
- } __attribute__((packed)) addba_req;
|
||||||
|
+ } __packed addba_req;
|
||||||
|
struct{
|
||||||
|
u8 action_code;
|
||||||
|
u8 dialog_token;
|
||||||
|
__le16 status;
|
||||||
|
__le16 capab;
|
||||||
|
__le16 timeout;
|
||||||
|
- } __attribute__((packed)) addba_resp;
|
||||||
|
+ } __packed addba_resp;
|
||||||
|
struct{
|
||||||
|
u8 action_code;
|
||||||
|
__le16 params;
|
||||||
|
__le16 reason_code;
|
||||||
|
- } __attribute__((packed)) delba;
|
||||||
|
+ } __packed delba;
|
||||||
|
struct {
|
||||||
|
u8 action_code;
|
||||||
|
u8 variable[0];
|
||||||
|
- } __attribute__((packed)) self_prot;
|
||||||
|
+ } __packed self_prot;
|
||||||
|
struct{
|
||||||
|
u8 action_code;
|
||||||
|
u8 variable[0];
|
||||||
|
- } __attribute__((packed)) mesh_action;
|
||||||
|
+ } __packed mesh_action;
|
||||||
|
struct {
|
||||||
|
u8 action;
|
||||||
|
u8 trans_id[WLAN_SA_QUERY_TR_ID_LEN];
|
||||||
|
- } __attribute__ ((packed)) sa_query;
|
||||||
|
+ } __packed sa_query;
|
||||||
|
struct {
|
||||||
|
u8 action;
|
||||||
|
u8 smps_control;
|
||||||
|
- } __attribute__ ((packed)) ht_smps;
|
||||||
|
+ } __packed ht_smps;
|
||||||
|
struct {
|
||||||
|
u8 action_code;
|
||||||
|
u8 dialog_token;
|
||||||
|
@@ -828,9 +828,9 @@ struct ieee80211_mgmt {
|
||||||
|
u8 variable[0];
|
||||||
|
} __packed tdls_discover_resp;
|
||||||
|
} u;
|
||||||
|
- } __attribute__ ((packed)) action;
|
||||||
|
+ } __packed action;
|
||||||
|
} u;
|
||||||
|
-} __attribute__ ((packed));
|
||||||
|
+} __packed;
|
||||||
|
|
||||||
|
/* Supported Rates value encodings in 802.11n-2009 7.3.2.2 */
|
||||||
|
#define BSS_MEMBERSHIP_SELECTOR_HT_PHY 127
|
||||||
|
@@ -846,7 +846,7 @@ struct ieee80211_mmie {
|
||||||
|
__le16 key_id;
|
||||||
|
u8 sequence_number[6];
|
||||||
|
u8 mic[8];
|
||||||
|
-} __attribute__ ((packed));
|
||||||
|
+} __packed;
|
||||||
|
|
||||||
|
struct ieee80211_vendor_ie {
|
||||||
|
u8 element_id;
|
||||||
|
@@ -861,20 +861,20 @@ struct ieee80211_rts {
|
||||||
|
__le16 duration;
|
||||||
|
u8 ra[6];
|
||||||
|
u8 ta[6];
|
||||||
|
-} __attribute__ ((packed));
|
||||||
|
+} __packed;
|
||||||
|
|
||||||
|
struct ieee80211_cts {
|
||||||
|
__le16 frame_control;
|
||||||
|
__le16 duration;
|
||||||
|
u8 ra[6];
|
||||||
|
-} __attribute__ ((packed));
|
||||||
|
+} __packed;
|
||||||
|
|
||||||
|
struct ieee80211_pspoll {
|
||||||
|
__le16 frame_control;
|
||||||
|
__le16 aid;
|
||||||
|
u8 bssid[6];
|
||||||
|
u8 ta[6];
|
||||||
|
-} __attribute__ ((packed));
|
||||||
|
+} __packed;
|
||||||
|
|
||||||
|
/* TDLS */
|
||||||
|
|
||||||
|
@@ -967,7 +967,7 @@ struct ieee80211_bar {
|
||||||
|
__u8 ta[6];
|
||||||
|
__le16 control;
|
||||||
|
__le16 start_seq_num;
|
||||||
|
-} __attribute__((packed));
|
||||||
|
+} __packed;
|
||||||
|
|
||||||
|
/* 802.11 BAR control masks */
|
||||||
|
#define IEEE80211_BAR_CTRL_ACK_POLICY_NORMAL 0x0000
|
||||||
|
@@ -992,7 +992,7 @@ struct ieee80211_mcs_info {
|
||||||
|
__le16 rx_highest;
|
||||||
|
u8 tx_params;
|
||||||
|
u8 reserved[3];
|
||||||
|
-} __attribute__((packed));
|
||||||
|
+} __packed;
|
||||||
|
|
||||||
|
/* 802.11n HT capability MSC set */
|
||||||
|
#define IEEE80211_HT_MCS_RX_HIGHEST_MASK 0x3ff
|
||||||
|
@@ -1031,7 +1031,7 @@ struct ieee80211_ht_cap {
|
||||||
|
__le16 extended_ht_cap_info;
|
||||||
|
__le32 tx_BF_cap_info;
|
||||||
|
u8 antenna_selection_info;
|
||||||
|
-} __attribute__ ((packed));
|
||||||
|
+} __packed;
|
||||||
|
|
||||||
|
/* 802.11n HT capabilities masks (for cap_info) */
|
||||||
|
#define IEEE80211_HT_CAP_LDPC_CODING 0x0001
|
||||||
|
@@ -1102,7 +1102,7 @@ struct ieee80211_ht_operation {
|
||||||
|
__le16 operation_mode;
|
||||||
|
__le16 stbc_param;
|
||||||
|
u8 basic_set[16];
|
||||||
|
-} __attribute__ ((packed));
|
||||||
|
+} __packed;
|
||||||
|
|
||||||
|
/* for ht_param */
|
||||||
|
#define IEEE80211_HT_PARAM_CHA_SEC_OFFSET 0x03
|
||||||
|
@@ -1832,14 +1832,14 @@ struct ieee80211_country_ie_triplet {
|
||||||
|
u8 first_channel;
|
||||||
|
u8 num_channels;
|
||||||
|
s8 max_power;
|
||||||
|
- } __attribute__ ((packed)) chans;
|
||||||
|
+ } __packed chans;
|
||||||
|
struct {
|
||||||
|
u8 reg_extension_id;
|
||||||
|
u8 reg_class;
|
||||||
|
u8 coverage_class;
|
||||||
|
- } __attribute__ ((packed)) ext;
|
||||||
|
+ } __packed ext;
|
||||||
|
};
|
||||||
|
-} __attribute__ ((packed));
|
||||||
|
+} __packed;
|
||||||
|
|
||||||
|
enum ieee80211_timeout_interval_type {
|
||||||
|
WLAN_TIMEOUT_REASSOC_DEADLINE = 1 /* 802.11r */,
|
||||||
|
--- a/include/net/cfg80211.h
|
||||||
|
+++ b/include/net/cfg80211.h
|
||||||
|
@@ -1256,7 +1256,7 @@ struct cfg80211_bss {
|
||||||
|
|
||||||
|
u8 bssid[ETH_ALEN];
|
||||||
|
|
||||||
|
- u8 priv[0] __attribute__((__aligned__(sizeof(void *))));
|
||||||
|
+ u8 priv[0] __aligned(sizeof(void *));
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
@@ -2395,7 +2395,7 @@ struct wiphy {
|
||||||
|
const struct iw_handler_def *wext;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
- char priv[0] __attribute__((__aligned__(NETDEV_ALIGN)));
|
||||||
|
+ char priv[0] __aligned(NETDEV_ALIGN);
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline struct net *wiphy_net(struct wiphy *wiphy)
|
||||||
|
--- a/net/wireless/core.h
|
||||||
|
+++ b/net/wireless/core.h
|
||||||
|
@@ -86,7 +86,7 @@ struct cfg80211_registered_device {
|
||||||
|
|
||||||
|
/* must be last because of the way we do wiphy_priv(),
|
||||||
|
* and it should at least be aligned to NETDEV_ALIGN */
|
||||||
|
- struct wiphy wiphy __attribute__((__aligned__(NETDEV_ALIGN)));
|
||||||
|
+ struct wiphy wiphy __aligned(NETDEV_ALIGN);
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline
|
||||||
|
@ -0,0 +1,71 @@
|
|||||||
|
--- a/include/linux/ieee80211.h
|
||||||
|
+++ b/include/linux/ieee80211.h
|
||||||
|
@@ -180,7 +180,7 @@ struct ieee80211_hdr {
|
||||||
|
u8 addr3[6];
|
||||||
|
__le16 seq_ctrl;
|
||||||
|
u8 addr4[6];
|
||||||
|
-} __packed;
|
||||||
|
+} __packed __aligned(2);
|
||||||
|
|
||||||
|
struct ieee80211_hdr_3addr {
|
||||||
|
__le16 frame_control;
|
||||||
|
@@ -189,7 +189,7 @@ struct ieee80211_hdr_3addr {
|
||||||
|
u8 addr2[6];
|
||||||
|
u8 addr3[6];
|
||||||
|
__le16 seq_ctrl;
|
||||||
|
-} __packed;
|
||||||
|
+} __packed __aligned(2);
|
||||||
|
|
||||||
|
struct ieee80211_qos_hdr {
|
||||||
|
__le16 frame_control;
|
||||||
|
@@ -199,7 +199,7 @@ struct ieee80211_qos_hdr {
|
||||||
|
u8 addr3[6];
|
||||||
|
__le16 seq_ctrl;
|
||||||
|
__le16 qos_ctrl;
|
||||||
|
-} __packed;
|
||||||
|
+} __packed __aligned(2);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ieee80211_has_tods - check if IEEE80211_FCTL_TODS is set
|
||||||
|
@@ -576,7 +576,7 @@ struct ieee80211s_hdr {
|
||||||
|
__le32 seqnum;
|
||||||
|
u8 eaddr1[6];
|
||||||
|
u8 eaddr2[6];
|
||||||
|
-} __packed;
|
||||||
|
+} __packed __aligned(2);
|
||||||
|
|
||||||
|
/* Mesh flags */
|
||||||
|
#define MESH_FLAGS_AE_A4 0x1
|
||||||
|
@@ -830,7 +830,7 @@ struct ieee80211_mgmt {
|
||||||
|
} u;
|
||||||
|
} __packed action;
|
||||||
|
} u;
|
||||||
|
-} __packed;
|
||||||
|
+} __packed __aligned(2);
|
||||||
|
|
||||||
|
/* Supported Rates value encodings in 802.11n-2009 7.3.2.2 */
|
||||||
|
#define BSS_MEMBERSHIP_SELECTOR_HT_PHY 127
|
||||||
|
@@ -861,20 +861,20 @@ struct ieee80211_rts {
|
||||||
|
__le16 duration;
|
||||||
|
u8 ra[6];
|
||||||
|
u8 ta[6];
|
||||||
|
-} __packed;
|
||||||
|
+} __packed __aligned(2);
|
||||||
|
|
||||||
|
struct ieee80211_cts {
|
||||||
|
__le16 frame_control;
|
||||||
|
__le16 duration;
|
||||||
|
u8 ra[6];
|
||||||
|
-} __packed;
|
||||||
|
+} __packed __aligned(2);
|
||||||
|
|
||||||
|
struct ieee80211_pspoll {
|
||||||
|
__le16 frame_control;
|
||||||
|
__le16 aid;
|
||||||
|
u8 bssid[6];
|
||||||
|
u8 ta[6];
|
||||||
|
-} __packed;
|
||||||
|
+} __packed __aligned(2);
|
||||||
|
|
||||||
|
/* TDLS */
|
||||||
|
|
Loading…
Reference in New Issue
Block a user