* finding or making jordens@debian.org--zd1211/zd1211--integration--0--patch-9 * finding or making jordens@debian.org--zd1211/zd1211--integration--0--patch-10 * computing changeset A {arch}/zd1211/zd1211--integration/zd1211--integration--0/jordens@debian.org--zd1211/patch-log/patch-10 M src/zd1205.c * changeset report * modified files --- orig/src/zd1205.c +++ mod/src/zd1205.c @@ -5983,10 +5983,60 @@ return 0; } +static const unsigned long zd1205_rates[] = { + /* RATE_1M, 0 */ + 1000000, + /* RATE_2M, 1 */ + 2000000, + /* RATE_5M, 2 */ + 5500000, + /* RATE_11M, 3 */ + 11000000, + /* RATE_6M, 4 */ + 600000, + /* RATE_9M, 5 */ + 9000000, + /* RATE_12M, 6 */ + 12000000, + /* RATE_18M, 7 */ + 18000000, + /* RATE_24M, 8 */ + 24000000, + /* RATE_36M, 9 */ + 36000000, + /* RATE_48M, 10 */ + 48000000, + /* RATE_54M, 11 */ + 54000000, +}; + +#define ZD1205_NRATES ((sizeof(zd1205_rates))/(sizeof(unsigned long))) + static int zd1205_ioctl_setrate(struct net_device *dev, struct iw_param *frq) { - return 0; + struct zd1205_private *macp = dev->priv; + U8 rate; + if(frq->value < 0) { + /* Auto */ + macp->bFixedRate = 0; + macp->AdapterMaxRate = RATE_54M; + return 0; + } + for(rate = 0; rate < ZD1205_NRATES; rate++) + if(zd1205_rates[rate] == frq->value) { + zd1205_lock(macp); + macp->bFixedRate = frq->fixed; + if(frq->fixed) + macp->cardSetting.FixedRate = rate; + else { + macp->AdapterMaxRate = rate; + macp->cardSetting.TxRate = rate; + } + zd1205_unlock(macp); + return 0; + } + return -EINVAL; } static int @@ -5994,67 +6044,15 @@ { struct zd1205_private *macp = dev->priv; - frq->fixed = 0; frq->disabled = 0; frq->value = 0; - switch(macp->cardSetting.CurrTxRate) - { - case RATE_1M: - frq->value = 1000000; - break; - - case RATE_2M: - - frq->value = 2000000; - break; - - case RATE_5M: - frq->value = 5500000; - break; - - case RATE_11M: - frq->value = 11000000; - break; - - case RATE_6M: - frq->value = 6000000; - break; - - case RATE_9M: - frq->value = 9000000; - break; - - case RATE_12M: - frq->value = 12000000; - break; + if(macp->cardSetting.CurrTxRate > ZD1205_NRATES) + return -EINVAL; - case RATE_18M: - frq->value = 18000000; - break; - - case RATE_24M: - frq->value = 24000000; - break; - - case RATE_36M: - frq->value = 36000000; - break; - - case RATE_48M: - frq->value = 48000000; - break; - - case RATE_54M: - frq->value = 54000000; - break; - - default: - return -EINVAL; - } - - return 0; + frq->value = zd1205_rates[macp->cardSetting.CurrTxRate]; + return 0; } static int * added files