wilc1000: add new WID to pass wake_enable information to firmware
authorAjay Singh <ajay.kathat@microchip.com>
Thu, 16 Sep 2021 16:49:18 +0000 (16:49 +0000)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 21 Sep 2021 15:08:15 +0000 (18:08 +0300)
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: Ajay Singh <ajay.kathat@microchip.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20210916164902.74629-4-ajay.kathat@microchip.com
drivers/net/wireless/microchip/wilc1000/cfg80211.c
drivers/net/wireless/microchip/wilc1000/hif.c
drivers/net/wireless/microchip/wilc1000/hif.h
drivers/net/wireless/microchip/wilc1000/wlan_cfg.c
drivers/net/wireless/microchip/wilc1000/wlan_if.h

index 36b87ed3809247c8a972d975651eff07417ca656..75160ab3914a4bccd8b7f2494420aa5cc7a21603 100644 (file)
@@ -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);
 }
 
index 497a49a182ef62983fcc8bb32b2ffbdea97a2513..e69b9c7f3d31ae951b6bb1f82c429ba529f08762 100644 (file)
@@ -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 @@ error:
        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);
index 58811911213bf1f915056abe9de7080b7e8528de..cccd54ed05182875c1dd8aa35e17ef7e90ec7938 100644 (file)
@@ -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);
index fe2a7ed8e5cd2a41cc2baf9f5d76a8caf35a9cbd..dba301378b7faca077e3f49f90873ce79c028b2d 100644 (file)
@@ -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}
 };
 
index f85fd575136dc8868eb22fdcf18ab2c2f6c8004c..31c68643731d6e49969a52c54f7f08ab92335cd9 100644 (file)
@@ -662,6 +662,7 @@ enum {
 
        WID_LOG_TERMINAL_SWITCH         = 0x00CD,
        WID_TX_POWER                    = 0x00CE,
+       WID_WOWLAN_TRIGGER              = 0X00CF,
        /*  EMAC Short WID list */
        /*  RTS Threshold */
        /*