Commit 7f65f611 authored by Kalle Valo's avatar Kalle Valo
Browse files
ath.git patches for v5.8. Major changes:

ath11k

* add 802.11 encapsulation offload on hardware support

* add htt_peer_stats_reset debugfs file

ath10k

* sdio: decrease power consumption

* sdio: add HTT TX bundle support to increase throughput

* sdio: add rx bitrate reporting

ath9k

* improvements to AR9002 calibration logic

carl9170

* remove buggy P2P_GO support
parents cbb1404f 14dd3a71
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -96,6 +96,17 @@ Optional properties:
- qcom,coexist-gpio-pin : gpio pin number  information to support coex
			  which will be used by wifi firmware.

* Subnodes
The ath10k wifi node can contain one optional firmware subnode.
Firmware subnode is needed when the platform does not have TustZone.
The firmware subnode must have:

- iommus:
	Usage: required
	Value type: <prop-encoded-array>
	Definition: A list of phandle and IOMMU specifier pairs.


Example (to supply PCI based wifi block details):

In this example, the node is defined as child node of the PCI controller.
@@ -196,4 +207,7 @@ wifi@18000000 {
		memory-region = <&wifi_msa_mem>;
		iommus = <&apps_smmu 0x0040 0x1>;
		qcom,msa-fixed-perm;
		wifi-firmware {
			iommus = <&apps_iommu 0xc22 0x1>;
		};
};
+1 −0
Original line number Diff line number Diff line
@@ -380,6 +380,7 @@ static int ath10k_bmi_lz_data_large(struct ath10k *ar, const void *buffer, u32 l
						  NULL, NULL);
		if (ret) {
			ath10k_warn(ar, "unable to write to the device\n");
			kfree(cmd);
			return ret;
		}

