Staging: wlan-ng: refactor p80211wext.c to reduce text size.

Refactor the wext interface to reduce lines of code & module text size.

- add a helper function p80211wext_getmib
- rename p80211wext_dorequest to p80211wext_setmib
- refactor wext to call the get/set mib helpers and so reduce repeated code.

size reported text reduction :-
   text	   data	    bss	    dec	    hex	filename
   8343	    720	      0	   9063	   2367	p80211wext.o.patch
   9907	    720	      0	  10631	   2987	p80211wext.o.orig

Tested on x86_32 laptop, everything works correctly using NetworkManager,
and iwconfig & iwlist return sensible results when reading from the card.

Signed-off-by: Richard Kennedy <richard@rsk.demon.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
Richard Kennedy 2010-03-17 14:40:57 +00:00 коммит произвёл Greg Kroah-Hartman
Родитель 044bc96bef
Коммит 51b2a02869
1 изменённых файлов: 116 добавлений и 182 удалений

Просмотреть файл

@ -125,22 +125,42 @@ static int qual_as_percent(int snr)
return 100; return 100;
} }
static int p80211wext_dorequest(wlandevice_t *wlandev, u32 did, u32 data) static int p80211wext_setmib(wlandevice_t *wlandev, u32 did, u32 data)
{ {
p80211msg_dot11req_mibset_t msg; p80211msg_dot11req_mibset_t msg;
p80211item_uint32_t mibitem; p80211item_uint32_t *mibitem =
(p80211item_uint32_t *)&msg.mibattribute.data;
int result; int result;
msg.msgcode = DIDmsg_dot11req_mibset; msg.msgcode = DIDmsg_dot11req_mibset;
memset(&mibitem, 0, sizeof(mibitem)); memset(mibitem, 0, sizeof(*mibitem));
mibitem.did = did; mibitem->did = did;
mibitem.data = data; mibitem->data = data;
memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
result = p80211req_dorequest(wlandev, (u8 *) &msg); result = p80211req_dorequest(wlandev, (u8 *) &msg);
return result; return result;
} }
/*
* get a 32 bit mib value
*/
static int p80211wext_getmib(wlandevice_t *wlandev, u32 did, u32 *data)
{
p80211msg_dot11req_mibset_t msg;
p80211item_uint32_t *mibitem =
(p80211item_uint32_t *)&msg.mibattribute.data;
int result;
msg.msgcode = DIDmsg_dot11req_mibget;
memset(mibitem, 0, sizeof(*mibitem));
mibitem->did = did;
result = p80211req_dorequest(wlandev, (u8 *) &msg);
if (!result)
*data = mibitem->data;
return result;
}
static int p80211wext_autojoin(wlandevice_t *wlandev) static int p80211wext_autojoin(wlandevice_t *wlandev)
{ {
p80211msg_lnxreq_autojoin_t msg; p80211msg_lnxreq_autojoin_t msg;
@ -262,32 +282,26 @@ static int p80211wext_giwfreq(netdevice_t *dev,
struct iw_freq *freq, char *extra) struct iw_freq *freq, char *extra)
{ {
wlandevice_t *wlandev = dev->ml_priv; wlandevice_t *wlandev = dev->ml_priv;
p80211item_uint32_t mibitem;
p80211msg_dot11req_mibset_t msg;
int result; int result;
int err = 0; int err = 0;
unsigned int value;
msg.msgcode = DIDmsg_dot11req_mibget; result = p80211wext_getmib(wlandev,
memset(&mibitem, 0, sizeof(mibitem)); DIDmib_dot11phy_dot11PhyDSSSTable_dot11CurrentChannel,
mibitem.did = DIDmib_dot11phy_dot11PhyDSSSTable_dot11CurrentChannel; &value);
memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
result = p80211req_dorequest(wlandev, (u8 *) &msg);
if (result) { if (result) {
err = -EFAULT; err = -EFAULT;
goto exit; goto exit;
} }
memcpy(&mibitem, &msg.mibattribute.data, sizeof(mibitem)); if (value > NUM_CHANNELS) {
if (mibitem.data > NUM_CHANNELS) {
err = -EFAULT; err = -EFAULT;
goto exit; goto exit;
} }
/* convert into frequency instead of a channel */ /* convert into frequency instead of a channel */
freq->e = 1; freq->e = 1;
freq->m = p80211_channel_to_mhz(mibitem.data, 0) * 100000; freq->m = p80211_channel_to_mhz(value, 0) * 100000;
exit: exit:
return err; return err;
@ -298,28 +312,23 @@ static int p80211wext_siwfreq(netdevice_t *dev,
struct iw_freq *freq, char *extra) struct iw_freq *freq, char *extra)
{ {
wlandevice_t *wlandev = dev->ml_priv; wlandevice_t *wlandev = dev->ml_priv;
p80211item_uint32_t mibitem;
p80211msg_dot11req_mibset_t msg;
int result; int result;
int err = 0; int err = 0;
unsigned int value;
if (!wlan_wext_write) { if (!wlan_wext_write) {
err = (-EOPNOTSUPP); err = -EOPNOTSUPP;
goto exit; goto exit;
} }
msg.msgcode = DIDmsg_dot11req_mibset;
memset(&mibitem, 0, sizeof(mibitem));
mibitem.did = DIDmib_dot11phy_dot11PhyDSSSTable_dot11CurrentChannel;
mibitem.status = P80211ENUM_msgitem_status_data_ok;
if ((freq->e == 0) && (freq->m <= 1000)) if ((freq->e == 0) && (freq->m <= 1000))
mibitem.data = freq->m; value = freq->m;
else else
mibitem.data = p80211_mhz_to_channel(freq->m); value = p80211_mhz_to_channel(freq->m);
memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem)); result = p80211wext_setmib(wlandev,
result = p80211req_dorequest(wlandev, (u8 *) &msg); DIDmib_dot11phy_dot11PhyDSSSTable_dot11CurrentChannel,
value);
if (result) { if (result) {
err = -EFAULT; err = -EFAULT;
@ -359,13 +368,11 @@ static int p80211wext_siwmode(netdevice_t *dev,
__u32 *mode, char *extra) __u32 *mode, char *extra)
{ {
wlandevice_t *wlandev = dev->ml_priv; wlandevice_t *wlandev = dev->ml_priv;
p80211item_uint32_t mibitem;
p80211msg_dot11req_mibset_t msg;
int result; int result;
int err = 0; int err = 0;
if (!wlan_wext_write) { if (!wlan_wext_write) {
err = (-EOPNOTSUPP); err = -EOPNOTSUPP;
goto exit; goto exit;
} }
@ -396,16 +403,11 @@ static int p80211wext_siwmode(netdevice_t *dev,
} }
/* Set Operation mode to the PORT TYPE RID */ /* Set Operation mode to the PORT TYPE RID */
msg.msgcode = DIDmsg_dot11req_mibset; result = p80211wext_setmib(wlandev,
memset(&mibitem, 0, sizeof(mibitem)); DIDmib_p2_p2Static_p2CnfPortType,
mibitem.did = DIDmib_p2_p2Static_p2CnfPortType; (*mode == IW_MODE_ADHOC) ? 0 : 1);
mibitem.data = (*mode == IW_MODE_ADHOC) ? 0 : 1;
memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
result = p80211req_dorequest(wlandev, (u8 *) &msg);
if (result) if (result)
err = -EFAULT; err = -EFAULT;
exit: exit:
return err; return err;
} }
@ -562,9 +564,9 @@ static int p80211wext_siwencode(netdevice_t *dev,
/* Set current key number only if no keys are given */ /* Set current key number only if no keys are given */
if (erq->flags & IW_ENCODE_NOKEY) { if (erq->flags & IW_ENCODE_NOKEY) {
result = result =
p80211wext_dorequest(wlandev, p80211wext_setmib(wlandev,
DIDmib_dot11smt_dot11PrivacyTable_dot11WEPDefaultKeyID, DIDmib_dot11smt_dot11PrivacyTable_dot11WEPDefaultKeyID,
i); i);
if (result) { if (result) {
err = -EFAULT; err = -EFAULT;
@ -586,7 +588,6 @@ static int p80211wext_siwencode(netdevice_t *dev,
-------------------------------------------------------------*/ -------------------------------------------------------------*/
if (erq->length > 0) { if (erq->length > 0) {
/* copy the key from the driver cache as the keys are read-only MIBs */ /* copy the key from the driver cache as the keys are read-only MIBs */
wlandev->wep_keylens[i] = erq->length; wlandev->wep_keylens[i] = erq->length;
memcpy(wlandev->wep_keys[i], key, erq->length); memcpy(wlandev->wep_keys[i], key, erq->length);
@ -636,12 +637,12 @@ static int p80211wext_siwencode(netdevice_t *dev,
/* Check the PrivacyInvoked flag */ /* Check the PrivacyInvoked flag */
if (erq->flags & IW_ENCODE_DISABLED) { if (erq->flags & IW_ENCODE_DISABLED) {
result = result =
p80211wext_dorequest(wlandev, p80211wext_setmib(wlandev,
DIDmib_dot11smt_dot11PrivacyTable_dot11PrivacyInvoked, DIDmib_dot11smt_dot11PrivacyTable_dot11PrivacyInvoked,
P80211ENUM_truth_false); P80211ENUM_truth_false);
} else { } else {
result = result =
p80211wext_dorequest(wlandev, p80211wext_setmib(wlandev,
DIDmib_dot11smt_dot11PrivacyTable_dot11PrivacyInvoked, DIDmib_dot11smt_dot11PrivacyTable_dot11PrivacyInvoked,
P80211ENUM_truth_true); P80211ENUM_truth_true);
} }
@ -660,12 +661,12 @@ static int p80211wext_siwencode(netdevice_t *dev,
*/ */
if (erq->flags & IW_ENCODE_RESTRICTED) { if (erq->flags & IW_ENCODE_RESTRICTED) {
result = result =
p80211wext_dorequest(wlandev, p80211wext_setmib(wlandev,
DIDmib_dot11smt_dot11PrivacyTable_dot11ExcludeUnencrypted, DIDmib_dot11smt_dot11PrivacyTable_dot11ExcludeUnencrypted,
P80211ENUM_truth_true); P80211ENUM_truth_true);
} else if (erq->flags & IW_ENCODE_OPEN) { } else if (erq->flags & IW_ENCODE_OPEN) {
result = result =
p80211wext_dorequest(wlandev, p80211wext_setmib(wlandev,
DIDmib_dot11smt_dot11PrivacyTable_dot11ExcludeUnencrypted, DIDmib_dot11smt_dot11PrivacyTable_dot11ExcludeUnencrypted,
P80211ENUM_truth_false); P80211ENUM_truth_false);
} }
@ -767,24 +768,16 @@ static int p80211wext_giwrate(netdevice_t *dev,
struct iw_param *rrq, char *extra) struct iw_param *rrq, char *extra)
{ {
wlandevice_t *wlandev = dev->ml_priv; wlandevice_t *wlandev = dev->ml_priv;
p80211item_uint32_t mibitem;
p80211msg_dot11req_mibset_t msg;
int result; int result;
int err = 0; int err = 0;
unsigned int value;
msg.msgcode = DIDmsg_dot11req_mibget; result = p80211wext_getmib(wlandev, DIDmib_p2_p2MAC_p2CurrentTxRate, &value);
memset(&mibitem, 0, sizeof(mibitem));
mibitem.did = DIDmib_p2_p2MAC_p2CurrentTxRate;
memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
result = p80211req_dorequest(wlandev, (u8 *) &msg);
if (result) { if (result) {
err = -EFAULT; err = -EFAULT;
goto exit; goto exit;
} }
memcpy(&mibitem, &msg.mibattribute.data, sizeof(mibitem));
rrq->fixed = 0; /* can it change? */ rrq->fixed = 0; /* can it change? */
rrq->disabled = 0; rrq->disabled = 0;
rrq->value = 0; rrq->value = 0;
@ -794,7 +787,7 @@ static int p80211wext_giwrate(netdevice_t *dev,
#define HFA384x_RATEBIT_5dot5 ((u16)4) #define HFA384x_RATEBIT_5dot5 ((u16)4)
#define HFA384x_RATEBIT_11 ((u16)8) #define HFA384x_RATEBIT_11 ((u16)8)
switch (mibitem.data) { switch (value) {
case HFA384x_RATEBIT_1: case HFA384x_RATEBIT_1:
rrq->value = 1000000; rrq->value = 1000000;
break; break;
@ -819,25 +812,19 @@ static int p80211wext_giwrts(netdevice_t *dev,
struct iw_param *rts, char *extra) struct iw_param *rts, char *extra)
{ {
wlandevice_t *wlandev = dev->ml_priv; wlandevice_t *wlandev = dev->ml_priv;
p80211item_uint32_t mibitem;
p80211msg_dot11req_mibset_t msg;
int result; int result;
int err = 0; int err = 0;
unsigned int value;
msg.msgcode = DIDmsg_dot11req_mibget; result = p80211wext_getmib(wlandev,
memset(&mibitem, 0, sizeof(mibitem)); DIDmib_dot11mac_dot11OperationTable_dot11RTSThreshold,
mibitem.did = DIDmib_dot11mac_dot11OperationTable_dot11RTSThreshold; &value);
memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
result = p80211req_dorequest(wlandev, (u8 *) &msg);
if (result) { if (result) {
err = -EFAULT; err = -EFAULT;
goto exit; goto exit;
} }
memcpy(&mibitem, &msg.mibattribute.data, sizeof(mibitem)); rts->value = value;
rts->value = mibitem.data;
rts->disabled = (rts->value == 2347); rts->disabled = (rts->value == 2347);
rts->fixed = 1; rts->fixed = 1;
@ -850,27 +837,23 @@ static int p80211wext_siwrts(netdevice_t *dev,
struct iw_param *rts, char *extra) struct iw_param *rts, char *extra)
{ {
wlandevice_t *wlandev = dev->ml_priv; wlandevice_t *wlandev = dev->ml_priv;
p80211item_uint32_t mibitem;
p80211msg_dot11req_mibset_t msg;
int result; int result;
int err = 0; int err = 0;
unsigned int value;
if (!wlan_wext_write) { if (!wlan_wext_write) {
err = (-EOPNOTSUPP); err = -EOPNOTSUPP;
goto exit; goto exit;
} }
msg.msgcode = DIDmsg_dot11req_mibget;
memset(&mibitem, 0, sizeof(mibitem));
mibitem.did = DIDmib_dot11mac_dot11OperationTable_dot11RTSThreshold;
if (rts->disabled) if (rts->disabled)
mibitem.data = 2347; value = 2347;
else else
mibitem.data = rts->value; value = rts->value;
memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
result = p80211req_dorequest(wlandev, (u8 *) &msg);
result = p80211wext_setmib(wlandev,
DIDmib_dot11mac_dot11OperationTable_dot11RTSThreshold,
value);
if (result) { if (result) {
err = -EFAULT; err = -EFAULT;
goto exit; goto exit;
@ -885,26 +868,19 @@ static int p80211wext_giwfrag(netdevice_t *dev,
struct iw_param *frag, char *extra) struct iw_param *frag, char *extra)
{ {
wlandevice_t *wlandev = dev->ml_priv; wlandevice_t *wlandev = dev->ml_priv;
p80211item_uint32_t mibitem;
p80211msg_dot11req_mibset_t msg;
int result; int result;
int err = 0; int err = 0;
unsigned int value;
msg.msgcode = DIDmsg_dot11req_mibget; result = p80211wext_getmib(wlandev,
memset(&mibitem, 0, sizeof(mibitem)); DIDmib_dot11mac_dot11OperationTable_dot11FragmentationThreshold,
mibitem.did = &value);
DIDmib_dot11mac_dot11OperationTable_dot11FragmentationThreshold;
memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
result = p80211req_dorequest(wlandev, (u8 *) &msg);
if (result) { if (result) {
err = -EFAULT; err = -EFAULT;
goto exit; goto exit;
} }
memcpy(&mibitem, &msg.mibattribute.data, sizeof(mibitem)); frag->value = value;
frag->value = mibitem.data;
frag->disabled = (frag->value == 2346); frag->disabled = (frag->value == 2346);
frag->fixed = 1; frag->fixed = 1;
@ -917,28 +893,23 @@ static int p80211wext_siwfrag(netdevice_t *dev,
struct iw_param *frag, char *extra) struct iw_param *frag, char *extra)
{ {
wlandevice_t *wlandev = dev->ml_priv; wlandevice_t *wlandev = dev->ml_priv;
p80211item_uint32_t mibitem;
p80211msg_dot11req_mibset_t msg;
int result; int result;
int err = 0; int err = 0;
int value;
if (!wlan_wext_write) { if (!wlan_wext_write) {
err = (-EOPNOTSUPP); err = (-EOPNOTSUPP);
goto exit; goto exit;
} }
msg.msgcode = DIDmsg_dot11req_mibset;
memset(&mibitem, 0, sizeof(mibitem));
mibitem.did =
DIDmib_dot11mac_dot11OperationTable_dot11FragmentationThreshold;
if (frag->disabled) if (frag->disabled)
mibitem.data = 2346; value = 2346;
else else
mibitem.data = frag->value; value = frag->value;
memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem)); result = p80211wext_setmib(wlandev,
result = p80211req_dorequest(wlandev, (u8 *) &msg); DIDmib_dot11mac_dot11OperationTable_dot11FragmentationThreshold,
value);
if (result) { if (result) {
err = -EFAULT; err = -EFAULT;
@ -962,56 +933,40 @@ static int p80211wext_giwretry(netdevice_t *dev,
struct iw_param *rrq, char *extra) struct iw_param *rrq, char *extra)
{ {
wlandevice_t *wlandev = dev->ml_priv; wlandevice_t *wlandev = dev->ml_priv;
p80211item_uint32_t mibitem;
p80211msg_dot11req_mibset_t msg;
int result; int result;
int err = 0; int err = 0;
u16 shortretry, longretry, lifetime; u16 shortretry, longretry, lifetime;
unsigned int value;
msg.msgcode = DIDmsg_dot11req_mibget; result = p80211wext_getmib(wlandev,
memset(&mibitem, 0, sizeof(mibitem)); DIDmib_dot11mac_dot11OperationTable_dot11ShortRetryLimit,
mibitem.did = DIDmib_dot11mac_dot11OperationTable_dot11ShortRetryLimit; &value);
memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
result = p80211req_dorequest(wlandev, (u8 *) &msg);
if (result) { if (result) {
err = -EFAULT; err = -EFAULT;
goto exit; goto exit;
} }
memcpy(&mibitem, &msg.mibattribute.data, sizeof(mibitem)); shortretry = value;
shortretry = mibitem.data;
mibitem.did = DIDmib_dot11mac_dot11OperationTable_dot11LongRetryLimit;
memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
result = p80211req_dorequest(wlandev, (u8 *) &msg);
result = p80211wext_getmib(wlandev,
DIDmib_dot11mac_dot11OperationTable_dot11LongRetryLimit,
&value);
if (result) { if (result) {
err = -EFAULT; err = -EFAULT;
goto exit; goto exit;
} }
memcpy(&mibitem, &msg.mibattribute.data, sizeof(mibitem)); longretry = value;
longretry = mibitem.data;
mibitem.did =
DIDmib_dot11mac_dot11OperationTable_dot11MaxTransmitMSDULifetime;
memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
result = p80211req_dorequest(wlandev, (u8 *) &msg);
result = p80211wext_getmib(wlandev,
DIDmib_dot11mac_dot11OperationTable_dot11MaxTransmitMSDULifetime,
&value);
if (result) { if (result) {
err = -EFAULT; err = -EFAULT;
goto exit; goto exit;
} }
memcpy(&mibitem, &msg.mibattribute.data, sizeof(mibitem)); lifetime = value;
lifetime = mibitem.data;
rrq->disabled = 0; rrq->disabled = 0;
@ -1044,8 +999,7 @@ static int p80211wext_siwretry(netdevice_t *dev,
p80211msg_dot11req_mibset_t msg; p80211msg_dot11req_mibset_t msg;
int result; int result;
int err = 0; int err = 0;
unsigned int value;
memset(&mibitem, 0, sizeof(mibitem));
if (!wlan_wext_write) { if (!wlan_wext_write) {
err = (-EOPNOTSUPP); err = (-EOPNOTSUPP);
@ -1060,26 +1014,20 @@ static int p80211wext_siwretry(netdevice_t *dev,
msg.msgcode = DIDmsg_dot11req_mibset; msg.msgcode = DIDmsg_dot11req_mibset;
if ((rrq->flags & IW_RETRY_TYPE) == IW_RETRY_LIFETIME) { if ((rrq->flags & IW_RETRY_TYPE) == IW_RETRY_LIFETIME) {
mibitem.did =
DIDmib_dot11mac_dot11OperationTable_dot11MaxTransmitMSDULifetime;
mibitem.data = rrq->value /= 1024;
memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
result = p80211req_dorequest(wlandev, (u8 *) &msg);
value = rrq->value /= 1024;
result = p80211wext_setmib(wlandev,
DIDmib_dot11mac_dot11OperationTable_dot11MaxTransmitMSDULifetime,
value);
if (result) { if (result) {
err = -EFAULT; err = -EFAULT;
goto exit; goto exit;
} }
} else { } else {
if (rrq->flags & IW_RETRY_LONG) { if (rrq->flags & IW_RETRY_LONG) {
mibitem.did = result = p80211wext_setmib(wlandev,
DIDmib_dot11mac_dot11OperationTable_dot11LongRetryLimit; DIDmib_dot11mac_dot11OperationTable_dot11LongRetryLimit,
mibitem.data = rrq->value; rrq->value);
memcpy(&msg.mibattribute.data, &mibitem,
sizeof(mibitem));
result = p80211req_dorequest(wlandev, (u8 *) &msg);
if (result) { if (result) {
err = -EFAULT; err = -EFAULT;
@ -1088,13 +1036,9 @@ static int p80211wext_siwretry(netdevice_t *dev,
} }
if (rrq->flags & IW_RETRY_SHORT) { if (rrq->flags & IW_RETRY_SHORT) {
mibitem.did = result = p80211wext_setmib(wlandev,
DIDmib_dot11mac_dot11OperationTable_dot11ShortRetryLimit; DIDmib_dot11mac_dot11OperationTable_dot11ShortRetryLimit,
mibitem.data = rrq->value; rrq->value);
memcpy(&msg.mibattribute.data, &mibitem,
sizeof(mibitem));
result = p80211req_dorequest(wlandev, (u8 *) &msg);
if (result) { if (result) {
err = -EFAULT; err = -EFAULT;
@ -1117,22 +1061,20 @@ static int p80211wext_siwtxpow(netdevice_t *dev,
p80211msg_dot11req_mibset_t msg; p80211msg_dot11req_mibset_t msg;
int result; int result;
int err = 0; int err = 0;
unsigned int value;
if (!wlan_wext_write) { if (!wlan_wext_write) {
err = (-EOPNOTSUPP); err = (-EOPNOTSUPP);
goto exit; goto exit;
} }
msg.msgcode = DIDmsg_dot11req_mibset;
memset(&mibitem, 0, sizeof(mibitem));
mibitem.did =
DIDmib_dot11phy_dot11PhyTxPowerTable_dot11CurrentTxPowerLevel;
if (rrq->fixed == 0) if (rrq->fixed == 0)
mibitem.data = 30; value = 30;
else else
mibitem.data = rrq->value; value = rrq->value;
memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem)); result = p80211wext_setmib(wlandev,
result = p80211req_dorequest(wlandev, (u8 *) &msg); DIDmib_dot11phy_dot11PhyTxPowerTable_dot11CurrentTxPowerLevel,
value);
if (result) { if (result) {
err = -EFAULT; err = -EFAULT;
@ -1148,33 +1090,25 @@ static int p80211wext_giwtxpow(netdevice_t *dev,
struct iw_param *rrq, char *extra) struct iw_param *rrq, char *extra)
{ {
wlandevice_t *wlandev = dev->ml_priv; wlandevice_t *wlandev = dev->ml_priv;
p80211item_uint32_t mibitem;
p80211msg_dot11req_mibset_t msg;
int result; int result;
int err = 0; int err = 0;
unsigned int value;
msg.msgcode = DIDmsg_dot11req_mibget; result = p80211wext_getmib(wlandev,
DIDmib_dot11phy_dot11PhyTxPowerTable_dot11CurrentTxPowerLevel,
memset(&mibitem, 0, sizeof(mibitem)); &value);
mibitem.did =
DIDmib_dot11phy_dot11PhyTxPowerTable_dot11CurrentTxPowerLevel;
memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
result = p80211req_dorequest(wlandev, (u8 *) &msg);
if (result) { if (result) {
err = -EFAULT; err = -EFAULT;
goto exit; goto exit;
} }
memcpy(&mibitem, &msg.mibattribute.data, sizeof(mibitem));
/* XXX handle OFF by setting disabled = 1; */ /* XXX handle OFF by setting disabled = 1; */
rrq->flags = 0; /* IW_TXPOW_DBM; */ rrq->flags = 0; /* IW_TXPOW_DBM; */
rrq->disabled = 0; rrq->disabled = 0;
rrq->fixed = 0; rrq->fixed = 0;
rrq->value = mibitem.data; rrq->value = value;
exit: exit:
return err; return err;
@ -1479,7 +1413,7 @@ static int p80211wext_set_encodeext(struct net_device *dev,
} }
pr_debug("setting default key (%d)\n", idx); pr_debug("setting default key (%d)\n", idx);
result = result =
p80211wext_dorequest(wlandev, p80211wext_setmib(wlandev,
DIDmib_dot11smt_dot11PrivacyTable_dot11WEPDefaultKeyID, DIDmib_dot11smt_dot11PrivacyTable_dot11WEPDefaultKeyID,
idx); idx);
if (result) if (result)
@ -1599,12 +1533,12 @@ static int p80211_wext_set_iwauth(struct net_device *dev,
pr_debug("drop_unencrypted %d\n", param->value); pr_debug("drop_unencrypted %d\n", param->value);
if (param->value) if (param->value)
result = result =
p80211wext_dorequest(wlandev, p80211wext_setmib(wlandev,
DIDmib_dot11smt_dot11PrivacyTable_dot11ExcludeUnencrypted, DIDmib_dot11smt_dot11PrivacyTable_dot11ExcludeUnencrypted,
P80211ENUM_truth_true); P80211ENUM_truth_true);
else else
result = result =
p80211wext_dorequest(wlandev, p80211wext_setmib(wlandev,
DIDmib_dot11smt_dot11PrivacyTable_dot11ExcludeUnencrypted, DIDmib_dot11smt_dot11PrivacyTable_dot11ExcludeUnencrypted,
P80211ENUM_truth_false); P80211ENUM_truth_false);
break; break;
@ -1613,12 +1547,12 @@ static int p80211_wext_set_iwauth(struct net_device *dev,
pr_debug("privacy invoked %d\n", param->value); pr_debug("privacy invoked %d\n", param->value);
if (param->value) if (param->value)
result = result =
p80211wext_dorequest(wlandev, p80211wext_setmib(wlandev,
DIDmib_dot11smt_dot11PrivacyTable_dot11PrivacyInvoked, DIDmib_dot11smt_dot11PrivacyTable_dot11PrivacyInvoked,
P80211ENUM_truth_true); P80211ENUM_truth_true);
else else
result = result =
p80211wext_dorequest(wlandev, p80211wext_setmib(wlandev,
DIDmib_dot11smt_dot11PrivacyTable_dot11PrivacyInvoked, DIDmib_dot11smt_dot11PrivacyTable_dot11PrivacyInvoked,
P80211ENUM_truth_false); P80211ENUM_truth_false);