Hi,

sorry for the long delay.

On Mon, 28 Aug 2006 13:45:18 -0700, mabbas wrote:
> [...]
> +static int ieee80211_ioctl_siwtxpow(struct net_device *dev,
> +                                 struct iw_request_info *info,
> +                                 union iwreq_data *wrqu, 
> +                                 char *extra)
> +{
> +     int rc = 0;
> +     struct ieee80211_conf *conf = ieee80211_get_hw_conf(dev);
> +
> +     if (wrqu->txpower.flags != IW_TXPOW_DBM)
> +             rc = -EINVAL;
> +     else
> +             conf->power_level = wrqu->txpower.value;
> +
> +
> +     ieee80211_ioctl_set_radio_enabled(dev, !wrqu->txpower.disabled);

Expecting implicit call of ieee80211_hw_config in
ieee80211_ioctl_set_radio_enabled doesn't look like a good idea. If the
latter function is changed (to call hw_config only if the radio_enabled
field isn't the same as before), the SIOCSIWTXPOW ioctl won't have any
effect.

I'd prefer setting conf->radio_enabled directly and calling of
ieee80211_hw_config explicitly.

Also, always double check that you do error handling correctly (functions
usually return something on purpose). (Hm, I already told you in this
specific case. Please also double check that you haven't missed any comment
before resending patches.)

> +     return rc;
> +}
> +
> +static int ieee80211_ioctl_siwpower(struct net_device *dev,
> +                                 struct iw_request_info *info,
> +                                 union iwreq_data *wrqu, 
> +                                 char *extra)
> +{
> +     struct ieee80211_conf *conf = ieee80211_get_hw_conf(dev);
> +
> +     if (wrqu->power.disabled) {
> +             conf->power_management_enable = 0;
> +             if (ieee80211_hw_config(dev))
> +                     return -EINVAL;
> +             return 0;

This is wrong. Return the error code you've got from ieee80211_hw_config.

> +     }
> +
> +     if (wrqu->power.flags & IW_POWER_TYPE)
> +             return -EINVAL;
> +
> +     switch (wrqu->power.flags & IW_POWER_MODE) {
> +     case IW_POWER_ON:       /* If not specified */
> +     case IW_POWER_MODE:     /* If set all mask */
> +     case IW_POWER_ALL_R:    /* If explicitely state all */
> +             break;
> +     default:                /* Otherwise we don't support it */
> +             return -EINVAL;
> +     }
> +
> +     conf->power_management_enable = 1;
> +
> +     if (ieee80211_hw_config(dev))
> +             return -EINVAL;

Ditto.

Thanks,

 Jiri

-- 
Jiri Benc
SUSE Labs
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to