carl9170 firmware: initial WoWLAN support
[carl9170fw.git] / carlfw / src / fw.c
index 00dd221ae93dd97d2b8941bab8096fb2f859d6cf..b621813c1e1be339c4ee275dc652bd39e083ddc6 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Firmware descriptor
  *
- * Copyright 2009, 2010 Christian Lamparter <chunkeey@googlemail.com>
+ * Copyright 2009-2011 Christian Lamparter <chunkeey@googlemail.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 
 const struct carl9170_firmware_descriptor __section(fwdsc) carl9170fw_desc = {
        FILL(otus, OTUS,
-            .fw_feature_set = cpu_to_le32(BIT(CARL9170FW_DUMMY_FEATURE) |
+            .feature_set = cpu_to_le32(BIT(CARL9170FW_DUMMY_FEATURE) |
+                                       BIT(CARL9170FW_USB_RESP_EP2) |
+                                       BIT(CARL9170FW_HANDLE_BACK_REQ) |
+                                       BIT(CARL9170FW_RX_FILTER) |
+#ifdef CONFIG_CARL9170FW_USB_INIT_FIRMWARE
+                                       BIT(CARL9170FW_USB_INIT_FIRMWARE) |
+# ifdef CONFIG_CARL9170FW_USB_UP_STREAM
+                                       BIT(CARL9170FW_USB_UP_STREAM) |
+# endif /* CONFIG_CARL9170FW_USB_UP_STREAM */
+# ifdef CONFIG_CARL9170FW_USB_DOWN_STREAM
+                                       BIT(CARL9170FW_USB_DOWN_STREAM) |
+# endif /* CONFIG_CARL9170FW_USB_DOWN_STREAM */
+#endif /* CONFIG_CARL9170FW_USB_INIT_FIRMWARE */
 #ifdef CONFIG_CARL9170FW_RADIO_FUNCTIONS
-                                          BIT(CARL9170FW_COMMAND_PHY) |
+                                       BIT(CARL9170FW_COMMAND_PHY) |
+                                       BIT(CARL9170FW_PSM) |
 #endif /* CONFIG_CARL9170FW_RADIO_FUNCTIONS */
 #ifdef CONFIG_CARL9170FW_SECURITY_ENGINE
-                                          BIT(CARL9170FW_COMMAND_CAM) |
+                                       BIT(CARL9170FW_COMMAND_CAM) |
 #endif /* CONFIG_CARL9170FW_SECURITY_ENGINE */
 #ifdef CONFIG_CARL9170FW_CAB_QUEUE
-                                          BIT(CARL9170FW_WLANTX_CAB) |
+                                       BIT(CARL9170FW_WLANTX_CAB) |
 #endif /* CONFIG_CARL9170FW_CAB_QUEUE */
-#ifdef CONFIG_CARL9170FW_HANDLE_BACK_REQ
-                                          BIT(CARL9170FW_HANDLE_BACK_REQ) |
-#endif /* CONFIG_CARL9170FW_HANDLE_BACK_REQ */
 #ifdef CONFIG_CARL9170FW_UNUSABLE
-                                          BIT(CARL9170FW_UNUSABLE) |
+                                       BIT(CARL9170FW_UNUSABLE) |
 #endif /* CONFIG_CARL9170FW_UNUSABLE */
 #ifdef CONFIG_CARL9170FW_GPIO_INTERRUPT
-                                          BIT(CARL9170FW_GPIO_INTERRUPT) |
+                                       BIT(CARL9170FW_GPIO_INTERRUPT) |
 #endif /* CONFIG_CARL9170FW_GPIO_INTERRUPT */
-#ifdef CONFIG_CARL9170FW_PSM
-                                          BIT(CARL9170FW_PSM) |
-#endif
-                                          (0)),
+#ifdef CONFIG_CARL9170FW_WOL
+                                       BIT(CARL9170FW_WOL) |
+#endif /* CONFIG_CARL9170FW_WOL */
+                                       (0)),
+
+            .miniboot_size = cpu_to_le16(0),
+            .tx_descs = AR9170_TX_BLOCK_NUMBER,
+            .cmd_bufs = CARL9170_INT_RQ_CACHES,
+            .rx_max_frame_len = cpu_to_le16(CONFIG_CARL9170FW_RX_FRAME_LEN),
+            .tx_frag_len = cpu_to_le16(AR9170_BLOCK_SIZE),
+            .fw_address = cpu_to_le32(AR9170_PRAM_OFFSET),
             .bcn_addr = (__le32) cpu_to_le32(&dma_mem.reserved.bcn),
             .bcn_len = (__le16) cpu_to_le16(sizeof(dma_mem.reserved.bcn)),
             .vif_num = CARL9170_INTF_NUM,
             .api_ver = CONFIG_CARL9170FW_RELEASE_VERSION,
        ),
 
-       FILL(usb, USB,
-            .usb_feature_set = cpu_to_le32(BIT(CARL9170FW_USB_DUMMY_FEATURE) |
-                                           BIT(CARL9170FW_USB_RESP_EP2) |
-#ifdef CONFIG_CARL9170FW_USB_INIT_FIRMWARE
-                                           BIT(CARL9170FW_USB_INIT_FIRMWARE) |
-# ifdef CONFIG_CARL9170FW_USB_UP_STREAM
-                                           BIT(CARL9170FW_USB_UP_STREAM) |
-# endif /* CONFIG_CARL9170FW_USB_UP_STREAM */
-# ifdef CONFIG_CARL9170FW_USB_DOWN_STREAM
-                                           BIT(CARL9170FW_USB_DOWN_STREAM) |
-# endif /* CONFIG_CARL9170FW_USB_DOWN_STREAM */
-#endif /* CONFIG_CARL9170FW_USB_INIT_FIRMWARE */
-#ifdef CONFIG_CARL9170FW_USB_WATCHDOG
-                                           BIT(CARL9170FW_USB_WATCHDOG) |
-#endif /* CONFIG_CARL9170FW_USB_WATCHDOG */
-                                           (0)),
+       FILL(txsq, TXSQ,
+            .seq_table_addr = cpu_to_le32(&fw.wlan.sequence),
+       ),
 
-            .miniboot_size = cpu_to_le16(0),
-            .tx_descs = AR9170_TX_BLOCK_NUMBER,
-            .rx_max_frame_len = cpu_to_le16(CONFIG_CARL9170FW_RX_FRAME_LEN),
-            .tx_frag_len = cpu_to_le16(AR9170_BLOCK_SIZE),
-            .fw_address = cpu_to_le32(AR9170_PRAM_OFFSET),
+#ifdef CONFIG_CARL9170FW_WOL
+       FILL(wol, WOL,
+            .supported_triggers = BIT(CARL9170_WOL_DISCONNECT) |
+                                  BIT(CARL9170_WOL_MAGIC_PKT),
        ),
+#endif /* CONFIG_CARL9170FW_WOL */
+
 
        FILL(motd, MOTD,
             .fw_year_month_day = cpu_to_le32(
@@ -95,10 +100,11 @@ const struct carl9170_firmware_descriptor __section(fwdsc) carl9170fw_desc = {
             .release = CARL9170FW_VERSION_GIT),
 
        FILL(dbg, DBG,
-            .bogoclock_addr = cpu_to_le32(&fw.bogoclock),
+            .bogoclock_addr = cpu_to_le32(0),
             .counter_addr = cpu_to_le32(&fw.counter),
             .rx_total_addr = cpu_to_le32(&fw.wlan.rx_total),
             .rx_overrun_addr = cpu_to_le32(&fw.wlan.rx_overruns),
+            .rx_filter = cpu_to_le32(&fw.wlan.rx_filter),
        ),
 
        FILL(last, LAST),