OSDN Git Service

mt76x2: move mt76x2 mcu shared code in mt76x2_mcu_common.c
authorLorenzo Bianconi <lorenzo.bianconi@redhat.com>
Sun, 9 Sep 2018 21:58:03 +0000 (23:58 +0200)
committerFelix Fietkau <nbd@nbd.name>
Wed, 19 Sep 2018 10:31:40 +0000 (12:31 +0200)
Move shared mt76x2 {pcie/usb} mcu shared code in a common file
and remove duplicated code

Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/Makefile
drivers/net/wireless/mediatek/mt76/mt76x2_mcu.c
drivers/net/wireless/mediatek/mt76/mt76x2_mcu_common.c [new file with mode: 0644]
drivers/net/wireless/mediatek/mt76/mt76x2u.h
drivers/net/wireless/mediatek/mt76/mt76x2u_init.c
drivers/net/wireless/mediatek/mt76/mt76x2u_mcu.c
drivers/net/wireless/mediatek/mt76/mt76x2u_phy.c

index 6a5c224..4d25b5c 100644 (file)
@@ -22,7 +22,7 @@ mt76x02-usb-y := mt76x02_usb_mcu.o mt76x02_usb_core.o
 mt76x2-common-y := \
        mt76x2_eeprom.o mt76x2_tx_common.o mt76x2_mac_common.o \
        mt76x2_init_common.o mt76x2_common.o mt76x2_phy_common.o \
-       mt76x2_debugfs.o
+       mt76x2_debugfs.o mt76x2_mcu_common.o
 
 mt76x2e-y := \
        mt76x2_pci.o mt76x2_dma.o \
index edcee8d..d808892 100644 (file)
@@ -165,66 +165,6 @@ error:
        return -ENOENT;
 }
 
