소스 검색

updating wifi patch

Jake Day 6 년 전
부모
커밋
62f8f97613
1개의 변경된 파일226개의 추가작업 그리고 11개의 파일을 삭제
  1. 226 11
      patches/4.18/0008-wifi.patch

+ 226 - 11
patches/4.18/0008-wifi.patch

@@ -1,16 +1,231 @@
-From fcdceb24f246ff4ffebfcced57e8c10d332a2a0c Mon Sep 17 00:00:00 2001
-From: qzed <qzed@users.noreply.github.com>
-Date: Mon, 24 Dec 2018 14:21:12 +0100
-Subject: [PATCH 8/8] wifi
-
----
- scripts/leaking_addresses.pl | 0
- 1 file changed, 0 insertions(+), 0 deletions(-)
- mode change 100755 => 100644 scripts/leaking_addresses.pl
-
 diff --git a/scripts/leaking_addresses.pl b/scripts/leaking_addresses.pl
 old mode 100755
 new mode 100644
 -- 
 2.20.1
-
+diff --git a/drivers/net/wireless/marvell/mwifiex/11n_aggr.c b/drivers/net/wireless/marvell/mwifiex/11n_aggr.c
+index 042a1d07f686..fc9041f58e9f 100644
+--- a/drivers/net/wireless/marvell/mwifiex/11n_aggr.c
++++ b/drivers/net/wireless/marvell/mwifiex/11n_aggr.c
+@@ -200,8 +200,7 @@ mwifiex_11n_aggregate_pkt(struct mwifiex_private *priv,
+ 
+ 	do {
+ 		/* Check if AMSDU can accommodate this MSDU */
+-		if ((skb_aggr->len + skb_src->len + LLC_SNAP_LEN) >
+-		    adapter->tx_buf_size)
++		if (skb_tailroom(skb_aggr) < (skb_src->len + LLC_SNAP_LEN))
+ 			break;
+ 
+ 		skb_src = skb_dequeue(&pra_list->skb_head);
+diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
+index 4b5ae9098504..754c6f755c7b 100644
+--- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c
++++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
+@@ -428,7 +428,10 @@ mwifiex_cfg80211_set_power_mgmt(struct wiphy *wiphy,
+ 		mwifiex_dbg(priv->adapter, INFO,
+ 			    "info: ignore timeout value for IEEE Power Save\n");
+ 
+-	ps_mode = enabled;
++	//ps_mode = enabled;
++
++	mwifiex_dbg(priv->adapter, INFO, "overriding ps_mode to false\n");
++	ps_mode = 0;
+ 
+ 	return mwifiex_drv_set_power(priv, &ps_mode);
+ }
+diff --git a/drivers/net/wireless/marvell/mwifiex/cmdevt.c b/drivers/net/wireless/marvell/mwifiex/cmdevt.c
+index 9cfcdf6bec52..45a04eb66bc6 100644
+--- a/drivers/net/wireless/marvell/mwifiex/cmdevt.c
++++ b/drivers/net/wireless/marvell/mwifiex/cmdevt.c
+@@ -997,6 +997,7 @@ mwifiex_cmd_timeout_func(struct timer_list *t)
+ 		if (cmd_node->wait_q_enabled) {
+ 			adapter->cmd_wait_q.status = -ETIMEDOUT;
+ 			mwifiex_cancel_pending_ioctl(adapter);
++			adapter->cmd_sent = false;
+ 		}
+ 	}
+ 	if (adapter->hw_status == MWIFIEX_HW_STATUS_INITIALIZING) {
+diff --git a/drivers/net/wireless/marvell/mwifiex/main.c b/drivers/net/wireless/marvell/mwifiex/main.c
+index 510f6b8e717d..a8a030496a36 100644
+--- a/drivers/net/wireless/marvell/mwifiex/main.c
++++ b/drivers/net/wireless/marvell/mwifiex/main.c
+@@ -163,6 +163,7 @@ void mwifiex_queue_main_work(struct mwifiex_adapter *adapter)
+ 	spin_lock_irqsave(&adapter->main_proc_lock, flags);
+ 	if (adapter->mwifiex_processing) {
+ 		adapter->more_task_flag = true;
++		adapter->more_rx_task_flag = true;
+ 		spin_unlock_irqrestore(&adapter->main_proc_lock, flags);
+ 	} else {
+ 		spin_unlock_irqrestore(&adapter->main_proc_lock, flags);
+@@ -171,18 +172,20 @@ void mwifiex_queue_main_work(struct mwifiex_adapter *adapter)
+ }
+ EXPORT_SYMBOL_GPL(mwifiex_queue_main_work);
+ 
+-static void mwifiex_queue_rx_work(struct mwifiex_adapter *adapter)
++void mwifiex_queue_rx_work(struct mwifiex_adapter *adapter)
+ {
+ 	unsigned long flags;
+ 
+ 	spin_lock_irqsave(&adapter->rx_proc_lock, flags);
+ 	if (adapter->rx_processing) {
++		adapter->more_rx_task_flag = true;
+ 		spin_unlock_irqrestore(&adapter->rx_proc_lock, flags);
+ 	} else {
+ 		spin_unlock_irqrestore(&adapter->rx_proc_lock, flags);
+ 		queue_work(adapter->rx_workqueue, &adapter->rx_work);
+ 	}
+ }
++EXPORT_SYMBOL_GPL(mwifiex_queue_rx_work);
+ 
+ static int mwifiex_process_rx(struct mwifiex_adapter *adapter)
+ {
+@@ -192,6 +195,7 @@ static int mwifiex_process_rx(struct mwifiex_adapter *adapter)
+ 
+ 	spin_lock_irqsave(&adapter->rx_proc_lock, flags);
+ 	if (adapter->rx_processing || adapter->rx_locked) {
++		adapter->more_rx_task_flag = true;
+ 		spin_unlock_irqrestore(&adapter->rx_proc_lock, flags);
+ 		goto exit_rx_proc;
+ 	} else {
+@@ -199,6 +203,7 @@ static int mwifiex_process_rx(struct mwifiex_adapter *adapter)
+ 		spin_unlock_irqrestore(&adapter->rx_proc_lock, flags);
+ 	}
+ 
++rx_process_start:
+ 	/* Check for Rx data */
+ 	while ((skb = skb_dequeue(&adapter->rx_data_q))) {
+ 		atomic_dec(&adapter->rx_pending);
+@@ -220,6 +225,11 @@ static int mwifiex_process_rx(struct mwifiex_adapter *adapter)
+ 		}
+ 	}
+ 	spin_lock_irqsave(&adapter->rx_proc_lock, flags);
++	if (adapter->more_rx_task_flag) {
++		adapter->more_rx_task_flag = false;
++		spin_unlock_irqrestore(&adapter->rx_proc_lock, flags);
++		goto rx_process_start;
++	}
+ 	adapter->rx_processing = false;
+ 	spin_unlock_irqrestore(&adapter->rx_proc_lock, flags);
+ 
+@@ -283,11 +293,10 @@ int mwifiex_main_process(struct mwifiex_adapter *adapter)
+ 				mwifiex_process_hs_config(adapter);
+ 			if (adapter->if_ops.process_int_status)
+ 				adapter->if_ops.process_int_status(adapter);
++			if (adapter->rx_work_enabled && adapter->data_received)
++				mwifiex_queue_rx_work(adapter);
+ 		}
+ 
+-		if (adapter->rx_work_enabled && adapter->data_received)
+-			mwifiex_queue_rx_work(adapter);
+-
+ 		/* Need to wake up the card ? */
+ 		if ((adapter->ps_state == PS_STATE_SLEEP) &&
+ 		    (adapter->pm_wakeup_card_req &&
+diff --git a/drivers/net/wireless/marvell/mwifiex/main.h b/drivers/net/wireless/marvell/mwifiex/main.h
+index 69ac0a22c28c..14088344f7a1 100644
+--- a/drivers/net/wireless/marvell/mwifiex/main.h
++++ b/drivers/net/wireless/marvell/mwifiex/main.h
+@@ -903,6 +903,7 @@ struct mwifiex_adapter {
+ 	spinlock_t main_proc_lock;
+ 	u32 mwifiex_processing;
+ 	u8 more_task_flag;
++	u8 more_rx_task_flag;
+ 	u16 tx_buf_size;
+ 	u16 curr_tx_buf_size;
+ 	/* sdio single port rx aggregation capability */
+@@ -1693,6 +1694,7 @@ void mwifiex_upload_device_dump(struct mwifiex_adapter *adapter);
+ void *mwifiex_alloc_dma_align_buf(int rx_len, gfp_t flags);
+ void mwifiex_fw_dump_event(struct mwifiex_private *priv);
+ void mwifiex_queue_main_work(struct mwifiex_adapter *adapter);
++void mwifiex_queue_rx_work(struct mwifiex_adapter *adapter);
+ int mwifiex_get_wakeup_reason(struct mwifiex_private *priv, u16 action,
+ 			      int cmd_type,
+ 			      struct mwifiex_ds_wakeup_reason *wakeup_reason);
+diff --git a/drivers/net/wireless/marvell/mwifiex/pcie.c b/drivers/net/wireless/marvell/mwifiex/pcie.c
+index 0c42b7296ddd..1e471ed0de8b 100644
+--- a/drivers/net/wireless/marvell/mwifiex/pcie.c
++++ b/drivers/net/wireless/marvell/mwifiex/pcie.c
+@@ -1743,6 +1743,15 @@ static int mwifiex_pcie_process_cmd_complete(struct mwifiex_adapter *adapter)
+ 	}
+ 
+ 	rx_len = get_unaligned_le16(skb->data);
++
++	if (rx_len == 0) {
++		mwifiex_dbg(adapter, ERROR,
++				    "0 byte cmdrsp\n");
++		mwifiex_map_pci_memory(adapter, skb, MWIFIEX_UPLD_SIZE,
++					   PCI_DMA_FROMDEVICE);
++		return 0;
++	}
++
+ 	skb_put(skb, MWIFIEX_UPLD_SIZE - skb->len);
+ 	skb_trim(skb, rx_len);
+ 
+diff --git a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
+index 4ed10cf82f9a..f17af83f5669 100644
+--- a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
++++ b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
+@@ -2339,7 +2339,7 @@ int mwifiex_sta_init_cmd(struct mwifiex_private *priv, u8 first_sta, bool init)
+ 		if (ret)
+ 			return -1;
+ 
+-		if (priv->bss_type != MWIFIEX_BSS_TYPE_UAP) {
++		if (0 && priv->bss_type != MWIFIEX_BSS_TYPE_UAP) {
+ 			/* Enable IEEE PS by default */
+ 			priv->adapter->ps_mode = MWIFIEX_802_11_POWER_MODE_PSP;
+ 			ret = mwifiex_send_cmd(priv,
+@@ -2362,8 +2362,8 @@ int mwifiex_sta_init_cmd(struct mwifiex_private *priv, u8 first_sta, bool init)
+ 				return -1;
+ 		}
+ 
+-		mwifiex_send_cmd(priv, HostCmd_CMD_CHAN_REGION_CFG,
+-				 HostCmd_ACT_GEN_GET, 0, NULL, true);
++		//mwifiex_send_cmd(priv, HostCmd_CMD_CHAN_REGION_CFG,
++		//		 HostCmd_ACT_GEN_GET, 0, NULL, true);
+ 	}
+ 
+ 	/* get tx rate */
+@@ -2395,7 +2395,7 @@ int mwifiex_sta_init_cmd(struct mwifiex_private *priv, u8 first_sta, bool init)
+ 	if (ret)
+ 		return -1;
+ 
+-	if (!disable_auto_ds && first_sta &&
++	if (0 && !disable_auto_ds && first_sta &&
+ 	    priv->bss_type != MWIFIEX_BSS_TYPE_UAP) {
+ 		/* Enable auto deep sleep */
+ 		auto_ds.auto_ds = DEEP_SLEEP_ON;
+diff --git a/drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c b/drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c
+index 69e3b624adbb..884bad677cc3 100644
+--- a/drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c
++++ b/drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c
+@@ -48,9 +48,14 @@ mwifiex_process_cmdresp_error(struct mwifiex_private *priv,
+ 	struct host_cmd_ds_802_11_ps_mode_enh *pm;
+ 	unsigned long flags;
+ 
+-	mwifiex_dbg(adapter, ERROR,
+-		    "CMD_RESP: cmd %#x error, result=%#x\n",
+-		    resp->command, resp->result);
++	if (resp->command == 271 && resp->result == 2){
++		// ignore this command as the firmware does not support it
++	}
++	else {
++		mwifiex_dbg(adapter, ERROR,
++				"CMD_RESP: cmd %#x error, result=%#x\n",
++				resp->command, resp->result);
++	}
+ 
+ 	if (adapter->curr_cmd->wait_q_enabled)
+ 		adapter->cmd_wait_q.status = -1;
+diff --git a/drivers/net/wireless/marvell/mwifiex/usb.c b/drivers/net/wireless/marvell/mwifiex/usb.c
+index 88f4c89f89ba..4f740f6feec4 100644
+--- a/drivers/net/wireless/marvell/mwifiex/usb.c
++++ b/drivers/net/wireless/marvell/mwifiex/usb.c
+@@ -144,6 +144,8 @@ static int mwifiex_usb_recv(struct mwifiex_adapter *adapter,
+ 		skb_queue_tail(&adapter->rx_data_q, skb);
+ 		adapter->data_received = true;
+ 		atomic_inc(&adapter->rx_pending);
++		if (adapter->rx_work_enabled)
++			mwifiex_queue_rx_work(adapter);
+ 		break;
+ 	default:
+ 		mwifiex_dbg(adapter, ERROR,