u8 scheduled_scan_status;
        u8 ps_status;
 
-       u8 reserved_5[29];
+       /* AP FW only */
+       u8 hlid_removed;
+       __le16 sta_aging_status;
+       __le16 sta_tx_retry_exceeded;
+
+       u8 reserved_5[24];
 } __packed;
 
 int wl1271_event_unmask(struct wl1271 *wl);
 
 /*
  * RX Descriptor status
  *
- * Bits 0-2 - status
- * Bits 3-7 - reserved
+ * Bits 0-2 - error code
+ * Bits 3-5 - process_id tag (AP mode FW)
+ * Bits 6-7 - reserved
  */
 #define WL1271_RX_DESC_STATUS_MASK      0x07
 
        u8  snr;
        __le32 timestamp;
        u8  packet_class;
-       u8  process_id;
+       union {
+               u8  process_id; /* STA FW */
+               u8  hlid; /* AP FW */
+       } __packed;
        u8  pad_len;
        u8  reserved;
 } __packed;
 
 #define TX_HW_BLOCK_SIZE                 252
 
 #define TX_HW_MGMT_PKT_LIFETIME_TU       2000
+#define TX_HW_AP_MODE_PKT_LIFETIME_TU    8000
 /* The chipset reference driver states, that the "aid" value 1
  * is for infra-BSS, but is still always used */
 #define TX_HW_DEFAULT_AID                1
        u8 id;
        /* The packet TID value (as User-Priority) */
        u8 tid;
-       /* Identifier of the remote STA in IBSS, 1 in infra-BSS */
-       u8 aid;
+       union {
+               /* STA - Identifier of the remote STA in IBSS, 1 in infra-BSS */
+               u8 aid;
+               /* AP - host link ID (HLID) */
+               u8 hlid;
+       } __packed;
        u8 reserved;
 } __packed;
 
 
 #define NUM_TX_QUEUES              4
 #define NUM_RX_PKT_DESC            8
 
+#define AP_MAX_STATIONS            5
+
+/* Broadcast and Global links + links to stations */
+#define AP_MAX_LINKS               (AP_MAX_STATIONS + 2)
+
 /* FW status registers */
 struct wl1271_fw_status {
        __le32 intr;
        __le32 rx_pkt_descs[NUM_RX_PKT_DESC];
        __le32 tx_released_blks[NUM_TX_QUEUES];
        __le32 fw_localtime;
-       __le32 padding[2];
+
+       /* Next fields valid only in AP FW */
+
+       /*
+        * A bitmap (where each bit represents a single HLID)
+        * to indicate if the station is in PS mode.
+        */
+       __le32 link_ps_bitmap;
+
+       /* Number of freed MBs per HLID */
+       u8 tx_lnk_free_blks[AP_MAX_LINKS];
+       u8 padding_1[1];
 } __packed;
 
 struct wl1271_rx_mem_pool_addr {