static void wl_release_fw(struct wl_info *wl);
  
  /* local prototypes */
- static int wl_start(struct sk_buff *skb, struct wl_info *wl);
- static int wl_start_int(struct wl_info *wl, struct ieee80211_hw *hw,
-                       struct sk_buff *skb);
  static void wl_dpc(unsigned long data);
 +static irqreturn_t wl_isr(int irq, void *dev_id);
 +
 +static int __devinit wl_pci_probe(struct pci_dev *pdev,
 +                                const struct pci_device_id *ent);
 +static void wl_remove(struct pci_dev *pdev);
 +static void wl_free(struct wl_info *wl);
  
  MODULE_AUTHOR("Broadcom Corporation");
  MODULE_DESCRIPTION("Broadcom 802.11n wireless LAN driver.");
  
  #define HW_TO_WL(hw)   (hw->priv)
  #define WL_TO_HW(wl)    (wl->pub->ieee_hw)
- static int wl_ops_tx(struct ieee80211_hw *hw, struct sk_buff *skb);
 +
 +/* MAC80211 callback functions */
  static int wl_ops_start(struct ieee80211_hw *hw);
  static void wl_ops_stop(struct ieee80211_hw *hw);
  static int wl_ops_add_interface(struct ieee80211_hw *hw,
  static int wl_ops_conf_tx(struct ieee80211_hw *hw, u16 queue,
                          const struct ieee80211_tx_queue_params *params);
  static u64 wl_ops_get_tsf(struct ieee80211_hw *hw);
 -static int wl_sta_add(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 +static int wl_ops_sta_add(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
                      struct ieee80211_sta *sta);
 -static int wl_sta_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 +static int wl_ops_sta_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
                         struct ieee80211_sta *sta);
 -static int wl_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 -                         enum ieee80211_ampdu_mlme_action action,
 -                         struct ieee80211_sta *sta, u16 tid, u16 *ssn);
 +static int wl_ops_ampdu_action(struct ieee80211_hw *hw,
 +                             struct ieee80211_vif *vif,
 +                             enum ieee80211_ampdu_mlme_action action,
 +                             struct ieee80211_sta *sta, u16 tid, u16 *ssn,
 +                             u8 buf_size);
 +static void wl_ops_rfkill_poll(struct ieee80211_hw *hw);
  
- static int wl_ops_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
+ static void wl_ops_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
  {
-       int status;
        struct wl_info *wl = hw->priv;
 +
        WL_LOCK(wl);
        if (!wl->pub->up) {
                WL_ERROR("ops->tx called while down\n");
                iounmap((void *)wl->regsva);
        }
        wl->regsva = NULL;
 -
 -
 -      osl_detach(osh);
  }
  
- /*
-  * transmit a packet
-  * precondition: perimeter lock has been acquired
-  */
- static int BCMFASTPATH wl_start(struct sk_buff *skb, struct wl_info *wl)
- {
-       if (!wl)
-               return -ENETDOWN;
- 
-       return wl_start_int(wl, WL_TO_HW(wl), skb);
- }
- 
- static int BCMFASTPATH
- wl_start_int(struct wl_info *wl, struct ieee80211_hw *hw, struct sk_buff *skb)
- {
-       wlc_sendpkt_mac80211(wl->wlc, skb, hw);
-       return NETDEV_TX_OK;
- }
- 
 +/*
 + * precondition: perimeter lock has been acquired
 + */
  void wl_txflowcontrol(struct wl_info *wl, struct wl_if *wlif, bool state,
                      int prio)
  {