Loading drivers/net/Kconfig +2 −0 Original line number Original line Diff line number Diff line Loading @@ -2344,6 +2344,7 @@ config GELIC_NET config GELIC_WIRELESS config GELIC_WIRELESS bool "PS3 Wireless support" bool "PS3 Wireless support" depends on WLAN depends on GELIC_NET depends on GELIC_NET select WIRELESS_EXT select WIRELESS_EXT help help Loading @@ -2356,6 +2357,7 @@ config GELIC_WIRELESS config GELIC_WIRELESS_OLD_PSK_INTERFACE config GELIC_WIRELESS_OLD_PSK_INTERFACE bool "PS3 Wireless private PSK interface (OBSOLETE)" bool "PS3 Wireless private PSK interface (OBSOLETE)" depends on GELIC_WIRELESS depends on GELIC_WIRELESS select WEXT_PRIV help help This option retains the obsolete private interface to pass This option retains the obsolete private interface to pass the PSK from user space programs to the driver. The PSK the PSK from user space programs to the driver. The PSK Loading drivers/net/wireless/ath/ath9k/mac.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -186,7 +186,7 @@ bool ath9k_hw_stoptxdma(struct ath_hw *ah, u32 q) wait = wait_time; wait = wait_time; while (ath9k_hw_numtxpending(ah, q)) { while (ath9k_hw_numtxpending(ah, q)) { if ((--wait) == 0) { if ((--wait) == 0) { ath_print(common, ATH_DBG_QUEUE, ath_print(common, ATH_DBG_FATAL, "Failed to stop TX DMA in 100 " "Failed to stop TX DMA in 100 " "msec after killing last frame\n"); "msec after killing last frame\n"); break; break; Loading drivers/net/wireless/ath/ath9k/main.c +6 −0 Original line number Original line Diff line number Diff line Loading @@ -1973,6 +1973,9 @@ int ath_reset(struct ath_softc *sc, bool retry_tx) struct ieee80211_hw *hw = sc->hw; struct ieee80211_hw *hw = sc->hw; int r; int r; /* Stop ANI */ del_timer_sync(&common->ani.timer); ath9k_hw_set_interrupts(ah, 0); ath9k_hw_set_interrupts(ah, 0); ath_drain_all_txq(sc, retry_tx); ath_drain_all_txq(sc, retry_tx); ath_stoprecv(sc); ath_stoprecv(sc); Loading Loading @@ -2014,6 +2017,9 @@ int ath_reset(struct ath_softc *sc, bool retry_tx) } } } } /* Start ANI */ ath_start_ani(common); return r; return r; } } Loading drivers/net/wireless/ath/ath9k/xmit.c +17 −23 Original line number Original line Diff line number Diff line Loading @@ -1108,11 +1108,11 @@ void ath_drain_all_txq(struct ath_softc *sc, bool retry_tx) if (npend) { if (npend) { int r; int r; ath_print(common, ATH_DBG_XMIT, ath_print(common, ATH_DBG_FATAL, "Unable to stop TxDMA. Reset HAL!\n"); "Unable to stop TxDMA. Reset HAL!\n"); spin_lock_bh(&sc->sc_resetlock); spin_lock_bh(&sc->sc_resetlock); r = ath9k_hw_reset(ah, sc->sc_ah->curchan, true); r = ath9k_hw_reset(ah, sc->sc_ah->curchan, false); if (r) if (r) ath_print(common, ATH_DBG_FATAL, ath_print(common, ATH_DBG_FATAL, "Unable to reset hardware; reset status %d\n", "Unable to reset hardware; reset status %d\n", Loading Loading @@ -1414,17 +1414,9 @@ static void assign_aggr_tid_seqno(struct sk_buff *skb, * For HT capable stations, we save tidno for later use. * For HT capable stations, we save tidno for later use. * We also override seqno set by upper layer with the one * We also override seqno set by upper layer with the one * in tx aggregation state. * in tx aggregation state. * * If fragmentation is on, the sequence number is * not overridden, since it has been * incremented by the fragmentation routine. * * FIXME: check if the fragmentation threshold exceeds * IEEE80211 max. */ */ tid = ATH_AN_2_TID(an, bf->bf_tidno); tid = ATH_AN_2_TID(an, bf->bf_tidno); hdr->seq_ctrl = cpu_to_le16(tid->seq_next << hdr->seq_ctrl = cpu_to_le16(tid->seq_next << IEEE80211_SEQ_SEQ_SHIFT); IEEE80211_SEQ_SEQ_SHIFT); bf->bf_seqno = tid->seq_next; bf->bf_seqno = tid->seq_next; INCR(tid->seq_next, IEEE80211_SEQ_MAX); INCR(tid->seq_next, IEEE80211_SEQ_MAX); } } Loading Loading @@ -1636,7 +1628,8 @@ static int ath_tx_setup_buffer(struct ieee80211_hw *hw, struct ath_buf *bf, bf->bf_keyix = ATH9K_TXKEYIX_INVALID; bf->bf_keyix = ATH9K_TXKEYIX_INVALID; } } if (ieee80211_is_data_qos(fc) && (sc->sc_flags & SC_OP_TXAGGR)) if (ieee80211_is_data_qos(fc) && bf_isht(bf) && (sc->sc_flags & SC_OP_TXAGGR)) assign_aggr_tid_seqno(skb, bf); assign_aggr_tid_seqno(skb, bf); bf->bf_mpdu = skb; bf->bf_mpdu = skb; Loading Loading @@ -1780,7 +1773,8 @@ void ath_tx_cabq(struct ieee80211_hw *hw, struct sk_buff *skb) struct ath_wiphy *aphy = hw->priv; struct ath_wiphy *aphy = hw->priv; struct ath_softc *sc = aphy->sc; struct ath_softc *sc = aphy->sc; struct ath_common *common = ath9k_hw_common(sc->sc_ah); struct ath_common *common = ath9k_hw_common(sc->sc_ah); int hdrlen, padsize; struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; int padpos, padsize; struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); struct ath_tx_control txctl; struct ath_tx_control txctl; Loading @@ -1792,7 +1786,6 @@ void ath_tx_cabq(struct ieee80211_hw *hw, struct sk_buff *skb) * BSSes. * BSSes. */ */ if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ) { if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ) { struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; if (info->flags & IEEE80211_TX_CTL_FIRST_FRAGMENT) if (info->flags & IEEE80211_TX_CTL_FIRST_FRAGMENT) sc->tx.seq_no += 0x10; sc->tx.seq_no += 0x10; hdr->seq_ctrl &= cpu_to_le16(IEEE80211_SCTL_FRAG); hdr->seq_ctrl &= cpu_to_le16(IEEE80211_SCTL_FRAG); Loading @@ -1800,9 +1793,9 @@ void ath_tx_cabq(struct ieee80211_hw *hw, struct sk_buff *skb) } } /* Add the padding after the header if this is not already done */ /* Add the padding after the header if this is not already done */ hdrlen = ieee80211_get_hdrlen_from_skb(skb); padpos = ath9k_cmn_padpos(hdr->frame_control); if (hdrlen & 3) { padsize = padpos & 3; padsize = hdrlen % 4; if (padsize && skb->len>padpos) { if (skb_headroom(skb) < padsize) { if (skb_headroom(skb) < padsize) { ath_print(common, ATH_DBG_XMIT, ath_print(common, ATH_DBG_XMIT, "TX CABQ padding failed\n"); "TX CABQ padding failed\n"); Loading @@ -1810,7 +1803,7 @@ void ath_tx_cabq(struct ieee80211_hw *hw, struct sk_buff *skb) return; return; } } skb_push(skb, padsize); skb_push(skb, padsize); memmove(skb->data, skb->data + padsize, hdrlen); memmove(skb->data, skb->data + padsize, padpos); } } txctl.txq = sc->beacon.cabq; txctl.txq = sc->beacon.cabq; Loading Loading @@ -1838,7 +1831,8 @@ static void ath_tx_complete(struct ath_softc *sc, struct sk_buff *skb, struct ieee80211_hw *hw = sc->hw; struct ieee80211_hw *hw = sc->hw; struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb); struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb); struct ath_common *common = ath9k_hw_common(sc->sc_ah); struct ath_common *common = ath9k_hw_common(sc->sc_ah); int hdrlen, padsize; struct ieee80211_hdr * hdr = (struct ieee80211_hdr *)skb->data; int padpos, padsize; ath_print(common, ATH_DBG_XMIT, "TX complete: skb: %p\n", skb); ath_print(common, ATH_DBG_XMIT, "TX complete: skb: %p\n", skb); Loading @@ -1853,14 +1847,14 @@ static void ath_tx_complete(struct ath_softc *sc, struct sk_buff *skb, tx_info->flags |= IEEE80211_TX_STAT_ACK; tx_info->flags |= IEEE80211_TX_STAT_ACK; } } hdrlen = ieee80211_get_hdrlen_from_skb(skb); padpos = ath9k_cmn_padpos(hdr->frame_control); padsize = hdrlen & 3; padsize = padpos & 3; if (padsize && hdrlen >= 24) { if (padsize && skb->len>padpos+padsize) { /* /* * Remove MAC header padding before giving the frame back to * Remove MAC header padding before giving the frame back to * mac80211. * mac80211. */ */ memmove(skb->data + padsize, skb->data, hdrlen); memmove(skb->data + padsize, skb->data, padpos); skb_pull(skb, padsize); skb_pull(skb, padsize); } } Loading drivers/net/wireless/iwlwifi/iwl-3945.c +3 −2 Original line number Original line Diff line number Diff line Loading @@ -1835,8 +1835,7 @@ static int iwl3945_send_rxon_assoc(struct iwl_priv *priv) rc = -EIO; rc = -EIO; } } priv->alloc_rxb_page--; iwl_free_pages(priv, cmd.reply_page); free_pages(cmd.reply_page, priv->hw_params.rx_page_order); return rc; return rc; } } Loading Loading @@ -2836,6 +2835,7 @@ static struct iwl_cfg iwl3945_bg_cfg = { .use_isr_legacy = true, .use_isr_legacy = true, .ht_greenfield_support = false, .ht_greenfield_support = false, .led_compensation = 64, .led_compensation = 64, .broken_powersave = true, }; }; static struct iwl_cfg iwl3945_abg_cfg = { static struct iwl_cfg iwl3945_abg_cfg = { Loading @@ -2852,6 +2852,7 @@ static struct iwl_cfg iwl3945_abg_cfg = { .use_isr_legacy = true, .use_isr_legacy = true, .ht_greenfield_support = false, .ht_greenfield_support = false, .led_compensation = 64, .led_compensation = 64, .broken_powersave = true, }; }; struct pci_device_id iwl3945_hw_card_ids[] = { struct pci_device_id iwl3945_hw_card_ids[] = { Loading Loading
drivers/net/Kconfig +2 −0 Original line number Original line Diff line number Diff line Loading @@ -2344,6 +2344,7 @@ config GELIC_NET config GELIC_WIRELESS config GELIC_WIRELESS bool "PS3 Wireless support" bool "PS3 Wireless support" depends on WLAN depends on GELIC_NET depends on GELIC_NET select WIRELESS_EXT select WIRELESS_EXT help help Loading @@ -2356,6 +2357,7 @@ config GELIC_WIRELESS config GELIC_WIRELESS_OLD_PSK_INTERFACE config GELIC_WIRELESS_OLD_PSK_INTERFACE bool "PS3 Wireless private PSK interface (OBSOLETE)" bool "PS3 Wireless private PSK interface (OBSOLETE)" depends on GELIC_WIRELESS depends on GELIC_WIRELESS select WEXT_PRIV help help This option retains the obsolete private interface to pass This option retains the obsolete private interface to pass the PSK from user space programs to the driver. The PSK the PSK from user space programs to the driver. The PSK Loading
drivers/net/wireless/ath/ath9k/mac.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -186,7 +186,7 @@ bool ath9k_hw_stoptxdma(struct ath_hw *ah, u32 q) wait = wait_time; wait = wait_time; while (ath9k_hw_numtxpending(ah, q)) { while (ath9k_hw_numtxpending(ah, q)) { if ((--wait) == 0) { if ((--wait) == 0) { ath_print(common, ATH_DBG_QUEUE, ath_print(common, ATH_DBG_FATAL, "Failed to stop TX DMA in 100 " "Failed to stop TX DMA in 100 " "msec after killing last frame\n"); "msec after killing last frame\n"); break; break; Loading
drivers/net/wireless/ath/ath9k/main.c +6 −0 Original line number Original line Diff line number Diff line Loading @@ -1973,6 +1973,9 @@ int ath_reset(struct ath_softc *sc, bool retry_tx) struct ieee80211_hw *hw = sc->hw; struct ieee80211_hw *hw = sc->hw; int r; int r; /* Stop ANI */ del_timer_sync(&common->ani.timer); ath9k_hw_set_interrupts(ah, 0); ath9k_hw_set_interrupts(ah, 0); ath_drain_all_txq(sc, retry_tx); ath_drain_all_txq(sc, retry_tx); ath_stoprecv(sc); ath_stoprecv(sc); Loading Loading @@ -2014,6 +2017,9 @@ int ath_reset(struct ath_softc *sc, bool retry_tx) } } } } /* Start ANI */ ath_start_ani(common); return r; return r; } } Loading
drivers/net/wireless/ath/ath9k/xmit.c +17 −23 Original line number Original line Diff line number Diff line Loading @@ -1108,11 +1108,11 @@ void ath_drain_all_txq(struct ath_softc *sc, bool retry_tx) if (npend) { if (npend) { int r; int r; ath_print(common, ATH_DBG_XMIT, ath_print(common, ATH_DBG_FATAL, "Unable to stop TxDMA. Reset HAL!\n"); "Unable to stop TxDMA. Reset HAL!\n"); spin_lock_bh(&sc->sc_resetlock); spin_lock_bh(&sc->sc_resetlock); r = ath9k_hw_reset(ah, sc->sc_ah->curchan, true); r = ath9k_hw_reset(ah, sc->sc_ah->curchan, false); if (r) if (r) ath_print(common, ATH_DBG_FATAL, ath_print(common, ATH_DBG_FATAL, "Unable to reset hardware; reset status %d\n", "Unable to reset hardware; reset status %d\n", Loading Loading @@ -1414,17 +1414,9 @@ static void assign_aggr_tid_seqno(struct sk_buff *skb, * For HT capable stations, we save tidno for later use. * For HT capable stations, we save tidno for later use. * We also override seqno set by upper layer with the one * We also override seqno set by upper layer with the one * in tx aggregation state. * in tx aggregation state. * * If fragmentation is on, the sequence number is * not overridden, since it has been * incremented by the fragmentation routine. * * FIXME: check if the fragmentation threshold exceeds * IEEE80211 max. */ */ tid = ATH_AN_2_TID(an, bf->bf_tidno); tid = ATH_AN_2_TID(an, bf->bf_tidno); hdr->seq_ctrl = cpu_to_le16(tid->seq_next << hdr->seq_ctrl = cpu_to_le16(tid->seq_next << IEEE80211_SEQ_SEQ_SHIFT); IEEE80211_SEQ_SEQ_SHIFT); bf->bf_seqno = tid->seq_next; bf->bf_seqno = tid->seq_next; INCR(tid->seq_next, IEEE80211_SEQ_MAX); INCR(tid->seq_next, IEEE80211_SEQ_MAX); } } Loading Loading @@ -1636,7 +1628,8 @@ static int ath_tx_setup_buffer(struct ieee80211_hw *hw, struct ath_buf *bf, bf->bf_keyix = ATH9K_TXKEYIX_INVALID; bf->bf_keyix = ATH9K_TXKEYIX_INVALID; } } if (ieee80211_is_data_qos(fc) && (sc->sc_flags & SC_OP_TXAGGR)) if (ieee80211_is_data_qos(fc) && bf_isht(bf) && (sc->sc_flags & SC_OP_TXAGGR)) assign_aggr_tid_seqno(skb, bf); assign_aggr_tid_seqno(skb, bf); bf->bf_mpdu = skb; bf->bf_mpdu = skb; Loading Loading @@ -1780,7 +1773,8 @@ void ath_tx_cabq(struct ieee80211_hw *hw, struct sk_buff *skb) struct ath_wiphy *aphy = hw->priv; struct ath_wiphy *aphy = hw->priv; struct ath_softc *sc = aphy->sc; struct ath_softc *sc = aphy->sc; struct ath_common *common = ath9k_hw_common(sc->sc_ah); struct ath_common *common = ath9k_hw_common(sc->sc_ah); int hdrlen, padsize; struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; int padpos, padsize; struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); struct ath_tx_control txctl; struct ath_tx_control txctl; Loading @@ -1792,7 +1786,6 @@ void ath_tx_cabq(struct ieee80211_hw *hw, struct sk_buff *skb) * BSSes. * BSSes. */ */ if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ) { if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ) { struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; if (info->flags & IEEE80211_TX_CTL_FIRST_FRAGMENT) if (info->flags & IEEE80211_TX_CTL_FIRST_FRAGMENT) sc->tx.seq_no += 0x10; sc->tx.seq_no += 0x10; hdr->seq_ctrl &= cpu_to_le16(IEEE80211_SCTL_FRAG); hdr->seq_ctrl &= cpu_to_le16(IEEE80211_SCTL_FRAG); Loading @@ -1800,9 +1793,9 @@ void ath_tx_cabq(struct ieee80211_hw *hw, struct sk_buff *skb) } } /* Add the padding after the header if this is not already done */ /* Add the padding after the header if this is not already done */ hdrlen = ieee80211_get_hdrlen_from_skb(skb); padpos = ath9k_cmn_padpos(hdr->frame_control); if (hdrlen & 3) { padsize = padpos & 3; padsize = hdrlen % 4; if (padsize && skb->len>padpos) { if (skb_headroom(skb) < padsize) { if (skb_headroom(skb) < padsize) { ath_print(common, ATH_DBG_XMIT, ath_print(common, ATH_DBG_XMIT, "TX CABQ padding failed\n"); "TX CABQ padding failed\n"); Loading @@ -1810,7 +1803,7 @@ void ath_tx_cabq(struct ieee80211_hw *hw, struct sk_buff *skb) return; return; } } skb_push(skb, padsize); skb_push(skb, padsize); memmove(skb->data, skb->data + padsize, hdrlen); memmove(skb->data, skb->data + padsize, padpos); } } txctl.txq = sc->beacon.cabq; txctl.txq = sc->beacon.cabq; Loading Loading @@ -1838,7 +1831,8 @@ static void ath_tx_complete(struct ath_softc *sc, struct sk_buff *skb, struct ieee80211_hw *hw = sc->hw; struct ieee80211_hw *hw = sc->hw; struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb); struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb); struct ath_common *common = ath9k_hw_common(sc->sc_ah); struct ath_common *common = ath9k_hw_common(sc->sc_ah); int hdrlen, padsize; struct ieee80211_hdr * hdr = (struct ieee80211_hdr *)skb->data; int padpos, padsize; ath_print(common, ATH_DBG_XMIT, "TX complete: skb: %p\n", skb); ath_print(common, ATH_DBG_XMIT, "TX complete: skb: %p\n", skb); Loading @@ -1853,14 +1847,14 @@ static void ath_tx_complete(struct ath_softc *sc, struct sk_buff *skb, tx_info->flags |= IEEE80211_TX_STAT_ACK; tx_info->flags |= IEEE80211_TX_STAT_ACK; } } hdrlen = ieee80211_get_hdrlen_from_skb(skb); padpos = ath9k_cmn_padpos(hdr->frame_control); padsize = hdrlen & 3; padsize = padpos & 3; if (padsize && hdrlen >= 24) { if (padsize && skb->len>padpos+padsize) { /* /* * Remove MAC header padding before giving the frame back to * Remove MAC header padding before giving the frame back to * mac80211. * mac80211. */ */ memmove(skb->data + padsize, skb->data, hdrlen); memmove(skb->data + padsize, skb->data, padpos); skb_pull(skb, padsize); skb_pull(skb, padsize); } } Loading
drivers/net/wireless/iwlwifi/iwl-3945.c +3 −2 Original line number Original line Diff line number Diff line Loading @@ -1835,8 +1835,7 @@ static int iwl3945_send_rxon_assoc(struct iwl_priv *priv) rc = -EIO; rc = -EIO; } } priv->alloc_rxb_page--; iwl_free_pages(priv, cmd.reply_page); free_pages(cmd.reply_page, priv->hw_params.rx_page_order); return rc; return rc; } } Loading Loading @@ -2836,6 +2835,7 @@ static struct iwl_cfg iwl3945_bg_cfg = { .use_isr_legacy = true, .use_isr_legacy = true, .ht_greenfield_support = false, .ht_greenfield_support = false, .led_compensation = 64, .led_compensation = 64, .broken_powersave = true, }; }; static struct iwl_cfg iwl3945_abg_cfg = { static struct iwl_cfg iwl3945_abg_cfg = { Loading @@ -2852,6 +2852,7 @@ static struct iwl_cfg iwl3945_abg_cfg = { .use_isr_legacy = true, .use_isr_legacy = true, .ht_greenfield_support = false, .ht_greenfield_support = false, .led_compensation = 64, .led_compensation = 64, .broken_powersave = true, }; }; struct pci_device_id iwl3945_hw_card_ids[] = { struct pci_device_id iwl3945_hw_card_ids[] = { Loading