linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: <yhchuang@realtek.com>
To: <kvalo@codeaurora.org>
Cc: <Larry.Finger@lwfinger.net>, <tehuang@realtek.com>,
	<briannorris@chromium.org>, <sgruszka@redhat.com>,
	<linux-wireless@vger.kernel.org>
Subject: [PATCH 15/24] rtw88: extract utility functions into util.c
Date: Thu, 31 Jan 2019 20:21:28 +0800	[thread overview]
Message-ID: <1548937297-14660-16-git-send-email-yhchuang@realtek.com> (raw)
In-Reply-To: <1548937297-14660-1-git-send-email-yhchuang@realtek.com>

From: Yan-Hsuan Chuang <yhchuang@realtek.com>

Move functions that might be used as utilities, such as
lte_coex_[read/write] and registers restore, into util.* files.

Besides, hardware polling and some vif/sta iteration wrappers are also
categorized into utilitiy functions as well.

Signed-off-by: Yan-Hsuan Chuang <yhchuang@realtek.com>
---
 drivers/net/wireless/realtek/rtw88/Makefile |  1 +
 drivers/net/wireless/realtek/rtw88/mac.c    | 53 +--------------------
 drivers/net/wireless/realtek/rtw88/main.h   | 46 +++---------------
 drivers/net/wireless/realtek/rtw88/util.c   | 72 +++++++++++++++++++++++++++++
 drivers/net/wireless/realtek/rtw88/util.h   | 34 ++++++++++++++
 5 files changed, 115 insertions(+), 91 deletions(-)
 create mode 100644 drivers/net/wireless/realtek/rtw88/util.c
 create mode 100644 drivers/net/wireless/realtek/rtw88/util.h

diff --git a/drivers/net/wireless/realtek/rtw88/Makefile b/drivers/net/wireless/realtek/rtw88/Makefile
index d70782a..da5e36e 100644
--- a/drivers/net/wireless/realtek/rtw88/Makefile
+++ b/drivers/net/wireless/realtek/rtw88/Makefile
@@ -1,6 +1,7 @@
 obj-$(CONFIG_RTW88_CORE)	+= rtw88.o
 rtw88-y += main.o \
 	   mac80211.o \
+	   util.o \
 	   debug.o \
 	   tx.o \
 	   rx.o \
diff --git a/drivers/net/wireless/realtek/rtw88/mac.c b/drivers/net/wireless/realtek/rtw88/mac.c
index 126e489..c83a4df 100644
--- a/drivers/net/wireless/realtek/rtw88/mac.c
+++ b/drivers/net/wireless/realtek/rtw88/mac.c
@@ -304,35 +304,6 @@ void rtw_mac_power_off(struct rtw_dev *rtwdev)
 	rtw_mac_power_switch(rtwdev, false);
 }
 
-static void
-restore_mac_reg(struct rtw_dev *rtwdev, struct rtw_backup_info *bckp, u32 num)
-{
-	u8 len;
-	u32 reg;
-	u32 val;
-	int i;
-
-	for (i = 0; i < num; i++, bckp++) {
-		len = bckp->len;
-		reg = bckp->reg;
-		val = bckp->val;
-
-		switch (len) {
-		case 1:
-			rtw_write8(rtwdev, reg, (u8)val);
-			break;
-		case 2:
-			rtw_write16(rtwdev, reg, (u16)val);
-			break;
-		case 4:
-			rtw_write32(rtwdev, reg, (u32)val);
-			break;
-		default:
-			break;
-		}
-	}
-}
-
 static bool check_firmware_size(const u8 *data, u32 size)
 {
 	u32 dmem_size;
@@ -355,28 +326,6 @@ static bool check_firmware_size(const u8 *data, u32 size)
 	return true;
 }
 
