Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ed4b2019 authored by David S. Miller's avatar David S. Miller
Browse files
parents b7466560 92c6f8d8
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -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
@@ -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
+1 −1
Original line number Original line Diff line number Diff line
@@ -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;
+6 −0
Original line number Original line Diff line number Diff line
@@ -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);
@@ -2014,6 +2017,9 @@ int ath_reset(struct ath_softc *sc, bool retry_tx)
		}
		}
	}
	}


	/* Start ANI */
	ath_start_ani(common);

	return r;
	return r;
}
}


+17 −23
Original line number Original line Diff line number Diff line
@@ -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",
@@ -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);
}
}
@@ -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;
@@ -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;


@@ -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);
@@ -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");
@@ -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;
@@ -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);


@@ -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);
	}
	}


+3 −2
Original line number Original line Diff line number Diff line
@@ -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;
}
}
@@ -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 = {
@@ -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