Commit 0ec5408c authored by Ajay Singh's avatar Ajay Singh Committed by Kalle Valo
Browse files

wilc1000: add new WID to pass wake_enable information to firmware



Add new WID(WID_WOWLAN_TRIGGER) to send wake_enable information to firmware.
In 'set_wakeup' cfg80211_ops callback, the enable information was not
passed to firmware which is required to handle WOWLan trigger notification
from firmware.

Signed-off-by: default avatarAjay Singh <ajay.kathat@microchip.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20210916164902.74629-4-ajay.kathat@microchip.com
parent 3c719fed
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1580,6 +1580,7 @@ static void wilc_set_wakeup(struct wiphy *wiphy, bool enabled)
	}

	netdev_info(vif->ndev, "cfg set wake up = %d\n", enabled);
	wilc_set_wowlan_trigger(vif, enabled);
	srcu_read_unlock(&wl->srcu, srcu_idx);
}

+24 −0
Original line number Diff line number Diff line
@@ -23,6 +23,10 @@ struct wilc_set_multicast {
	u8 *mc_list;
};

struct host_if_wowlan_trigger {
	u8 wowlan_trigger;
};

struct wilc_del_all_sta {
	u8 assoc_sta;
	u8 mac[WILC_MAX_NUM_STA][ETH_ALEN];
@@ -34,6 +38,7 @@ union wilc_message_body {
	struct wilc_set_multicast mc_info;
	struct wilc_remain_ch remain_on_ch;
	char *data;
	struct host_if_wowlan_trigger wow_trigger;
};

struct host_if_msg {
@@ -962,6 +967,25 @@ static void handle_set_mcast_filter(struct work_struct *work)
	kfree(msg);
}

void wilc_set_wowlan_trigger(struct wilc_vif *vif, bool enabled)
{
	int ret;
	struct wid wid;
	u8 wowlan_trigger = 0;

	if (enabled)
		wowlan_trigger = 1;

	wid.id = WID_WOWLAN_TRIGGER;
	wid.type = WID_CHAR;
	wid.val = &wowlan_trigger;
	wid.size = sizeof(char);

	ret = wilc_send_config_pkt(vif, WILC_SET_CFG, &wid, 1);
	if (ret)
		pr_err("Failed to send wowlan trigger config packet\n");
}

static void handle_scan_timer(struct work_struct *work)
{
	struct host_if_msg *msg = container_of(work, struct host_if_msg, work);
+1 −0
Original line number Diff line number Diff line
@@ -207,6 +207,7 @@ int wilc_get_statistics(struct wilc_vif *vif, struct rf_info *stats);
int wilc_get_vif_idx(struct wilc_vif *vif);
int wilc_set_tx_power(struct wilc_vif *vif, u8 tx_power);
int wilc_get_tx_power(struct wilc_vif *vif, u8 *tx_power);
void wilc_set_wowlan_trigger(struct wilc_vif *vif, bool enabled);
void wilc_scan_complete_received(struct wilc *wilc, u8 *buffer, u32 length);
void wilc_network_info_received(struct wilc *wilc, u8 *buffer, u32 length);
void wilc_gnrl_async_info_received(struct wilc *wilc, u8 *buffer, u32 length);
+1 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ static const struct wilc_cfg_byte g_cfg_byte[] = {
	{WID_STATUS, 0},
	{WID_RSSI, 0},
	{WID_LINKSPEED, 0},
	{WID_WOWLAN_TRIGGER, 0},
	{WID_NIL, 0}
};

+1 −0
Original line number Diff line number Diff line
@@ -662,6 +662,7 @@ enum {

	WID_LOG_TERMINAL_SWITCH		= 0x00CD,
	WID_TX_POWER			= 0x00CE,
	WID_WOWLAN_TRIGGER		= 0X00CF,
	/*  EMAC Short WID list */
	/*  RTS Threshold */
	/*