-static bool ltecoex_read_reg(struct rtw_dev *rtwdev, u16 offset, u32 *val)
-{
-	if (!check_hw_ready(rtwdev, LTECOEX_ACCESS_CTRL, LTECOEX_READY, 1))
-		return false;
-
-	rtw_write32(rtwdev, LTECOEX_ACCESS_CTRL, 0x800F0000 | offset);
-	*val = rtw_read32(rtwdev, LTECOEX_READ_DATA);
-
-	return true;
-}
-
-static bool ltecoex_reg_write(struct rtw_dev *rtwdev, u16 offset, u32 value)
-{
-	if (!check_hw_ready(rtwdev, LTECOEX_ACCESS_CTRL, LTECOEX_READY, 1))
-		return false;
-
-	rtw_write32(rtwdev, LTECOEX_WRITE_DATA, value);
-	rtw_write32(rtwdev, LTECOEX_ACCESS_CTRL, 0xC00F0000 | offset);
-
-	return true;
-}
-
 static void wlan_cpu_enable(struct rtw_dev *rtwdev, bool enable)
 {
 	if (enable) {
@@ -459,7 +408,7 @@ static void download_firmware_reg_restore(struct rtw_dev *rtwdev,
 					  struct rtw_backup_info *bckp,
 					  u8 bckp_num)
 {
-	restore_mac_reg(rtwdev, bckp, bckp_num);
+	rtw_restore_reg(rtwdev, bckp, bckp_num);
 }
 
 #define TX_DESC_SIZE 48
diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h
index fb7ea58..6aa3062 100644
--- a/drivers/net/wireless/realtek/rtw88/main.h
+++ b/drivers/net/wireless/realtek/rtw88/main.h
@@ -12,6 +12,8 @@
 #include <linux/bitops.h>
 #include <linux/bitfield.h>
 
+#include "util.h"
+
 #define RTW_MAX_MAC_ID_NUM		32
 #define RTW_MAX_SEC_CAM_NUM		32
 
@@ -1080,47 +1082,13 @@ static inline void rtw_flag_set(struct rtw_dev *rtwdev, enum rtw_flags flag)
 	set_bit(flag, rtwdev->flags);
 }
 
-static inline u8 *get_hdr_bssid(struct ieee80211_hdr *hdr)
-{
-	__le16 fc = hdr->frame_control;
-	u8 *bssid;
-
-	if (ieee80211_has_tods(fc))
-		bssid = hdr->addr1;
-	else if (ieee80211_has_fromds(fc))
-		bssid = hdr->addr2;
-	else
-		bssid = hdr->addr3;
-
-	return bssid;
-}
-
-static inline bool check_hw_ready(struct rtw_dev *rtwdev,
-				  u32 addr, u32 mask, u32 target)
-{
-	u32 cnt;
-
-	for (cnt = 0; cnt < 1000; cnt++) {
-		if (rtw_read32_mask(rtwdev, addr, mask) == target)
-			return true;
-
-		udelay(10);
-	}
-
-	return false;
-}
-
-#define rtw_iterate_vifs(rtwdev, iterator, data)                               \
-	ieee80211_iterate_active_interfaces(rtwdev->hw,                        \
-			IEEE80211_IFACE_ITER_NORMAL, iterator, data)
-#define rtw_iterate_vifs_atomic(rtwdev, iterator, data)                        \
-	ieee80211_iterate_active_interfaces_atomic(rtwdev->hw,                 \
-			IEEE80211_IFACE_ITER_NORMAL, iterator, data)
-#define rtw_iterate_stas_atomic(rtwdev, iterator, data)                        \
-	ieee80211_iterate_stations_atomic(rtwdev->hw, iterator, data)
-
 void rtw_get_channel_params(struct cfg80211_chan_def *chandef,
 			    struct rtw_channel_params *ch_param);
+bool check_hw_ready(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 target);
+bool ltecoex_read_reg(struct rtw_dev *rtwdev, u16 offset, u32 *val);
+bool ltecoex_reg_write(struct rtw_dev *rtwdev, u16 offset, u32 value);
+void rtw_restore_reg(struct rtw_dev *rtwdev,
+		     struct rtw_backup_info *bckp, u32 num);
 void rtw_set_channel(struct rtw_dev *rtwdev);
 void rtw_vif_port_config(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif,
 			 u32 config);
diff --git a/drivers/net/wireless/realtek/rtw88/util.c b/drivers/net/wireless/realtek/rtw88/util.c
new file mode 100644
index 0000000..9a03a40
--- /dev/null
+++ b/drivers/net/wireless/realtek/rtw88/util.c
@@ -0,0 +1,72 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright(c) 2018  Realtek Corporation.
+ */
+
+#include "main.h"
+#include "util.h"
+#include "reg.h"
+
+bool check_hw_ready(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 target)
+{
+	u32 cnt;
+
+	for (cnt = 0; cnt < 1000; cnt++) {
+		if (rtw_read32_mask(rtwdev, addr, mask) == target)
+			return true;
+
+		udelay(10);
+	}
+
+	return false;
+}
+
+bool ltecoex_read_reg(struct rtw_dev *rtwdev, u16 offset, u32 *val)
+{
+	if (!check_hw_ready(rtwdev, LTECOEX_ACCESS_CTRL, LTECOEX_READY, 1))
+		return false;
+
+	rtw_write32(rtwdev, LTECOEX_ACCESS_CTRL, 0x800F0000 | offset);
+	*val = rtw_read32(rtwdev, LTECOEX_READ_DATA);
+
+	return true;
+}
+
+bool ltecoex_reg_write(struct rtw_dev *rtwdev, u16 offset, u32 value)
+{
+	if (!check_hw_ready(rtwdev, LTECOEX_ACCESS_CTRL, LTECOEX_READY, 1))
+		return false;
+
+	rtw_write32(rtwdev, LTECOEX_WRITE_DATA, value);
+	rtw_write32(rtwdev, LTECOEX_ACCESS_CTRL, 0xC00F0000 | offset);
+
+	return true;
+}
+
+void rtw_restore_reg(struct rtw_dev *rtwdev,
+		     struct rtw_backup_info *bckp, u32 num)
+{
+	u8 len;
+	u32 reg;
+	u32 val;
+	int i;
+
+	for (i = 0; i < num; i++, bckp++) {
+		len = bckp->len;
+		reg = bckp->reg;
+		val = bckp->val;
+
+		switch (len) {
+		case 1:
+			rtw_write8(rtwdev, reg, (u8)val);
+			break;
+		case 2:
+			rtw_write16(rtwdev, reg, (u16)val);
+			break;
+		case 4:
+			rtw_write32(rtwdev, reg, (u32)val);
+			break;
+		default:
+			break;
+		}
+	}
+}
diff --git a/drivers/net/wireless/realtek/rtw88/util.h b/drivers/net/wireless/realtek/rtw88/util.h
new file mode 100644
index 0000000..aa8f07b
--- /dev/null
+++ b/drivers/net/wireless/realtek/rtw88/util.h
@@ -0,0 +1,34 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/* Copyright(c) 2018  Realtek Corporation.
+ */
+
+#ifndef __RTW_UTIL_H__
+#define __RTW_UTIL_H__
+
+struct rtw_dev;
+
+#define rtw_iterate_vifs(rtwdev, iterator, data)                               \
+	ieee80211_iterate_active_interfaces(rtwdev->hw,                        \
+			IEEE80211_IFACE_ITER_NORMAL, iterator, data)
+#define rtw_iterate_vifs_atomic(rtwdev, iterator, data)                        \
+	ieee80211_iterate_active_interfaces_atomic(rtwdev->hw,                 \
+			IEEE80211_IFACE_ITER_NORMAL, iterator, data)
+#define rtw_iterate_stas_atomic(rtwdev, iterator, data)                        \
+	ieee80211_iterate_stations_atomic(rtwdev->hw, iterator, data)
+
+static inline u8 *get_hdr_bssid(struct ieee80211_hdr *hdr)
+{
+	__le16 fc = hdr->frame_control;
+	u8 *bssid;
+
+	if (ieee80211_has_tods(fc))
+		bssid = hdr->addr1;
+	else if (ieee80211_has_fromds(fc))
+		bssid = hdr->addr2;
+	else
+		bssid = hdr->addr3;
+
+	return bssid;
+}
+
+#endif
-- 
2.7.4


  parent reply	other threads:[~2019-01-31 12:22 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-31 12:21 [PATCH 00/24] rtw88: major fixes for 8822c to have stable functionalities yhchuang
2019-01-31 12:21 ` [PATCH 01/24] rtw88: report correct tx status if mac80211 requested one yhchuang
2019-02-09  3:08   ` Brian Norris
2019-02-11  4:31     ` Tony Chuang
2019-02-11 19:21       ` Brian Norris
2019-01-31 12:21 ` [PATCH 02/24] rtw88: add get_c2h_from_skb for extracting c2h commands yhchuang
2019-01-31 12:21 ` [PATCH 03/24] rtw88: can not support vif beacon filter actually yhchuang
2019-01-31 12:21 ` [PATCH 04/24] rtw88: fix incorrect bit definition for RF mode yhchuang
2019-01-31 12:21 ` [PATCH 05/24] rtw88: add a delay after writing a rf register yhchuang
2019-01-31 12:21 ` [PATCH 06/24] rtw88: 8822c: correct crystal setting yhchuang
2019-01-31 12:21 ` [PATCH 07/24] rtw88: 8822c: update efuse table as released yhchuang
2019-02-01  2:26   ` Brian Norris
2019-01-31 12:21 ` [PATCH 08/24] rtw88: 8822c: update pwr_seq to v12 yhchuang
2019-01-31 12:21 ` [PATCH 09/24] rtw88: 8822c: update phy parameter to v27 yhchuang
2019-01-31 12:21 ` [PATCH 10/24] rtw88: 8822c: update channel setting yhchuang
2019-01-31 12:21 ` [PATCH 11/24] rtw88: 8822c: update trx mode setting yhchuang
2019-01-31 12:21 ` [PATCH 12/24] rtw88: add module param to switch lps supportability yhchuang
2019-01-31 12:21 ` [PATCH 13/24] rtw88: add 8822c tx power index table parsing support yhchuang
2019-01-31 12:21 ` [PATCH 14/24] rtw88: add 8822c tx agc support yhchuang
2019-01-31 12:21 ` yhchuang [this message]
2019-01-31 12:21 ` [PATCH 16/24] rtw88: 8822c: add support for DACK yhchuang
2019-01-31 12:21 ` [PATCH 17/24] rtw88: 8822c: fix RSC setting yhchuang
2019-01-31 12:21 ` [PATCH 18/24] rtw88: 8822c: set ack timeout yhchuang
2019-01-31 12:21 ` [PATCH 19/24] rtw88: 8822c: do not reset MAC Rx before sending CCK packet yhchuang
2019-01-31 12:21 ` [PATCH 20/24] rtw88: 8822c: parse packet by sigb length yhchuang
2019-01-31 12:21 ` [PATCH 21/24] rtw88: do not count dummy tail into rx counter yhchuang
2019-01-31 12:21 ` [PATCH 22/24] rtw88: set OFDM ctx to receive ack after cts2self yhchuang
2019-01-31 12:21 ` [PATCH 23/24] rtw88: fix slot time value yhchuang
2019-01-31 12:21 ` [PATCH 24/24] rtw88: 8822b: turn rtw_write32s_mask into macro yhchuang
2019-02-01  1:24   ` Brian Norris
2019-02-11  2:29     ` Tony Chuang
2019-02-01  2:40 ` [PATCH 00/24] rtw88: major fixes for 8822c to have stable functionalities Brian Norris
2019-02-11  2:30   ` Tony Chuang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1548937297-14660-16-git-send-email-yhchuang@realtek.com \
    --to=yhchuang@realtek.com \
    --cc=Larry.Finger@lwfinger.net \
    --cc=briannorris@chromium.org \
    --cc=kvalo@codeaurora.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=sgruszka@redhat.com \
    --cc=tehuang@realtek.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).