Search Linux Wireless

Re: [PATCH 1/2] mac80211: add power management support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux