Browse Source

airo: Off-by-one channel fix

Javier Achirica 19 years ago
parent
commit
2610c73302
1 changed files with 9 additions and 10 deletions
  1. 9 10
      drivers/net/wireless/airo.c

+ 9 - 10
drivers/net/wireless/airo.c

@@ -5668,13 +5668,13 @@ static int airo_set_freq(struct net_device *dev,
 		int channel = fwrq->m;
 		int channel = fwrq->m;
 		/* We should do a better check than that,
 		/* We should do a better check than that,
 		 * based on the card capability !!! */
 		 * based on the card capability !!! */
-		if((channel < 1) || (channel > 16)) {
+		if((channel < 1) || (channel > 14)) {
 			printk(KERN_DEBUG "%s: New channel value of %d is invalid!\n", dev->name, fwrq->m);
 			printk(KERN_DEBUG "%s: New channel value of %d is invalid!\n", dev->name, fwrq->m);
 			rc = -EINVAL;
 			rc = -EINVAL;
 		} else {
 		} else {
 			readConfigRid(local, 1);
 			readConfigRid(local, 1);
 			/* Yes ! We can set it !!! */
 			/* Yes ! We can set it !!! */
-			local->config.channelSet = (u16)(channel - 1);
+			local->config.channelSet = (u16) channel;
 			set_bit (FLAG_COMMIT, &local->flags);
 			set_bit (FLAG_COMMIT, &local->flags);
 		}
 		}
 	}
 	}
@@ -5692,6 +5692,7 @@ static int airo_get_freq(struct net_device *dev,
 {
 {
 	struct airo_info *local = dev->priv;
 	struct airo_info *local = dev->priv;
 	StatusRid status_rid;		/* Card status info */
 	StatusRid status_rid;		/* Card status info */
+	int ch;
 
 
 	readConfigRid(local, 1);
 	readConfigRid(local, 1);
 	if ((local->config.opmode & 0xFF) == MODE_STA_ESS)
 	if ((local->config.opmode & 0xFF) == MODE_STA_ESS)
@@ -5699,16 +5700,14 @@ static int airo_get_freq(struct net_device *dev,
 	else
 	else
 		readStatusRid(local, &status_rid, 1);
 		readStatusRid(local, &status_rid, 1);
 
 
-#ifdef WEXT_USECHANNELS
-	fwrq->m = ((int)status_rid.channel) + 1;
-	fwrq->e = 0;
-#else
-	{
-		int f = (int)status_rid.channel;
-		fwrq->m = frequency_list[f] * 100000;
+	ch = (int)status_rid.channel;
+	if((ch > 0) && (ch < 15)) {
+		fwrq->m = frequency_list[ch - 1] * 100000;
 		fwrq->e = 1;
 		fwrq->e = 1;
+	} else {
+		fwrq->m = ch;
+		fwrq->e = 0;
 	}
 	}
-#endif
 
 
 	return 0;
 	return 0;
 }
 }