Introduction

 

The WOWL(Wake-On-Wlan) is a networking standard wherein a host computer/system can be turned on/awakened by a WLAN networking message. The following blog discusses on the steps to enable the WOWL feature for the WLAN chip.

 

Description

 

WOWL feature is currently supported in CYW43455, CYW4356, CYW4354, CYW4373. Although the validation is currently done only for CYW43455, the other chips do have the support in their firmware. Any updates on the WOWL feature support will be listed in the README of each FMAC release in the community.

 

WoWL feature awakens the host from one of the sleep states of the host ( as mentioned  in the following link: https://www.kernel.org/doc/Documentation/power/states.txt) by a network message from a  wireless Access Point (AP).Once the predefined wake condition is met at the Station(STA) side, a GPIO(configured at the sta side) is triggered by the WLAN chip and awaken the host.

 

Wake conditions

 

Following are the WoWL wake conditions that needs to be pre-configured in the wireless  Station(STA) device.

  • wake up on disconnect
  • wake up on magic packet
  • wake up on pattern match, up to 8 patterns of 1-128 bytes, maximum packet offset 1500 bytes
  • wake up on GTK rekey failure
  • wake up on network detection, up to 16 match sets

To check the list of supported wowl conditions in your wlan chip, issue for the following command

iw phy <phyname> info

eg : iw phy phy0 info

To see only the wowlan capabilities, issue the following command.

iw phy <phyname> wowlan show

eg: iw phy phy0 wowlan show

  • wake up on disconnect
  • wake up on GTK rekeying failure
  • wake up on EAP identity request
  • wake up on 4-way handshake

 

GPIO registration

 

To register the GPIOs that trigger the wakeup of the host, modify the following parameters in the nvram file.

wowl_gpio(Gets triggered on all wakeup events)

wowl_extgpio(Gets triggered with abnormal wakeup cases such as beacon loss/TCPKA failure/disassociation)

wowl_gpiopol(Sets GPIO polarity)

Eg:

wowl_gpio=3

wowl_extgpio=5

wowl_pol=0 # active low

 

Configure wowl mode & Packet Filter

 

Finally a wowl packer filter needs to be configured at the STA side in order to identify the wakeup network message(or packet).

Following wl command is used for wowl wake mode at STA side.

wl wowl <mode>

eg : wl wowl 1 # for magic packet

eg: wl wowl 2 # netpattern

Current bitmap for wowl

#define WL_WOWL_MAGIC (1 << 0)                     /* Wakeup on Magic packet */

#define WL_WOWL_NET (1 << 1)                          /* Wakeup on Netpattern */

#define WL_WOWL_DIS (1 << 2)                           /* Wakeup on loss-of-link due to Disassoc/Deauth */

#define WL_WOWL_BCN (1 << 4)                        /* Wakeup on loss of beacon */

#define WL_WOWL_GTK_FAILURE (1 << 10)      /* enable wakeup if GTK fails */

 

Following wl command is used to configure the network message pattern.

wl wowl_pattern <add / del / clr> <offset> <mask> <pattern>

each bit in the mask indicate to match one bype of data

eg: wl wowl_pattern add 12 0x3004FF 0x08004500003C1E780000800198E9C0A80105C0A8010A

 

Command to activate the wowl mode

wl wowl_activate

 

Example scenario:

FOR Broadcast Magic-Packet:

- STA> wl wowl 1

- STA> wl wowl_activate 1

- AP> wl -i ethx wowl_pkt 102 bcast magic

- STA> wl wowl_wakeind # will show "MAGIC packet received and Broadcast/Mcast frame received"

- STA> wl wowl_wakeind clear

- FOR Broadcast Net-pattern:

- STA> wl wowl 2

- STA> wl wowl_pattern add 12 0x3004FF 0x08004500003C1E780000800198E9C0A80105C0A8010A

- STA> wl wowl_activate 1

- AP> wl -i eth1 wowl_pkt 102 FF:FF:FF:FF:FF:FF net 12 0x08004500003C1E780000800198E9C0A80105C0A8010A

- STA> wl wowl_wakeind. # will show "Packet received with Netpattern and Broadcast/Mcast frame received"

- STA> wl wowl_wakeind clear