+1 −1
Original line number Diff line number Diff line
@@ -419,7 +419,7 @@ struct ce_pipe_config {
#define PIPEDIR_INOUT   3  /* bidirectional */

/* Establish a mapping between a service/direction and a pipe. */
struct service_to_pipe {
struct ce_service_to_pipe {
	__le32 service_id;
	__le32 pipedir;
	__le32 pipenum;
+18 −8
Original line number Diff line number Diff line
@@ -190,6 +190,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
		.uart_pin_workaround = true,
		.tx_stats_over_pktlog = false,
		.bmi_large_size_download = true,
		.supports_peer_stats_info = true,
	},
	{
		.id = QCA6174_HW_2_1_VERSION,
@@ -725,9 +726,9 @@ static int ath10k_init_sdio(struct ath10k *ar, enum ath10k_firmware_mode mode)

	param |= HI_ACS_FLAGS_SDIO_REDUCE_TX_COMPL_SET;

	/* Alternate credit size of 1544 as used by SDIO firmware is
	 * not big enough for mac80211 / native wifi frames. disable it
	 */
	if (mode == ATH10K_FIRMWARE_MODE_NORMAL)
		param |= HI_ACS_FLAGS_ALT_DATA_CREDIT_SIZE;
	else
		param &= ~HI_ACS_FLAGS_ALT_DATA_CREDIT_SIZE;

	if (mode == ATH10K_FIRMWARE_MODE_UTF)
@@ -2714,7 +2715,7 @@ int ath10k_core_start(struct ath10k *ar, enum ath10k_firmware_mode mode,
		goto err_hif_stop;
	}

	status = ath10k_hif_swap_mailbox(ar);
	status = ath10k_hif_start_post(ar);
	if (status) {
		ath10k_err(ar, "failed to swap mailbox: %d\n", status);
		goto err_hif_stop;
@@ -3277,6 +3278,7 @@ struct ath10k *ath10k_core_create(size_t priv_size, struct device *dev,
	init_completion(&ar->thermal.wmi_sync);
	init_completion(&ar->bss_survey_done);
	init_completion(&ar->peer_delete_done);
	init_completion(&ar->peer_stats_info_complete);

	INIT_DELAYED_WORK(&ar->scan.timeout, ath10k_scan_timeout_work);

@@ -3288,6 +3290,11 @@ struct ath10k *ath10k_core_create(size_t priv_size, struct device *dev,
	if (!ar->workqueue_aux)
		goto err_free_wq;

	ar->workqueue_tx_complete =
		create_singlethread_workqueue("ath10k_tx_complete_wq");
	if (!ar->workqueue_tx_complete)
		goto err_free_aux_wq;

	mutex_init(&ar->conf_mutex);
	mutex_init(&ar->dump_mutex);
	spin_lock_init(&ar->data_lock);
@@ -3315,7 +3322,7 @@ struct ath10k *ath10k_core_create(size_t priv_size, struct device *dev,

	ret = ath10k_coredump_create(ar);
	if (ret)
		goto err_free_aux_wq;
		goto err_free_tx_complete;

	ret = ath10k_debug_create(ar);
	if (ret)
@@ -3325,12 +3332,12 @@ struct ath10k *ath10k_core_create(size_t priv_size, struct device *dev,

err_free_coredump:
	ath10k_coredump_destroy(ar);

err_free_tx_complete:
	destroy_workqueue(ar->workqueue_tx_complete);
err_free_aux_wq:
	destroy_workqueue(ar->workqueue_aux);
err_free_wq:
	destroy_workqueue(ar->workqueue);

err_free_mac:
	ath10k_mac_destroy(ar);

@@ -3346,6 +3353,9 @@ void ath10k_core_destroy(struct ath10k *ar)
	flush_workqueue(ar->workqueue_aux);
	destroy_workqueue(ar->workqueue_aux);

	flush_workqueue(ar->workqueue_tx_complete);
	destroy_workqueue(ar->workqueue_tx_complete);

	ath10k_debug_destroy(ar);
	ath10k_coredump_destroy(ar);
	ath10k_htt_tx_destroy(&ar->htt);
+35 −1
Original line number Diff line number Diff line
@@ -149,6 +149,26 @@ static inline u32 host_interest_item_address(u32 item_offset)
	return QCA988X_HOST_INTEREST_ADDRESS + item_offset;
}

enum ath10k_phy_mode {
	ATH10K_PHY_MODE_LEGACY = 0,
	ATH10K_PHY_MODE_HT = 1,
	ATH10K_PHY_MODE_VHT = 2,
};

/* Data rate 100KBPS based on IE Index */
struct ath10k_index_ht_data_rate_type {
	u8   beacon_rate_index;
	u16  supported_rate[4];
};

/* Data rate 100KBPS based on IE Index */
struct ath10k_index_vht_data_rate_type {
	u8   beacon_rate_index;
	u16  supported_VHT80_rate[2];
	u16  supported_VHT40_rate[2];
	u16  supported_VHT20_rate[2];
};

struct ath10k_bmi {
	bool done_sent;
};
@@ -500,8 +520,14 @@ struct ath10k_sta {
	u16 peer_id;
	struct rate_info txrate;
	struct ieee80211_tx_info tx_info;
	u32 tx_retries;
	u32 tx_failed;
	u32 last_tx_bitrate;

	u32 rx_rate_code;
	u32 rx_bitrate_kbps;
	u32 tx_rate_code;
	u32 tx_bitrate_kbps;
	struct work_struct update_wk;
	u64 rx_duration;
	struct ath10k_htt_tx_stats *tx_stats;
@@ -949,6 +975,11 @@ struct ath10k {
	struct ieee80211_hw *hw;
	struct ieee80211_ops *ops;
	struct device *dev;
	struct msa_region {
		dma_addr_t paddr;
		u32 mem_size;
		void *vaddr;
	} msa;
	u8 mac_addr[ETH_ALEN];

	enum ath10k_hw_rev hw_rev;
@@ -1087,11 +1118,12 @@ struct ath10k {
	int last_wmi_vdev_start_status;
	struct completion vdev_setup_done;
	struct completion vdev_delete_done;
	struct completion peer_stats_info_complete;

	struct workqueue_struct *workqueue;
	/* Auxiliary workqueue */
	struct workqueue_struct *workqueue_aux;

	struct workqueue_struct *workqueue_tx_complete;
	/* prevents concurrent FW reconfiguration */
	struct mutex conf_mutex;

@@ -1132,6 +1164,8 @@ struct ath10k {

	struct work_struct register_work;
	struct work_struct restart_work;
	struct work_struct bundle_tx_work;
	struct work_struct tx_complete_work;

	/* cycle count is reported twice for each visited channel during scan.
	 * access protected by data_lock
Loading