mac80211: Refresh patches again
A wrong quilt configuration was used last time.
Fixes: ed1e234d87 ("mac80211: refresh patches")
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
			
			
This commit is contained in:
		| @@ -37,7 +37,7 @@ | |||||||
|  void ath10k_thermal_event_temperature(struct ath10k *ar, int temperature); |  void ath10k_thermal_event_temperature(struct ath10k *ar, int temperature); | ||||||
| --- a/local-symbols | --- a/local-symbols | ||||||
| +++ b/local-symbols | +++ b/local-symbols | ||||||
| @@ -143,6 +143,7 @@ ATH10K_SNOC= | @@ -142,6 +142,7 @@ ATH10K_SNOC= | ||||||
|  ATH10K_DEBUG= |  ATH10K_DEBUG= | ||||||
|  ATH10K_DEBUGFS= |  ATH10K_DEBUGFS= | ||||||
|  ATH10K_SPECTRAL= |  ATH10K_SPECTRAL= | ||||||
|   | |||||||
| @@ -29,6 +29,21 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| -		npend = ath9k_hw_numtxpending(ah, i); | -		npend = ath9k_hw_numtxpending(ah, i); | ||||||
| -		if (npend) | -		if (npend) | ||||||
| -			break; | -			break; | ||||||
|  | -	} | ||||||
|  | - | ||||||
|  | -	if (ah->external_reset && | ||||||
|  | -	    (npend || type == ATH9K_RESET_COLD)) { | ||||||
|  | -		int reset_err = 0; | ||||||
|  | - | ||||||
|  | -		ath_dbg(ath9k_hw_common(ah), RESET, | ||||||
|  | -			"reset MAC via external reset\n"); | ||||||
|  | - | ||||||
|  | -		reset_err = ah->external_reset(); | ||||||
|  | -		if (reset_err) { | ||||||
|  | -			ath_err(ath9k_hw_common(ah), | ||||||
|  | -				"External reset failed, err=%d\n", | ||||||
|  | -				reset_err); | ||||||
|  | -			return false; | ||||||
| +	if (type == ATH9K_RESET_COLD) | +	if (type == ATH9K_RESET_COLD) | ||||||
| +		return true; | +		return true; | ||||||
| + | + | ||||||
| @@ -44,47 +59,35 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| +		for (i = 0; i < AR_NUM_QCU; i++) { | +		for (i = 0; i < AR_NUM_QCU; i++) { | ||||||
| +			if (ath9k_hw_numtxpending(ah, i)) | +			if (ath9k_hw_numtxpending(ah, i)) | ||||||
| +				return true; | +				return true; | ||||||
| +		} |  | ||||||
|  		} |  		} | ||||||
|   | +	} | ||||||
| -	if (ah->external_reset && | + | ||||||
| -	    (npend || type == ATH9K_RESET_COLD)) { |  | ||||||
| -		int reset_err = 0; |  | ||||||
| +	return false; | +	return false; | ||||||
| +} | +} | ||||||
|   | + | ||||||
| -		ath_dbg(ath9k_hw_common(ah), RESET, |  | ||||||
| -			"reset MAC via external reset\n"); |  | ||||||
| +static bool ath9k_hw_external_reset(struct ath_hw *ah, int type) | +static bool ath9k_hw_external_reset(struct ath_hw *ah, int type) | ||||||
| +{ | +{ | ||||||
| +	int err; | +	int err; | ||||||
|   | + | ||||||
| -		reset_err = ah->external_reset(); |  | ||||||
| -		if (reset_err) { |  | ||||||
| -			ath_err(ath9k_hw_common(ah), |  | ||||||
| -				"External reset failed, err=%d\n", |  | ||||||
| -				reset_err); |  | ||||||
| -			return false; |  | ||||||
| -		} |  | ||||||
| +	if (!ah->external_reset || !ath9k_hw_need_external_reset(ah, type)) | +	if (!ah->external_reset || !ath9k_hw_need_external_reset(ah, type)) | ||||||
| +		return true; | +		return true; | ||||||
|   | + | ||||||
| -		REG_WRITE(ah, AR_RTC_RESET, 1); |  | ||||||
| +	ath_dbg(ath9k_hw_common(ah), RESET, | +	ath_dbg(ath9k_hw_common(ah), RESET, | ||||||
| +		"reset MAC via external reset\n"); | +		"reset MAC via external reset\n"); | ||||||
| + |   | ||||||
|  | -		REG_WRITE(ah, AR_RTC_RESET, 1); | ||||||
| +	err = ah->external_reset(); | +	err = ah->external_reset(); | ||||||
| +	if (err) { | +	if (err) { | ||||||
| +		ath_err(ath9k_hw_common(ah), | +		ath_err(ath9k_hw_common(ah), | ||||||
| +			"External reset failed, err=%d\n", err); | +			"External reset failed, err=%d\n", err); | ||||||
| +		return false; | +		return false; | ||||||
| +	} |  	} | ||||||
| + |   | ||||||
| +	if (AR_SREV_9550(ah)) { | +	if (AR_SREV_9550(ah)) { | ||||||
| +		REG_WRITE(ah, AR_RTC_RESET, 0); | +		REG_WRITE(ah, AR_RTC_RESET, 0); | ||||||
| +		udelay(10); | +		udelay(10); | ||||||
|  	} | +	} | ||||||
|   | + | ||||||
| +	REG_WRITE(ah, AR_RTC_RESET, 1); | +	REG_WRITE(ah, AR_RTC_RESET, 1); | ||||||
| +	udelay(10); | +	udelay(10); | ||||||
| + | + | ||||||
|   | |||||||
| @@ -82,7 +82,7 @@ | |||||||
|  	help |  	help | ||||||
| --- a/local-symbols | --- a/local-symbols | ||||||
| +++ b/local-symbols | +++ b/local-symbols | ||||||
| @@ -86,6 +86,7 @@ ADM8211= | @@ -85,6 +85,7 @@ ADM8211= | ||||||
|  ATH_COMMON= |  ATH_COMMON= | ||||||
|  WLAN_VENDOR_ATH= |  WLAN_VENDOR_ATH= | ||||||
|  ATH_DEBUG= |  ATH_DEBUG= | ||||||
|   | |||||||
| @@ -103,8 +103,7 @@ | |||||||
| +		      GFP_KERNEL); | +		      GFP_KERNEL); | ||||||
| +	if (!led) | +	if (!led) | ||||||
| +		return -ENOMEM; | +		return -ENOMEM; | ||||||
|   | + | ||||||
| -	ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin, val); |  | ||||||
| +	led->gpio = gpio = (struct gpio_led *) (led + 1); | +	led->gpio = gpio = (struct gpio_led *) (led + 1); | ||||||
| +	_name = (char *) (led->gpio + 1); | +	_name = (char *) (led->gpio + 1); | ||||||
| + | + | ||||||
| @@ -117,7 +116,8 @@ | |||||||
| +	ret = ath_add_led(sc, led); | +	ret = ath_add_led(sc, led); | ||||||
| +	if (unlikely(ret < 0)) | +	if (unlikely(ret < 0)) | ||||||
| +		kfree(led); | +		kfree(led); | ||||||
| + |   | ||||||
|  | -	ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin, val); | ||||||
| +	return ret; | +	return ret; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -125,11 +125,11 @@ | |||||||
|  { |  { | ||||||
| -	if (!sc->led_registered) | -	if (!sc->led_registered) | ||||||
| -		return; | -		return; | ||||||
| - |  | ||||||
| -	ath_led_brightness(&sc->led_cdev, LED_OFF); |  | ||||||
| -	led_classdev_unregister(&sc->led_cdev); |  | ||||||
| +	struct ath_led *led; | +	struct ath_led *led; | ||||||
|   |   | ||||||
|  | -	ath_led_brightness(&sc->led_cdev, LED_OFF); | ||||||
|  | -	led_classdev_unregister(&sc->led_cdev); | ||||||
|  | - | ||||||
| -	ath9k_hw_gpio_free(sc->sc_ah, sc->sc_ah->led_pin); | -	ath9k_hw_gpio_free(sc->sc_ah, sc->sc_ah->led_pin); | ||||||
| +	while (!list_empty(&sc->leds)) { | +	while (!list_empty(&sc->leds)) { | ||||||
| +		led = list_first_entry(&sc->leds, struct ath_led, list); | +		led = list_first_entry(&sc->leds, struct ath_led, list); | ||||||
|   | |||||||
| @@ -371,7 +371,7 @@ | |||||||
|   |   | ||||||
| --- a/local-symbols | --- a/local-symbols | ||||||
| +++ b/local-symbols | +++ b/local-symbols | ||||||
| @@ -113,6 +113,7 @@ ATH9K_WOW= | @@ -112,6 +112,7 @@ ATH9K_WOW= | ||||||
|  ATH9K_RFKILL= |  ATH9K_RFKILL= | ||||||
|  ATH9K_CHANNEL_CONTEXT= |  ATH9K_CHANNEL_CONTEXT= | ||||||
|  ATH9K_PCOEM= |  ATH9K_PCOEM= | ||||||
|   | |||||||
| @@ -114,7 +114,7 @@ v13: | |||||||
|  ath10k_core-$(CONFIG_DEV_COREDUMP) += coredump.o |  ath10k_core-$(CONFIG_DEV_COREDUMP) += coredump.o | ||||||
| --- a/local-symbols | --- a/local-symbols | ||||||
| +++ b/local-symbols | +++ b/local-symbols | ||||||
| @@ -146,6 +146,7 @@ ATH10K_DEBUG= | @@ -145,6 +145,7 @@ ATH10K_DEBUG= | ||||||
|  ATH10K_DEBUGFS= |  ATH10K_DEBUGFS= | ||||||
|  ATH10K_SPECTRAL= |  ATH10K_SPECTRAL= | ||||||
|  ATH10K_THERMAL= |  ATH10K_THERMAL= | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/local-symbols | --- a/local-symbols | ||||||
| +++ b/local-symbols | +++ b/local-symbols | ||||||
| @@ -333,6 +333,7 @@ RT2X00_LIB_FIRMWARE= | @@ -332,6 +332,7 @@ RT2X00_LIB_FIRMWARE= | ||||||
|  RT2X00_LIB_CRYPTO= |  RT2X00_LIB_CRYPTO= | ||||||
|  RT2X00_LIB_LEDS= |  RT2X00_LIB_LEDS= | ||||||
|  RT2X00_LIB_DEBUGFS= |  RT2X00_LIB_DEBUGFS= | ||||||
|   | |||||||
| @@ -22,15 +22,16 @@ | |||||||
| -	rfcsr = rt2800_rfcsr_read(rt2x00dev, 16); | -	rfcsr = rt2800_rfcsr_read(rt2x00dev, 16); | ||||||
| -	rt2x00_set_field8(&rfcsr, RFCSR16_SDM_MODE_MT7620, 0x80); | -	rt2x00_set_field8(&rfcsr, RFCSR16_SDM_MODE_MT7620, 0x80); | ||||||
| -	rt2800_rfcsr_write(rt2x00dev, 16, rfcsr); | -	rt2800_rfcsr_write(rt2x00dev, 16, rfcsr); | ||||||
|  | - | ||||||
|  | -	rfcsr = rt2800_rfcsr_read(rt2x00dev, 21); | ||||||
|  | -	rt2x00_set_field8(&rfcsr, RFCSR21_BIT8, 1); | ||||||
|  | -	rt2800_rfcsr_write(rt2x00dev, 21, rfcsr); | ||||||
| +	if (rt2800_hw_get_chipver(rt2x00dev) > 1) { | +	if (rt2800_hw_get_chipver(rt2x00dev) > 1) { | ||||||
| +		/* Default: XO=20MHz , SDM mode */ | +		/* Default: XO=20MHz , SDM mode */ | ||||||
| +		rfcsr = rt2800_rfcsr_read(rt2x00dev, 16); | +		rfcsr = rt2800_rfcsr_read(rt2x00dev, 16); | ||||||
| +		rt2x00_set_field8(&rfcsr, RFCSR16_SDM_MODE_MT7620, 0x80); | +		rt2x00_set_field8(&rfcsr, RFCSR16_SDM_MODE_MT7620, 0x80); | ||||||
| +		rt2800_rfcsr_write(rt2x00dev, 16, rfcsr); | +		rt2800_rfcsr_write(rt2x00dev, 16, rfcsr); | ||||||
|   | + | ||||||
| -	rfcsr = rt2800_rfcsr_read(rt2x00dev, 21); |  | ||||||
| -	rt2x00_set_field8(&rfcsr, RFCSR21_BIT8, 1); |  | ||||||
| -	rt2800_rfcsr_write(rt2x00dev, 21, rfcsr); |  | ||||||
| +		rfcsr = rt2800_rfcsr_read(rt2x00dev, 21); | +		rfcsr = rt2800_rfcsr_read(rt2x00dev, 21); | ||||||
| +		rt2x00_set_field8(&rfcsr, RFCSR21_BIT8, 1); | +		rt2x00_set_field8(&rfcsr, RFCSR21_BIT8, 1); | ||||||
| +		rt2800_rfcsr_write(rt2x00dev, 21, rfcsr); | +		rt2800_rfcsr_write(rt2x00dev, 21, rfcsr); | ||||||
| @@ -216,6 +217,10 @@ | |||||||
| -	rt2800_rfcsr_write(rt2x00dev, 28, 0x61); | -	rt2800_rfcsr_write(rt2x00dev, 28, 0x61); | ||||||
| -	rt2800_rfcsr_write(rt2x00dev, 29, 0xB5); | -	rt2800_rfcsr_write(rt2x00dev, 29, 0xB5); | ||||||
| -	rt2800_rfcsr_write(rt2x00dev, 43, 0x02); | -	rt2800_rfcsr_write(rt2x00dev, 43, 0x02); | ||||||
|  | - | ||||||
|  | -	rt2800_rfcsr_write(rt2x00dev, 28, 0x62); | ||||||
|  | -	rt2800_rfcsr_write(rt2x00dev, 29, 0xAD); | ||||||
|  | -	rt2800_rfcsr_write(rt2x00dev, 39, 0x80); | ||||||
| +	if (rt2800_hw_get_chipver(rt2x00dev) > 1) { | +	if (rt2800_hw_get_chipver(rt2x00dev) > 1) { | ||||||
| +		rt2800_rfcsr_write(rt2x00dev, 11, 0x21); | +		rt2800_rfcsr_write(rt2x00dev, 11, 0x21); | ||||||
| +		if (rt2800_clk_is_20mhz(rt2x00dev)) | +		if (rt2800_clk_is_20mhz(rt2x00dev)) | ||||||
| @@ -239,10 +244,7 @@ | |||||||
| +		rt2800_rfcsr_write(rt2x00dev, 29, 0xB5); | +		rt2800_rfcsr_write(rt2x00dev, 29, 0xB5); | ||||||
| +		rt2800_rfcsr_write(rt2x00dev, 43, 0x02); | +		rt2800_rfcsr_write(rt2x00dev, 43, 0x02); | ||||||
| +	} | +	} | ||||||
|   | + | ||||||
| -	rt2800_rfcsr_write(rt2x00dev, 28, 0x62); |  | ||||||
| -	rt2800_rfcsr_write(rt2x00dev, 29, 0xAD); |  | ||||||
| -	rt2800_rfcsr_write(rt2x00dev, 39, 0x80); |  | ||||||
| +	if (rt2800_hw_get_chipver(rt2x00dev) > 1 && | +	if (rt2800_hw_get_chipver(rt2x00dev) > 1 && | ||||||
| +	    rt2800_hw_get_chipeco(rt2x00dev) >= 2) { | +	    rt2800_hw_get_chipeco(rt2x00dev) >= 2) { | ||||||
| +		rt2800_rfcsr_write(rt2x00dev, 28, 0x62); | +		rt2800_rfcsr_write(rt2x00dev, 28, 0x62); | ||||||
| @@ -286,6 +288,33 @@ | |||||||
| -	rt2800_rfcsr_write_chanreg(rt2x00dev, 59, 0x6B); | -	rt2800_rfcsr_write_chanreg(rt2x00dev, 59, 0x6B); | ||||||
| -	rt2800_rfcsr_write_chanreg(rt2x00dev, 60, 0xF7); | -	rt2800_rfcsr_write_chanreg(rt2x00dev, 60, 0xF7); | ||||||
| -	rt2800_rfcsr_write_chanreg(rt2x00dev, 61, 0x09); | -	rt2800_rfcsr_write_chanreg(rt2x00dev, 61, 0x09); | ||||||
|  | - | ||||||
|  | -	rt2800_rfcsr_write_chanreg(rt2x00dev, 10, 0x51); | ||||||
|  | -	rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x06); | ||||||
|  | -	rt2800_rfcsr_write_chanreg(rt2x00dev, 19, 0xA7); | ||||||
|  | -	rt2800_rfcsr_write_chanreg(rt2x00dev, 28, 0x2C); | ||||||
|  | -	rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x64); | ||||||
|  | -	rt2800_rfcsr_write_chanreg(rt2x00dev, 8, 0x51); | ||||||
|  | -	rt2800_rfcsr_write_chanreg(rt2x00dev, 9, 0x36); | ||||||
|  | -	rt2800_rfcsr_write_chanreg(rt2x00dev, 11, 0x53); | ||||||
|  | -	rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x16); | ||||||
|  | - | ||||||
|  | -	rt2800_rfcsr_write_chanreg(rt2x00dev, 47, 0x6C); | ||||||
|  | -	rt2800_rfcsr_write_chanreg(rt2x00dev, 48, 0xFC); | ||||||
|  | -	rt2800_rfcsr_write_chanreg(rt2x00dev, 49, 0x1F); | ||||||
|  | -	rt2800_rfcsr_write_chanreg(rt2x00dev, 54, 0x27); | ||||||
|  | -	rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x66); | ||||||
|  | -	rt2800_rfcsr_write_chanreg(rt2x00dev, 59, 0x6B); | ||||||
|  | - | ||||||
|  | -	/* Initialize RF channel register for DRQFN */ | ||||||
|  | -	rt2800_rfcsr_write_chanreg(rt2x00dev, 43, 0xD3); | ||||||
|  | -	rt2800_rfcsr_write_chanreg(rt2x00dev, 44, 0xE3); | ||||||
|  | -	rt2800_rfcsr_write_chanreg(rt2x00dev, 45, 0xE5); | ||||||
|  | -	rt2800_rfcsr_write_chanreg(rt2x00dev, 47, 0x28); | ||||||
|  | -	rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x68); | ||||||
|  | -	rt2800_rfcsr_write_chanreg(rt2x00dev, 56, 0xF7); | ||||||
|  | -	rt2800_rfcsr_write_chanreg(rt2x00dev, 58, 0x02); | ||||||
|  | -	rt2800_rfcsr_write_chanreg(rt2x00dev, 60, 0xC7); | ||||||
| +	if (rt2800_hw_get_chipver(rt2x00dev) > 1) { | +	if (rt2800_hw_get_chipver(rt2x00dev) > 1) { | ||||||
| +		rt2800_rfcsr_write_chanreg(rt2x00dev, 9, 0x47); | +		rt2800_rfcsr_write_chanreg(rt2x00dev, 9, 0x47); | ||||||
| +		rt2800_rfcsr_write_chanreg(rt2x00dev, 10, 0x71); | +		rt2800_rfcsr_write_chanreg(rt2x00dev, 10, 0x71); | ||||||
| @@ -318,16 +347,7 @@ | |||||||
| +		rt2800_rfcsr_write_chanreg(rt2x00dev, 60, 0xF7); | +		rt2800_rfcsr_write_chanreg(rt2x00dev, 60, 0xF7); | ||||||
| +		rt2800_rfcsr_write_chanreg(rt2x00dev, 61, 0x09); | +		rt2800_rfcsr_write_chanreg(rt2x00dev, 61, 0x09); | ||||||
| +	} | +	} | ||||||
|   | + | ||||||
| -	rt2800_rfcsr_write_chanreg(rt2x00dev, 10, 0x51); |  | ||||||
| -	rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x06); |  | ||||||
| -	rt2800_rfcsr_write_chanreg(rt2x00dev, 19, 0xA7); |  | ||||||
| -	rt2800_rfcsr_write_chanreg(rt2x00dev, 28, 0x2C); |  | ||||||
| -	rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x64); |  | ||||||
| -	rt2800_rfcsr_write_chanreg(rt2x00dev, 8, 0x51); |  | ||||||
| -	rt2800_rfcsr_write_chanreg(rt2x00dev, 9, 0x36); |  | ||||||
| -	rt2800_rfcsr_write_chanreg(rt2x00dev, 11, 0x53); |  | ||||||
| -	rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x16); |  | ||||||
| +	if (rt2800_hw_get_chipver(rt2x00dev) > 1 && | +	if (rt2800_hw_get_chipver(rt2x00dev) > 1 && | ||||||
| +	    rt2800_hw_get_chipeco(rt2x00dev) >= 2) { | +	    rt2800_hw_get_chipeco(rt2x00dev) >= 2) { | ||||||
| +		rt2800_rfcsr_write_chanreg(rt2x00dev, 10, 0x51); | +		rt2800_rfcsr_write_chanreg(rt2x00dev, 10, 0x51); | ||||||
| @@ -339,13 +359,7 @@ | |||||||
| +		rt2800_rfcsr_write_chanreg(rt2x00dev, 9, 0x36); | +		rt2800_rfcsr_write_chanreg(rt2x00dev, 9, 0x36); | ||||||
| +		rt2800_rfcsr_write_chanreg(rt2x00dev, 11, 0x53); | +		rt2800_rfcsr_write_chanreg(rt2x00dev, 11, 0x53); | ||||||
| +		rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x16); | +		rt2800_rfcsr_write_chanreg(rt2x00dev, 14, 0x16); | ||||||
|   | + | ||||||
| -	rt2800_rfcsr_write_chanreg(rt2x00dev, 47, 0x6C); |  | ||||||
| -	rt2800_rfcsr_write_chanreg(rt2x00dev, 48, 0xFC); |  | ||||||
| -	rt2800_rfcsr_write_chanreg(rt2x00dev, 49, 0x1F); |  | ||||||
| -	rt2800_rfcsr_write_chanreg(rt2x00dev, 54, 0x27); |  | ||||||
| -	rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x66); |  | ||||||
| -	rt2800_rfcsr_write_chanreg(rt2x00dev, 59, 0x6B); |  | ||||||
| +		rt2800_rfcsr_write_chanreg(rt2x00dev, 47, 0x6C); | +		rt2800_rfcsr_write_chanreg(rt2x00dev, 47, 0x6C); | ||||||
| +		rt2800_rfcsr_write_chanreg(rt2x00dev, 48, 0xFC); | +		rt2800_rfcsr_write_chanreg(rt2x00dev, 48, 0xFC); | ||||||
| +		rt2800_rfcsr_write_chanreg(rt2x00dev, 49, 0x1F); | +		rt2800_rfcsr_write_chanreg(rt2x00dev, 49, 0x1F); | ||||||
| @@ -353,16 +367,7 @@ | |||||||
| +		rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x66); | +		rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x66); | ||||||
| +		rt2800_rfcsr_write_chanreg(rt2x00dev, 59, 0x6B); | +		rt2800_rfcsr_write_chanreg(rt2x00dev, 59, 0x6B); | ||||||
| +	} | +	} | ||||||
|   | + | ||||||
| -	/* Initialize RF channel register for DRQFN */ |  | ||||||
| -	rt2800_rfcsr_write_chanreg(rt2x00dev, 43, 0xD3); |  | ||||||
| -	rt2800_rfcsr_write_chanreg(rt2x00dev, 44, 0xE3); |  | ||||||
| -	rt2800_rfcsr_write_chanreg(rt2x00dev, 45, 0xE5); |  | ||||||
| -	rt2800_rfcsr_write_chanreg(rt2x00dev, 47, 0x28); |  | ||||||
| -	rt2800_rfcsr_write_chanreg(rt2x00dev, 55, 0x68); |  | ||||||
| -	rt2800_rfcsr_write_chanreg(rt2x00dev, 56, 0xF7); |  | ||||||
| -	rt2800_rfcsr_write_chanreg(rt2x00dev, 58, 0x02); |  | ||||||
| -	rt2800_rfcsr_write_chanreg(rt2x00dev, 60, 0xC7); |  | ||||||
| +	if (rt2800_hw_get_chippkg(rt2x00dev) == 0 && | +	if (rt2800_hw_get_chippkg(rt2x00dev) == 0 && | ||||||
| +	    rt2800_hw_get_chipver(rt2x00dev) == 1) { | +	    rt2800_hw_get_chipver(rt2x00dev) == 1) { | ||||||
| +		/* Initialize RF channel register for DRQFN */ | +		/* Initialize RF channel register for DRQFN */ | ||||||
|   | |||||||
| @@ -53,20 +53,22 @@ | |||||||
| -	idle = rt2800_register_read(rt2x00dev, CH_IDLE_STA); | -	idle = rt2800_register_read(rt2x00dev, CH_IDLE_STA); | ||||||
| -	busy = rt2800_register_read(rt2x00dev, CH_BUSY_STA); | -	busy = rt2800_register_read(rt2x00dev, CH_BUSY_STA); | ||||||
| -	busy_ext = rt2800_register_read(rt2x00dev, CH_BUSY_STA_SEC); | -	busy_ext = rt2800_register_read(rt2x00dev, CH_BUSY_STA_SEC); | ||||||
| +	survey->channel = &rt2x00dev->bands[band].channels[idx]; | - | ||||||
|   |  | ||||||
| -	if (idle || busy) { | -	if (idle || busy) { | ||||||
| -		survey->filled = SURVEY_INFO_TIME | | -		survey->filled = SURVEY_INFO_TIME | | ||||||
| -				 SURVEY_INFO_TIME_BUSY | | -				 SURVEY_INFO_TIME_BUSY | | ||||||
| -				 SURVEY_INFO_TIME_EXT_BUSY; | -				 SURVEY_INFO_TIME_EXT_BUSY; | ||||||
| +	survey->filled = SURVEY_INFO_TIME | | - | ||||||
| +			 SURVEY_INFO_TIME_BUSY | |  | ||||||
| +			 SURVEY_INFO_TIME_EXT_BUSY; |  | ||||||
|   |  | ||||||
| -		survey->time = (idle + busy) / 1000; | -		survey->time = (idle + busy) / 1000; | ||||||
| -		survey->time_busy = busy / 1000; | -		survey->time_busy = busy / 1000; | ||||||
| -		survey->time_ext_busy = busy_ext / 1000; | -		survey->time_ext_busy = busy_ext / 1000; | ||||||
| -	} | -	} | ||||||
|  | +	survey->channel = &rt2x00dev->bands[band].channels[idx]; | ||||||
|  | + | ||||||
|  | +	survey->filled = SURVEY_INFO_TIME | | ||||||
|  | +			 SURVEY_INFO_TIME_BUSY | | ||||||
|  | +			 SURVEY_INFO_TIME_EXT_BUSY; | ||||||
|  | + | ||||||
| +	survey->time = div_u64(chan_survey->time_idle + chan_survey->time_busy, 1000); | +	survey->time = div_u64(chan_survey->time_idle + chan_survey->time_busy, 1000); | ||||||
| +	survey->time_busy = div_u64(chan_survey->time_busy, 1000); | +	survey->time_busy = div_u64(chan_survey->time_busy, 1000); | ||||||
| +	survey->time_ext_busy = div_u64(chan_survey->time_ext_busy, 1000); | +	survey->time_ext_busy = div_u64(chan_survey->time_ext_busy, 1000); | ||||||
|   | |||||||
| @@ -166,7 +166,8 @@ | |||||||
|  #define AES_CCM_H |  #define AES_CCM_H | ||||||
|   |   | ||||||
| -#include "aead_api.h" | -#include "aead_api.h" | ||||||
| - | +#include <linux/crypto.h> | ||||||
|  |   | ||||||
| -#define CCM_AAD_LEN	32 | -#define CCM_AAD_LEN	32 | ||||||
| - | - | ||||||
| -static inline struct crypto_aead * | -static inline struct crypto_aead * | ||||||
| @@ -194,8 +195,7 @@ | |||||||
| -			    be16_to_cpup((__be16 *)aad), | -			    be16_to_cpup((__be16 *)aad), | ||||||
| -			    data, data_len, mic); | -			    data, data_len, mic); | ||||||
| -} | -} | ||||||
| +#include <linux/crypto.h> | - | ||||||
|   |  | ||||||
| -static inline void ieee80211_aes_key_free(struct crypto_aead *tfm) | -static inline void ieee80211_aes_key_free(struct crypto_aead *tfm) | ||||||
| -{ | -{ | ||||||
| -	return aead_key_free(tfm); | -	return aead_key_free(tfm); | ||||||
| @@ -331,10 +331,10 @@ | |||||||
|  #define AES_GCM_H |  #define AES_GCM_H | ||||||
|   |   | ||||||
| -#include "aead_api.h" | -#include "aead_api.h" | ||||||
| - |  | ||||||
| -#define GCM_AAD_LEN	32 |  | ||||||
| +#include <linux/crypto.h> | +#include <linux/crypto.h> | ||||||
|   |   | ||||||
|  | -#define GCM_AAD_LEN	32 | ||||||
|  | - | ||||||
| -static inline int ieee80211_aes_gcm_encrypt(struct crypto_aead *tfm, | -static inline int ieee80211_aes_gcm_encrypt(struct crypto_aead *tfm, | ||||||
| -					    u8 *j_0, u8 *aad,  u8 *data, | -					    u8 *j_0, u8 *aad,  u8 *data, | ||||||
| -					    size_t data_len, u8 *mic) | -					    size_t data_len, u8 *mic) | ||||||
|   | |||||||
| @@ -133,34 +133,37 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| -static void fq_recalc_backlog(struct fq *fq, | -static void fq_recalc_backlog(struct fq *fq, | ||||||
| -			      struct fq_tin *tin, | -			      struct fq_tin *tin, | ||||||
| -			      struct fq_flow *flow) | -			      struct fq_flow *flow) | ||||||
| +static struct fq_flow *fq_find_fattest_flow(struct fq *fq) | -{ | ||||||
|  { |  | ||||||
| -	struct fq_flow *i; | -	struct fq_flow *i; | ||||||
| +	struct fq_tin *tin; | - | ||||||
| +	struct fq_flow *flow = NULL; |  | ||||||
| +	u32 len = 0; |  | ||||||
| +	int i; |  | ||||||
|   |  | ||||||
| -	if (list_empty(&flow->backlogchain)) | -	if (list_empty(&flow->backlogchain)) | ||||||
| -		list_add_tail(&flow->backlogchain, &fq->backlogs); | -		list_add_tail(&flow->backlogchain, &fq->backlogs); | ||||||
| +	for_each_set_bit(i, fq->flows_bitmap, fq->flows_cnt) { | - | ||||||
| +		struct fq_flow *cur = &fq->flows[i]; |  | ||||||
| +		unsigned int cur_len; |  | ||||||
|   |  | ||||||
| -	i = flow; | -	i = flow; | ||||||
| -	list_for_each_entry_continue_reverse(i, &fq->backlogs, | -	list_for_each_entry_continue_reverse(i, &fq->backlogs, | ||||||
| -					     backlogchain) | -					     backlogchain) | ||||||
| -		if (i->backlog > flow->backlog) | -		if (i->backlog > flow->backlog) | ||||||
| -			break; | -			break; | ||||||
|  | +static struct fq_flow *fq_find_fattest_flow(struct fq *fq) | ||||||
|  | +{ | ||||||
|  | +	struct fq_tin *tin; | ||||||
|  | +	struct fq_flow *flow = NULL; | ||||||
|  | +	u32 len = 0; | ||||||
|  | +	int i; | ||||||
|  | + | ||||||
|  | +	for_each_set_bit(i, fq->flows_bitmap, fq->flows_cnt) { | ||||||
|  | +		struct fq_flow *cur = &fq->flows[i]; | ||||||
|  | +		unsigned int cur_len; | ||||||
|  | + | ||||||
| +		cur_len = cur->backlog; | +		cur_len = cur->backlog; | ||||||
| +		if (cur_len <= len) | +		if (cur_len <= len) | ||||||
| +			continue; | +			continue; | ||||||
|   | + | ||||||
| -	list_move(&flow->backlogchain, &i->backlogchain); |  | ||||||
| +		flow = cur; | +		flow = cur; | ||||||
| +		len = cur_len; | +		len = cur_len; | ||||||
| +	} | +	} | ||||||
| + |   | ||||||
|  | -	list_move(&flow->backlogchain, &i->backlogchain); | ||||||
| +	list_for_each_entry(tin, &fq->tin_backlog, tin_list) { | +	list_for_each_entry(tin, &fq->tin_backlog, tin_list) { | ||||||
| +		unsigned int cur_len = tin->default_flow.backlog; | +		unsigned int cur_len = tin->default_flow.backlog; | ||||||
| + | + | ||||||
|   | |||||||
| @@ -28,13 +28,14 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| -		 (!(key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) || | -		 (!(key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) || | ||||||
| -		  key->conf.cipher == WLAN_CIPHER_SUITE_TKIP)) | -		  key->conf.cipher == WLAN_CIPHER_SUITE_TKIP)) | ||||||
| -		offload = false; | -		offload = false; | ||||||
| +	    sdata->control_port_protocol == ehdr->h_proto)) | - | ||||||
| +		goto skip_offload; |  | ||||||
|   |  | ||||||
| -	if (offload) | -	if (offload) | ||||||
| -		ieee80211_8023_xmit(sdata, dev, sta, key, skb); | -		ieee80211_8023_xmit(sdata, dev, sta, key, skb); | ||||||
| -	else | -	else | ||||||
| -		ieee80211_subif_start_xmit(skb, dev); | -		ieee80211_subif_start_xmit(skb, dev); | ||||||
|  | +	    sdata->control_port_protocol == ehdr->h_proto)) | ||||||
|  | +		goto skip_offload; | ||||||
|  |   | ||||||
| +	key = rcu_dereference(sta->ptk[sta->ptk_idx]); | +	key = rcu_dereference(sta->ptk[sta->ptk_idx]); | ||||||
| +	if (!key) | +	if (!key) | ||||||
| +		key = rcu_dereference(sdata->default_unicast_key); | +		key = rcu_dereference(sdata->default_unicast_key); | ||||||
| @@ -45,7 +46,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| + | + | ||||||
| +	ieee80211_8023_xmit(sdata, dev, sta, key, skb); | +	ieee80211_8023_xmit(sdata, dev, sta, key, skb); | ||||||
| +	goto out; | +	goto out; | ||||||
|   | + | ||||||
| +skip_offload: | +skip_offload: | ||||||
| +	ieee80211_subif_start_xmit(skb, dev); | +	ieee80211_subif_start_xmit(skb, dev); | ||||||
|  out: |  out: | ||||||
|   | |||||||
| @@ -27,8 +27,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| -	if (!mi->avg_ampdu_len) | -	if (!mi->avg_ampdu_len) | ||||||
| -		return AVG_AMPDU_SIZE; | -		return AVG_AMPDU_SIZE; | ||||||
| +	int duration; | +	int duration; | ||||||
|   | + | ||||||
| -	return MINSTREL_TRUNC(mi->avg_ampdu_len); |  | ||||||
| +	if (mi->avg_ampdu_len) | +	if (mi->avg_ampdu_len) | ||||||
| +		return MINSTREL_TRUNC(mi->avg_ampdu_len); | +		return MINSTREL_TRUNC(mi->avg_ampdu_len); | ||||||
| + | + | ||||||
| @@ -36,7 +35,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| +		return 1; | +		return 1; | ||||||
| + | + | ||||||
| +	duration = minstrel_get_duration(mi->max_tp_rate[0]); | +	duration = minstrel_get_duration(mi->max_tp_rate[0]); | ||||||
| + |   | ||||||
|  | -	return MINSTREL_TRUNC(mi->avg_ampdu_len); | ||||||
| +	if (duration > 400 * 1000) | +	if (duration > 400 * 1000) | ||||||
| +		return 2; | +		return 2; | ||||||
| + | + | ||||||
|   | |||||||
| @@ -179,14 +179,14 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| +	if (!rate) | +	if (!rate) | ||||||
|  		return; |  		return; | ||||||
| -	} | -	} | ||||||
|   | - | ||||||
| -	i = 0; | -	i = 0; | ||||||
| -	if (n_rates > 1) { | -	if (n_rates > 1) { | ||||||
| -		random = prandom_u32(); | -		random = prandom_u32(); | ||||||
| -		i = random % n_rates; | -		i = random % n_rates; | ||||||
| -	} | -	} | ||||||
| -	probe_rate = rates[i]; | -	probe_rate = rates[i]; | ||||||
| - |   | ||||||
| -out: | -out: | ||||||
| -	mi->sample_rate = probe_rate; | -	mi->sample_rate = probe_rate; | ||||||
| +	mi->sample_rate = rate; | +	mi->sample_rate = rate; | ||||||
| @@ -584,13 +584,13 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| - | - | ||||||
| -	if (!(mi->supported[sample_group] & BIT(sample_idx))) | -	if (!(mi->supported[sample_group] & BIT(sample_idx))) | ||||||
| -		return -1; | -		return -1; | ||||||
| - | +	u8 seq; | ||||||
|  |   | ||||||
| -	mrs = &mg->rates[sample_idx]; | -	mrs = &mg->rates[sample_idx]; | ||||||
| -	sample_idx += MI_RATE(sample_group, 0); | -	sample_idx += MI_RATE(sample_group, 0); | ||||||
| - | - | ||||||
| -	tp_rate1 = mi->max_tp_rate[0]; | -	tp_rate1 = mi->max_tp_rate[0]; | ||||||
| +	u8 seq; | - | ||||||
|   |  | ||||||
| -	/* Set tp_rate2 to the second highest max_tp_rate */ | -	/* Set tp_rate2 to the second highest max_tp_rate */ | ||||||
| -	if (minstrel_get_duration(mi->max_tp_rate[0]) > | -	if (minstrel_get_duration(mi->max_tp_rate[0]) > | ||||||
| -	    minstrel_get_duration(mi->max_tp_rate[1])) { | -	    minstrel_get_duration(mi->max_tp_rate[1])) { | ||||||
| @@ -673,8 +673,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| -	else | -	else | ||||||
| -		sample_idx = minstrel_get_sample_rate(mp, mi); | -		sample_idx = minstrel_get_sample_rate(mp, mi); | ||||||
| +		return; | +		return; | ||||||
|   | + | ||||||
| -	if (sample_idx < 0) |  | ||||||
| +	if (mp->hw->max_rates == 1 && mp->sample_switch && | +	if (mp->hw->max_rates == 1 && mp->sample_switch && | ||||||
| +	    (mi->total_packets_cur >= SAMPLE_SWITCH_THR || | +	    (mi->total_packets_cur >= SAMPLE_SWITCH_THR || | ||||||
| +	     mp->sample_switch == 1)) | +	     mp->sample_switch == 1)) | ||||||
| @@ -682,7 +681,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| + | + | ||||||
| +	if (time_is_before_jiffies(mi->sample_time)) | +	if (time_is_before_jiffies(mi->sample_time)) | ||||||
| +		return; | +		return; | ||||||
| + |   | ||||||
|  | -	if (sample_idx < 0) | ||||||
| +	mi->sample_time = jiffies + MINSTREL_SAMPLE_INTERVAL; | +	mi->sample_time = jiffies + MINSTREL_SAMPLE_INTERVAL; | ||||||
| +	sample_idx = minstrel_ht_get_sample_rate(mp, mi); | +	sample_idx = minstrel_ht_get_sample_rate(mp, mi); | ||||||
| +	if (!sample_idx) | +	if (!sample_idx) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Hauke Mehrtens
					Hauke Mehrtens