Merge tag 'wireless-drivers-next-for-davem-2018-03-24' of git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next
Kalle Valo says: ==================== wireless-drivers-next patches for 4.17 The biggest changes are the bluetooth related patches to the rsi driver. It adds a new bluetooth driver which communicates directly with the wireless driver and the interface is defined in include/net/rsi_91x.h. Major changes: wl1251 * read the MAC address from the NVS file rtlwifi * enable mac80211 fast-tx support mt76 * add capability to select tx/rx antennas mt7601 * let mac80211 validate rx CCMP Packet Number (PN) rsi * bluetooth: add new btrsi driver * btcoex support with the new btrsi driver ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -244,6 +244,9 @@ static void _rtl_init_hw_vht_capab(struct ieee80211_hw *hw,
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
|
||||
|
||||
if (!(rtlpriv->cfg->spec_ver & RTL_SPEC_SUPPORT_VHT))
|
||||
return;
|
||||
|
||||
if (rtlhal->hw_type == HARDWARE_TYPE_RTL8812AE ||
|
||||
rtlhal->hw_type == HARDWARE_TYPE_RTL8822BE) {
|
||||
u16 mcs_map;
|
||||
@@ -397,6 +400,7 @@ static void _rtl_init_mac80211(struct ieee80211_hw *hw)
|
||||
ieee80211_hw_set(hw, MFP_CAPABLE);
|
||||
ieee80211_hw_set(hw, REPORTS_TX_ACK_STATUS);
|
||||
ieee80211_hw_set(hw, SUPPORTS_AMSDU_IN_AMPDU);
|
||||
ieee80211_hw_set(hw, SUPPORT_FAST_XMIT);
|
||||
|
||||
/* swlps or hwlps has been set in diff chip in init_sw_vars */
|
||||
if (rtlpriv->psc.swctrl_lps) {
|
||||
@@ -886,8 +890,7 @@ static void _rtl_query_bandwidth_mode(struct ieee80211_hw *hw,
|
||||
|
||||
tcb_desc->packet_bw = HT_CHANNEL_WIDTH_20_40;
|
||||
|
||||
if (rtlpriv->rtlhal.hw_type == HARDWARE_TYPE_RTL8812AE ||
|
||||
rtlpriv->rtlhal.hw_type == HARDWARE_TYPE_RTL8821AE) {
|
||||
if (rtlpriv->cfg->spec_ver & RTL_SPEC_SUPPORT_VHT) {
|
||||
if (mac->opmode == NL80211_IFTYPE_AP ||
|
||||
mac->opmode == NL80211_IFTYPE_ADHOC ||
|
||||
mac->opmode == NL80211_IFTYPE_MESH_POINT) {
|
||||
@@ -1594,7 +1597,11 @@ static u16 rtl_get_tx_report_sn(struct ieee80211_hw *hw)
|
||||
struct rtl_tx_report *tx_report = &rtlpriv->tx_report;
|
||||
u16 sn;
|
||||
|
||||
sn = atomic_inc_return(&tx_report->sn) & 0x0FFF;
|
||||
/* SW_DEFINE[11:8] are reserved (driver fills zeros)
|
||||
* SW_DEFINE[7:2] are used by driver
|
||||
* SW_DEFINE[1:0] are reserved for firmware (driver fills zeros)
|
||||
*/
|
||||
sn = (atomic_inc_return(&tx_report->sn) & 0x003F) << 2;
|
||||
|
||||
tx_report->last_sent_sn = sn;
|
||||
tx_report->last_sent_time = jiffies;
|
||||
@@ -1622,14 +1629,23 @@ void rtl_tx_report_handler(struct ieee80211_hw *hw, u8 *tmp_buf, u8 c2h_cmd_len)
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_tx_report *tx_report = &rtlpriv->tx_report;
|
||||
u16 sn;
|
||||
u8 st, retry;
|
||||
|
||||
sn = ((tmp_buf[7] & 0x0F) << 8) | tmp_buf[6];
|
||||
if (rtlpriv->cfg->spec_ver & RTL_SPEC_EXT_C2H) {
|
||||
sn = GET_TX_REPORT_SN_V2(tmp_buf);
|
||||
st = GET_TX_REPORT_ST_V2(tmp_buf);
|
||||
retry = GET_TX_REPORT_RETRY_V2(tmp_buf);
|
||||
} else {
|
||||
sn = GET_TX_REPORT_SN_V1(tmp_buf);
|
||||
st = GET_TX_REPORT_ST_V1(tmp_buf);
|
||||
retry = GET_TX_REPORT_RETRY_V1(tmp_buf);
|
||||
}
|
||||
|
||||
tx_report->last_recv_sn = sn;
|
||||
|
||||
RT_TRACE(rtlpriv, COMP_TX_REPORT, DBG_DMESG,
|
||||
"Recv TX-Report st=0x%02X sn=0x%X retry=0x%X\n",
|
||||
tmp_buf[0], sn, tmp_buf[2]);
|
||||
st, sn, retry);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rtl_tx_report_handler);
|
||||
|
||||
@@ -1643,7 +1659,8 @@ bool rtl_check_tx_report_acked(struct ieee80211_hw *hw)
|
||||
|
||||
if (time_before(tx_report->last_sent_time + 3 * HZ, jiffies)) {
|
||||
RT_TRACE(rtlpriv, COMP_TX_REPORT, DBG_WARNING,
|
||||
"Check TX-Report timeout!!\n");
|
||||
"Check TX-Report timeout!! s_sn=0x%X r_sn=0x%X\n",
|
||||
tx_report->last_sent_sn, tx_report->last_recv_sn);
|
||||
return true; /* 3 sec. (timeout) seen as acked */
|
||||
}
|
||||
|
||||
@@ -2629,6 +2646,11 @@ EXPORT_SYMBOL_GPL(rtl_global_var);
|
||||
|
||||
static int __init rtl_core_module_init(void)
|
||||
{
|
||||
BUILD_BUG_ON(TX_PWR_BY_RATE_NUM_RATE < TX_PWR_BY_RATE_NUM_SECTION);
|
||||
BUILD_BUG_ON(MAX_RATE_SECTION_NUM != MAX_RATE_SECTION);
|
||||
BUILD_BUG_ON(MAX_BASE_NUM_IN_PHY_REG_PG_24G != MAX_RATE_SECTION);
|
||||
BUILD_BUG_ON(MAX_BASE_NUM_IN_PHY_REG_PG_5G != (MAX_RATE_SECTION - 1));
|
||||
|
||||
if (rtl_rate_control_register())
|
||||
pr_err("rtl: Unable to register rtl_rc, use default RC !!\n");
|
||||
|
||||
|
@@ -1104,7 +1104,7 @@ static void halbtc8723b1ant_ps_tdma(struct btc_coexist *btcoexist,
|
||||
}
|
||||
|
||||
if ((type == 1) || (type == 2) || (type == 9) || (type == 11) ||
|
||||
(type == 101) || (type == 102) || (type == 109) || (type == 101)) {
|
||||
(type == 101) || (type == 102) || (type == 109) || (type == 111)) {
|
||||
if (!coex_sta->force_lps_on) {
|
||||
/* Native power save TDMA, only for A2DP-only case
|
||||
* 1/2/9/11 while wifi noisy threshold > 30
|
||||
|
@@ -0,0 +1,55 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2016-2017 Realtek Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of version 2 of the GNU General Public License as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
*****************************************************************************/
|
||||
#include "halbt_precomp.h"
|
||||
|
||||
void ex_hal8822b_wifi_only_hw_config(struct wifi_only_cfg *wifionlycfg)
|
||||
{
|
||||
/*BB control*/
|
||||
halwifionly_phy_set_bb_reg(wifionlycfg, 0x4c, 0x01800000, 0x2);
|
||||
/*SW control*/
|
||||
halwifionly_phy_set_bb_reg(wifionlycfg, 0xcb4, 0xff, 0x77);
|
||||
/*antenna mux switch */
|
||||
halwifionly_phy_set_bb_reg(wifionlycfg, 0x974, 0x300, 0x3);
|
||||
|
||||
halwifionly_phy_set_bb_reg(wifionlycfg, 0x1990, 0x300, 0x0);
|
||||
|
||||
halwifionly_phy_set_bb_reg(wifionlycfg, 0xcbc, 0x80000, 0x0);
|
||||
/*switch to WL side controller and gnt_wl gnt_bt debug signal */
|
||||
halwifionly_phy_set_bb_reg(wifionlycfg, 0x70, 0xff000000, 0x0e);
|
||||
/*gnt_wl=1 , gnt_bt=0*/
|
||||
halwifionly_phy_set_bb_reg(wifionlycfg, 0x1704, 0xffffffff, 0x7700);
|
||||
halwifionly_phy_set_bb_reg(wifionlycfg, 0x1700, 0xffffffff, 0xc00f0038);
|
||||
}
|
||||
|
||||
void ex_hal8822b_wifi_only_scannotify(struct wifi_only_cfg *wifionlycfg,
|
||||
u8 is_5g)
|
||||
{
|
||||
hal8822b_wifi_only_switch_antenna(wifionlycfg, is_5g);
|
||||
}
|
||||
|
||||
void ex_hal8822b_wifi_only_switchbandnotify(struct wifi_only_cfg *wifionlycfg,
|
||||
u8 is_5g)
|
||||
{
|
||||
hal8822b_wifi_only_switch_antenna(wifionlycfg, is_5g);
|
||||
}
|
||||
|
||||
void hal8822b_wifi_only_switch_antenna(struct wifi_only_cfg *wifionlycfg,
|
||||
u8 is_5g)
|
||||
{
|
||||
if (is_5g)
|
||||
halwifionly_phy_set_bb_reg(wifionlycfg, 0xcbc, 0x300, 0x1);
|
||||
else
|
||||
halwifionly_phy_set_bb_reg(wifionlycfg, 0xcbc, 0x300, 0x2);
|
||||
}
|
@@ -0,0 +1,25 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Copyright(c) 2016-2017 Realtek Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of version 2 of the GNU General Public License as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
*****************************************************************************/
|
||||
#ifndef __INC_HAL8822BWIFIONLYHWCFG_H
|
||||
#define __INC_HAL8822BWIFIONLYHWCFG_H
|
||||
|
||||
void ex_hal8822b_wifi_only_hw_config(struct wifi_only_cfg *wifionlycfg);
|
||||
void ex_hal8822b_wifi_only_scannotify(struct wifi_only_cfg *wifionlycfg,
|
||||
u8 is_5g);
|
||||
void ex_hal8822b_wifi_only_switchbandnotify(struct wifi_only_cfg *wifionlycfg,
|
||||
u8 is_5g);
|
||||
void hal8822b_wifi_only_switch_antenna(struct wifi_only_cfg *wifionlycfg,
|
||||
u8 is_5g);
|
||||
#endif
|
@@ -1039,6 +1039,28 @@ static void halbtc_fill_h2c_cmd(void *bt_context, u8 element_id,
|
||||
cmd_len, cmd_buf);
|
||||
}
|
||||
|
||||
void halbtc_send_wifi_port_id_cmd(void *bt_context)
|
||||
{
|
||||
struct btc_coexist *btcoexist = (struct btc_coexist *)bt_context;
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
u8 cmd_buf[1] = {0}; /* port id [2:0] = 0 */
|
||||
|
||||
rtlpriv->cfg->ops->fill_h2c_cmd(rtlpriv->mac80211.hw, H2C_BT_PORT_ID,
|
||||
1, cmd_buf);
|
||||
}
|
||||
|
||||
void halbtc_set_default_port_id_cmd(void *bt_context)
|
||||
{
|
||||
struct btc_coexist *btcoexist = (struct btc_coexist *)bt_context;
|
||||
struct rtl_priv *rtlpriv = btcoexist->adapter;
|
||||
struct ieee80211_hw *hw = rtlpriv->mac80211.hw;
|
||||
|
||||
if (!rtlpriv->cfg->ops->set_default_port_id_cmd)
|
||||
return;
|
||||
|
||||
rtlpriv->cfg->ops->set_default_port_id_cmd(hw);
|
||||
}
|
||||
|
||||
static
|
||||
void halbtc_set_bt_reg(void *btc_context, u8 reg_type, u32 offset, u32 set_val)
|
||||
{
|
||||
|
@@ -691,6 +691,8 @@ void exhalbtc_lps_leave(struct btc_coexist *btcoexist);
|
||||
void exhalbtc_low_wifi_traffic_notify(struct btc_coexist *btcoexist);
|
||||
void exhalbtc_set_single_ant_path(struct btc_coexist *btcoexist,
|
||||
u8 single_ant_path);
|
||||
void halbtc_send_wifi_port_id_cmd(void *bt_context);
|
||||
void halbtc_set_default_port_id_cmd(void *bt_context);
|
||||
|
||||
/* The following are used by wifi_only case */
|
||||
enum wifionly_chip_interface {
|
||||
|
@@ -50,6 +50,11 @@ static const struct efuse_map RTL8712_SDIO_EFUSE_TABLE[] = {
|
||||
{11, 0, 0, 28}
|
||||
};
|
||||
|
||||
static const struct rtl_efuse_ops efuse_ops = {
|
||||
.efuse_onebyte_read = efuse_one_byte_read,
|
||||
.efuse_logical_map_read = efuse_shadow_read,
|
||||
};
|
||||
|
||||
static void efuse_shadow_read_1byte(struct ieee80211_hw *hw, u16 offset,
|
||||
u8 *value);
|
||||
static void efuse_shadow_read_2byte(struct ieee80211_hw *hw, u16 offset,
|
||||
@@ -1364,3 +1369,11 @@ void rtl_fill_dummy(u8 *pfwbuf, u32 *pfwlen)
|
||||
*pfwlen = fwlen;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rtl_fill_dummy);
|
||||
|
||||
void rtl_efuse_ops_init(struct ieee80211_hw *hw)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
|
||||
rtlpriv->efuse.efuse_ops = &efuse_ops;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rtl_efuse_ops_init);
|
||||
|
@@ -116,5 +116,5 @@ void rtl_fill_dummy(u8 *pfwbuf, u32 *pfwlen);
|
||||
void rtl_fw_page_write(struct ieee80211_hw *hw, u32 page, const u8 *buffer,
|
||||
u32 size);
|
||||
void rtl_fw_block_write(struct ieee80211_hw *hw, const u8 *buffer, u32 size);
|
||||
|
||||
void rtl_efuse_ops_init(struct ieee80211_hw *hw);
|
||||
#endif
|
||||
|
@@ -2238,6 +2238,7 @@ int rtl_pci_probe(struct pci_dev *pdev,
|
||||
rtlpriv->cfg = (struct rtl_hal_cfg *)(id->driver_data);
|
||||
rtlpriv->intf_ops = &rtl_pci_ops;
|
||||
rtlpriv->glb_var = &rtl_global_var;
|
||||
rtl_efuse_ops_init(hw);
|
||||
|
||||
/* MEM map */
|
||||
err = pci_request_regions(pdev, KBUILD_MODNAME);
|
||||
|
@@ -42,6 +42,23 @@ static u8 _rtl_rc_get_highest_rix(struct rtl_priv *rtlpriv,
|
||||
struct rtl_phy *rtlphy = &(rtlpriv->phy);
|
||||
struct rtl_sta_info *sta_entry = NULL;
|
||||
u16 wireless_mode = 0;
|
||||
u8 nss;
|
||||
struct ieee80211_tx_rate rate;
|
||||
|
||||
switch (get_rf_type(rtlphy)) {
|
||||
case RF_4T4R:
|
||||
nss = 4;
|
||||
break;
|
||||
case RF_3T3R:
|
||||
nss = 3;
|
||||
break;
|
||||
case RF_2T2R:
|
||||
nss = 2;
|
||||
break;
|
||||
default:
|
||||
nss = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
*this rate is no use for true rate, firmware
|
||||
@@ -66,28 +83,51 @@ static u8 _rtl_rc_get_highest_rix(struct rtl_priv *rtlpriv,
|
||||
} else if (wireless_mode == WIRELESS_MODE_G) {
|
||||
return G_MODE_MAX_RIX;
|
||||
} else if (wireless_mode == WIRELESS_MODE_N_24G) {
|
||||
if (get_rf_type(rtlphy) != RF_2T2R)
|
||||
if (nss == 1)
|
||||
return N_MODE_MCS7_RIX;
|
||||
else
|
||||
return N_MODE_MCS15_RIX;
|
||||
} else if (wireless_mode == WIRELESS_MODE_AC_24G) {
|
||||
return AC_MODE_MCS9_RIX;
|
||||
if (sta->bandwidth == IEEE80211_STA_RX_BW_20) {
|
||||
ieee80211_rate_set_vht(&rate,
|
||||
AC_MODE_MCS8_RIX,
|
||||
nss);
|
||||
goto out;
|
||||
} else {
|
||||
ieee80211_rate_set_vht(&rate,
|
||||
AC_MODE_MCS9_RIX,
|
||||
nss);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
} else {
|
||||
if (wireless_mode == WIRELESS_MODE_A) {
|
||||
return A_MODE_MAX_RIX;
|
||||
} else if (wireless_mode == WIRELESS_MODE_N_5G) {
|
||||
if (get_rf_type(rtlphy) != RF_2T2R)
|
||||
if (nss == 1)
|
||||
return N_MODE_MCS7_RIX;
|
||||
else
|
||||
return N_MODE_MCS15_RIX;
|
||||
} else if (wireless_mode == WIRELESS_MODE_AC_5G) {
|
||||
return AC_MODE_MCS9_RIX;
|
||||
if (sta->bandwidth == IEEE80211_STA_RX_BW_20) {
|
||||
ieee80211_rate_set_vht(&rate,
|
||||
AC_MODE_MCS8_RIX,
|
||||
nss);
|
||||
goto out;
|
||||
} else {
|
||||
ieee80211_rate_set_vht(&rate,
|
||||
AC_MODE_MCS9_RIX,
|
||||
nss);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
out:
|
||||
return rate.idx;
|
||||
}
|
||||
|
||||
static void _rtl_rc_rate_set_series(struct rtl_priv *rtlpriv,
|
||||
@@ -111,9 +151,6 @@ static void _rtl_rc_rate_set_series(struct rtl_priv *rtlpriv,
|
||||
}
|
||||
rate->count = tries;
|
||||
rate->idx = rix >= 0x00 ? rix : 0x00;
|
||||
if (rtlpriv->rtlhal.hw_type == HARDWARE_TYPE_RTL8812AE &&
|
||||
wireless_mode == WIRELESS_MODE_AC_5G)
|
||||
rate->idx += 0x10;/*2NSS for 8812AE*/
|
||||
|
||||
if (!not_data) {
|
||||
if (txrc->short_preamble)
|
||||
@@ -126,10 +163,10 @@ static void _rtl_rc_rate_set_series(struct rtl_priv *rtlpriv,
|
||||
if (sta && sta->vht_cap.vht_supported)
|
||||
rate->flags |= IEEE80211_TX_RC_80_MHZ_WIDTH;
|
||||
} else {
|
||||
if (mac->bw_40)
|
||||
rate->flags |= IEEE80211_TX_RC_40_MHZ_WIDTH;
|
||||
if (mac->bw_80)
|
||||
rate->flags |= IEEE80211_TX_RC_80_MHZ_WIDTH;
|
||||
else if (mac->bw_40)
|
||||
rate->flags |= IEEE80211_TX_RC_40_MHZ_WIDTH;
|
||||
}
|
||||
|
||||
if (sgi_20 || sgi_40 || sgi_80)
|
||||
|
@@ -299,9 +299,6 @@ static void _rtl92c_get_txpower_writeval_by_regulatory(struct ieee80211_hw *hw,
|
||||
writeVal = 0x00000000;
|
||||
if (rtlpriv->dm.dynamic_txhighpower_lvl == TXHIGHPWRLEVEL_BT1)
|
||||
writeVal = writeVal - 0x06060606;
|
||||
else if (rtlpriv->dm.dynamic_txhighpower_lvl ==
|
||||
TXHIGHPWRLEVEL_BT2)
|
||||
writeVal = writeVal;
|
||||
*(p_outwriteval + rf) = writeVal;
|
||||
}
|
||||
}
|
||||
|
@@ -427,7 +427,6 @@ static void _rtl_rx_process(struct ieee80211_hw *hw, struct sk_buff *skb)
|
||||
(u32)hdr->addr1[0], (u32)hdr->addr1[1],
|
||||
(u32)hdr->addr1[2], (u32)hdr->addr1[3],
|
||||
(u32)hdr->addr1[4], (u32)hdr->addr1[5]);
|
||||
memcpy(IEEE80211_SKB_RXCB(skb), rx_status, sizeof(*rx_status));
|
||||
ieee80211_rx(hw, skb);
|
||||
}
|
||||
|
||||
|
@@ -328,6 +328,7 @@ static const struct rtl_hal_cfg rtl8821ae_hal_cfg = {
|
||||
.alt_fw_name = "rtlwifi/rtl8821aefw.bin",
|
||||
.ops = &rtl8821ae_hal_ops,
|
||||
.mod_params = &rtl8821ae_mod_params,
|
||||
.spec_ver = RTL_SPEC_SUPPORT_VHT,
|
||||
.maps[SYS_ISO_CTRL] = REG_SYS_ISO_CTRL,
|
||||
.maps[SYS_FUNC_EN] = REG_SYS_FUNC_EN,
|
||||
.maps[SYS_CLK] = REG_SYS_CLKR,
|
||||
|
@@ -154,10 +154,21 @@ enum rtl8192c_h2c_cmd {
|
||||
MAX_H2CCMD
|
||||
};
|
||||
|
||||
enum {
|
||||
H2C_BT_PORT_ID = 0x71,
|
||||
};
|
||||
|
||||
#define GET_TX_REPORT_SN_V1(c2h) (c2h[6])
|
||||
#define GET_TX_REPORT_ST_V1(c2h) (c2h[0] & 0xC0)
|
||||
#define GET_TX_REPORT_RETRY_V1(c2h) (c2h[2] & 0x3F)
|
||||
#define GET_TX_REPORT_SN_V2(c2h) (c2h[6])
|
||||
#define GET_TX_REPORT_ST_V2(c2h) (c2h[7] & 0xC0)
|
||||
#define GET_TX_REPORT_RETRY_V2(c2h) (c2h[8] & 0x3F)
|
||||
|
||||
#define MAX_TX_COUNT 4
|
||||
#define MAX_REGULATION_NUM 4
|
||||
#define MAX_RF_PATH_NUM 4
|
||||
#define MAX_RATE_SECTION_NUM 6
|
||||
#define MAX_RATE_SECTION_NUM 6 /* = MAX_RATE_SECTION */
|
||||
#define MAX_2_4G_BANDWIDTH_NUM 4
|
||||
#define MAX_5G_BANDWIDTH_NUM 4
|
||||
#define MAX_RF_PATH 4
|
||||
@@ -167,8 +178,9 @@ enum rtl8192c_h2c_cmd {
|
||||
#define TX_PWR_BY_RATE_NUM_BAND 2
|
||||
#define TX_PWR_BY_RATE_NUM_RF 4
|
||||
#define TX_PWR_BY_RATE_NUM_SECTION 12
|
||||
#define MAX_BASE_NUM_IN_PHY_REG_PG_24G 6
|
||||
#define MAX_BASE_NUM_IN_PHY_REG_PG_5G 5
|
||||
#define TX_PWR_BY_RATE_NUM_RATE 84 /* >= TX_PWR_BY_RATE_NUM_SECTION */
|
||||
#define MAX_BASE_NUM_IN_PHY_REG_PG_24G 6 /* MAX_RATE_SECTION */
|
||||
#define MAX_BASE_NUM_IN_PHY_REG_PG_5G 5 /* MAX_RATE_SECTION -1 */
|
||||
|
||||
#define BUFDESC_SEG_NUM 1 /* 0:2 seg, 1: 4 seg, 2: 8 seg */
|
||||
|
||||
@@ -264,6 +276,7 @@ enum rate_section {
|
||||
HT_MCS8_MCS15,
|
||||
VHT_1SSMCS0_1SSMCS9,
|
||||
VHT_2SSMCS0_2SSMCS9,
|
||||
MAX_RATE_SECTION,
|
||||
};
|
||||
|
||||
enum intf_type {
|
||||
@@ -278,6 +291,13 @@ enum radio_path {
|
||||
RF90_PATH_D = 3,
|
||||
};
|
||||
|
||||
enum radio_mask {
|
||||
RF_MASK_A = BIT(0),
|
||||
RF_MASK_B = BIT(1),
|
||||
RF_MASK_C = BIT(2),
|
||||
RF_MASK_D = BIT(3),
|
||||
};
|
||||
|
||||
enum regulation_txpwr_lmt {
|
||||
TXPWR_LMT_FCC = 0,
|
||||
TXPWR_LMT_MKK = 1,
|
||||
@@ -571,6 +591,7 @@ enum ht_channel_width {
|
||||
HT_CHANNEL_WIDTH_20 = 0,
|
||||
HT_CHANNEL_WIDTH_20_40 = 1,
|
||||
HT_CHANNEL_WIDTH_80 = 2,
|
||||
HT_CHANNEL_WIDTH_MAX,
|
||||
};
|
||||
|
||||
/* Ref: 802.11i sepc D10.0 7.3.2.25.1
|
||||
@@ -952,6 +973,8 @@ enum package_type {
|
||||
|
||||
enum rtl_spec_ver {
|
||||
RTL_SPEC_NEW_RATEID = BIT(0), /* use ratr_table_mode_new */
|
||||
RTL_SPEC_SUPPORT_VHT = BIT(1), /* support VHT */
|
||||
RTL_SPEC_EXT_C2H = BIT(2), /* extend FW C2H (e.g. TX REPORT) */
|
||||
};
|
||||
|
||||
struct octet_string {
|
||||
@@ -1277,7 +1300,7 @@ struct rtl_phy {
|
||||
u32 tx_power_by_rate_offset[TX_PWR_BY_RATE_NUM_BAND]
|
||||
[TX_PWR_BY_RATE_NUM_RF]
|
||||
[TX_PWR_BY_RATE_NUM_RF]
|
||||
[TX_PWR_BY_RATE_NUM_SECTION];
|
||||
[TX_PWR_BY_RATE_NUM_RATE];
|
||||
u8 txpwr_by_rate_base_24g[TX_PWR_BY_RATE_NUM_RF]
|
||||
[TX_PWR_BY_RATE_NUM_RF]
|
||||
[MAX_BASE_NUM_IN_PHY_REG_PG_24G];
|
||||
@@ -1794,6 +1817,7 @@ struct rtl_dm {
|
||||
#define EFUSE_MAX_LOGICAL_SIZE 512
|
||||
|
||||
struct rtl_efuse {
|
||||
const struct rtl_efuse_ops *efuse_ops;
|
||||
bool autoLoad_ok;
|
||||
bool bootfromefuse;
|
||||
u16 max_physical_size;
|
||||
@@ -1899,6 +1923,12 @@ struct rtl_efuse {
|
||||
u8 channel_plan;
|
||||
};
|
||||
|
||||
struct rtl_efuse_ops {
|
||||
int (*efuse_onebyte_read)(struct ieee80211_hw *hw, u16 addr, u8 *data);
|
||||
void (*efuse_logical_map_read)(struct ieee80211_hw *hw, u8 type,
|
||||
u16 offset, u32 *value);
|
||||
};
|
||||
|
||||
struct rtl_tx_report {
|
||||
atomic_t sn;
|
||||
u16 last_sent_sn;
|
||||
@@ -2231,6 +2261,7 @@ struct rtl_hal_ops {
|
||||
void (*bt_coex_off_before_lps) (struct ieee80211_hw *hw);
|
||||
void (*fill_h2c_cmd) (struct ieee80211_hw *hw, u8 element_id,
|
||||
u32 cmd_len, u8 *p_cmdbuffer);
|
||||
void (*set_default_port_id_cmd)(struct ieee80211_hw *hw);
|
||||
bool (*get_btc_status) (void);
|
||||
bool (*is_fw_header)(struct rtlwifi_firmware_header *hdr);
|
||||
u32 (*rx_command_packet)(struct ieee80211_hw *hw,
|
||||
|
Reference in New Issue
Block a user