Merge tag 'wireless-drivers-next-for-davem-2017-04-21' of git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next
Kalle Valo says: ==================== wireless-drivers-next patches for 4.12 Quite a lot of patches for rtlwifi and iwlwifi this time, but changes also for other active wireless drivers. Major changes: ath9k * add support for Dell Wireless 1601 PCI device * add debugfs file to manually override noise floor ath10k * bump up FW API to 6 for a new QCA6174 firmware branch wil6210 * support 8 kB RX buffers iwlwifi * work to support A000 devices continues * add support for FW API 30 * add Geographical and Dynamic Specific Absorption Rate (SAR) support * support a few new PCI device IDs rtlwifi * work on adding Bluetooth coexistance support, not finished yet ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@ -1559,12 +1559,6 @@ static int wil_cfg80211_set_power_mgmt(struct wiphy *wiphy,
|
||||
{
|
||||
struct wil6210_priv *wil = wiphy_to_wil(wiphy);
|
||||
enum wmi_ps_profile_type ps_profile;
|
||||
int rc;
|
||||
|
||||
if (!test_bit(WMI_FW_CAPABILITY_PS_CONFIG, wil->fw_capabilities)) {
|
||||
wil_err(wil, "set_power_mgmt not supported\n");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
wil_dbg_misc(wil, "enabled=%d, timeout=%d\n",
|
||||
enabled, timeout);
|
||||
@ -1574,11 +1568,7 @@ static int wil_cfg80211_set_power_mgmt(struct wiphy *wiphy,
|
||||
else
|
||||
ps_profile = WMI_PS_PROFILE_TYPE_PS_DISABLED;
|
||||
|
||||
rc = wmi_ps_dev_profile_cfg(wil, ps_profile);
|
||||
if (rc)
|
||||
wil_err(wil, "wmi_ps_dev_profile_cfg failed (%d)\n", rc);
|
||||
|
||||
return rc;
|
||||
return wil_ps_update(wil, ps_profile);
|
||||
}
|
||||
|
||||
static const struct cfg80211_ops wil_cfg80211_ops = {
|
||||
|
@ -524,9 +524,8 @@ static ssize_t wil_read_file_ioblob(struct file *file, char __user *user_buf,
|
||||
if (!buf)
|
||||
return -ENOMEM;
|
||||
|
||||
wil_memcpy_fromio_halp_vote(wil_blob->wil, buf,
|
||||
(const volatile void __iomem *)
|
||||
wil_blob->blob.data + pos, count);
|
||||
wil_memcpy_fromio_32(buf, (const void __iomem *)
|
||||
wil_blob->blob.data + pos, count);
|
||||
|
||||
ret = copy_to_user(user_buf, buf, count);
|
||||
kfree(buf);
|
||||
|
@ -554,5 +554,7 @@ bool wil_fw_verify_file_exists(struct wil6210_priv *wil, const char *name)
|
||||
rc = request_firmware(&fw, name, wil_to_dev(wil));
|
||||
if (!rc)
|
||||
release_firmware(fw);
|
||||
return rc != -ENOENT;
|
||||
else
|
||||
wil_dbg_fw(wil, "<%s> not available: %d\n", name, rc);
|
||||
return !rc;
|
||||
}
|
||||
|
@ -130,17 +130,15 @@ void wil_memcpy_fromio_32(void *dst, const volatile void __iomem *src,
|
||||
u32 *d = dst;
|
||||
const volatile u32 __iomem *s = src;
|
||||
|
||||
/* size_t is unsigned, if (count%4 != 0) it will wrap */
|
||||
for (count += 4; count > 4; count -= 4)
|
||||
for (; count >= 4; count -= 4)
|
||||
*d++ = __raw_readl(s++);
|
||||
}
|
||||
|
||||
void wil_memcpy_fromio_halp_vote(struct wil6210_priv *wil, void *dst,
|
||||
const volatile void __iomem *src, size_t count)
|
||||
{
|
||||
wil_halp_vote(wil);
|
||||
wil_memcpy_fromio_32(dst, src, count);
|
||||
wil_halp_unvote(wil);
|
||||
if (unlikely(count)) {
|
||||
/* count can be 1..3 */
|
||||
u32 tmp = __raw_readl(s);
|
||||
|
||||
memcpy(d, &tmp, count);
|
||||
}
|
||||
}
|
||||
|
||||
void wil_memcpy_toio_32(volatile void __iomem *dst, const void *src,
|
||||
@ -149,17 +147,16 @@ void wil_memcpy_toio_32(volatile void __iomem *dst, const void *src,
|
||||
volatile u32 __iomem *d = dst;
|
||||
const u32 *s = src;
|
||||
|
||||
for (count += 4; count > 4; count -= 4)
|
||||
for (; count >= 4; count -= 4)
|
||||
__raw_writel(*s++, d++);
|
||||
}
|
||||
|
||||
void wil_memcpy_toio_halp_vote(struct wil6210_priv *wil,
|
||||
volatile void __iomem *dst,
|
||||
const void *src, size_t count)
|
||||
{
|
||||
wil_halp_vote(wil);
|
||||
wil_memcpy_toio_32(dst, src, count);
|
||||
wil_halp_unvote(wil);
|
||||
if (unlikely(count)) {
|
||||
/* count can be 1..3 */
|
||||
u32 tmp = 0;
|
||||
|
||||
memcpy(&tmp, s, count);
|
||||
__raw_writel(tmp, d);
|
||||
}
|
||||
}
|
||||
|
||||
static void wil_disconnect_cid(struct wil6210_priv *wil, int cid,
|
||||
@ -576,6 +573,9 @@ int wil_priv_init(struct wil6210_priv *wil)
|
||||
|
||||
if (rx_ring_overflow_thrsh == WIL6210_RX_HIGH_TRSH_INIT)
|
||||
rx_ring_overflow_thrsh = WIL6210_RX_HIGH_TRSH_DEFAULT;
|
||||
|
||||
wil->ps_profile = WMI_PS_PROFILE_TYPE_DEFAULT;
|
||||
|
||||
return 0;
|
||||
|
||||
out_wmi_wq:
|
||||
@ -903,6 +903,24 @@ void wil_abort_scan(struct wil6210_priv *wil, bool sync)
|
||||
}
|
||||
}
|
||||
|
||||
int wil_ps_update(struct wil6210_priv *wil, enum wmi_ps_profile_type ps_profile)
|
||||
{
|
||||
int rc;
|
||||
|
||||
if (!test_bit(WMI_FW_CAPABILITY_PS_CONFIG, wil->fw_capabilities)) {
|
||||
wil_err(wil, "set_power_mgmt not supported\n");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
rc = wmi_ps_dev_profile_cfg(wil, ps_profile);
|
||||
if (rc)
|
||||
wil_err(wil, "wmi_ps_dev_profile_cfg failed (%d)\n", rc);
|
||||
else
|
||||
wil->ps_profile = ps_profile;
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
* We reset all the structures, and we reset the UMAC.
|
||||
* After calling this routine, you're expected to reload
|
||||
@ -948,15 +966,15 @@ int wil_reset(struct wil6210_priv *wil, bool load_fw)
|
||||
/* Disable device led before reset*/
|
||||
wmi_led_cfg(wil, false);
|
||||
|
||||
mutex_lock(&wil->p2p_wdev_mutex);
|
||||
wil_abort_scan(wil, false);
|
||||
mutex_unlock(&wil->p2p_wdev_mutex);
|
||||
|
||||
/* prevent NAPI from being scheduled and prevent wmi commands */
|
||||
mutex_lock(&wil->wmi_mutex);
|
||||
bitmap_zero(wil->status, wil_status_last);
|
||||
mutex_unlock(&wil->wmi_mutex);
|
||||
|
||||
mutex_lock(&wil->p2p_wdev_mutex);
|
||||
wil_abort_scan(wil, false);
|
||||
mutex_unlock(&wil->p2p_wdev_mutex);
|
||||
|
||||
wil_mask_irq(wil);
|
||||
|
||||
wmi_event_flush(wil);
|
||||
@ -1033,6 +1051,9 @@ int wil_reset(struct wil6210_priv *wil, bool load_fw)
|
||||
return rc;
|
||||
}
|
||||
|
||||
if (wil->ps_profile != WMI_PS_PROFILE_TYPE_DEFAULT)
|
||||
wil_ps_update(wil, wil->ps_profile);
|
||||
|
||||
wil_collect_fw_info(wil);
|
||||
|
||||
if (wil->platform_ops.notify) {
|
||||
|
@ -71,6 +71,11 @@ int wil_suspend(struct wil6210_priv *wil, bool is_runtime)
|
||||
|
||||
wil_dbg_pm(wil, "suspend: %s\n", is_runtime ? "runtime" : "system");
|
||||
|
||||
if (test_bit(wil_status_suspended, wil->status)) {
|
||||
wil_dbg_pm(wil, "trying to suspend while suspended\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* if netif up, hardware is alive, shut it down */
|
||||
if (ndev->flags & IFF_UP) {
|
||||
rc = wil_down(wil);
|
||||
@ -80,12 +85,24 @@ int wil_suspend(struct wil6210_priv *wil, bool is_runtime)
|
||||
}
|
||||
}
|
||||
|
||||
if (wil->platform_ops.suspend)
|
||||
/* Disable PCIe IRQ to prevent sporadic IRQs when PCIe is suspending */
|
||||
wil_dbg_pm(wil, "Disabling PCIe IRQ before suspending\n");
|
||||
wil_disable_irq(wil);
|
||||
|
||||
if (wil->platform_ops.suspend) {
|
||||
rc = wil->platform_ops.suspend(wil->platform_handle);
|
||||
if (rc) {
|
||||
wil_enable_irq(wil);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
set_bit(wil_status_suspended, wil->status);
|
||||
|
||||
out:
|
||||
wil_dbg_pm(wil, "suspend: %s => %d\n",
|
||||
is_runtime ? "runtime" : "system", rc);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
@ -104,12 +121,18 @@ int wil_resume(struct wil6210_priv *wil, bool is_runtime)
|
||||
}
|
||||
}
|
||||
|
||||
wil_dbg_pm(wil, "Enabling PCIe IRQ\n");
|
||||
wil_enable_irq(wil);
|
||||
|
||||
/* if netif up, bring hardware up
|
||||
* During open(), IFF_UP set after actual device method
|
||||
* invocation. This prevent recursive call to wil_up()
|
||||
* invocation. This prevent recursive call to wil_up().
|
||||
* wil_status_suspended will be cleared in wil_reset
|
||||
*/
|
||||
if (ndev->flags & IFF_UP)
|
||||
rc = wil_up(wil);
|
||||
else
|
||||
clear_bit(wil_status_suspended, wil->status);
|
||||
|
||||
out:
|
||||
wil_dbg_pm(wil, "resume: %s => %d\n",
|
||||
|
@ -200,7 +200,7 @@ void wil_pmc_alloc(struct wil6210_priv *wil,
|
||||
|
||||
release_pmc_skbs:
|
||||
wil_err(wil, "exit on error: Releasing skbs...\n");
|
||||
for (i = 0; pmc->descriptors[i].va && i < num_descriptors; i++) {
|
||||
for (i = 0; i < num_descriptors && pmc->descriptors[i].va; i++) {
|
||||
dma_free_coherent(dev,
|
||||
descriptor_size,
|
||||
pmc->descriptors[i].va,
|
||||
@ -283,7 +283,7 @@ void wil_pmc_free(struct wil6210_priv *wil, int send_pmc_cmd)
|
||||
int i;
|
||||
|
||||
for (i = 0;
|
||||
pmc->descriptors[i].va && i < pmc->num_descriptors; i++) {
|
||||
i < pmc->num_descriptors && pmc->descriptors[i].va; i++) {
|
||||
dma_free_coherent(dev,
|
||||
pmc->descriptor_size,
|
||||
pmc->descriptors[i].va,
|
||||
|
@ -343,8 +343,16 @@ __acquires(&sta->tid_rx_lock) __releases(&sta->tid_rx_lock)
|
||||
wil_err(wil, "BACK requested unsupported ba_policy == 1\n");
|
||||
status = WLAN_STATUS_INVALID_QOS_PARAM;
|
||||
}
|
||||
if (status == WLAN_STATUS_SUCCESS)
|
||||
agg_wsize = wil_agg_size(wil, req_agg_wsize);
|
||||
if (status == WLAN_STATUS_SUCCESS) {
|
||||
if (req_agg_wsize == 0) {
|
||||
wil_dbg_misc(wil, "Suggest BACK wsize %d\n",
|
||||
WIL_MAX_AGG_WSIZE);
|
||||
agg_wsize = WIL_MAX_AGG_WSIZE;
|
||||
} else {
|
||||
agg_wsize = min_t(u16,
|
||||
WIL_MAX_AGG_WSIZE, req_agg_wsize);
|
||||
}
|
||||
}
|
||||
|
||||
rc = wmi_addba_rx_resp(wil, cid, tid, dialog_token, status,
|
||||
agg_amsdu, agg_wsize, agg_timeout);
|
||||
|
@ -37,6 +37,10 @@ bool rx_align_2;
|
||||
module_param(rx_align_2, bool, 0444);
|
||||
MODULE_PARM_DESC(rx_align_2, " align Rx buffers on 4*n+2, default - no");
|
||||
|
||||
bool rx_large_buf;
|
||||
module_param(rx_large_buf, bool, 0444);
|
||||
MODULE_PARM_DESC(rx_large_buf, " allocate 8KB RX buffers, default - no");
|
||||
|
||||
static inline uint wil_rx_snaplen(void)
|
||||
{
|
||||
return rx_align_2 ? 6 : 0;
|
||||
@ -255,7 +259,7 @@ static int wil_vring_alloc_skb(struct wil6210_priv *wil, struct vring *vring,
|
||||
u32 i, int headroom)
|
||||
{
|
||||
struct device *dev = wil_to_dev(wil);
|
||||
unsigned int sz = mtu_max + ETH_HLEN + wil_rx_snaplen();
|
||||
unsigned int sz = wil->rx_buf_len + ETH_HLEN + wil_rx_snaplen();
|
||||
struct vring_rx_desc dd, *d = ⅆ
|
||||
volatile struct vring_rx_desc *_d = &vring->va[i].rx;
|
||||
dma_addr_t pa;
|
||||
@ -419,7 +423,7 @@ static struct sk_buff *wil_vring_reap_rx(struct wil6210_priv *wil,
|
||||
struct sk_buff *skb;
|
||||
dma_addr_t pa;
|
||||
unsigned int snaplen = wil_rx_snaplen();
|
||||
unsigned int sz = mtu_max + ETH_HLEN + snaplen;
|
||||
unsigned int sz = wil->rx_buf_len + ETH_HLEN + snaplen;
|
||||
u16 dmalen;
|
||||
u8 ftype;
|
||||
int cid;
|
||||
@ -780,6 +784,20 @@ void wil_rx_handle(struct wil6210_priv *wil, int *quota)
|
||||
wil_rx_refill(wil, v->size);
|
||||
}
|
||||
|
||||
static void wil_rx_buf_len_init(struct wil6210_priv *wil)
|
||||
{
|
||||
wil->rx_buf_len = rx_large_buf ?
|
||||
WIL_MAX_ETH_MTU : TXRX_BUF_LEN_DEFAULT - WIL_MAX_MPDU_OVERHEAD;
|
||||
if (mtu_max > wil->rx_buf_len) {
|
||||
/* do not allow RX buffers to be smaller than mtu_max, for
|
||||
* backward compatibility (mtu_max parameter was also used
|
||||
* to support receiving large packets)
|
||||
*/
|
||||
wil_info(wil, "Override RX buffer to mtu_max(%d)\n", mtu_max);
|
||||
wil->rx_buf_len = mtu_max;
|
||||
}
|
||||
}
|
||||
|
||||
int wil_rx_init(struct wil6210_priv *wil, u16 size)
|
||||
{
|
||||
struct vring *vring = &wil->vring_rx;
|
||||
@ -792,6 +810,8 @@ int wil_rx_init(struct wil6210_priv *wil, u16 size)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
wil_rx_buf_len_init(wil);
|
||||
|
||||
vring->size = size;
|
||||
rc = wil_vring_alloc(wil, vring);
|
||||
if (rc)
|
||||
|
@ -32,6 +32,7 @@ extern unsigned short rx_ring_overflow_thrsh;
|
||||
extern int agg_wsize;
|
||||
extern u32 vring_idle_trsh;
|
||||
extern bool rx_align_2;
|
||||
extern bool rx_large_buf;
|
||||
extern bool debug_fw;
|
||||
extern bool disable_ap_sme;
|
||||
|
||||
@ -411,6 +412,7 @@ enum { /* for wil6210_priv.status */
|
||||
wil_status_irqen, /* FIXME: interrupts enabled - for debug */
|
||||
wil_status_napi_en, /* NAPI enabled protected by wil->mutex */
|
||||
wil_status_resetting, /* reset in progress */
|
||||
wil_status_suspended, /* suspend completed, device is suspended */
|
||||
wil_status_last /* keep last */
|
||||
};
|
||||
|
||||
@ -656,6 +658,7 @@ struct wil6210_priv {
|
||||
struct work_struct probe_client_worker;
|
||||
/* DMA related */
|
||||
struct vring vring_rx;
|
||||
unsigned int rx_buf_len;
|
||||
struct vring vring_tx[WIL6210_MAX_TX_RINGS];
|
||||
struct vring_tx_data vring_tx_data[WIL6210_MAX_TX_RINGS];
|
||||
u8 vring2cid_tid[WIL6210_MAX_TX_RINGS][2]; /* [0] - CID, [1] - TID */
|
||||
@ -691,6 +694,8 @@ struct wil6210_priv {
|
||||
/* High Access Latency Policy voting */
|
||||
struct wil_halp halp;
|
||||
|
||||
enum wmi_ps_profile_type ps_profile;
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
struct notifier_block pm_notify;
|
||||
@ -799,12 +804,6 @@ void wil_memcpy_fromio_32(void *dst, const volatile void __iomem *src,
|
||||
size_t count);
|
||||
void wil_memcpy_toio_32(volatile void __iomem *dst, const void *src,
|
||||
size_t count);
|
||||
void wil_memcpy_fromio_halp_vote(struct wil6210_priv *wil, void *dst,
|
||||
const volatile void __iomem *src,
|
||||
size_t count);
|
||||
void wil_memcpy_toio_halp_vote(struct wil6210_priv *wil,
|
||||
volatile void __iomem *dst,
|
||||
const void *src, size_t count);
|
||||
|
||||
void *wil_if_alloc(struct device *dev);
|
||||
void wil_if_free(struct wil6210_priv *wil);
|
||||
@ -812,6 +811,8 @@ int wil_if_add(struct wil6210_priv *wil);
|
||||
void wil_if_remove(struct wil6210_priv *wil);
|
||||
int wil_priv_init(struct wil6210_priv *wil);
|
||||
void wil_priv_deinit(struct wil6210_priv *wil);
|
||||
int wil_ps_update(struct wil6210_priv *wil,
|
||||
enum wmi_ps_profile_type ps_profile);
|
||||
int wil_reset(struct wil6210_priv *wil, bool no_fw);
|
||||
void wil_fw_error_recovery(struct wil6210_priv *wil);
|
||||
void wil_set_recovery_state(struct wil6210_priv *wil, int state);
|
||||
|
@ -518,16 +518,16 @@ static void wmi_evt_connect(struct wil6210_priv *wil, int id, void *d, int len)
|
||||
assoc_resp_ielen = 0;
|
||||
}
|
||||
|
||||
mutex_lock(&wil->mutex);
|
||||
if (test_bit(wil_status_resetting, wil->status) ||
|
||||
!test_bit(wil_status_fwready, wil->status)) {
|
||||
wil_err(wil, "status_resetting, cancel connect event, CID %d\n",
|
||||
evt->cid);
|
||||
mutex_unlock(&wil->mutex);
|
||||
/* no need for cleanup, wil_reset will do that */
|
||||
return;
|
||||
}
|
||||
|
||||
mutex_lock(&wil->mutex);
|
||||
|
||||
if ((wdev->iftype == NL80211_IFTYPE_STATION) ||
|
||||
(wdev->iftype == NL80211_IFTYPE_P2P_CLIENT)) {
|
||||
if (!test_bit(wil_status_fwconnecting, wil->status)) {
|
||||
@ -631,6 +631,13 @@ static void wmi_evt_disconnect(struct wil6210_priv *wil, int id,
|
||||
|
||||
wil->sinfo_gen++;
|
||||
|
||||
if (test_bit(wil_status_resetting, wil->status) ||
|
||||
!test_bit(wil_status_fwready, wil->status)) {
|
||||
wil_err(wil, "status_resetting, cancel disconnect event\n");
|
||||
/* no need for cleanup, wil_reset will do that */
|
||||
return;
|
||||
}
|
||||
|
||||
mutex_lock(&wil->mutex);
|
||||
wil6210_disconnect(wil, evt->bssid, reason_code, true);
|
||||
mutex_unlock(&wil->mutex);
|
||||
@ -1398,7 +1405,8 @@ int wmi_rx_chain_add(struct wil6210_priv *wil, struct vring *vring)
|
||||
struct wmi_cfg_rx_chain_cmd cmd = {
|
||||
.action = WMI_RX_CHAIN_ADD,
|
||||
.rx_sw_ring = {
|
||||
.max_mpdu_size = cpu_to_le16(wil_mtu2macbuf(mtu_max)),
|
||||
.max_mpdu_size = cpu_to_le16(
|
||||
wil_mtu2macbuf(wil->rx_buf_len)),
|
||||
.ring_mem_base = cpu_to_le64(vring->pa),
|
||||
.ring_size = cpu_to_le16(vring->size),
|
||||
},
|
||||
|
@ -58,6 +58,7 @@ enum wmi_fw_capability {
|
||||
WMI_FW_CAPABILITY_MGMT_RETRY_LIMIT = 3,
|
||||
WMI_FW_CAPABILITY_DISABLE_AP_SME = 4,
|
||||
WMI_FW_CAPABILITY_WMI_ONLY = 5,
|
||||
WMI_FW_CAPABILITY_THERMAL_THROTTLING = 7,
|
||||
WMI_FW_CAPABILITY_MAX,
|
||||
};
|
||||
|
||||
@ -142,8 +143,6 @@ enum wmi_command_id {
|
||||
WMI_MAINTAIN_RESUME_CMDID = 0x851,
|
||||
WMI_RS_MGMT_CMDID = 0x852,
|
||||
WMI_RF_MGMT_CMDID = 0x853,
|
||||
WMI_THERMAL_THROTTLING_CTRL_CMDID = 0x854,
|
||||
WMI_THERMAL_THROTTLING_GET_STATUS_CMDID = 0x855,
|
||||
WMI_OTP_READ_CMDID = 0x856,
|
||||
WMI_OTP_WRITE_CMDID = 0x857,
|
||||
WMI_LED_CFG_CMDID = 0x858,
|
||||
@ -192,6 +191,8 @@ enum wmi_command_id {
|
||||
WMI_GET_MGMT_RETRY_LIMIT_CMDID = 0x931,
|
||||
WMI_NEW_STA_CMDID = 0x935,
|
||||
WMI_DEL_STA_CMDID = 0x936,
|
||||
WMI_SET_THERMAL_THROTTLING_CFG_CMDID = 0x940,
|
||||
WMI_GET_THERMAL_THROTTLING_CFG_CMDID = 0x941,
|
||||
WMI_TOF_SESSION_START_CMDID = 0x991,
|
||||
WMI_TOF_GET_CAPABILITIES_CMDID = 0x992,
|
||||
WMI_TOF_SET_LCR_CMDID = 0x993,
|
||||
@ -438,16 +439,6 @@ struct wmi_rf_mgmt_cmd {
|
||||
__le32 rf_mgmt_type;
|
||||
} __packed;
|
||||
|
||||
/* WMI_THERMAL_THROTTLING_CTRL_CMDID */
|
||||
#define THERMAL_THROTTLING_USE_DEFAULT_MAX_TXOP_LENGTH (0xFFFFFFFF)
|
||||
|
||||
/* WMI_THERMAL_THROTTLING_CTRL_CMDID */
|
||||
struct wmi_thermal_throttling_ctrl_cmd {
|
||||
__le32 time_on_usec;
|
||||
__le32 time_off_usec;
|
||||
__le32 max_txop_length_usec;
|
||||
} __packed;
|
||||
|
||||
/* WMI_RF_RX_TEST_CMDID */
|
||||
struct wmi_rf_rx_test_cmd {
|
||||
__le32 sector;
|
||||
@ -549,7 +540,7 @@ struct wmi_pcp_start_cmd {
|
||||
u8 hidden_ssid;
|
||||
u8 is_go;
|
||||
u8 reserved0[5];
|
||||
/* abft_len override if non-0 */
|
||||
/* A-BFT length override if non-0 */
|
||||
u8 abft_len;
|
||||
u8 disable_ap_sme;
|
||||
u8 network_type;
|
||||
@ -910,6 +901,39 @@ struct wmi_set_mgmt_retry_limit_cmd {
|
||||
u8 reserved[3];
|
||||
} __packed;
|
||||
|
||||
/* Zones: HIGH, MAX, CRITICAL */
|
||||
#define WMI_NUM_OF_TT_ZONES (3)
|
||||
|
||||
struct wmi_tt_zone_limits {
|
||||
/* Above this temperature this zone is active */
|
||||
u8 temperature_high;
|
||||
/* Below this temperature the adjacent lower zone is active */
|
||||
u8 temperature_low;
|
||||
u8 reserved[2];
|
||||
} __packed;
|
||||
|
||||
/* Struct used for both configuration and status commands of thermal
|
||||
* throttling
|
||||
*/
|
||||
struct wmi_tt_data {
|
||||
/* Enable/Disable TT algorithm for baseband */
|
||||
u8 bb_enabled;
|
||||
u8 reserved0[3];
|
||||
/* Define zones for baseband */
|
||||
struct wmi_tt_zone_limits bb_zones[WMI_NUM_OF_TT_ZONES];
|
||||
/* Enable/Disable TT algorithm for radio */
|
||||
u8 rf_enabled;
|
||||
u8 reserved1[3];
|
||||
/* Define zones for all radio chips */
|
||||
struct wmi_tt_zone_limits rf_zones[WMI_NUM_OF_TT_ZONES];
|
||||
} __packed;
|
||||
|
||||
/* WMI_SET_THERMAL_THROTTLING_CFG_CMDID */
|
||||
struct wmi_set_thermal_throttling_cfg_cmd {
|
||||
/* Command data */
|
||||
struct wmi_tt_data tt_data;
|
||||
} __packed;
|
||||
|
||||
/* WMI_NEW_STA_CMDID */
|
||||
struct wmi_new_sta_cmd {
|
||||
u8 dst_mac[WMI_MAC_LEN];
|
||||
@ -1040,7 +1064,6 @@ enum wmi_event_id {
|
||||
WMI_BF_RXSS_MGMT_DONE_EVENTID = 0x1839,
|
||||
WMI_RS_MGMT_DONE_EVENTID = 0x1852,
|
||||
WMI_RF_MGMT_STATUS_EVENTID = 0x1853,
|
||||
WMI_THERMAL_THROTTLING_STATUS_EVENTID = 0x1855,
|
||||
WMI_BF_SM_MGMT_DONE_EVENTID = 0x1838,
|
||||
WMI_RX_MGMT_PACKET_EVENTID = 0x1840,
|
||||
WMI_TX_MGMT_PACKET_EVENTID = 0x1841,
|
||||
@ -1090,6 +1113,8 @@ enum wmi_event_id {
|
||||
WMI_BRP_SET_ANT_LIMIT_EVENTID = 0x1924,
|
||||
WMI_SET_MGMT_RETRY_LIMIT_EVENTID = 0x1930,
|
||||
WMI_GET_MGMT_RETRY_LIMIT_EVENTID = 0x1931,
|
||||
WMI_SET_THERMAL_THROTTLING_CFG_EVENTID = 0x1940,
|
||||
WMI_GET_THERMAL_THROTTLING_CFG_EVENTID = 0x1941,
|
||||
WMI_TOF_SESSION_END_EVENTID = 0x1991,
|
||||
WMI_TOF_GET_CAPABILITIES_EVENTID = 0x1992,
|
||||
WMI_TOF_SET_LCR_EVENTID = 0x1993,
|
||||
@ -1133,13 +1158,6 @@ struct wmi_rf_mgmt_status_event {
|
||||
__le32 rf_status;
|
||||
} __packed;
|
||||
|
||||
/* WMI_THERMAL_THROTTLING_STATUS_EVENTID */
|
||||
struct wmi_thermal_throttling_status_event {
|
||||
__le32 time_on_usec;
|
||||
__le32 time_off_usec;
|
||||
__le32 max_txop_length_usec;
|
||||
} __packed;
|
||||
|
||||
/* WMI_GET_STATUS_DONE_EVENTID */
|
||||
struct wmi_get_status_done_event {
|
||||
__le32 is_associated;
|
||||
@ -2206,6 +2224,19 @@ struct wmi_tof_get_capabilities_event {
|
||||
__le32 aoa_supported_types;
|
||||
} __packed;
|
||||
|
||||
/* WMI_SET_THERMAL_THROTTLING_CFG_EVENTID */
|
||||
struct wmi_set_thermal_throttling_cfg_event {
|
||||
/* wmi_fw_status */
|
||||
u8 status;
|
||||
u8 reserved[3];
|
||||
} __packed;
|
||||
|
||||
/* WMI_GET_THERMAL_THROTTLING_CFG_EVENTID */
|
||||
struct wmi_get_thermal_throttling_cfg_event {
|
||||
/* Status data */
|
||||
struct wmi_tt_data tt_data;
|
||||
} __packed;
|
||||
|
||||
enum wmi_tof_session_end_status {
|
||||
WMI_TOF_SESSION_END_NO_ERROR = 0x00,
|
||||
WMI_TOF_SESSION_END_FAIL = 0x01,
|
||||
|
Reference in New Issue
Block a user