 703515f889
			
		
	
	703515f889
	
	
	
		
			
			Includes the following changes:9edff13abdmac80211: disable potentially harmful PS software retry for A-MPDU sessions75216a76b0mac80211: backport upstream fix for CSA in IBSS mode368cc8ef47mac80211: update brcmfmac backporting brcmf_err cleanups66a63d25c4mac80211: fix build on linux 3.189eacb9d7fcrt2x00: mt7620: lots of improvementsfd94fa61a7mac80211: brcmfmac: update Raspberry Pi patches for linux 4.9649e766a64mac80211: update to wireless-testing 2017-01-3147540afa5dath9k: add a warning to the tx99 config optionb367eef21dmac80211: rt2x00: add support for external LNA on MT76209200e168f2mac80211: move (& update) upstream accepted brcmfmac patches Signed-off-by: Felix Fietkau <nbd@nbd.name>
		
			
				
	
	
		
			339 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			339 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| --- a/net/mac80211/iface.c
 | |
| +++ b/net/mac80211/iface.c
 | |
| @@ -151,6 +151,15 @@ void ieee80211_recalc_idle(struct ieee80
 | |
|  		ieee80211_hw_config(local, change);
 | |
|  }
 | |
|  
 | |
| +static int ieee80211_change_mtu(struct net_device *dev, int new_mtu)
 | |
| +{
 | |
| +	if (new_mtu < 256 || new_mtu > IEEE80211_MAX_DATA_LEN)
 | |
| +		return -EINVAL;
 | |
| +
 | |
| +	dev->mtu = new_mtu;
 | |
| +	return 0;
 | |
| +}
 | |
| +
 | |
|  static int ieee80211_verify_mac(struct ieee80211_sub_if_data *sdata, u8 *addr,
 | |
|  				bool check_dup)
 | |
