aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Lamparter <chunkeey@web.de>2008-09-03 16:25:20 -0400
committerJohn W. Linville <linville@tuxdriver.com>2008-09-08 14:00:17 -0400
commite0a58eacf540c65763288c81caa74013f62d7234 (patch)
treeaf544e422208519cf49ce6c45d4db8427b6fcaeb
parent0b7dcd9652c8d6b2a0dd04f3a3e6ca0574560042 (diff)
p54: set_filter refactoring
p54_set_filter has a way too many unnecessary "magic" parameters and values. This patch axes all superfluous parameters and gives most of the magic values appropriate names. Signed-off-by: Christian Lamparter <chunkeey@web.de> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/p54/p54.h2
-rw-r--r--drivers/net/wireless/p54/p54common.c39
-rw-r--r--drivers/net/wireless/p54/p54common.h16
3 files changed, 28 insertions, 29 deletions
diff --git a/drivers/net/wireless/p54/p54.h b/drivers/net/wireless/p54/p54.h
index cd2a39f544b1..fd54b273cd9b 100644
--- a/drivers/net/wireless/p54/p54.h
+++ b/drivers/net/wireless/p54/p54.h
@@ -63,6 +63,7 @@ struct p54_common {
63 struct mutex conf_mutex; 63 struct mutex conf_mutex;
64 u8 mac_addr[ETH_ALEN]; 64 u8 mac_addr[ETH_ALEN];
65 u8 bssid[ETH_ALEN]; 65 u8 bssid[ETH_ALEN];
66 __le16 filter_type;
66 struct pda_iq_autocal_entry *iq_autocal; 67 struct pda_iq_autocal_entry *iq_autocal;
67 unsigned int iq_autocal_len; 68 unsigned int iq_autocal_len;
68 struct pda_channel_output_limit *output_limit; 69 struct pda_channel_output_limit *output_limit;
@@ -70,6 +71,7 @@ struct p54_common {
70 struct pda_pa_curve_data *curve_data; 71 struct pda_pa_curve_data *curve_data;
71 u16 rxhw; 72 u16 rxhw;
72 u8 version; 73 u8 version;
74 u8 rx_antenna;
73 unsigned int tx_hdr_len; 75 unsigned int tx_hdr_len;
74 void *cached_vdcf; 76 void *cached_vdcf;
75 unsigned int fw_var; 77 unsigned int fw_var;
diff --git a/drivers/net/wireless/p54/p54common.c b/drivers/net/wireless/p54/p54common.c
index e96bf1a8f84c..f742abab7594 100644
--- a/drivers/net/wireless/p54/p54common.c
+++ b/drivers/net/wireless/p54/p54common.c
@@ -786,8 +786,7 @@ static int p54_tx(struct ieee80211_hw *dev, struct sk_buff *skb)
786} 786}
787 787
788static int p54_set_filter(struct ieee80211_hw *dev, u16 filter_type, 788static int p54_set_filter(struct ieee80211_hw *dev, u16 filter_type,
789 const u8 *dst, const u8 *src, u8 antenna, 789 const u8 *bssid)
790 u32 magic3, u32 magic8, u32 magic9)
791{ 790{
792 struct p54_common *priv = dev->priv; 791 struct p54_common *priv = dev->priv;
793 struct p54_control_hdr *hdr; 792 struct p54_control_hdr *hdr;
@@ -806,19 +805,19 @@ static int p54_set_filter(struct ieee80211_hw *dev, u16 filter_type,
806 p54_assign_address(dev, NULL, hdr, sizeof(*hdr) + sizeof(*filter)); 805 p54_assign_address(dev, NULL, hdr, sizeof(*hdr) + sizeof(*filter));
807 hdr->type = cpu_to_le16(P54_CONTROL_TYPE_FILTER_SET); 806 hdr->type = cpu_to_le16(P54_CONTROL_TYPE_FILTER_SET);
808 807
809 filter->filter_type = cpu_to_le16(filter_type); 808 priv->filter_type = filter->filter_type = cpu_to_le16(filter_type);
810 memcpy(filter->dst, dst, ETH_ALEN); 809 memcpy(filter->mac_addr, priv->mac_addr, ETH_ALEN);
811 if (!src) 810 if (!bssid)
812 memset(filter->src, ~0, ETH_ALEN); 811 memset(filter->bssid, ~0, ETH_ALEN);
813 else 812 else
814 memcpy(filter->src, src, ETH_ALEN); 813 memcpy(filter->bssid, bssid, ETH_ALEN);
815 filter->antenna = antenna; 814
816 filter->magic3 = cpu_to_le32(magic3); 815 filter->rx_antenna = priv->rx_antenna;
816 filter->basic_rate_mask = cpu_to_le32(0x15F);
817 filter->rx_addr = cpu_to_le32(priv->rx_end); 817 filter->rx_addr = cpu_to_le32(priv->rx_end);
818 filter->max_rx = cpu_to_le16(priv->rx_mtu); 818 filter->max_rx = cpu_to_le16(priv->rx_mtu);
819 filter->rxhw = cpu_to_le16(priv->rxhw); 819 filter->rxhw = cpu_to_le16(priv->rxhw);
820 filter->magic8 = cpu_to_le16(magic8); 820 filter->wakeup_timer = cpu_to_le16(500);
821 filter->magic9 = cpu_to_le16(magic9);
822 821
823 priv->tx(dev, hdr, sizeof(*hdr) + sizeof(*filter), 1); 822 priv->tx(dev, hdr, sizeof(*hdr) + sizeof(*filter), 1);
824 return 0; 823 return 0;
@@ -1044,12 +1043,11 @@ static int p54_add_interface(struct ieee80211_hw *dev,
1044 1043
1045 memcpy(priv->mac_addr, conf->mac_addr, ETH_ALEN); 1044 memcpy(priv->mac_addr, conf->mac_addr, ETH_ALEN);
1046 1045
1047 p54_set_filter(dev, 0, priv->mac_addr, NULL, 0, 1, 0, 0xF642); 1046 p54_set_filter(dev, 0, NULL);
1048 p54_set_filter(dev, 0, priv->mac_addr, NULL, 1, 0, 0, 0xF642);
1049 1047
1050 switch (conf->type) { 1048 switch (conf->type) {
1051 case IEEE80211_IF_TYPE_STA: 1049 case IEEE80211_IF_TYPE_STA:
1052 p54_set_filter(dev, 1, priv->mac_addr, NULL, 0, 0x15F, 0x1F4, 0); 1050 p54_set_filter(dev, 1, NULL);
1053 break; 1051 break;
1054 default: 1052 default:
1055 BUG(); /* impossible */ 1053 BUG(); /* impossible */
@@ -1067,7 +1065,7 @@ static void p54_remove_interface(struct ieee80211_hw *dev,
1067 struct p54_common *priv = dev->priv; 1065 struct p54_common *priv = dev->priv;
1068 priv->mode = IEEE80211_IF_TYPE_MNTR; 1066 priv->mode = IEEE80211_IF_TYPE_MNTR;
1069 memset(priv->mac_addr, 0, ETH_ALEN); 1067 memset(priv->mac_addr, 0, ETH_ALEN);
1070 p54_set_filter(dev, 0, priv->mac_addr, NULL, 2, 0, 0, 0); 1068 p54_set_filter(dev, 0, NULL);
1071} 1069}
1072 1070
1073static int p54_config(struct ieee80211_hw *dev, struct ieee80211_conf *conf) 1071static int p54_config(struct ieee80211_hw *dev, struct ieee80211_conf *conf)
@@ -1076,6 +1074,8 @@ static int p54_config(struct ieee80211_hw *dev, struct ieee80211_conf *conf)
1076 struct p54_common *priv = dev->priv; 1074 struct p54_common *priv = dev->priv;
1077 1075
1078 mutex_lock(&priv->conf_mutex); 1076 mutex_lock(&priv->conf_mutex);
1077 priv->rx_antenna = (conf->antenna_sel_rx == 0) ?
1078 2 : conf->antenna_sel_tx - 1;
1079 ret = p54_set_freq(dev, cpu_to_le16(conf->channel->center_freq)); 1079 ret = p54_set_freq(dev, cpu_to_le16(conf->channel->center_freq));
1080 p54_set_vdcf(dev); 1080 p54_set_vdcf(dev);
1081 mutex_unlock(&priv->conf_mutex); 1081 mutex_unlock(&priv->conf_mutex);
@@ -1089,8 +1089,7 @@ static int p54_config_interface(struct ieee80211_hw *dev,
1089 struct p54_common *priv = dev->priv; 1089 struct p54_common *priv = dev->priv;
1090 1090
1091 mutex_lock(&priv->conf_mutex); 1091 mutex_lock(&priv->conf_mutex);
1092 p54_set_filter(dev, 0, priv->mac_addr, conf->bssid, 0, 1, 0, 0xF642); 1092 p54_set_filter(dev, 0, conf->bssid);
1093 p54_set_filter(dev, 0, priv->mac_addr, conf->bssid, 2, 0, 0, 0);
1094 p54_set_leds(dev, 1, !is_multicast_ether_addr(conf->bssid), 0); 1093 p54_set_leds(dev, 1, !is_multicast_ether_addr(conf->bssid), 0);
1095 memcpy(priv->bssid, conf->bssid, ETH_ALEN); 1094 memcpy(priv->bssid, conf->bssid, ETH_ALEN);
1096 mutex_unlock(&priv->conf_mutex); 1095 mutex_unlock(&priv->conf_mutex);
@@ -1108,11 +1107,9 @@ static void p54_configure_filter(struct ieee80211_hw *dev,
1108 1107
1109 if (changed_flags & FIF_BCN_PRBRESP_PROMISC) { 1108 if (changed_flags & FIF_BCN_PRBRESP_PROMISC) {
1110 if (*total_flags & FIF_BCN_PRBRESP_PROMISC) 1109 if (*total_flags & FIF_BCN_PRBRESP_PROMISC)
1111 p54_set_filter(dev, 0, priv->mac_addr, 1110 p54_set_filter(dev, 0, NULL);
1112 NULL, 2, 0, 0, 0);
1113 else 1111 else
1114 p54_set_filter(dev, 0, priv->mac_addr, 1112 p54_set_filter(dev, 0, priv->bssid);
1115 priv->bssid, 2, 0, 0, 0);
1116 } 1113 }
1117} 1114}
1118 1115
diff --git a/drivers/net/wireless/p54/p54common.h b/drivers/net/wireless/p54/p54common.h
index c24b5cddf46b..7b4ba37abe92 100644
--- a/drivers/net/wireless/p54/p54common.h
+++ b/drivers/net/wireless/p54/p54common.h
@@ -214,17 +214,17 @@ struct p54_tx_control_allocdata {
214 214
215struct p54_tx_control_filter { 215struct p54_tx_control_filter {
216 __le16 filter_type; 216 __le16 filter_type;
217 u8 dst[ETH_ALEN]; 217 u8 mac_addr[ETH_ALEN];
218 u8 src[ETH_ALEN]; 218 u8 bssid[ETH_ALEN];
219 u8 antenna; 219 u8 rx_antenna;
220 u8 debug; 220 u8 rx_align;
221 __le32 magic3; 221 __le32 basic_rate_mask;
222 u8 rates[8]; // FIXME: what's this for? 222 u8 rts_rates[8];
223 __le32 rx_addr; 223 __le32 rx_addr;
224 __le16 max_rx; 224 __le16 max_rx;
225 __le16 rxhw; 225 __le16 rxhw;
226 __le16 magic8; 226 __le16 wakeup_timer;
227 __le16 magic9; 227 __le16 unalloc;
228} __attribute__ ((packed)); 228} __attribute__ ((packed));
229 229
230struct p54_tx_control_channel { 230struct p54_tx_control_channel {