-int mt76x2_mcu_load_cr(struct mt76x2_dev *dev, u8 type, u8 temp_level,
-                      u8 channel)
-{
-       struct sk_buff *skb;
-       struct {
-               u8 cr_mode;
-               u8 temp;
-               u8 ch;
-               u8 _pad0;
-
-               __le32 cfg;
-       } __packed __aligned(4) msg = {
-               .cr_mode = type,
-               .temp = temp_level,
-               .ch = channel,
-       };
-       u32 val;
-
-       val = BIT(31);
-       val |= (mt76x2_eeprom_get(dev, MT_EE_NIC_CONF_0) >> 8) & 0x00ff;
-       val |= (mt76x2_eeprom_get(dev, MT_EE_NIC_CONF_1) << 8) & 0xff00;
-       msg.cfg = cpu_to_le32(val);
-
-       /* first set the channel without the extension channel info */
-       skb = mt76_mcu_msg_alloc(dev, &msg, sizeof(msg));
-       return mt76_mcu_send_msg(dev, skb, CMD_LOAD_CR, true);
-}
-
-int mt76x2_mcu_set_channel(struct mt76x2_dev *dev, u8 channel, u8 bw,
-                          u8 bw_index, bool scan)
-{
-       struct sk_buff *skb;
-       struct {
-               u8 idx;
-               u8 scan;
-               u8 bw;
-               u8 _pad0;
-
-               __le16 chainmask;
-               u8 ext_chan;
-               u8 _pad1;
-
-       } __packed __aligned(4) msg = {
-               .idx = channel,
-               .scan = scan,
-               .bw = bw,
-               .chainmask = cpu_to_le16(dev->chainmask),
-       };
-
-       /* first set the channel without the extension channel info */
-       skb = mt76_mcu_msg_alloc(dev, &msg, sizeof(msg));
-       mt76_mcu_send_msg(dev, skb, CMD_SWITCH_CHANNEL_OP, true);
-
-       usleep_range(5000, 10000);
-
-       msg.ext_chan = 0xe0 + bw_index;
-       skb = mt76_mcu_msg_alloc(dev, &msg, sizeof(msg));
-       return mt76_mcu_send_msg(dev, skb, CMD_SWITCH_CHANNEL_OP, true);
-}
-
 int mt76x2_mcu_calibrate(struct mt76x2_dev *dev, enum mcu_calibration type,
                         u32 param)
 {
@@ -252,41 +192,6 @@ int mt76x2_mcu_calibrate(struct mt76x2_dev *dev, enum mcu_calibration type,
        return 0;
 }
 
-int mt76x2_mcu_tssi_comp(struct mt76x2_dev *dev,
-                        struct mt76x2_tssi_comp *tssi_data)
-{
-       struct sk_buff *skb;
-       struct {
-               __le32 id;
-               struct mt76x2_tssi_comp data;
-       } __packed __aligned(4) msg = {
-               .id = cpu_to_le32(MCU_CAL_TSSI_COMP),
-               .data = *tssi_data,
-       };
-
-       skb = mt76_mcu_msg_alloc(dev, &msg, sizeof(msg));
-       return mt76_mcu_send_msg(dev, skb, CMD_CALIBRATION_OP, true);
-}
-
-int mt76x2_mcu_init_gain(struct mt76x2_dev *dev, u8 channel, u32 gain,
-                        bool force)
-{
-       struct sk_buff *skb;
-       struct {
-               __le32 channel;
-               __le32 gain_val;
-       } __packed __aligned(4) msg = {
-               .channel = cpu_to_le32(channel),
-               .gain_val = cpu_to_le32(gain),
-       };
-
-       if (force)
-               msg.channel |= cpu_to_le32(BIT(31));
-
-       skb = mt76_mcu_msg_alloc(dev, &msg, sizeof(msg));
-       return mt76_mcu_send_msg(dev, skb, CMD_INIT_GAIN_OP, true);
-}
-
 int mt76x2_mcu_init(struct mt76x2_dev *dev)
 {
        static const struct mt76_mcu_ops mt76x2_mcu_ops = {
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x2_mcu_common.c b/drivers/net/wireless/mediatek/mt76/mt76x2_mcu_common.c
new file mode 100644 (file)
index 0000000..72f6bfb
--- /dev/null
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
+ * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <linux/kernel.h>
+#include <linux/firmware.h>
+#include <linux/delay.h>
+
+#include "mt76x2.h"
+#include "mt76x2_mcu.h"
+#include "mt76x2_eeprom.h"
+#include "mt76x02_dma.h"
+
+int mt76x2_mcu_set_channel(struct mt76x2_dev *dev, u8 channel, u8 bw,
+                          u8 bw_index, bool scan)
+{
+       struct sk_buff *skb;
+       struct {
+               u8 idx;
+               u8 scan;
+               u8 bw;
+               u8 _pad0;
+
+               __le16 chainmask;
+               u8 ext_chan;
+               u8 _pad1;
+
+       } __packed __aligned(4) msg = {
+               .idx = channel,
+               .scan = scan,
+               .bw = bw,
+               .chainmask = cpu_to_le16(dev->chainmask),
+       };
+
+       /* first set the channel without the extension channel info */
+       skb = mt76_mcu_msg_alloc(dev, &msg, sizeof(msg));
+       mt76_mcu_send_msg(dev, skb, CMD_SWITCH_CHANNEL_OP, true);
+
+       usleep_range(5000, 10000);
+
+       msg.ext_chan = 0xe0 + bw_index;
+       skb = mt76_mcu_msg_alloc(dev, &msg, sizeof(msg));
+       return mt76_mcu_send_msg(dev, skb, CMD_SWITCH_CHANNEL_OP, true);
+}
+EXPORT_SYMBOL_GPL(mt76x2_mcu_set_channel);
+
+int mt76x2_mcu_load_cr(struct mt76x2_dev *dev, u8 type, u8 temp_level,
+                      u8 channel)
+{
+       struct sk_buff *skb;
+       struct {
+               u8 cr_mode;
+               u8 temp;
+               u8 ch;
+               u8 _pad0;
+
+               __le32 cfg;
+       } __packed __aligned(4) msg = {
+               .cr_mode = type,
+               .temp = temp_level,
+               .ch = channel,
+       };
+       u32 val;
+
+       val = BIT(31);
+       val |= (mt76x2_eeprom_get(dev, MT_EE_NIC_CONF_0) >> 8) & 0x00ff;
+       val |= (mt76x2_eeprom_get(dev, MT_EE_NIC_CONF_1) << 8) & 0xff00;
+       msg.cfg = cpu_to_le32(val);
+
+       /* first set the channel without the extension channel info */
+       skb = mt76_mcu_msg_alloc(dev, &msg, sizeof(msg));
+       return mt76_mcu_send_msg(dev, skb, CMD_LOAD_CR, true);
+}
+EXPORT_SYMBOL_GPL(mt76x2_mcu_load_cr);
+
+int mt76x2_mcu_init_gain(struct mt76x2_dev *dev, u8 channel, u32 gain,
+                        bool force)
+{
+       struct sk_buff *skb;
+       struct {
+               __le32 channel;
+               __le32 gain_val;
+       } __packed __aligned(4) msg = {
+               .channel = cpu_to_le32(channel),
+               .gain_val = cpu_to_le32(gain),
+       };
+
+       if (force)
+               msg.channel |= cpu_to_le32(BIT(31));
+
+       skb = mt76_mcu_msg_alloc(dev, &msg, sizeof(msg));
+       return mt76_mcu_send_msg(dev, skb, CMD_INIT_GAIN_OP, true);
+}
+EXPORT_SYMBOL_GPL(mt76x2_mcu_init_gain);
+
+int mt76x2_mcu_tssi_comp(struct mt76x2_dev *dev,
+                        struct mt76x2_tssi_comp *tssi_data)
+{
+       struct sk_buff *skb;
+       struct {
+               __le32 id;
+               struct mt76x2_tssi_comp data;
+       } __packed __aligned(4) msg = {
+               .id = cpu_to_le32(MCU_CAL_TSSI_COMP),
+               .data = *tssi_data,
+       };
+
+       skb = mt76_mcu_msg_alloc(dev, &msg, sizeof(msg));
+       return mt76_mcu_send_msg(dev, skb, CMD_CALIBRATION_OP, true);
+}
+EXPORT_SYMBOL_GPL(mt76x2_mcu_tssi_comp);
index 2e7789e..d3bc790 100644 (file)
@@ -50,18 +50,10 @@ void mt76x2u_phy_set_txdac(struct mt76x2_dev *dev);
 void mt76x2u_phy_set_rxpath(struct mt76x2_dev *dev);
 
 void mt76x2u_mcu_complete_urb(struct urb *urb);
-int mt76x2u_mcu_set_channel(struct mt76x2_dev *dev, u8 channel, u8 bw,
-                           u8 bw_index, bool scan);
 int mt76x2u_mcu_calibrate(struct mt76x2_dev *dev, enum mcu_calibration type,
                          u32 val);
-int mt76x2u_mcu_tssi_comp(struct mt76x2_dev *dev,
-                         struct mt76x2_tssi_comp *tssi_data);
-int mt76x2u_mcu_init_gain(struct mt76x2_dev *dev, u8 channel, u32 gain,
-                         bool force);
 int mt76x2u_mcu_set_dynamic_vga(struct mt76x2_dev *dev, u8 channel, bool ap,
                                bool ext, int rssi, u32 false_cca);
-int mt76x2u_mcu_load_cr(struct mt76x2_dev *dev, u8 type,
-                       u8 temp_level, u8 channel);
 int mt76x2u_mcu_init(struct mt76x2_dev *dev);
 int mt76x2u_mcu_fw_init(struct mt76x2_dev *dev);
 
index 6661b92..e41880c 100644 (file)
@@ -240,7 +240,7 @@ int mt76x2u_init_hardware(struct mt76x2_dev *dev)
        mt76_rmw(dev, MT_US_CYC_CFG, MT_US_CYC_CNT, 0x1e);
        mt76_wr(dev, MT_TXOP_CTRL_CFG, 0x583f);
 
-       err = mt76x2u_mcu_load_cr(dev, MT_RF_BBP_CR, 0, 0);
+       err = mt76x2_mcu_load_cr(dev, MT_RF_BBP_CR, 0, 0);
        if (err < 0)
                return err;
 
index abb9308..808e5d4 100644 (file)
 #define MT76U_MCU_DLM_OFFSET           0x110000
 #define MT76U_MCU_ROM_PATCH_OFFSET     0x90000
 
-int mt76x2u_mcu_load_cr(struct mt76x2_dev *dev, u8 type, u8 temp_level,
-                       u8 channel)
-{
-       struct {
-               u8 cr_mode;
-               u8 temp;
-               u8 ch;
-               u8 _pad0;
-               __le32 cfg;
-       } __packed __aligned(4) msg = {
-               .cr_mode = type,
-               .temp = temp_level,
-               .ch = channel,
-       };
-       struct sk_buff *skb;
-       u32 val;
-
-       val = BIT(31);
-       val |= (mt76x2_eeprom_get(dev, MT_EE_NIC_CONF_0) >> 8) & 0x00ff;
-       val |= (mt76x2_eeprom_get(dev, MT_EE_NIC_CONF_1) << 8) & 0xff00;
-       msg.cfg = cpu_to_le32(val);
-
-       /* first set the channel without the extension channel info */
-       skb = mt76_mcu_msg_alloc(dev, &msg, sizeof(msg));
-       return mt76_mcu_send_msg(dev, skb, CMD_LOAD_CR, true);
-}
-
-int mt76x2u_mcu_set_channel(struct mt76x2_dev *dev, u8 channel, u8 bw,
-                           u8 bw_index, bool scan)
-{
-       struct {
-               u8 idx;
-               u8 scan;
-               u8 bw;
-               u8 _pad0;
-
-               __le16 chainmask;
-               u8 ext_chan;
-               u8 _pad1;
-
-       } __packed __aligned(4) msg = {
-               .idx = channel,
-               .scan = scan,
-               .bw = bw,
-               .chainmask = cpu_to_le16(dev->chainmask),
-       };
-       struct sk_buff *skb;
-
-       /* first set the channel without the extension channel info */
-       skb = mt76_mcu_msg_alloc(dev, &msg, sizeof(msg));
-       mt76_mcu_send_msg(dev, skb, CMD_SWITCH_CHANNEL_OP, true);
-
-       usleep_range(5000, 10000);
-
-       msg.ext_chan = 0xe0 + bw_index;
-       skb = mt76_mcu_msg_alloc(dev, &msg, sizeof(msg));
-       return mt76_mcu_send_msg(dev, skb, CMD_SWITCH_CHANNEL_OP, true);
-}
-
 int mt76x2u_mcu_calibrate(struct mt76x2_dev *dev, enum mcu_calibration type,
                          u32 val)
 {
@@ -104,25 +45,6 @@ int mt76x2u_mcu_calibrate(struct mt76x2_dev *dev, enum mcu_calibration type,
        return mt76_mcu_send_msg(dev, skb, CMD_CALIBRATION_OP, true);
 }
 
-int mt76x2u_mcu_init_gain(struct mt76x2_dev *dev, u8 channel, u32 gain,
-                         bool force)
-{
-       struct {
-               __le32 channel;
-               __le32 gain_val;
-       } __packed __aligned(4) msg = {
-               .channel = cpu_to_le32(channel),
-               .gain_val = cpu_to_le32(gain),
-       };
-       struct sk_buff *skb;
-
-       if (force)
-               msg.channel |= cpu_to_le32(BIT(31));
-
-       skb = mt76_mcu_msg_alloc(dev, &msg, sizeof(msg));
-       return mt76_mcu_send_msg(dev, skb, CMD_INIT_GAIN_OP, true);
-}
-
 int mt76x2u_mcu_set_dynamic_vga(struct mt76x2_dev *dev, u8 channel, bool ap,
                                bool ext, int rssi, u32 false_cca)
 {
@@ -147,22 +69,6 @@ int mt76x2u_mcu_set_dynamic_vga(struct mt76x2_dev *dev, u8 channel, bool ap,
        return mt76_mcu_send_msg(dev, skb, CMD_DYNC_VGA_OP, true);
 }
 
-int mt76x2u_mcu_tssi_comp(struct mt76x2_dev *dev,
-                         struct mt76x2_tssi_comp *tssi_data)
-{
-       struct {
-               __le32 id;
-               struct mt76x2_tssi_comp data;
-       } __packed __aligned(4) msg = {
-               .id = cpu_to_le32(MCU_CAL_TSSI_COMP),
-               .data = *tssi_data,
-       };
-       struct sk_buff *skb;
-
-       skb = mt76_mcu_msg_alloc(dev, &msg, sizeof(msg));
-       return mt76_mcu_send_msg(dev, skb, CMD_CALIBRATION_OP, true);
-}
-
 static void mt76x2u_mcu_load_ivb(struct mt76x2_dev *dev)
 {
        mt76u_vendor_request(&dev->mt76, MT_VEND_DEV_MODE,
index 5158063..89defee 100644 (file)
@@ -84,7 +84,7 @@ mt76x2u_phy_tssi_compensate(struct mt76x2_dev *dev)
        if (!dev->cal.tssi_comp_pending) {
                /* TSSI trigger */
                t.cal_mode = BIT(0);
-               mt76x2u_mcu_tssi_comp(dev, &t);
+               mt76x2_mcu_tssi_comp(dev, &t);
                dev->cal.tssi_comp_pending = true;
        } else {
                if (mt76_rr(dev, MT_BBP(CORE, 34)) & BIT(4))
@@ -101,7 +101,7 @@ mt76x2u_phy_tssi_compensate(struct mt76x2_dev *dev)
                t.offset0 = txp.chain[0].tssi_offset;
                t.slope1 = txp.chain[1].tssi_slope;
                t.offset1 = txp.chain[1].tssi_offset;
-               mt76x2u_mcu_tssi_comp(dev, &t);
+               mt76x2_mcu_tssi_comp(dev, &t);
 
                if (t.pa_mode || dev->cal.dpd_cal_done)
                        return;
@@ -239,11 +239,11 @@ int mt76x2u_phy_set_channel(struct mt76x2_dev *dev,
                  MT_EXT_CCA_CFG_CCA_MASK),
                 ext_cca_chan[ch_group_index]);
 
-       ret = mt76x2u_mcu_set_channel(dev, channel, bw, bw_index, scan);
+       ret = mt76x2_mcu_set_channel(dev, channel, bw, bw_index, scan);
        if (ret)
                return ret;
 
-       mt76x2u_mcu_init_gain(dev, channel, dev->cal.rx.mcu_gain, true);
+       mt76x2_mcu_init_gain(dev, channel, dev->cal.rx.mcu_gain, true);
 
        /* Enable LDPC Rx */
        if (mt76xx_rev(dev) >= MT76XX_REV_E3)