aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/airo.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c
index 340ab4ee4b67..6c4aa7b6a21b 100644
--- a/drivers/net/wireless/airo.c
+++ b/drivers/net/wireless/airo.c
@@ -4037,7 +4037,7 @@ static int PC4500_writerid(struct airo_info *ai, u16 rid,
4037 Cmd cmd; 4037 Cmd cmd;
4038 Resp rsp; 4038 Resp rsp;
4039 4039
4040 if (test_bit(FLAG_ENABLED, &ai->flags)) 4040 if (test_bit(FLAG_ENABLED, &ai->flags) && (RID_WEP_TEMP != rid))
4041 printk(KERN_ERR 4041 printk(KERN_ERR
4042 "%s: MAC should be disabled (rid=%04x)\n", 4042 "%s: MAC should be disabled (rid=%04x)\n",
4043 __FUNCTION__, rid); 4043 __FUNCTION__, rid);
@@ -5093,9 +5093,9 @@ static int set_wep_key(struct airo_info *ai, u16 index,
5093 printk(KERN_INFO "Setting key %d\n", index); 5093 printk(KERN_INFO "Setting key %d\n", index);
5094 } 5094 }
5095 5095
5096 disable_MAC(ai, lock); 5096 if (perm) disable_MAC(ai, lock);
5097 writeWepKeyRid(ai, &wkr, perm, lock); 5097 writeWepKeyRid(ai, &wkr, perm, lock);
5098 enable_MAC(ai, &rsp, lock); 5098 if (perm) enable_MAC(ai, &rsp, lock);
5099 return 0; 5099 return 0;
5100} 5100}
5101 5101
@@ -6170,6 +6170,8 @@ static int airo_set_encode(struct net_device *dev,
6170{ 6170{
6171 struct airo_info *local = dev->priv; 6171 struct airo_info *local = dev->priv;
6172 CapabilityRid cap_rid; /* Card capability info */ 6172 CapabilityRid cap_rid; /* Card capability info */
6173 int perm = ( dwrq->flags & IW_ENCODE_TEMP ? 0 : 1 );
6174 u16 currentAuthType = local->config.authType;
6173 6175
6174 /* Is WEP supported ? */ 6176 /* Is WEP supported ? */
6175 readCapabilityRid(local, &cap_rid, 1); 6177 readCapabilityRid(local, &cap_rid, 1);
@@ -6212,7 +6214,7 @@ static int airo_set_encode(struct net_device *dev,
6212 /* Copy the key in the driver */ 6214 /* Copy the key in the driver */
6213 memcpy(key.key, extra, dwrq->length); 6215 memcpy(key.key, extra, dwrq->length);
6214 /* Send the key to the card */ 6216 /* Send the key to the card */
6215 set_wep_key(local, index, key.key, key.len, 1, 1); 6217 set_wep_key(local, index, key.key, key.len, perm, 1);
6216 } 6218 }
6217 /* WE specify that if a valid key is set, encryption 6219 /* WE specify that if a valid key is set, encryption
6218 * should be enabled (user may turn it off later) 6220 * should be enabled (user may turn it off later)
@@ -6220,13 +6222,12 @@ static int airo_set_encode(struct net_device *dev,
6220 if((index == current_index) && (key.len > 0) && 6222 if((index == current_index) && (key.len > 0) &&
6221 (local->config.authType == AUTH_OPEN)) { 6223 (local->config.authType == AUTH_OPEN)) {
6222 local->config.authType = AUTH_ENCRYPT; 6224 local->config.authType = AUTH_ENCRYPT;
6223 set_bit (FLAG_COMMIT, &local->flags);
6224 } 6225 }
6225 } else { 6226 } else {
6226 /* Do we want to just set the transmit key index ? */ 6227 /* Do we want to just set the transmit key index ? */
6227 int index = (dwrq->flags & IW_ENCODE_INDEX) - 1; 6228 int index = (dwrq->flags & IW_ENCODE_INDEX) - 1;
6228 if ((index >= 0) && (index < ((cap_rid.softCap & 0x80)?4:1))) { 6229 if ((index >= 0) && (index < ((cap_rid.softCap & 0x80)?4:1))) {
6229 set_wep_key(local, index, NULL, 0, 1, 1); 6230 set_wep_key(local, index, NULL, 0, perm, 1);
6230 } else 6231 } else
6231 /* Don't complain if only change the mode */ 6232 /* Don't complain if only change the mode */
6232 if(!dwrq->flags & IW_ENCODE_MODE) { 6233 if(!dwrq->flags & IW_ENCODE_MODE) {
@@ -6241,7 +6242,7 @@ static int airo_set_encode(struct net_device *dev,
6241 if(dwrq->flags & IW_ENCODE_OPEN) 6242 if(dwrq->flags & IW_ENCODE_OPEN)
6242 local->config.authType = AUTH_ENCRYPT; // Only Wep 6243 local->config.authType = AUTH_ENCRYPT; // Only Wep
6243 /* Commit the changes to flags if needed */ 6244 /* Commit the changes to flags if needed */
6244 if(dwrq->flags & IW_ENCODE_MODE) 6245 if (local->config.authType != currentAuthType)
6245 set_bit (FLAG_COMMIT, &local->flags); 6246 set_bit (FLAG_COMMIT, &local->flags);
6246 return -EINPROGRESS; /* Call commit handler */ 6247 return -EINPROGRESS; /* Call commit handler */
6247} 6248}