return aq_a2_fw_get_phy_temp(self, temp);
 }
 
+static int aq_a2_fw_set_wol_params(struct aq_hw_s *self, const u8 *mac, u32 wol)
+{
+       struct mac_address_aligned_s mac_address;
+       struct link_control_s link_control;
+       struct wake_on_lan_s wake_on_lan;
+
+       memcpy(mac_address.aligned.mac_address, mac, ETH_ALEN);
+       hw_atl2_shared_buffer_write(self, mac_address, mac_address);
+
+       memset(&wake_on_lan, 0, sizeof(wake_on_lan));
+
+       if (wol & WAKE_MAGIC)
+               wake_on_lan.wake_on_magic_packet = 1U;
+
+       if (wol & (WAKE_PHY | AQ_FW_WAKE_ON_LINK_RTPM))
+               wake_on_lan.wake_on_link_up = 1U;
+
+       hw_atl2_shared_buffer_write(self, sleep_proxy, wake_on_lan);
+
+       hw_atl2_shared_buffer_get(self, link_control, link_control);
+       link_control.mode = AQ_HOST_MODE_SLEEP_PROXY;
+       hw_atl2_shared_buffer_write(self, link_control, link_control);
+
+       return hw_atl2_shared_buffer_finish_ack(self);
+}
+
+static int aq_a2_fw_set_power(struct aq_hw_s *self, unsigned int power_state,
+                             const u8 *mac)
+{
+       u32 wol = self->aq_nic_cfg->wol;
+       int err = 0;
+
+       if (wol)
+               err = aq_a2_fw_set_wol_params(self, mac, wol);
+
+       return err;
+}
+
 static int aq_a2_fw_set_eee_rate(struct aq_hw_s *self, u32 speed)
 {
        struct link_options_s link_options;
        .set_state          = aq_a2_fw_set_state,
        .update_link_status = aq_a2_fw_update_link_status,
        .update_stats       = aq_a2_fw_update_stats,
+       .set_power          = aq_a2_fw_set_power,
        .get_mac_temp       = aq_a2_fw_get_mac_temp,
        .get_phy_temp       = aq_a2_fw_get_phy_temp,
        .set_eee_rate       = aq_a2_fw_set_eee_rate,