|  {
 | |
| @@ -1168,6 +1177,7 @@ static const struct net_device_ops ieee8
 | |
|  	.ndo_uninit		= ieee80211_uninit,
 | |
|  	.ndo_start_xmit		= ieee80211_subif_start_xmit,
 | |
|  	.ndo_set_rx_mode	= ieee80211_set_multicast_list,
 | |
| +	.ndo_change_mtu 	= ieee80211_change_mtu,
 | |
|  	.ndo_set_mac_address 	= ieee80211_change_mac,
 | |
|  	.ndo_select_queue	= ieee80211_netdev_select_queue,
 | |
|  	.ndo_get_stats64	= ieee80211_get_stats64,
 | |
| @@ -1211,6 +1221,7 @@ static const struct net_device_ops ieee8
 | |
|  	.ndo_uninit		= ieee80211_uninit,
 | |
|  	.ndo_start_xmit		= ieee80211_monitor_start_xmit,
 | |
|  	.ndo_set_rx_mode	= ieee80211_set_multicast_list,
 | |
| +	.ndo_change_mtu 	= ieee80211_change_mtu,
 | |
|  	.ndo_set_mac_address 	= ieee80211_change_mac,
 | |
|  	.ndo_select_queue	= ieee80211_monitor_select_queue,
 | |
|  	.ndo_get_stats64	= ieee80211_get_stats64,
 | |
| @@ -1919,10 +1930,6 @@ int ieee80211_if_add(struct ieee80211_lo
 | |
|  
 | |
|  		netdev_set_default_ethtool_ops(ndev, &ieee80211_ethtool_ops);
 | |
|  
 | |
| -		/* MTU range: 256 - 2304 */
 | |
| -		ndev->min_mtu = 256;
 | |
| -		ndev->max_mtu = IEEE80211_MAX_DATA_LEN;
 | |
| -
 | |
|  		ret = register_netdevice(ndev);
 | |
|  		if (ret) {
 | |
|  			ieee80211_if_free(ndev);
 | |
| --- a/drivers/net/wireless/ath/wil6210/netdev.c
 | |
| +++ b/drivers/net/wireless/ath/wil6210/netdev.c
 | |
| @@ -42,6 +42,21 @@ static int wil_stop(struct net_device *n
 | |
|  	return wil_down(wil);
 | |
|  }
 | |
|  
 | |
| +static int wil_change_mtu(struct net_device *ndev, int new_mtu)
 | |
| +{
 | |
| +	struct wil6210_priv *wil = ndev_to_wil(ndev);
 | |
| +
 | |
| +	if (new_mtu < 68 || new_mtu > mtu_max) {
 | |
| +		wil_err(wil, "invalid MTU %d\n", new_mtu);
 | |
| +		return -EINVAL;
 | |
| +	}
 | |
| +
 | |
| +	wil_dbg_misc(wil, "change MTU %d -> %d\n", ndev->mtu, new_mtu);
 | |
| +	ndev->mtu = new_mtu;
 | |
| +
 | |
| +	return 0;
 | |
| +}
 | |
| +
 | |
|  static int wil_do_ioctl(struct net_device *ndev, struct ifreq *ifr, int cmd)
 | |
|  {
 | |
|  	struct wil6210_priv *wil = ndev_to_wil(ndev);
 | |
| @@ -55,6 +70,7 @@ static const struct net_device_ops wil_n
 | |
|  	.ndo_start_xmit		= wil_start_xmit,
 | |
|  	.ndo_set_mac_address	= eth_mac_addr,
 | |
|  	.ndo_validate_addr	= eth_validate_addr,
 | |
| +	.ndo_change_mtu		= wil_change_mtu,
 | |
|  	.ndo_do_ioctl		= wil_do_ioctl,
 | |
|  };
 | |
|  
 | |
| @@ -111,7 +127,6 @@ static int wil6210_netdev_poll_tx(struct
 | |
|  static void wil_dev_setup(struct net_device *dev)
 | |
|  {
 | |
|  	ether_setup(dev);
 | |
| -	dev->max_mtu = mtu_max;
 | |
|  	dev->tx_queue_len = WIL_TX_Q_LEN_DEFAULT;
 | |
|  }
 | |
|  
 | |
| --- a/drivers/net/wireless/atmel/atmel.c
 | |
| +++ b/drivers/net/wireless/atmel/atmel.c
 | |
| @@ -1295,6 +1295,14 @@ static struct iw_statistics *atmel_get_w
 | |
|  	return &priv->wstats;
 | |
|  }
 | |
|  
 | |
| +static int atmel_change_mtu(struct net_device *dev, int new_mtu)
 | |
| +{
 | |
| +	if ((new_mtu < 68) || (new_mtu > 2312))
 | |
| +		return -EINVAL;
 | |
| +	dev->mtu = new_mtu;
 | |
| +	return 0;
 | |
| +}
 | |
| +
 | |
|  static int atmel_set_mac_address(struct net_device *dev, void *p)
 | |
|  {
 | |
|  	struct sockaddr *addr = p;
 | |
| @@ -1498,6 +1506,7 @@ static const struct file_operations atme
 | |
|  static const struct net_device_ops atmel_netdev_ops = {
 | |
|  	.ndo_open 		= atmel_open,
 | |
|  	.ndo_stop		= atmel_close,
 | |
| +	.ndo_change_mtu 	= atmel_change_mtu,
 | |
|  	.ndo_set_mac_address 	= atmel_set_mac_address,
 | |
|  	.ndo_start_xmit 	= start_tx,
 | |
|  	.ndo_do_ioctl 		= atmel_ioctl,
 | |
| @@ -1591,10 +1600,6 @@ struct net_device *init_atmel_card(unsig
 | |
|  	dev->irq = irq;
 | |
|  	dev->base_addr = port;
 | |
|  
 | |
| -	/* MTU range: 68 - 2312 */
 | |
| -	dev->min_mtu = 68;
 | |
| -	dev->max_mtu = MAX_WIRELESS_BODY - ETH_FCS_LEN;
 | |
| -
 | |
|  	SET_NETDEV_DEV(dev, sys_dev);
 | |
|  
 | |
|  	if ((rc = request_irq(dev->irq, service_interrupt, IRQF_SHARED, dev->name, dev))) {
 | |
| --- a/drivers/net/wireless/cisco/airo.c
 | |
| +++ b/drivers/net/wireless/cisco/airo.c
 | |
| @@ -2329,6 +2329,14 @@ static int airo_set_mac_address(struct n
 | |
|  	return 0;
 | |
|  }
 | |
|  
 | |
| +static int airo_change_mtu(struct net_device *dev, int new_mtu)
 | |
| +{
 | |
| +	if ((new_mtu < 68) || (new_mtu > 2400))
 | |
| +		return -EINVAL;
 | |
| +	dev->mtu = new_mtu;
 | |
| +	return 0;
 | |
| +}
 | |
| +
 | |
|  static LIST_HEAD(airo_devices);
 | |
|  
 | |
|  static void add_airo_dev(struct airo_info *ai)
 | |
| @@ -2648,6 +2656,7 @@ static const struct net_device_ops airo1
 | |
|  	.ndo_get_stats 		= airo_get_stats,
 | |
|  	.ndo_set_mac_address	= airo_set_mac_address,
 | |
|  	.ndo_do_ioctl		= airo_ioctl,
 | |
| +	.ndo_change_mtu		= airo_change_mtu,
 | |
|  };
 | |
|  
 | |
|  static void wifi_setup(struct net_device *dev)
 | |
| @@ -2659,8 +2668,6 @@ static void wifi_setup(struct net_device
 | |
|  	dev->type               = ARPHRD_IEEE80211;
 | |
|  	dev->hard_header_len    = ETH_HLEN;
 | |
|  	dev->mtu                = AIRO_DEF_MTU;
 | |
| -	dev->min_mtu            = 68;
 | |
| -	dev->max_mtu            = MIC_MSGLEN_MAX;
 | |
|  	dev->addr_len           = ETH_ALEN;
 | |
|  	dev->tx_queue_len       = 100; 
 | |
|  
 | |
| @@ -2747,6 +2754,7 @@ static const struct net_device_ops airo_
 | |
|  	.ndo_set_rx_mode	= airo_set_multicast_list,
 | |
|  	.ndo_set_mac_address	= airo_set_mac_address,
 | |
|  	.ndo_do_ioctl		= airo_ioctl,
 | |
| +	.ndo_change_mtu		= airo_change_mtu,
 | |
|  	.ndo_validate_addr	= eth_validate_addr,
 | |
|  };
 | |
|  
 | |
| @@ -2758,6 +2766,7 @@ static const struct net_device_ops mpi_n
 | |
|  	.ndo_set_rx_mode	= airo_set_multicast_list,
 | |
|  	.ndo_set_mac_address	= airo_set_mac_address,
 | |
|  	.ndo_do_ioctl		= airo_ioctl,
 | |
| +	.ndo_change_mtu		= airo_change_mtu,
 | |
|  	.ndo_validate_addr	= eth_validate_addr,
 | |
|  };
 | |
|  
 | |
| @@ -2813,7 +2822,6 @@ static struct net_device *_init_airo_car
 | |
|  	dev->irq = irq;
 | |
|  	dev->base_addr = port;
 | |
|  	dev->priv_flags &= ~IFF_TX_SKB_SHARING;
 | |
| -	dev->max_mtu = MIC_MSGLEN_MAX;
 | |
|  
 | |
|  	SET_NETDEV_DEV(dev, dmdev);
 | |
|  
 | |
| --- a/drivers/net/wireless/intel/ipw2x00/ipw2100.c
 | |
| +++ b/drivers/net/wireless/intel/ipw2x00/ipw2100.c
 | |
| @@ -6039,6 +6039,7 @@ static const struct net_device_ops ipw21
 | |
|  	.ndo_open		= ipw2100_open,
 | |
|  	.ndo_stop		= ipw2100_close,
 | |
|  	.ndo_start_xmit		= libipw_xmit,
 | |
| +	.ndo_change_mtu		= libipw_change_mtu,
 | |
|  	.ndo_tx_timeout		= ipw2100_tx_timeout,
 | |
|  	.ndo_set_mac_address	= ipw2100_set_address,
 | |
|  	.ndo_validate_addr	= eth_validate_addr,
 | |
| @@ -6074,8 +6075,6 @@ static struct net_device *ipw2100_alloc_
 | |
|  	dev->wireless_data = &priv->wireless_data;
 | |
|  	dev->watchdog_timeo = 3 * HZ;
 | |
|  	dev->irq = 0;
 | |
| -	dev->min_mtu = 68;
 | |
| -	dev->max_mtu = LIBIPW_DATA_LEN;
 | |
|  
 | |
|  	/* NOTE: We don't use the wireless_handlers hook
 | |
|  	 * in dev as the system will start throwing WX requests
 | |
| --- a/drivers/net/wireless/intel/ipw2x00/ipw2200.c
 | |
| +++ b/drivers/net/wireless/intel/ipw2x00/ipw2200.c
 | |
| @@ -11561,6 +11561,7 @@ static const struct net_device_ops ipw_p
 | |
|  	.ndo_open 		= ipw_prom_open,
 | |
|  	.ndo_stop		= ipw_prom_stop,
 | |
|  	.ndo_start_xmit		= ipw_prom_hard_start_xmit,
 | |
| +	.ndo_change_mtu		= libipw_change_mtu,
 | |
|  	.ndo_set_mac_address 	= eth_mac_addr,
 | |
|  	.ndo_validate_addr	= eth_validate_addr,
 | |
|  };
 | |
| @@ -11586,9 +11587,6 @@ static int ipw_prom_alloc(struct ipw_pri
 | |
|  	priv->prom_net_dev->type = ARPHRD_IEEE80211_RADIOTAP;
 | |
|  	priv->prom_net_dev->netdev_ops = &ipw_prom_netdev_ops;
 | |
|  
 | |
| -	priv->prom_net_dev->min_mtu = 68;
 | |
| -	priv->prom_net_dev->max_mtu = LIBIPW_DATA_LEN;
 | |
| -
 | |
|  	priv->prom_priv->ieee->iw_mode = IW_MODE_MONITOR;
 | |
|  	SET_NETDEV_DEV(priv->prom_net_dev, &priv->pci_dev->dev);
 | |
|  
 | |
| @@ -11621,6 +11619,7 @@ static const struct net_device_ops ipw_n
 | |
|  	.ndo_set_rx_mode	= ipw_net_set_multicast_list,
 | |
|  	.ndo_set_mac_address	= ipw_net_set_mac_address,
 | |
|  	.ndo_start_xmit		= libipw_xmit,
 | |
| +	.ndo_change_mtu		= libipw_change_mtu,
 | |
|  	.ndo_validate_addr	= eth_validate_addr,
 | |
|  };
 | |
|  
 | |
| @@ -11730,9 +11729,6 @@ static int ipw_pci_probe(struct pci_dev
 | |
|  	net_dev->wireless_handlers = &ipw_wx_handler_def;
 | |
|  	net_dev->ethtool_ops = &ipw_ethtool_ops;
 | |
|  
 | |
| -	net_dev->min_mtu = 68;
 | |
| -	net_dev->max_mtu = LIBIPW_DATA_LEN;
 | |
| -
 | |
|  	err = sysfs_create_group(&pdev->dev.kobj, &ipw_attribute_group);
 | |
|  	if (err) {
 | |
|  		IPW_ERROR("failed to create sysfs device attributes\n");
 | |
| --- a/drivers/net/wireless/intel/ipw2x00/libipw.h
 | |
| +++ b/drivers/net/wireless/intel/ipw2x00/libipw.h
 | |
| @@ -948,6 +948,7 @@ static inline int libipw_is_cck_rate(u8
 | |
|  /* libipw.c */
 | |
|  void free_libipw(struct net_device *dev, int monitor);
 | |
|  struct net_device *alloc_libipw(int sizeof_priv, int monitor);
 | |
| +int libipw_change_mtu(struct net_device *dev, int new_mtu);
 | |
|  
 | |
|  void libipw_networks_age(struct libipw_device *ieee, unsigned long age_secs);
 | |
|  
 | |
| --- a/drivers/net/wireless/intel/ipw2x00/libipw_module.c
 | |
| +++ b/drivers/net/wireless/intel/ipw2x00/libipw_module.c
 | |
| @@ -118,6 +118,15 @@ static void libipw_networks_initialize(s
 | |
|  			      &ieee->network_free_list);
 | |
|  }
 | |
|  
 | |
| +int libipw_change_mtu(struct net_device *dev, int new_mtu)
 | |
| +{
 | |
| +	if ((new_mtu < 68) || (new_mtu > LIBIPW_DATA_LEN))
 | |
| +		return -EINVAL;
 | |
| +	dev->mtu = new_mtu;
 | |
| +	return 0;
 | |
| +}
 | |
| +EXPORT_SYMBOL(libipw_change_mtu);
 | |
| +
 | |
|  struct net_device *alloc_libipw(int sizeof_priv, int monitor)
 | |
|  {
 | |
|  	struct libipw_device *ieee;
 | |
| --- a/drivers/net/wireless/intersil/hostap/hostap_main.c
 | |
| +++ b/drivers/net/wireless/intersil/hostap/hostap_main.c
 | |
| @@ -765,6 +765,16 @@ static void hostap_set_multicast_list(st
 | |
|  }
 | |
|  
 | |
|  
 | |
| +static int prism2_change_mtu(struct net_device *dev, int new_mtu)
 | |
| +{
 | |
| +	if (new_mtu < PRISM2_MIN_MTU || new_mtu > PRISM2_MAX_MTU)
 | |
| +		return -EINVAL;
 | |
| +
 | |
| +	dev->mtu = new_mtu;
 | |
| +	return 0;
 | |
| +}
 | |
| +
 | |
| +
 | |
|  static void prism2_tx_timeout(struct net_device *dev)
 | |
|  {
 | |
|  	struct hostap_interface *iface;
 | |
| @@ -803,6 +813,7 @@ static const struct net_device_ops hosta
 | |
|  	.ndo_do_ioctl		= hostap_ioctl,
 | |
|  	.ndo_set_mac_address	= prism2_set_mac_address,
 | |
|  	.ndo_set_rx_mode	= hostap_set_multicast_list,
 | |
| +	.ndo_change_mtu 	= prism2_change_mtu,
 | |
|  	.ndo_tx_timeout 	= prism2_tx_timeout,
 | |
|  	.ndo_validate_addr	= eth_validate_addr,
 | |
|  };
 | |
| @@ -815,6 +826,7 @@ static const struct net_device_ops hosta
 | |
|  	.ndo_do_ioctl		= hostap_ioctl,
 | |
|  	.ndo_set_mac_address	= prism2_set_mac_address,
 | |
|  	.ndo_set_rx_mode	= hostap_set_multicast_list,
 | |
| +	.ndo_change_mtu 	= prism2_change_mtu,
 | |
|  	.ndo_tx_timeout 	= prism2_tx_timeout,
 | |
|  	.ndo_validate_addr	= eth_validate_addr,
 | |
|  };
 | |
| @@ -827,6 +839,7 @@ static const struct net_device_ops hosta
 | |
|  	.ndo_do_ioctl		= hostap_ioctl,
 | |
|  	.ndo_set_mac_address	= prism2_set_mac_address,
 | |
|  	.ndo_set_rx_mode	= hostap_set_multicast_list,
 | |
| +	.ndo_change_mtu 	= prism2_change_mtu,
 | |
|  	.ndo_tx_timeout 	= prism2_tx_timeout,
 | |
|  	.ndo_validate_addr	= eth_validate_addr,
 | |
|  };
 | |
| @@ -838,8 +851,6 @@ void hostap_setup_dev(struct net_device
 | |
|  
 | |
|  	iface = netdev_priv(dev);
 | |
|  	ether_setup(dev);
 | |
| -	dev->min_mtu = PRISM2_MIN_MTU;
 | |
| -	dev->max_mtu = PRISM2_MAX_MTU;
 | |
|  	dev->priv_flags &= ~IFF_TX_SKB_SHARING;
 | |
|  
 | |
|  	/* kernel callbacks */
 | |
| --- a/drivers/net/wireless/intersil/orinoco/main.c
 | |
| +++ b/drivers/net/wireless/intersil/orinoco/main.c
 | |
| @@ -322,6 +322,9 @@ int orinoco_change_mtu(struct net_device
 | |
|  {
 | |
|  	struct orinoco_private *priv = ndev_priv(dev);
 | |
|  
 | |
| +	if ((new_mtu < ORINOCO_MIN_MTU) || (new_mtu > ORINOCO_MAX_MTU))
 | |
| +		return -EINVAL;
 | |
| +
 | |
|  	/* MTU + encapsulation + header length */
 | |
|  	if ((new_mtu + ENCAPS_OVERHEAD + sizeof(struct ieee80211_hdr)) >
 | |
|  	     (priv->nicbuf_size - ETH_HLEN))
 | |
| @@ -2285,9 +2288,6 @@ int orinoco_if_add(struct orinoco_privat
 | |
|  	dev->base_addr = base_addr;
 | |
|  	dev->irq = irq;
 | |
|  
 | |
| -	dev->min_mtu = ORINOCO_MIN_MTU;
 | |
| -	dev->max_mtu = ORINOCO_MAX_MTU;
 | |
| -
 | |
|  	SET_NETDEV_DEV(dev, priv->dev);
 | |
|  	ret = register_netdev(dev);
 | |
|  	if (ret)
 |