carl9170 firmware: add fall through comments
[carl9170fw.git] / carlfw / include / wl.h
index ff04536d4af7fd6291ef030be386678cc1f6c4e3..8499ca2d41682b443b42ff6f502fc41440f69011 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * carl9170 firmware - used by the ar9170 wireless device
  *
- * WLAN
+ * shared WLAN functions, interfaces and definitions
  *
  * Copyright (c) 2000-2005 ZyDAS Technology Corporation
  * Copyright (c) 2007-2009 Atheros Communications, Inc.
@@ -19,8 +19,7 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ * with this program; If not, see <http://www.gnu.org/licenses/>.
  */
 
 #ifndef __CARL9170FW_WLAN_H
@@ -42,32 +41,25 @@ static inline __inline void set_wlan_txq_dma_curr_addr(const unsigned int q, con
        set(AR9170_MAC_REG_DMA_TXQ_CURR_ADDR + (q << 3), v);
 }
 
-static inline __inline struct dma_desc *get_wlan_txq_dma_addr(const unsigned int q)
+static inline __inline volatile struct dma_desc *get_wlan_txq_dma_addr(const unsigned int q)
 {
        return getp(AR9170_MAC_REG_DMA_TXQ_ADDR + (q << 3));
 }
 
-static inline __inline struct dma_desc *get_wlan_txq_addr(const unsigned int q)
+static inline __inline volatile struct dma_desc *get_wlan_txq_addr(const unsigned int q)
 {
        return getp(AR9170_MAC_REG_DMA_TXQ_CURR_ADDR + (q << 3));
 }
 
-static inline __inline void _wlan_trigger(const uint32_t queue_bit)
+static inline __inline volatile struct dma_desc *get_wlan_txq_last_addr(const unsigned int q)
 {
-       set(AR9170_MAC_REG_DMA_TRIGGER, queue_bit);
+       return getp(AR9170_MAC_REG_DMA_TXQ_LAST_ADDR + (q << 2));
 }
 
-#ifdef CONFIG_CARL9170FW_DELAYED_TX
 static inline __inline void wlan_trigger(const uint32_t queue_bit)
 {
-       fw.wlan.tx_trigger |= queue_bit;
-}
-#else
-static inline __inline void wlan_trigger(const uint32_t queue_bit)
-{
-       _wlan_trigger(queue_bit);
+       set(AR9170_MAC_REG_DMA_TRIGGER, queue_bit);
 }
-#endif /* CONFIG_CARL9170FW_DELAYED_TX */
 
 static inline __inline uint8_t ar9170_get_rx_macstatus_status(struct dma_desc *desc)
 {
@@ -196,8 +188,9 @@ static inline __inline unsigned int ar9170_get_rx_mpdu_len(struct dma_desc *desc
                break;
 
        case AR9170_RX_STATUS_MPDU_SINGLE:
+               /* MPDU single has both */
                mpdu_len -= sizeof(struct ar9170_rx_phystatus);
-
+               /* fall through */
        case AR9170_RX_STATUS_MPDU_FIRST:
                mpdu_len -= sizeof(struct ar9170_rx_head);
                break;
@@ -222,6 +215,11 @@ static inline __inline struct carl9170_tx_superframe *get_super(struct dma_desc
                            f);
 }
 
+static inline __inline struct carl9170_tx_superframe *__get_super(struct dma_desc *desc)
+{
+       return DESC_PAYLOAD(desc);
+}
+
 static inline __inline void hide_super(struct dma_desc *desc)
 {
        desc->dataAddr = (uint8_t *)
@@ -256,23 +254,36 @@ static inline __inline __hot void read_tsf(uint32_t *tsf)
        tsf[1] = get(AR9170_MAC_REG_TSF_H);
 }
 
+/* This function will only work on uint32_t-aligned pointers! */
+static inline bool compare_ether_address(const void *_d0, const void *_d1)
+{
+       const uint32_t *d0 = _d0;
+       const uint32_t *d1 = _d1;
+
+       /* BUG_ON((unsigned long)d0 & 3 || (unsigned long)d1 & 3)) */
+       return !((d0[0] ^ d1[0]) | (unsigned short)(d0[1] ^ d1[1]));
+}
+
 void wlan_tx(struct dma_desc *desc);
+void wlan_tx_fw(struct carl9170_tx_superdesc *super, fw_desc_callback_t cb);
 void wlan_timer(void);
 void handle_wlan(void);
 
+void handle_wlan_rx(void);
+
+void wlan_send_buffered_tx_status(void);
+void wlan_send_buffered_cab(void);
+void wlan_send_buffered_ba(void);
+void handle_wlan_tx_completion(void);
+void wlan_dma_bump(unsigned int qidx);
+
 void wlan_cab_flush_queue(const unsigned int vif);
 void wlan_modify_beacon(const unsigned int vif,
                        const unsigned int bcn_addr,
                        const unsigned int bcn_len);
 
-static inline void wlan_prepare_wol(void)
-{
-       /* set filter policy to: discard everything */
-       fw.wlan.rx_filter = CARL9170_RX_FILTER_EVERYTHING;
-
-       /* reenable rx dma */
-       wlan_trigger(AR9170_DMA_TRIGGER_RXQ);
-}
+void wlan_tx_complete(struct carl9170_tx_superframe *super, bool txs);
+void wlan_prepare_wol(void);
 
 static inline void __check_wlantx(void)
 {