mirror of
https://github.com/torvalds/linux.git
synced 2024-12-28 13:51:44 +00:00
mwifiex: handle multichannel event
This patch adds support to handle multichannel event from FW. Signed-off-by: Avinash Patil <patila@marvell.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
cc7359b5c8
commit
8d6b538a5e
@ -172,6 +172,7 @@ enum MWIFIEX_802_11_PRIVACY_FILTER {
|
|||||||
#define TLV_TYPE_TX_PAUSE (PROPRIETARY_TLV_BASE_ID + 148)
|
#define TLV_TYPE_TX_PAUSE (PROPRIETARY_TLV_BASE_ID + 148)
|
||||||
#define TLV_TYPE_COALESCE_RULE (PROPRIETARY_TLV_BASE_ID + 154)
|
#define TLV_TYPE_COALESCE_RULE (PROPRIETARY_TLV_BASE_ID + 154)
|
||||||
#define TLV_TYPE_KEY_PARAM_V2 (PROPRIETARY_TLV_BASE_ID + 156)
|
#define TLV_TYPE_KEY_PARAM_V2 (PROPRIETARY_TLV_BASE_ID + 156)
|
||||||
|
#define TLV_TYPE_MULTI_CHAN_INFO (PROPRIETARY_TLV_BASE_ID + 183)
|
||||||
#define TLV_TYPE_TDLS_IDLE_TIMEOUT (PROPRIETARY_TLV_BASE_ID + 194)
|
#define TLV_TYPE_TDLS_IDLE_TIMEOUT (PROPRIETARY_TLV_BASE_ID + 194)
|
||||||
#define TLV_TYPE_SCAN_CHANNEL_GAP (PROPRIETARY_TLV_BASE_ID + 197)
|
#define TLV_TYPE_SCAN_CHANNEL_GAP (PROPRIETARY_TLV_BASE_ID + 197)
|
||||||
#define TLV_TYPE_API_REV (PROPRIETARY_TLV_BASE_ID + 199)
|
#define TLV_TYPE_API_REV (PROPRIETARY_TLV_BASE_ID + 199)
|
||||||
@ -516,6 +517,7 @@ enum P2P_MODES {
|
|||||||
#define EVENT_TX_DATA_PAUSE 0x00000055
|
#define EVENT_TX_DATA_PAUSE 0x00000055
|
||||||
#define EVENT_EXT_SCAN_REPORT 0x00000058
|
#define EVENT_EXT_SCAN_REPORT 0x00000058
|
||||||
#define EVENT_REMAIN_ON_CHAN_EXPIRED 0x0000005f
|
#define EVENT_REMAIN_ON_CHAN_EXPIRED 0x0000005f
|
||||||
|
#define EVENT_MULTI_CHAN_INFO 0x0000006a
|
||||||
#define EVENT_TX_STATUS_REPORT 0x00000074
|
#define EVENT_TX_STATUS_REPORT 0x00000074
|
||||||
#define EVENT_BT_COEX_WLAN_PARA_CHANGE 0X00000076
|
#define EVENT_BT_COEX_WLAN_PARA_CHANGE 0X00000076
|
||||||
|
|
||||||
@ -1970,6 +1972,12 @@ struct mwifiex_radar_det_event {
|
|||||||
__le32 passed;
|
__le32 passed;
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
|
struct mwifiex_ie_types_multi_chan_info {
|
||||||
|
struct mwifiex_ie_types_header header;
|
||||||
|
__le16 status;
|
||||||
|
u8 tlv_buffer[0];
|
||||||
|
} __packed;
|
||||||
|
|
||||||
struct meas_rpt_map {
|
struct meas_rpt_map {
|
||||||
u8 rssi:3;
|
u8 rssi:3;
|
||||||
u8 unmeasured:1;
|
u8 unmeasured:1;
|
||||||
|
@ -1557,6 +1557,8 @@ void mwifiex_11n_delba(struct mwifiex_private *priv, int tid);
|
|||||||
int mwifiex_send_domain_info_cmd_fw(struct wiphy *wiphy);
|
int mwifiex_send_domain_info_cmd_fw(struct wiphy *wiphy);
|
||||||
void mwifiex_process_tx_pause_event(struct mwifiex_private *priv,
|
void mwifiex_process_tx_pause_event(struct mwifiex_private *priv,
|
||||||
struct sk_buff *event);
|
struct sk_buff *event);
|
||||||
|
void mwifiex_process_multi_chan_event(struct mwifiex_private *priv,
|
||||||
|
struct sk_buff *event_skb);
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG_FS
|
#ifdef CONFIG_DEBUG_FS
|
||||||
void mwifiex_debugfs_init(void);
|
void mwifiex_debugfs_init(void);
|
||||||
|
@ -309,6 +309,31 @@ static void mwifiex_process_sta_tx_pause(struct mwifiex_private *priv,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mwifiex_process_multi_chan_event(struct mwifiex_private *priv,
|
||||||
|
struct sk_buff *event_skb)
|
||||||
|
{
|
||||||
|
struct mwifiex_ie_types_multi_chan_info *chan_info;
|
||||||
|
u16 status;
|
||||||
|
|
||||||
|
chan_info = (void *)event_skb->data + sizeof(u32);
|
||||||
|
|
||||||
|
if (le16_to_cpu(chan_info->header.type) != TLV_TYPE_MULTI_CHAN_INFO) {
|
||||||
|
mwifiex_dbg(priv->adapter, ERROR,
|
||||||
|
"unknown TLV in chan_info event\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = le16_to_cpu(chan_info->status);
|
||||||
|
|
||||||
|
if (status) {
|
||||||
|
mwifiex_dbg(priv->adapter, EVENT,
|
||||||
|
"multi-channel operation started\n");
|
||||||
|
} else {
|
||||||
|
mwifiex_dbg(priv->adapter, EVENT,
|
||||||
|
"multi-channel operation over\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void mwifiex_process_tx_pause_event(struct mwifiex_private *priv,
|
void mwifiex_process_tx_pause_event(struct mwifiex_private *priv,
|
||||||
struct sk_buff *event_skb)
|
struct sk_buff *event_skb)
|
||||||
{
|
{
|
||||||
@ -748,6 +773,11 @@ int mwifiex_process_sta_event(struct mwifiex_private *priv)
|
|||||||
mwifiex_process_tx_pause_event(priv, adapter->event_skb);
|
mwifiex_process_tx_pause_event(priv, adapter->event_skb);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case EVENT_MULTI_CHAN_INFO:
|
||||||
|
mwifiex_dbg(adapter, EVENT, "event: multi-chan info\n");
|
||||||
|
mwifiex_process_multi_chan_event(priv, adapter->event_skb);
|
||||||
|
break;
|
||||||
|
|
||||||
case EVENT_TX_STATUS_REPORT:
|
case EVENT_TX_STATUS_REPORT:
|
||||||
mwifiex_dbg(adapter, EVENT, "event: TX_STATUS Report\n");
|
mwifiex_dbg(adapter, EVENT, "event: TX_STATUS Report\n");
|
||||||
mwifiex_parse_tx_status_event(priv, adapter->event_body);
|
mwifiex_parse_tx_status_event(priv, adapter->event_body);
|
||||||
|
@ -304,6 +304,12 @@ int mwifiex_process_uap_event(struct mwifiex_private *priv)
|
|||||||
mwifiex_dbg(adapter, EVENT, "event: TX DATA PAUSE\n");
|
mwifiex_dbg(adapter, EVENT, "event: TX DATA PAUSE\n");
|
||||||
mwifiex_process_tx_pause_event(priv, adapter->event_skb);
|
mwifiex_process_tx_pause_event(priv, adapter->event_skb);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case EVENT_MULTI_CHAN_INFO:
|
||||||
|
mwifiex_dbg(adapter, EVENT, "event: multi-chan info\n");
|
||||||
|
mwifiex_process_multi_chan_event(priv, adapter->event_skb);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
mwifiex_dbg(adapter, EVENT,
|
mwifiex_dbg(adapter, EVENT,
|
||||||
"event: unknown event id: %#x\n", eventcause);
|
"event: unknown event id: %#x\n", eventcause);
|
||||||
|
Loading…
Reference in New Issue
Block a user