Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8d6b538a authored by Avinash Patil's avatar Avinash Patil Committed by Kalle Valo
Browse files

mwifiex: handle multichannel event



This patch adds support to handle multichannel event from FW.

Signed-off-by: default avatarAvinash Patil <patila@marvell.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent cc7359b5
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -172,6 +172,7 @@ enum MWIFIEX_802_11_PRIVACY_FILTER {
#define TLV_TYPE_TX_PAUSE           (PROPRIETARY_TLV_BASE_ID + 148)
#define TLV_TYPE_COALESCE_RULE      (PROPRIETARY_TLV_BASE_ID + 154)
#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_SCAN_CHANNEL_GAP   (PROPRIETARY_TLV_BASE_ID + 197)
#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_EXT_SCAN_REPORT           0x00000058
#define EVENT_REMAIN_ON_CHAN_EXPIRED    0x0000005f
#define EVENT_MULTI_CHAN_INFO           0x0000006a
#define EVENT_TX_STATUS_REPORT		0x00000074
#define EVENT_BT_COEX_WLAN_PARA_CHANGE	0X00000076

@@ -1970,6 +1972,12 @@ struct mwifiex_radar_det_event {
	__le32 passed;
} __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 {
	u8 rssi:3;
	u8 unmeasured:1;
+2 −0
Original line number Diff line number Diff line
@@ -1557,6 +1557,8 @@ void mwifiex_11n_delba(struct mwifiex_private *priv, int tid);
int mwifiex_send_domain_info_cmd_fw(struct wiphy *wiphy);
void mwifiex_process_tx_pause_event(struct mwifiex_private *priv,
				    struct sk_buff *event);
void mwifiex_process_multi_chan_event(struct mwifiex_private *priv,
				      struct sk_buff *event_skb);

#ifdef CONFIG_DEBUG_FS
void mwifiex_debugfs_init(void);
+30 −0
Original line number Diff line number Diff line
@@ -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,
				    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);
		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:
		mwifiex_dbg(adapter, EVENT, "event: TX_STATUS Report\n");
		mwifiex_parse_tx_status_event(priv, adapter->event_body);
+6 −0
Original line number Diff line number Diff line
@@ -304,6 +304,12 @@ int mwifiex_process_uap_event(struct mwifiex_private *priv)
		mwifiex_dbg(adapter, EVENT, "event: TX DATA PAUSE\n");
		mwifiex_process_tx_pause_event(priv, adapter->event_skb);
		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:
		mwifiex_dbg(adapter, EVENT,
			    "event: unknown event id: %#x\n", eventcause);