Another patch from Richard Kennedy:

|Here the patch to return an error in the wext functions if the card
|state != running.
|
|It doesn't stop the collision between the auto enable  & udev startup
|but I think it is worth having anyway.
|
|I left it returning UBUSY rather than UNODEV because NetworkManager puts
|a nice "card is busy" message in the logs which is easy to understand.
|But it doesn't make a lot of difference either way.
|
|
|It also adds in a couple of missing DBFENTER / DBFEXIT
This commit is contained in:
pizza 2008-03-24 20:58:30 +00:00
parent 6b3a6e94f7
commit 3598e4d67a
2 changed files with 129 additions and 7 deletions

View File

@ -41,7 +41,9 @@
* Intersil Corporation as part of PRISM(R) chipset product development.
*
* --------------------------------------------------------------------
- use round_jiffies wherever possible (Richard Kennedy)
- WEXT functions should return -EBUSY when the hardware is still
being initialized (Richard Kennedy)
- Use round_jiffies wherever possible (Richard Kennedy)
- Disallow ioctls from running until the hardware probe function has
finished. (Richard Kennedy)
- Fix userspace scripts to work on Fedora 8 (Chris Rankin)

View File

@ -144,8 +144,9 @@ static int qual_as_percent(int snr ) {
return 100;
}
static inline int invalid_state(wlandevice_t *wlandev ) {
return wlandev->msdstate != WLAN_MSD_RUNNING;
}
static int p80211wext_dorequest(wlandevice_t *wlandev, UINT32 did, UINT32 data)
{
@ -176,6 +177,12 @@ static int p80211wext_autojoin(wlandevice_t *wlandev)
DBFENTER;
if ( invalid_state(wlandev) ) {
WLAN_LOG_DEBUG(1,"called from invalid state [%d]\n",wlandev->msdstate);
err = -EBUSY;
goto exit;
}
/* Get ESSID */
result = p80211wext_giwessid(wlandev->netdev, NULL, &data, ssid);
@ -308,6 +315,12 @@ static int p80211wext_giwfreq(netdevice_t *dev,
int err = 0;
DBFENTER;
if ( invalid_state(wlandev) ) {
WLAN_LOG_DEBUG(1,"called from invalid state [%d]\n",wlandev->msdstate);
err = -EBUSY;
goto exit;
}
msg.msgcode = DIDmsg_dot11req_mibget;
mibitem.did = DIDmib_dot11phy_dot11PhyDSSSTable_dot11CurrentChannel;
@ -347,6 +360,12 @@ static int p80211wext_siwfreq(netdevice_t *dev,
DBFENTER;
if ( invalid_state(wlandev) ) {
WLAN_LOG_DEBUG(1,"called from invalid state [%d]\n",wlandev->msdstate);
err = -EBUSY;
goto exit;
}
if (!wlan_wext_write) {
err = (-EOPNOTSUPP);
goto exit;
@ -415,6 +434,11 @@ static int p80211wext_siwmode(netdevice_t *dev,
DBFENTER;
if ( invalid_state(wlandev) ) {
WLAN_LOG_DEBUG(1,"called from invalid state [%d]\n",wlandev->msdstate);
err = -EBUSY;
goto exit;
}
if (!wlan_wext_write) {
err = (-EOPNOTSUPP);
goto exit;
@ -617,6 +641,12 @@ static int p80211wext_siwencode(netdevice_t *dev,
int i;
DBFENTER;
if ( invalid_state(wlandev) ) {
WLAN_LOG_DEBUG(1,"called from invalid state [%d]\n",wlandev->msdstate);
err = -EBUSY;
goto exit;
}
if (!wlan_wext_write) {
err = (-EOPNOTSUPP);
goto exit;
@ -777,6 +807,11 @@ static int p80211wext_siwessid(netdevice_t *dev,
DBFENTER;
if ( invalid_state(wlandev) ) {
WLAN_LOG_DEBUG(1,"called from invalid state [%d]\n",wlandev->msdstate);
err = -EBUSY;
goto exit;
}
if (!wlan_wext_write) {
err = (-EOPNOTSUPP);
goto exit;
@ -827,6 +862,11 @@ static int p80211wext_siwcommit(netdevice_t *dev,
DBFENTER;
if ( invalid_state(wlandev) ) {
WLAN_LOG_DEBUG(1,"called from invalid state [%d]\n",wlandev->msdstate);
err = -EBUSY;
goto exit;
}
if (!wlan_wext_write) {
err = (-EOPNOTSUPP);
goto exit;
@ -853,6 +893,11 @@ static int p80211wext_giwrate(netdevice_t *dev,
DBFENTER;
if ( invalid_state(wlandev) ) {
WLAN_LOG_DEBUG(1,"called from invalid state [%d]\n",wlandev->msdstate);
err = -EBUSY;
goto exit;
}
msg.msgcode = DIDmsg_dot11req_mibget;
mibitem.did = DIDmib_p2_p2MAC_p2CurrentTxRate;
memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
@ -907,6 +952,11 @@ static int p80211wext_giwrts(netdevice_t *dev,
DBFENTER;
if ( invalid_state(wlandev) ) {
WLAN_LOG_DEBUG(1,"called from invalid state [%d]\n",wlandev->msdstate);
err = -EBUSY;
goto exit;
}
msg.msgcode = DIDmsg_dot11req_mibget;
mibitem.did = DIDmib_dot11mac_dot11OperationTable_dot11RTSThreshold;
memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
@ -941,6 +991,11 @@ static int p80211wext_siwrts(netdevice_t *dev,
DBFENTER;
if ( invalid_state(wlandev) ) {
WLAN_LOG_DEBUG(1,"called from invalid state [%d]\n",wlandev->msdstate);
err = -EBUSY;
goto exit;
}
if (!wlan_wext_write) {
err = (-EOPNOTSUPP);
goto exit;
@ -978,6 +1033,11 @@ static int p80211wext_giwfrag(netdevice_t *dev,
DBFENTER;
if ( invalid_state(wlandev) ) {
WLAN_LOG_DEBUG(1,"called from invalid state [%d]\n",wlandev->msdstate);
err = -EBUSY;
goto exit;
}
msg.msgcode = DIDmsg_dot11req_mibget;
mibitem.did = DIDmib_dot11mac_dot11OperationTable_dot11FragmentationThreshold;
memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem));
@ -1011,6 +1071,11 @@ static int p80211wext_siwfrag(netdevice_t *dev,
DBFENTER;
if ( invalid_state(wlandev) ) {
WLAN_LOG_DEBUG(1,"called from invalid state [%d]\n",wlandev->msdstate);
err = -EBUSY;
goto exit;
}
if (!wlan_wext_write) {
err = (-EOPNOTSUPP);
goto exit;
@ -1061,6 +1126,11 @@ static int p80211wext_giwretry(netdevice_t *dev,
UINT16 shortretry, longretry, lifetime;
DBFENTER;
if ( invalid_state(wlandev) ) {
WLAN_LOG_DEBUG(1,"called from invalid state [%d]\n",wlandev->msdstate);
err = -EBUSY;
goto exit;
}
msg.msgcode = DIDmsg_dot11req_mibget;
mibitem.did = DIDmib_dot11mac_dot11OperationTable_dot11ShortRetryLimit;
@ -1140,6 +1210,11 @@ static int p80211wext_siwretry(netdevice_t *dev,
DBFENTER;
if ( invalid_state(wlandev) ) {
WLAN_LOG_DEBUG(1,"called from invalid state [%d]\n",wlandev->msdstate);
err = -EBUSY;
goto exit;
}
if (!wlan_wext_write) {
err = (-EOPNOTSUPP);
goto exit;
@ -1212,6 +1287,11 @@ static int p80211wext_siwtxpow(netdevice_t *dev,
DBFENTER;
if ( invalid_state(wlandev) ) {
WLAN_LOG_DEBUG(1,"called from invalid state [%d]\n",wlandev->msdstate);
err = -EBUSY;
goto exit;
}
if (!wlan_wext_write) {
err = (-EOPNOTSUPP);
goto exit;
@ -1257,6 +1337,11 @@ static int p80211wext_giwtxpow(netdevice_t *dev,
DBFENTER;
if ( invalid_state(wlandev) ) {
WLAN_LOG_DEBUG(1,"called from invalid state [%d]\n",wlandev->msdstate);
err = -EBUSY;
goto exit;
}
msg.msgcode = DIDmsg_dot11req_mibget;
mibitem.did = DIDmib_dot11phy_dot11PhyTxPowerTable_dot11CurrentTxPowerLevel;
@ -1392,6 +1477,11 @@ static int p80211wext_siwscan(netdevice_t *dev,
DBFENTER;
if ( invalid_state(wlandev) ) {
WLAN_LOG_DEBUG(1,"called from invalid state [%d]\n",wlandev->msdstate);
err = -EBUSY;
goto exit;
}
if (wlandev->macmode == WLAN_MACMODE_ESS_AP) {
WLAN_LOG_ERROR("Can't scan in AP mode\n");
err = (-EOPNOTSUPP);
@ -1516,6 +1606,12 @@ static int p80211wext_giwscan(netdevice_t *dev,
DBFENTER;
if ( invalid_state(wlandev) ) {
WLAN_LOG_DEBUG(1,"called from invalid state [%d]\n",wlandev->msdstate);
err = -EBUSY;
goto exit;
}
/* Since wireless tools doesn't really have a way of passing how
* many scan results results there were back here, keep grabbing them
* until we fail.
@ -1541,7 +1637,7 @@ static int p80211wext_giwscan(netdevice_t *dev,
if (result && !scan_good)
err = prism2_result2err (msg.resultcode.data);
exit:
DBFEXIT;
return err;
}
@ -1565,6 +1661,13 @@ static int p80211wext_set_encodeext(struct net_device *dev,
struct iw_point *encoding = &wrqu->encoding;
int idx = encoding->flags & IW_ENCODE_INDEX;
DBFENTER;
if ( invalid_state(wlandev) ) {
WLAN_LOG_DEBUG(1,"called from invalid state [%d]\n",wlandev->msdstate);
result = -EBUSY;
goto exit;
}
WLAN_LOG_DEBUG(1,"set_encode_ext flags[%d] alg[%d] keylen[%d]\n",ext->ext_flags,(int)ext->alg,(int)ext->key_len);
@ -1623,6 +1726,8 @@ static int p80211wext_set_encodeext(struct net_device *dev,
result = p80211req_dorequest(wlandev,(UINT8*)&msg);
WLAN_LOG_DEBUG(1,"result (%d)\n",result);
}
exit:
DBFEXIT;
return result;
}
@ -1641,6 +1746,12 @@ static int p80211wext_get_encodeext(struct net_device *dev,
int idx;
DBFENTER;
if ( invalid_state(wlandev) ) {
WLAN_LOG_DEBUG(1,"called from invalid state [%d]\n",wlandev->msdstate);
result = -EBUSY;
goto exit;
}
WLAN_LOG_DEBUG(1,"get_encode_ext flags[%d] alg[%d] keylen[%d]\n",ext->ext_flags,(int)ext->alg,(int)ext->key_len);
@ -1691,6 +1802,14 @@ static int p80211_wext_set_iwauth (struct net_device *dev,
struct iw_param *param = &wrqu->param;
int result =0;
DBFENTER;
if ( invalid_state(wlandev) ) {
WLAN_LOG_DEBUG(1,"called from invalid state [%d]\n",wlandev->msdstate);
result = -EBUSY;
goto exit;
}
WLAN_LOG_DEBUG(1,"set_iwauth flags[%d]\n",(int)param->flags & IW_AUTH_INDEX );
switch (param->flags & IW_AUTH_INDEX) {
@ -1729,8 +1848,8 @@ static int p80211_wext_set_iwauth (struct net_device *dev,
break;
}
exit:
DBFEXIT;
return result;
}
@ -1743,6 +1862,7 @@ static int p80211_wext_get_iwauth (struct net_device *dev,
struct iw_param *param = &wrqu->param;
int result =0;
DBFENTER;
WLAN_LOG_DEBUG(1,"get_iwauth flags[%d]\n",(int)param->flags & IW_AUTH_INDEX );
switch (param->flags & IW_AUTH_INDEX) {
@ -1763,7 +1883,7 @@ static int p80211_wext_get_iwauth (struct net_device *dev,
break;
}
DBFEXIT;
return result;
}