Hi John, On Fri, Nov 16, 2007 at 07:53:26PM +0100, Miguel Botón wrote: > Ok, the previous patch had a little error. > > -- > > This patch adds power management support in mac80211. Sorry for being late to the game, but would a similar patch against your -next-2.6 tree be considered for inclusion ? Cheers, Samuel. > This allows us to enable power management through the "iwconfig <device> power > <off/on>" command. > The code is based on "mac80211-10.0.0" but it is a little bit modified. > > Signed-off-by: Miguel Botón <mboton@xxxxxxxxx> > > diff --git a/include/net/mac80211.h b/include/net/mac80211.h > index 5fcc4c1..c82b6fa 100644 > --- a/include/net/mac80211.h > +++ b/include/net/mac80211.h > @@ -452,6 +452,8 @@ struct ieee80211_conf { > u8 antenna_max; > u8 antenna_sel_tx; > u8 antenna_sel_rx; > + > + u8 power_management_enable; /* flag to enable/disable power management > */ > }; > > /** > diff --git a/net/mac80211/ieee80211_ioctl.c b/net/mac80211/ieee80211_ioctl.c > index 6caa3ec..f5eebec 100644 > --- a/net/mac80211/ieee80211_ioctl.c > +++ b/net/mac80211/ieee80211_ioctl.c > @@ -674,6 +687,51 @@ static int ieee80211_ioctl_giwtxpower(struct net_device > *dev, > return 0; > } > > +static int ieee80211_ioctl_siwpower(struct net_device *dev, > + struct iw_request_info *info, > + union iwreq_data *wrqu, > + char *extra) > +{ > + struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr); > + struct ieee80211_conf *conf = &local->hw.conf; > + > + if (wrqu->power.disabled) { > + conf->power_management_enable = 0; > + if (ieee80211_hw_config(local)) > + return -EINVAL; > + return 0; > + } > + > + 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(local)) > + return -EINVAL; > + > + return 0; > +} > + > +static int ieee80211_ioctl_giwpower(struct net_device *dev, > + struct iw_request_info *info, > + union iwreq_data *wrqu, > + char *extra) > +{ > + struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr); > + struct ieee80211_conf *conf = &local->hw.conf; > + > + wrqu->power.disabled = !conf->power_management_enable; > + > + return 0; > +} > + > static int ieee80211_ioctl_siwrts(struct net_device *dev, > struct iw_request_info *info, > struct iw_param *rts, char *extra) > @@ -1111,8 +1166,8 @@ static const iw_handler ieee80211_handler[] = > (iw_handler) ieee80211_ioctl_giwretry, /* SIOCGIWRETRY */ > (iw_handler) ieee80211_ioctl_siwencode, /* SIOCSIWENCODE */ > (iw_handler) ieee80211_ioctl_giwencode, /* SIOCGIWENCODE */ > - (iw_handler) NULL, /* SIOCSIWPOWER */ > - (iw_handler) NULL, /* SIOCGIWPOWER */ > + (iw_handler) ieee80211_ioctl_siwpower, /* SIOCSIWPOWER */ > + (iw_handler) ieee80211_ioctl_giwpower, /* SIOCGIWPOWER */ > (iw_handler) NULL, /* -- hole -- */ > (iw_handler) NULL, /* -- hole -- */ > (iw_handler) ieee80211_ioctl_siwgenie, /* SIOCSIWGENIE */ > > -- > Miguel Botón > - > To unsubscribe from this list: send the line "unsubscribe linux-wireless" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html