linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/10] iwlwifi driver 12/22 updates
@ 2008-12-22  3:31 Zhu Yi
  2008-12-22  3:31 ` [PATCH 01/10] iwl3945: rearrange 3945 tfd Zhu Yi
  0 siblings, 1 reply; 18+ messages in thread
From: Zhu Yi @ 2008-12-22  3:31 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, ipw3945-devel, Zhu Yi

Hi John,

Patches 7~9 are generic iwlwifi cleanup. Others are iwl3945 merging into
iwlagn patches, among which patch 10 should fix a regression reported by
Kalle Valo.

Thanks,
-yi

[PATCH 01/10] iwl3945: rearrange 3945 tfd
[PATCH 02/10] iwl3945: adding utils ops
[PATCH 03/10] iwl3945: sync tx queue data structure with iwlagn
[PATCH 04/10] iwl3945: remove iwl-3945-led.[ch]
[PATCH 05/10] iwl3945: switch to the iwl-core send_card_state routine
[PATCH 06/10] iwl3945: use iwl3945_tx_cmd instead of iwl_tx_cmd
[PATCH 07/10] iwlwifi: move sysfs status entry to debugfs
[PATCH 08/10] iwlwifi: kill retry_rate sysfs for iwlagn
[PATCH 09/10] iwlwifi: fix warning 'Should it be static'
[PATCH 10/10] iwl3945: use rx queue management infrastructure from iwlcore

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH 01/10] iwl3945: rearrange 3945 tfd
  2008-12-22  3:31 [PATCH 00/10] iwlwifi driver 12/22 updates Zhu Yi
@ 2008-12-22  3:31 ` Zhu Yi
  2008-12-22  3:31   ` [PATCH 02/10] iwl3945: adding utils ops Zhu Yi
  2008-12-22  3:55   ` [PATCH 01/10] iwl3945: rearrange 3945 tfd Harvey Harrison
  0 siblings, 2 replies; 18+ messages in thread
From: Zhu Yi @ 2008-12-22  3:31 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, ipw3945-devel, Winkler, Tomas, Zhu Yi

From: Winkler, Tomas <tomas.winkler@intel.com>

This patch moves 3945 TFD structures to iwl-3945-fh.h. It renames them
similarly to AGN naming. This patch also eliminates iwl3945_tx_info and
fixes endianity issue in iwl3945_tx_skb and iwl3945_enqueue_hcmd caused
by ugly casting.

Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
 drivers/net/wireless/iwlwifi/iwl-3945-fh.h  |   12 +++++++-
 drivers/net/wireless/iwlwifi/iwl-3945-hw.h  |   11 -------
 drivers/net/wireless/iwlwifi/iwl-3945.c     |   19 +++++++------
 drivers/net/wireless/iwlwifi/iwl-3945.h     |    8 +-----
 drivers/net/wireless/iwlwifi/iwl-dev.h      |   13 +++++----
 drivers/net/wireless/iwlwifi/iwl3945-base.c |   40 +++++++++++---------------
 6 files changed, 46 insertions(+), 57 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-3945-fh.h b/drivers/net/wireless/iwlwifi/iwl-3945-fh.h
index bbcd0ce..53ed249 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945-fh.h
+++ b/drivers/net/wireless/iwlwifi/iwl-3945-fh.h
@@ -172,7 +172,17 @@
 
 #define FH39_RSSR_CHNL0_RX_STATUS_CHNL_IDLE			(0x01000000)
 
-#define TFD_QUEUE_SIZE_MAX      (256)
+struct iwl3945_tfd_tb {
+	__le32 addr;
+	__le32 len;
+} __attribute__ ((packed));
+
+struct iwl3945_tfd {
+	__le32 control_flags;
+	struct iwl3945_tfd_tb tbs[4];
+	u8 __pad[28];
+} __attribute__ ((packed));
+
 
 #endif /* __iwl_3945_fh_h__ */
 
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945-hw.h b/drivers/net/wireless/iwlwifi/iwl-3945-hw.h
index fc1b774..1ba59df 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945-hw.h
+++ b/drivers/net/wireless/iwlwifi/iwl-3945-hw.h
@@ -304,17 +304,6 @@ struct iwl3945_shared {
 	__le32 tx_base_ptr[8];
 } __attribute__ ((packed));
 
-struct iwl3945_tfd_frame_data {
-	__le32 addr;
-	__le32 len;
-} __attribute__ ((packed));
-
-struct iwl3945_tfd_frame {
-	__le32 control_flags;
-	struct iwl3945_tfd_frame_data pa[4];
-	u8 reserved[28];
-} __attribute__ ((packed));
-
 static inline u8 iwl3945_hw_get_rate(__le16 rate_n_flags)
 {
 	return le16_to_cpu(rate_n_flags) & 0xFF;
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.c b/drivers/net/wireless/iwlwifi/iwl-3945.c
index 131bae7..24cdc5c 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945.c
+++ b/drivers/net/wireless/iwlwifi/iwl-3945.c
@@ -38,6 +38,7 @@
 #include <asm/unaligned.h>
 #include <net/mac80211.h>
 
+#include "iwl-fh.h"
 #include "iwl-3945-fh.h"
 #include "iwl-commands.h"
 #include "iwl-3945.h"
@@ -307,7 +308,7 @@ static void iwl3945_tx_queue_reclaim(struct iwl_priv *priv,
 {
 	struct iwl3945_tx_queue *txq = &priv->txq39[txq_id];
 	struct iwl_queue *q = &txq->q;
-	struct iwl3945_tx_info *tx_info;
+	struct iwl_tx_info *tx_info;
 
 	BUG_ON(txq_id == IWL_CMD_QUEUE_NUM);
 
@@ -728,7 +729,7 @@ int iwl3945_hw_txq_attach_buf_to_tfd(struct iwl_priv *priv, void *ptr,
 {
 	int count;
 	u32 pad;
-	struct iwl3945_tfd_frame *tfd = (struct iwl3945_tfd_frame *)ptr;
+	struct iwl3945_tfd *tfd = (struct iwl3945_tfd *)ptr;
 
 	count = TFD_CTL_COUNT_GET(le32_to_cpu(tfd->control_flags));
 	pad = TFD_CTL_PAD_GET(le32_to_cpu(tfd->control_flags));
@@ -739,8 +740,8 @@ int iwl3945_hw_txq_attach_buf_to_tfd(struct iwl_priv *priv, void *ptr,
 		return -EINVAL;
 	}
 
-	tfd->pa[count].addr = cpu_to_le32(addr);
-	tfd->pa[count].len = cpu_to_le32(len);
+	tfd->tbs[count].addr = cpu_to_le32(addr);
+	tfd->tbs[count].len = cpu_to_le32(len);
 
 	count++;
 
@@ -757,8 +758,8 @@ int iwl3945_hw_txq_attach_buf_to_tfd(struct iwl_priv *priv, void *ptr,
  */
 int iwl3945_hw_txq_free_tfd(struct iwl_priv *priv, struct iwl3945_tx_queue *txq)
 {
-	struct iwl3945_tfd_frame *bd_tmp = (struct iwl3945_tfd_frame *)&txq->bd[0];
-	struct iwl3945_tfd_frame *bd = &bd_tmp[txq->q.read_ptr];
+	struct iwl3945_tfd *tfd_tmp = (struct iwl3945_tfd *)&txq->tfds[0];
+	struct iwl3945_tfd *tfd = &tfd_tmp[txq->q.read_ptr];
 	struct pci_dev *dev = priv->pci_dev;
 	int i;
 	int counter;
@@ -769,7 +770,7 @@ int iwl3945_hw_txq_free_tfd(struct iwl_priv *priv, struct iwl3945_tx_queue *txq)
 		return 0;
 
 	/* sanity check */
-	counter = TFD_CTL_COUNT_GET(le32_to_cpu(bd->control_flags));
+	counter = TFD_CTL_COUNT_GET(le32_to_cpu(tfd->control_flags));
 	if (counter > NUM_TFD_CHUNKS) {
 		IWL_ERR(priv, "Too many chunks: %i\n", counter);
 		/* @todo issue fatal error, it is quite serious situation */
@@ -779,8 +780,8 @@ int iwl3945_hw_txq_free_tfd(struct iwl_priv *priv, struct iwl3945_tx_queue *txq)
 	/* unmap chunks if any */
 
 	for (i = 1; i < counter; i++) {
-		pci_unmap_single(dev, le32_to_cpu(bd->pa[i].addr),
-				 le32_to_cpu(bd->pa[i].len), PCI_DMA_TODEVICE);
+		pci_unmap_single(dev, le32_to_cpu(tfd->tbs[i].addr),
+			 le32_to_cpu(tfd->tbs[i].len), PCI_DMA_TODEVICE);
 		if (txq->txb[txq->q.read_ptr].skb[0]) {
 			struct sk_buff *skb = txq->txb[txq->q.read_ptr].skb[0];
 			if (txq->txb[txq->q.read_ptr].skb[0]) {
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.h b/drivers/net/wireless/iwlwifi/iwl-3945.h
index aff6a3a..716c4b4 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945.h
+++ b/drivers/net/wireless/iwlwifi/iwl-3945.h
@@ -45,6 +45,7 @@ extern struct pci_device_id iwl3945_hw_card_ids[];
 
 #include "iwl-csr.h"
 #include "iwl-prph.h"
+#include "iwl-fh.h"
 #include "iwl-3945-hw.h"
 #include "iwl-debug.h"
 #include "iwl-power.h"
@@ -107,13 +108,6 @@ enum iwl3945_antenna {
 
 int iwl3945_x2_queue_used(const struct iwl_queue *q, int i);
 
-#define MAX_NUM_OF_TBS          (20)
-
-/* One for each TFD */
-struct iwl3945_tx_info {
-	struct sk_buff *skb[MAX_NUM_OF_TBS];
-};
-
 #include "iwl-agn-rs.h"
 
 #define IWL_TX_FIFO_AC0	0
diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h
index 8981c05..1ad4d08 100644
--- a/drivers/net/wireless/iwlwifi/iwl-dev.h
+++ b/drivers/net/wireless/iwlwifi/iwl-dev.h
@@ -36,14 +36,15 @@
 #include <linux/kernel.h>
 #include <net/ieee80211_radiotap.h>
 
-#include "iwl-rfkill.h"
 #include "iwl-eeprom.h"
-#include "iwl-4965-hw.h"
-#include "iwl-3945-hw.h"
-#include "iwl-3945-led.h"
 #include "iwl-csr.h"
 #include "iwl-prph.h"
+#include "iwl-fh.h"
 #include "iwl-debug.h"
+#include "iwl-rfkill.h"
+#include "iwl-4965-hw.h"
+#include "iwl-3945-hw.h"
+#include "iwl-3945-led.h"
 #include "iwl-led.h"
 #include "iwl-power.h"
 #include "iwl-agn-rs.h"
@@ -239,10 +240,10 @@ struct iwl_channel_info {
  */
 struct iwl3945_tx_queue {
 	struct iwl_queue q;
-	struct iwl3945_tfd_frame *bd;
+	struct iwl3945_tfd *tfds;
 	struct iwl_cmd *cmd;
 	dma_addr_t dma_addr_cmd;
-	struct iwl3945_tx_info *txb;
+	struct iwl_tx_info *txb;
 	int need_update;
 	int active;
 };
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index 4b4ed65..5a0e25b 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -48,9 +48,10 @@
 
 #define DRV_NAME	"iwl3945"
 
+#include "iwl-fh.h"
+#include "iwl-3945-fh.h"
 #include "iwl-commands.h"
 #include "iwl-3945.h"
-#include "iwl-3945-fh.h"
 #include "iwl-helpers.h"
 #include "iwl-core.h"
 #include "iwl-dev.h"
@@ -180,13 +181,13 @@ static int iwl3945_tx_queue_alloc(struct iwl_priv *priv,
 
 	/* Circular buffer of transmit frame descriptors (TFDs),
 	 * shared with device */
-	txq->bd = pci_alloc_consistent(dev,
-			sizeof(txq->bd[0]) * TFD_QUEUE_SIZE_MAX,
+	txq->tfds = pci_alloc_consistent(dev,
+			sizeof(txq->tfds[0]) * TFD_QUEUE_SIZE_MAX,
 			&txq->q.dma_addr);
 
-	if (!txq->bd) {
+	if (!txq->tfds) {
 		IWL_ERR(priv, "pci_alloc_consistent(%zd) failed\n",
-			  sizeof(txq->bd[0]) * TFD_QUEUE_SIZE_MAX);
+			  sizeof(txq->tfds[0]) * TFD_QUEUE_SIZE_MAX);
 		goto error;
 	}
 	txq->q.id = id;
@@ -278,8 +279,8 @@ void iwl3945_tx_queue_free(struct iwl_priv *priv, struct iwl3945_tx_queue *txq)
 
 	/* De-alloc circular buffer of TFDs */
 	if (txq->q.n_bd)
-		pci_free_consistent(dev, sizeof(struct iwl3945_tfd_frame) *
-				    txq->q.n_bd, txq->bd, txq->q.dma_addr);
+		pci_free_consistent(dev, sizeof(struct iwl3945_tfd) *
+				    txq->q.n_bd, txq->tfds, txq->q.dma_addr);
 
 	/* De-alloc array of per-TFD driver data */
 	kfree(txq->txb);
@@ -446,14 +447,12 @@ static int iwl3945_enqueue_hcmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd)
 {
 	struct iwl3945_tx_queue *txq = &priv->txq39[IWL_CMD_QUEUE_NUM];
 	struct iwl_queue *q = &txq->q;
-	struct iwl3945_tfd_frame *tfd;
-	u32 *control_flags;
+	struct iwl3945_tfd *tfd;
 	struct iwl_cmd *out_cmd;
 	u32 idx;
 	u16 fix_size = (u16)(cmd->len + sizeof(out_cmd->hdr));
 	dma_addr_t phys_addr;
 	int pad;
-	u16 count;
 	int ret;
 	unsigned long flags;
 
@@ -476,11 +475,9 @@ static int iwl3945_enqueue_hcmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd)
 
 	spin_lock_irqsave(&priv->hcmd_lock, flags);
 
-	tfd = &txq->bd[q->write_ptr];
+	tfd = &txq->tfds[q->write_ptr];
 	memset(tfd, 0, sizeof(*tfd));
 
-	control_flags = (u32 *) tfd;
-
 	idx = get_cmd_index(q, q->write_ptr, cmd->meta.flags & CMD_SIZE_HUGE);
 	out_cmd = &txq->cmd[idx];
 
@@ -502,8 +499,7 @@ static int iwl3945_enqueue_hcmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd)
 	iwl3945_hw_txq_attach_buf_to_tfd(priv, tfd, phys_addr, fix_size);
 
 	pad = U32_PAD(cmd->len);
-	count = TFD_CTL_COUNT_GET(*control_flags);
-	*control_flags = TFD_CTL_COUNT_SET(count) | TFD_CTL_PAD_SET(pad);
+	tfd->control_flags |= cpu_to_le32(TFD_CTL_PAD_SET(pad));
 
 	IWL_DEBUG_HC("Sending command %s (#%x), seq: 0x%04X, "
 		     "%d bytes at %d[%d]:%d\n",
@@ -2235,8 +2231,7 @@ static int iwl3945_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
 {
 	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
 	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-	struct iwl3945_tfd_frame *tfd;
-	u32 *control_flags;
+	struct iwl3945_tfd *tfd;
 	int txq_id = skb_get_queue_mapping(skb);
 	struct iwl3945_tx_queue *txq = NULL;
 	struct iwl_queue *q = NULL;
@@ -2323,13 +2318,12 @@ static int iwl3945_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
 	spin_lock_irqsave(&priv->lock, flags);
 
 	/* Set up first empty TFD within this queue's circular TFD buffer */
-	tfd = &txq->bd[q->write_ptr];
+	tfd = &txq->tfds[q->write_ptr];
 	memset(tfd, 0, sizeof(*tfd));
-	control_flags = (u32 *) tfd;
 	idx = get_cmd_index(q, q->write_ptr, 0);
 
 	/* Set up driver data for this TFD */
-	memset(&(txq->txb[q->write_ptr]), 0, sizeof(struct iwl3945_tx_info));
+	memset(&(txq->txb[q->write_ptr]), 0, sizeof(struct iwl_tx_info));
 	txq->txb[q->write_ptr].skb[0] = skb;
 
 	/* Init first empty entry in queue's array of Tx/cmd buffers */
@@ -2393,12 +2387,12 @@ static int iwl3945_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
 
 	if (!len)
 		/* If there is no payload, then we use only one Tx buffer */
-		*control_flags = TFD_CTL_COUNT_SET(1);
+		tfd->control_flags = cpu_to_le32(TFD_CTL_COUNT_SET(1));
 	else
 		/* Else use 2 buffers.
 		 * Tell 3945 about any padding after MAC header */
-		*control_flags = TFD_CTL_COUNT_SET(2) |
-			TFD_CTL_PAD_SET(U32_PAD(len));
+		tfd->control_flags = cpu_to_le32(TFD_CTL_COUNT_SET(2) |
+			TFD_CTL_PAD_SET(U32_PAD(len)));
 
 	/* Total # bytes to be transmitted */
 	len = (u16)skb->len;
-- 
1.5.3.6


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 02/10] iwl3945: adding utils ops
  2008-12-22  3:31 ` [PATCH 01/10] iwl3945: rearrange 3945 tfd Zhu Yi
@ 2008-12-22  3:31   ` Zhu Yi
  2008-12-22  3:31     ` [PATCH 03/10] iwl3945: sync tx queue data structure with iwlagn Zhu Yi
  2008-12-22  3:55   ` [PATCH 01/10] iwl3945: rearrange 3945 tfd Harvey Harrison
  1 sibling, 1 reply; 18+ messages in thread
From: Zhu Yi @ 2008-12-22  3:31 UTC (permalink / raw)
  To: linville
  Cc: linux-wireless, ipw3945-devel, Kolekar, Abhijeet, Samuel Ortiz,
	Zhu Yi

From: Kolekar, Abhijeet <abhijeet.kolekar@intel.com>

The patch implements iwl_hcmd_utils_ops for 3945.

Signed-off-by: Samuel Ortiz <samuel.ortiz@intel.com>
Signed-off-by: Abhijeet Kolekar <abhijeet.kolekar@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
 drivers/net/wireless/iwlwifi/iwl-3945.c |   18 ++++++++++++++++++
 1 files changed, 18 insertions(+), 0 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.c b/drivers/net/wireless/iwlwifi/iwl-3945.c
index 24cdc5c..a0aea81 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945.c
+++ b/drivers/net/wireless/iwlwifi/iwl-3945.c
@@ -2377,6 +2377,19 @@ int iwl3945_hw_tx_queue_init(struct iwl_priv *priv, struct iwl3945_tx_queue *txq
 	return 0;
 }
 
+/*
+ * HCMD utils
+ */
+static u16 iwl3945_get_hcmd_size(u8 cmd_id, u16 len)
+{
+	switch (cmd_id) {
+	case REPLY_RXON:
+		return (u16) sizeof(struct iwl3945_rxon_cmd);
+	default:
+		return len;
+	}
+}
+
 /**
  * iwl3945_init_hw_rate_table - Initialize the hardware rate fallback table
  */
@@ -2694,8 +2707,13 @@ static struct iwl_lib_ops iwl3945_lib = {
 	},
 };
 
+static struct iwl_hcmd_utils_ops iwl3945_hcmd_utils = {
+	.get_hcmd_size = iwl3945_get_hcmd_size,
+};
+
 static struct iwl_ops iwl3945_ops = {
 	.lib = &iwl3945_lib,
+	.utils = &iwl3945_hcmd_utils,
 };
 
 static struct iwl_cfg iwl3945_bg_cfg = {
-- 
1.5.3.6


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 03/10] iwl3945: sync tx queue data structure with iwlagn
  2008-12-22  3:31   ` [PATCH 02/10] iwl3945: adding utils ops Zhu Yi
@ 2008-12-22  3:31     ` Zhu Yi
  2008-12-22  3:31       ` [PATCH 04/10] iwl3945: remove iwl-3945-led.[ch] Zhu Yi
  0 siblings, 1 reply; 18+ messages in thread
From: Zhu Yi @ 2008-12-22  3:31 UTC (permalink / raw)
  To: linville
  Cc: linux-wireless, ipw3945-devel, Samuel Ortiz, Abhijeet Kolekar,
	Zhu Yi

From: Samuel Ortiz <samuel.ortiz@intel.com>

We are now using the iwl_tx_queue for iwl3945. To reach that goal, we
included the 3945 specific tfd frame structure to iwl_tx_queue. This
has no effect on the current iwlagn code.

Signed-off-by: Samuel Ortiz <samuel.ortiz@intel.com>
Signed-off-by: Abhijeet Kolekar <abhijeet.kolekar@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
 drivers/net/wireless/iwlwifi/iwl-3945-hw.h  |    4 -
 drivers/net/wireless/iwlwifi/iwl-3945.c     |   14 ++--
 drivers/net/wireless/iwlwifi/iwl-3945.h     |    8 +-
 drivers/net/wireless/iwlwifi/iwl-4965-hw.h  |    3 -
 drivers/net/wireless/iwlwifi/iwl-dev.h      |   28 +-----
 drivers/net/wireless/iwlwifi/iwl-fh.h       |   11 +++
 drivers/net/wireless/iwlwifi/iwl3945-base.c |  125 ++++++++++++++++----------
 7 files changed, 103 insertions(+), 90 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-3945-hw.h b/drivers/net/wireless/iwlwifi/iwl-3945-hw.h
index 1ba59df..c9db98c 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945-hw.h
+++ b/drivers/net/wireless/iwlwifi/iwl-3945-hw.h
@@ -240,7 +240,6 @@ struct iwl3945_eeprom {
 
 #define TFD_QUEUE_MIN           0
 #define TFD_QUEUE_MAX           6
-#define TFD_QUEUE_SIZE_MAX      (256)
 
 #define IWL_NUM_SCAN_RATES         (2)
 
@@ -262,9 +261,6 @@ struct iwl3945_eeprom {
 #define TFD_CTL_PAD_SET(n)         (n << 28)
 #define TFD_CTL_PAD_GET(ctl)       (ctl >> 28)
 
-#define TFD_TX_CMD_SLOTS 256
-#define TFD_CMD_SLOTS 32
-
 /*
  * RX related structures and functions
  */
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.c b/drivers/net/wireless/iwlwifi/iwl-3945.c
index a0aea81..41556b4 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945.c
+++ b/drivers/net/wireless/iwlwifi/iwl-3945.c
@@ -306,7 +306,7 @@ int iwl3945_rs_next_rate(struct iwl_priv *priv, int rate)
 static void iwl3945_tx_queue_reclaim(struct iwl_priv *priv,
 				     int txq_id, int index)
 {
-	struct iwl3945_tx_queue *txq = &priv->txq39[txq_id];
+	struct iwl_tx_queue *txq = &priv->txq[txq_id];
 	struct iwl_queue *q = &txq->q;
 	struct iwl_tx_info *tx_info;
 
@@ -337,7 +337,7 @@ static void iwl3945_rx_reply_tx(struct iwl_priv *priv,
 	u16 sequence = le16_to_cpu(pkt->hdr.sequence);
 	int txq_id = SEQ_TO_QUEUE(sequence);
 	int index = SEQ_TO_INDEX(sequence);
-	struct iwl3945_tx_queue *txq = &priv->txq39[txq_id];
+	struct iwl_tx_queue *txq = &priv->txq[txq_id];
 	struct ieee80211_tx_info *info;
 	struct iwl3945_tx_resp *tx_resp = (void *)&pkt->u.raw[0];
 	u32  status = le32_to_cpu(tx_resp->status);
@@ -756,9 +756,9 @@ int iwl3945_hw_txq_attach_buf_to_tfd(struct iwl_priv *priv, void *ptr,
  *
  * Does NOT advance any indexes
  */
-int iwl3945_hw_txq_free_tfd(struct iwl_priv *priv, struct iwl3945_tx_queue *txq)
+int iwl3945_hw_txq_free_tfd(struct iwl_priv *priv, struct iwl_tx_queue *txq)
 {
-	struct iwl3945_tfd *tfd_tmp = (struct iwl3945_tfd *)&txq->tfds[0];
+	struct iwl3945_tfd *tfd_tmp = (struct iwl3945_tfd *)&txq->tfds39[0];
 	struct iwl3945_tfd *tfd = &tfd_tmp[txq->q.read_ptr];
 	struct pci_dev *dev = priv->pci_dev;
 	int i;
@@ -1062,7 +1062,7 @@ static int iwl3945_txq_ctx_reset(struct iwl_priv *priv)
 	for (txq_id = 0; txq_id < TFD_QUEUE_MAX; txq_id++) {
 		slots_num = (txq_id == IWL_CMD_QUEUE_NUM) ?
 				TFD_CMD_SLOTS : TFD_TX_CMD_SLOTS;
-		rc = iwl3945_tx_queue_init(priv, &priv->txq39[txq_id], slots_num,
+		rc = iwl3945_tx_queue_init(priv, &priv->txq[txq_id], slots_num,
 				txq_id);
 		if (rc) {
 			IWL_ERR(priv, "Tx %d queue init failed\n", txq_id);
@@ -1252,7 +1252,7 @@ void iwl3945_hw_txq_ctx_free(struct iwl_priv *priv)
 
 	/* Tx queues */
 	for (txq_id = 0; txq_id < TFD_QUEUE_MAX; txq_id++)
-		iwl3945_tx_queue_free(priv, &priv->txq39[txq_id]);
+		iwl3945_tx_queue_free(priv, &priv->txq[txq_id]);
 }
 
 void iwl3945_hw_txq_ctx_stop(struct iwl_priv *priv)
@@ -2343,7 +2343,7 @@ int iwl3945_hw_rxq_stop(struct iwl_priv *priv)
 	return 0;
 }
 
-int iwl3945_hw_tx_queue_init(struct iwl_priv *priv, struct iwl3945_tx_queue *txq)
+int iwl3945_hw_tx_queue_init(struct iwl_priv *priv, struct iwl_tx_queue *txq)
 {
 	int rc;
 	unsigned long flags;
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.h b/drivers/net/wireless/iwlwifi/iwl-3945.h
index 716c4b4..e584032 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945.h
+++ b/drivers/net/wireless/iwlwifi/iwl-3945.h
@@ -219,9 +219,9 @@ extern void iwl3945_rx_queue_reset(struct iwl_priv *priv,
 extern int iwl3945_calc_db_from_ratio(int sig_ratio);
 extern int iwl3945_calc_sig_qual(int rssi_dbm, int noise_dbm);
 extern int iwl3945_tx_queue_init(struct iwl_priv *priv,
-			     struct iwl3945_tx_queue *txq, int count, u32 id);
+			     struct iwl_tx_queue *txq, int count, u32 id);
 extern void iwl3945_rx_replenish(void *data);
-extern void iwl3945_tx_queue_free(struct iwl_priv *priv, struct iwl3945_tx_queue *txq);
+extern void iwl3945_tx_queue_free(struct iwl_priv *priv, struct iwl_tx_queue *txq);
 extern int iwl3945_send_cmd_pdu(struct iwl_priv *priv, u8 id, u16 len,
 			    const void *data);
 extern int __must_check iwl3945_send_cmd(struct iwl_priv *priv,
@@ -270,10 +270,10 @@ extern void iwl3945_hw_txq_ctx_stop(struct iwl_priv *priv);
 extern int iwl3945_hw_nic_reset(struct iwl_priv *priv);
 extern int iwl3945_hw_txq_attach_buf_to_tfd(struct iwl_priv *priv, void *tfd,
 					dma_addr_t addr, u16 len);
-extern int iwl3945_hw_txq_free_tfd(struct iwl_priv *priv, struct iwl3945_tx_queue *txq);
+extern int iwl3945_hw_txq_free_tfd(struct iwl_priv *priv, struct iwl_tx_queue *txq);
 extern int iwl3945_hw_get_temperature(struct iwl_priv *priv);
 extern int iwl3945_hw_tx_queue_init(struct iwl_priv *priv,
-				struct iwl3945_tx_queue *txq);
+				struct iwl_tx_queue *txq);
 extern unsigned int iwl3945_hw_get_beacon_cmd(struct iwl_priv *priv,
 				 struct iwl3945_frame *frame, u8 rate);
 void iwl3945_hw_build_tx_cmd_rate(struct iwl_priv *priv, struct iwl_cmd *cmd,
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965-hw.h b/drivers/net/wireless/iwlwifi/iwl-4965-hw.h
index 9330b5a..e751c53 100644
--- a/drivers/net/wireless/iwlwifi/iwl-4965-hw.h
+++ b/drivers/net/wireless/iwlwifi/iwl-4965-hw.h
@@ -114,9 +114,6 @@
 #define RX_QUEUE_MASK                         255
 #define RX_QUEUE_SIZE_LOG                     8
 
-#define TFD_TX_CMD_SLOTS 256
-#define TFD_CMD_SLOTS 32
-
 /*
  * RX related structures and functions
  */
diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h
index 1ad4d08..9b9d743 100644
--- a/drivers/net/wireless/iwlwifi/iwl-dev.h
+++ b/drivers/net/wireless/iwlwifi/iwl-dev.h
@@ -134,9 +134,13 @@ struct iwl_tx_info {
  * A Tx queue consists of circular buffer of BDs (a.k.a. TFDs, transmit frame
  * descriptors) and required locking structures.
  */
+#define TFD_TX_CMD_SLOTS 256
+#define TFD_CMD_SLOTS 32
+
 struct iwl_tx_queue {
 	struct iwl_queue q;
 	struct iwl_tfd *tfds;
+	struct iwl3945_tfd *tfds39;
 	struct iwl_cmd *cmd[TFD_TX_CMD_SLOTS];
 	struct iwl_tx_info *txb;
 	u8 need_update;
@@ -226,28 +230,6 @@ struct iwl_channel_info {
 	struct iwl3945_scan_power_info scan_pwr_info[IWL_NUM_SCAN_RATES];
 };
 
-/**
- * struct iwl3945_tx_queue - Tx Queue for DMA
- * @q: generic Rx/Tx queue descriptor
- * @bd: base of circular buffer of TFDs
- * @cmd: array of command/Tx buffers
- * @dma_addr_cmd: physical address of cmd/tx buffer array
- * @txb: array of per-TFD driver data
- * @need_update: indicates need to update read/write index
- *
- * A Tx queue consists of circular buffer of BDs (a.k.a. TFDs, transmit frame
- * descriptors) and required locking structures.
- */
-struct iwl3945_tx_queue {
-	struct iwl_queue q;
-	struct iwl3945_tfd *tfds;
-	struct iwl_cmd *cmd;
-	dma_addr_t dma_addr_cmd;
-	struct iwl_tx_info *txb;
-	int need_update;
-	int active;
-};
-
 #define IWL_TX_FIFO_AC0	0
 #define IWL_TX_FIFO_AC1	1
 #define IWL_TX_FIFO_AC2	2
@@ -1099,8 +1081,6 @@ struct iwl_priv {
 	struct iwl3945_rxon_cmd staging39_rxon;
 	struct iwl3945_rxon_cmd recovery39_rxon;
 
-	struct iwl3945_tx_queue txq39[IWL39_MAX_NUM_QUEUES];
-
 	struct iwl3945_power_mgr power_data_39;
 	struct iwl3945_notif_statistics statistics_39;
 
diff --git a/drivers/net/wireless/iwlwifi/iwl-fh.h b/drivers/net/wireless/iwlwifi/iwl-fh.h
index 7c19790..313b03b 100644
--- a/drivers/net/wireless/iwlwifi/iwl-fh.h
+++ b/drivers/net/wireless/iwlwifi/iwl-fh.h
@@ -478,6 +478,17 @@ struct iwl_tfd {
 	__le32 __pad;
 } __attribute__ ((packed));
 
+struct iwl3945_tfd_frame_data {
+	__le32 addr;
+	__le32 len;
+} __attribute__ ((packed));
+
+struct iwl3945_tfd_frame {
+	__le32 control_flags;
+	struct iwl3945_tfd_frame_data pa[4];
+	u8 reserved[28];
+} __attribute__ ((packed));
+
 
 /* Keep Warm Size */
 #define IWL_KW_SIZE 0x1000	/* 4k */
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index 5a0e25b..98f5b7f 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -57,7 +57,7 @@
 #include "iwl-dev.h"
 
 static int iwl3945_tx_queue_update_write_ptr(struct iwl_priv *priv,
-				  struct iwl3945_tx_queue *txq);
+				  struct iwl_tx_queue *txq);
 
 /*
  * module name, copyright, version, etc.
@@ -162,7 +162,7 @@ static int iwl3945_queue_init(struct iwl_priv *priv, struct iwl_queue *q,
  * iwl3945_tx_queue_alloc - Alloc driver data and TFD CB for one Tx/cmd queue
  */
 static int iwl3945_tx_queue_alloc(struct iwl_priv *priv,
-			      struct iwl3945_tx_queue *txq, u32 id)
+			      struct iwl_tx_queue *txq, u32 id)
 {
 	struct pci_dev *dev = priv->pci_dev;
 
@@ -181,13 +181,13 @@ static int iwl3945_tx_queue_alloc(struct iwl_priv *priv,
 
 	/* Circular buffer of transmit frame descriptors (TFDs),
 	 * shared with device */
-	txq->tfds = pci_alloc_consistent(dev,
-			sizeof(txq->tfds[0]) * TFD_QUEUE_SIZE_MAX,
+	txq->tfds39 = pci_alloc_consistent(dev,
+			sizeof(txq->tfds39[0]) * TFD_QUEUE_SIZE_MAX,
 			&txq->q.dma_addr);
 
-	if (!txq->tfds) {
+	if (!txq->tfds39) {
 		IWL_ERR(priv, "pci_alloc_consistent(%zd) failed\n",
-			  sizeof(txq->tfds[0]) * TFD_QUEUE_SIZE_MAX);
+			  sizeof(txq->tfds39[0]) * TFD_QUEUE_SIZE_MAX);
 		goto error;
 	}
 	txq->q.id = id;
@@ -205,10 +205,9 @@ static int iwl3945_tx_queue_alloc(struct iwl_priv *priv,
  * iwl3945_tx_queue_init - Allocate and initialize one tx/cmd queue
  */
 int iwl3945_tx_queue_init(struct iwl_priv *priv,
-		      struct iwl3945_tx_queue *txq, int slots_num, u32 txq_id)
+		      struct iwl_tx_queue *txq, int slots_num, u32 txq_id)
 {
-	struct pci_dev *dev = priv->pci_dev;
-	int len;
+	int len, i;
 	int rc = 0;
 
 	/*
@@ -219,20 +218,25 @@ int iwl3945_tx_queue_init(struct iwl_priv *priv,
 	 * For data Tx queues (all other queues), no super-size command
 	 * space is needed.
 	 */
-	len = sizeof(struct iwl_cmd) * slots_num;
-	if (txq_id == IWL_CMD_QUEUE_NUM)
-		len +=  IWL_MAX_SCAN_SIZE;
-	txq->cmd = pci_alloc_consistent(dev, len, &txq->dma_addr_cmd);
-	if (!txq->cmd)
-		return -ENOMEM;
+	len = sizeof(struct iwl_cmd);
+	for (i = 0; i <= slots_num; i++) {
+		if (i == slots_num) {
+			if (txq_id == IWL_CMD_QUEUE_NUM)
+				len += IWL_MAX_SCAN_SIZE;
+			else
+				continue;
+		}
+
+		txq->cmd[i] = kmalloc(len, GFP_KERNEL);
+		if (!txq->cmd[i])
+			goto err;
+	}
 
 	/* Alloc driver data array and TFD circular buffer */
 	rc = iwl3945_tx_queue_alloc(priv, txq, txq_id);
-	if (rc) {
-		pci_free_consistent(dev, len, txq->cmd, txq->dma_addr_cmd);
+	if (rc)
+		goto err;
 
-		return -ENOMEM;
-	}
 	txq->need_update = 0;
 
 	/* TFD_QUEUE_SIZE_MAX must be power-of-two size, otherwise
@@ -246,6 +250,17 @@ int iwl3945_tx_queue_init(struct iwl_priv *priv,
 	iwl3945_hw_tx_queue_init(priv, txq);
 
 	return 0;
+err:
+	for (i = 0; i < slots_num; i++) {
+		kfree(txq->cmd[i]);
+		txq->cmd[i] = NULL;
+	}
+
+	if (txq_id == IWL_CMD_QUEUE_NUM) {
+		kfree(txq->cmd[slots_num]);
+		txq->cmd[slots_num] = NULL;
+	}
+	return -ENOMEM;
 }
 
 /**
@@ -256,11 +271,11 @@ int iwl3945_tx_queue_init(struct iwl_priv *priv,
  * Free all buffers.
  * 0-fill, but do not free "txq" descriptor structure.
  */
-void iwl3945_tx_queue_free(struct iwl_priv *priv, struct iwl3945_tx_queue *txq)
+void iwl3945_tx_queue_free(struct iwl_priv *priv, struct iwl_tx_queue *txq)
 {
 	struct iwl_queue *q = &txq->q;
 	struct pci_dev *dev = priv->pci_dev;
-	int len;
+	int len, i;
 
 	if (q->n_bd == 0)
 		return;
@@ -275,12 +290,13 @@ void iwl3945_tx_queue_free(struct iwl_priv *priv, struct iwl3945_tx_queue *txq)
 		len += IWL_MAX_SCAN_SIZE;
 
 	/* De-alloc array of command/tx buffers */
-	pci_free_consistent(dev, len, txq->cmd, txq->dma_addr_cmd);
+	for (i = 0; i < TFD_TX_CMD_SLOTS; i++)
+		kfree(txq->cmd[i]);
 
 	/* De-alloc circular buffer of TFDs */
 	if (txq->q.n_bd)
 		pci_free_consistent(dev, sizeof(struct iwl3945_tfd) *
-				    txq->q.n_bd, txq->tfds, txq->q.dma_addr);
+				    txq->q.n_bd, txq->tfds39, txq->q.dma_addr);
 
 	/* De-alloc array of per-TFD driver data */
 	kfree(txq->txb);
@@ -445,7 +461,7 @@ u8 iwl3945_add_station(struct iwl_priv *priv, const u8 *addr, int is_ap, u8 flag
  */
 static int iwl3945_enqueue_hcmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd)
 {
-	struct iwl3945_tx_queue *txq = &priv->txq39[IWL_CMD_QUEUE_NUM];
+	struct iwl_tx_queue *txq = &priv->txq[IWL_CMD_QUEUE_NUM];
 	struct iwl_queue *q = &txq->q;
 	struct iwl3945_tfd *tfd;
 	struct iwl_cmd *out_cmd;
@@ -453,7 +469,7 @@ static int iwl3945_enqueue_hcmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd)
 	u16 fix_size = (u16)(cmd->len + sizeof(out_cmd->hdr));
 	dma_addr_t phys_addr;
 	int pad;
-	int ret;
+	int ret, len;
 	unsigned long flags;
 
 	/* If any of the command structures end up being larger than
@@ -475,11 +491,11 @@ static int iwl3945_enqueue_hcmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd)
 
 	spin_lock_irqsave(&priv->hcmd_lock, flags);
 
-	tfd = &txq->tfds[q->write_ptr];
+	tfd = &txq->tfds39[q->write_ptr];
 	memset(tfd, 0, sizeof(*tfd));
 
 	idx = get_cmd_index(q, q->write_ptr, cmd->meta.flags & CMD_SIZE_HUGE);
-	out_cmd = &txq->cmd[idx];
+	out_cmd = txq->cmd[idx];
 
 	out_cmd->hdr.cmd = cmd->id;
 	memcpy(&out_cmd->meta, &cmd->meta, sizeof(cmd->meta));
@@ -494,8 +510,15 @@ static int iwl3945_enqueue_hcmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd)
 	if (out_cmd->meta.flags & CMD_SIZE_HUGE)
 		out_cmd->hdr.sequence |= SEQ_HUGE_FRAME;
 
-	phys_addr = txq->dma_addr_cmd + sizeof(txq->cmd[0]) * idx +
-			offsetof(struct iwl_cmd, hdr);
+	len = (idx == TFD_CMD_SLOTS) ?
+			IWL_MAX_SCAN_SIZE : sizeof(struct iwl_cmd);
+
+	phys_addr = pci_map_single(priv->pci_dev, out_cmd,
+					len, PCI_DMA_TODEVICE);
+	pci_unmap_addr_set(&out_cmd->meta, mapping, phys_addr);
+	pci_unmap_len_set(&out_cmd->meta, len, len);
+	phys_addr += offsetof(struct iwl_cmd, hdr);
+
 	iwl3945_hw_txq_attach_buf_to_tfd(priv, tfd, phys_addr, fix_size);
 
 	pad = U32_PAD(cmd->len);
@@ -621,7 +644,7 @@ cancel:
 		 * TX cmd queue. Otherwise in case the cmd comes
 		 * in later, it will possibly set an invalid
 		 * address (cmd->meta.source). */
-		qcmd = &priv->txq39[IWL_CMD_QUEUE_NUM].cmd[cmd_idx];
+		qcmd = priv->txq[IWL_CMD_QUEUE_NUM].cmd[cmd_idx];
 		qcmd->meta.flags &= ~CMD_WANT_SKB;
 	}
 fail:
@@ -2233,7 +2256,7 @@ static int iwl3945_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
 	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
 	struct iwl3945_tfd *tfd;
 	int txq_id = skb_get_queue_mapping(skb);
-	struct iwl3945_tx_queue *txq = NULL;
+	struct iwl_tx_queue *txq = NULL;
 	struct iwl_queue *q = NULL;
 	dma_addr_t phys_addr;
 	dma_addr_t txcmd_phys;
@@ -2312,13 +2335,13 @@ static int iwl3945_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
 	}
 
 	/* Descriptor for chosen Tx queue */
-	txq = &priv->txq39[txq_id];
+	txq = &priv->txq[txq_id];
 	q = &txq->q;
 
 	spin_lock_irqsave(&priv->lock, flags);
 
 	/* Set up first empty TFD within this queue's circular TFD buffer */
-	tfd = &txq->tfds[q->write_ptr];
+	tfd = &txq->tfds39[q->write_ptr];
 	memset(tfd, 0, sizeof(*tfd));
 	idx = get_cmd_index(q, q->write_ptr, 0);
 
@@ -2327,7 +2350,7 @@ static int iwl3945_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
 	txq->txb[q->write_ptr].skb[0] = skb;
 
 	/* Init first empty entry in queue's array of Tx/cmd buffers */
-	out_cmd = &txq->cmd[idx];
+	out_cmd = txq->cmd[idx];
 	memset(&out_cmd->hdr, 0, sizeof(out_cmd->hdr));
 	memset(&out_cmd->cmd.tx, 0, sizeof(out_cmd->cmd.tx));
 
@@ -2366,8 +2389,14 @@ static int iwl3945_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
 
 	/* Physical address of this Tx command's header (not MAC header!),
 	 * within command buffer array. */
-	txcmd_phys = txq->dma_addr_cmd + sizeof(struct iwl_cmd) * idx +
-		     offsetof(struct iwl_cmd, hdr);
+	txcmd_phys = pci_map_single(priv->pci_dev,
+				    out_cmd, sizeof(struct iwl_cmd),
+				    PCI_DMA_TODEVICE);
+	pci_unmap_addr_set(&out_cmd->meta, mapping, txcmd_phys);
+	pci_unmap_len_set(&out_cmd->meta, len, sizeof(struct iwl_cmd));
+	/* Add buffer containing Tx command and MAC(!) header to TFD's
+	 * first entry */
+	txcmd_phys += offsetof(struct iwl_cmd, hdr);
 
 	/* Add buffer containing Tx command and MAC(!) header to TFD's
 	 * first entry */
@@ -3082,7 +3111,7 @@ static void iwl3945_setup_rx_handlers(struct iwl_priv *priv)
 static void iwl3945_cmd_queue_reclaim(struct iwl_priv *priv,
 				      int txq_id, int index)
 {
-	struct iwl3945_tx_queue *txq = &priv->txq39[txq_id];
+	struct iwl_tx_queue *txq = &priv->txq[txq_id];
 	struct iwl_queue *q = &txq->q;
 	int nfreed = 0;
 
@@ -3127,8 +3156,8 @@ static void iwl3945_tx_cmd_complete(struct iwl_priv *priv,
 
 	BUG_ON(txq_id != IWL_CMD_QUEUE_NUM);
 
-	cmd_index = get_cmd_index(&priv->txq39[IWL_CMD_QUEUE_NUM].q, index, huge);
-	cmd = &priv->txq39[IWL_CMD_QUEUE_NUM].cmd[cmd_index];
+	cmd_index = get_cmd_index(&priv->txq[IWL_CMD_QUEUE_NUM].q, index, huge);
+	cmd = priv->txq[IWL_CMD_QUEUE_NUM].cmd[cmd_index];
 
 	/* Input error checking is done when commands are added to queue. */
 	if (cmd->meta.flags & CMD_WANT_SKB) {
@@ -3684,7 +3713,7 @@ static void iwl3945_rx_handle(struct iwl_priv *priv)
  * iwl3945_tx_queue_update_write_ptr - Send new write index to hardware
  */
 static int iwl3945_tx_queue_update_write_ptr(struct iwl_priv *priv,
-				  struct iwl3945_tx_queue *txq)
+				  struct iwl_tx_queue *txq)
 {
 	u32 reg = 0;
 	int rc = 0;
@@ -4098,12 +4127,12 @@ static void iwl3945_irq_tasklet(struct iwl_priv *priv)
 	if (inta & CSR_INT_BIT_WAKEUP) {
 		IWL_DEBUG_ISR("Wakeup interrupt\n");
 		iwl3945_rx_queue_update_write_ptr(priv, &priv->rxq);
-		iwl3945_tx_queue_update_write_ptr(priv, &priv->txq39[0]);
-		iwl3945_tx_queue_update_write_ptr(priv, &priv->txq39[1]);
-		iwl3945_tx_queue_update_write_ptr(priv, &priv->txq39[2]);
-		iwl3945_tx_queue_update_write_ptr(priv, &priv->txq39[3]);
-		iwl3945_tx_queue_update_write_ptr(priv, &priv->txq39[4]);
-		iwl3945_tx_queue_update_write_ptr(priv, &priv->txq39[5]);
+		iwl3945_tx_queue_update_write_ptr(priv, &priv->txq[0]);
+		iwl3945_tx_queue_update_write_ptr(priv, &priv->txq[1]);
+		iwl3945_tx_queue_update_write_ptr(priv, &priv->txq[2]);
+		iwl3945_tx_queue_update_write_ptr(priv, &priv->txq[3]);
+		iwl3945_tx_queue_update_write_ptr(priv, &priv->txq[4]);
+		iwl3945_tx_queue_update_write_ptr(priv, &priv->txq[5]);
 
 		handled |= CSR_INT_BIT_WAKEUP;
 	}
@@ -6752,7 +6781,7 @@ static int iwl3945_mac_get_tx_stats(struct ieee80211_hw *hw,
 {
 	struct iwl_priv *priv = hw->priv;
 	int i, avail;
-	struct iwl3945_tx_queue *txq;
+	struct iwl_tx_queue *txq;
 	struct iwl_queue *q;
 	unsigned long flags;
 
@@ -6766,7 +6795,7 @@ static int iwl3945_mac_get_tx_stats(struct ieee80211_hw *hw,
 	spin_lock_irqsave(&priv->lock, flags);
 
 	for (i = 0; i < AC_NUM; i++) {
-		txq = &priv->txq39[i];
+		txq = &priv->txq[i];
 		q = &txq->q;
 		avail = iwl_queue_space(q);
 
-- 
1.5.3.6


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 04/10] iwl3945: remove iwl-3945-led.[ch]
  2008-12-22  3:31     ` [PATCH 03/10] iwl3945: sync tx queue data structure with iwlagn Zhu Yi
@ 2008-12-22  3:31       ` Zhu Yi
  2008-12-22  3:31         ` [PATCH 05/10] iwl3945: switch to the iwl-core send_card_state routine Zhu Yi
  0 siblings, 1 reply; 18+ messages in thread
From: Zhu Yi @ 2008-12-22  3:31 UTC (permalink / raw)
  To: linville
  Cc: linux-wireless, ipw3945-devel, Samuel Ortiz, Abhijeet Kolekar,
	Zhu Yi

From: Samuel Ortiz <samuel.ortiz@intel.com>

We no longer need the 3945 specific LED files and structures. Remove
iwl-3945-led.[ch] and use iwl-led.[ch] instead.

Signed-off-by: Samuel Ortiz <samuel.ortiz@intel.com>
Signed-off-by: Abhijeet Kolekar <abhijeet.kolekar@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
 drivers/net/wireless/iwlwifi/Kconfig        |    1 +
 drivers/net/wireless/iwlwifi/Makefile       |    3 -
 drivers/net/wireless/iwlwifi/iwl-3945-led.c |  409 ---------------------------
 drivers/net/wireless/iwlwifi/iwl-3945-led.h |   60 ----
 drivers/net/wireless/iwlwifi/iwl-3945.c     |   10 +-
 drivers/net/wireless/iwlwifi/iwl-3945.h     |    1 -
 drivers/net/wireless/iwlwifi/iwl-dev.h      |   11 +-
 drivers/net/wireless/iwlwifi/iwl3945-base.c |    7 +-
 8 files changed, 5 insertions(+), 497 deletions(-)
 delete mode 100644 drivers/net/wireless/iwlwifi/iwl-3945-led.c
 delete mode 100644 drivers/net/wireless/iwlwifi/iwl-3945-led.h

diff --git a/drivers/net/wireless/iwlwifi/Kconfig b/drivers/net/wireless/iwlwifi/Kconfig
index 47bee0e..5ed2030 100644
--- a/drivers/net/wireless/iwlwifi/Kconfig
+++ b/drivers/net/wireless/iwlwifi/Kconfig
@@ -146,6 +146,7 @@ config IWL3945_SPECTRUM_MEASUREMENT
 config IWL3945_LEDS
 	bool "Enable LEDS features in iwl3945 driver"
 	depends on IWL3945
+	select IWLWIFI_LEDS
 	---help---
 	  This option enables LEDS for the iwl3945 driver.
 
diff --git a/drivers/net/wireless/iwlwifi/Makefile b/drivers/net/wireless/iwlwifi/Makefile
index 0be9e6b..9808992 100644
--- a/drivers/net/wireless/iwlwifi/Makefile
+++ b/drivers/net/wireless/iwlwifi/Makefile
@@ -15,6 +15,3 @@ iwlagn-$(CONFIG_IWL5000) += iwl-5000.o
 
 obj-$(CONFIG_IWL3945)	+= iwl3945.o
 iwl3945-objs		:= iwl3945-base.o iwl-3945.o iwl-3945-rs.o
-iwl3945-$(CONFIG_IWL3945_LEDS) += iwl-3945-led.o
-
-
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945-led.c b/drivers/net/wireless/iwlwifi/iwl-3945-led.c
deleted file mode 100644
index 10e68d6..0000000
--- a/drivers/net/wireless/iwlwifi/iwl-3945-led.c
+++ /dev/null
@@ -1,409 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2003 - 2008 Intel Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the 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, USA
- *
- * The full GNU General Public License is included in this distribution in the
- * file called LICENSE.
- *
- * Contact Information:
- *  Intel Linux Wireless <ilw@linux.intel.com>
- * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
- *
- *****************************************************************************/
-
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/init.h>
-#include <linux/pci.h>
-#include <linux/dma-mapping.h>
-#include <linux/delay.h>
-#include <linux/skbuff.h>
-#include <linux/netdevice.h>
-#include <linux/wireless.h>
-#include <net/mac80211.h>
-#include <linux/etherdevice.h>
-#include <asm/unaligned.h>
-
-#include "iwl-commands.h"
-#include "iwl-3945.h"
-
-
-static const struct {
-	u16 brightness;
-	u8 on_time;
-	u8 off_time;
-} blink_tbl[] =
-{
-	{300, 25, 25},
-	{200, 40, 40},
-	{100, 55, 55},
-	{70, 65, 65},
-	{50, 75, 75},
-	{20, 85, 85},
-	{15, 95, 95 },
-	{10, 110, 110},
-	{5, 130, 130},
-	{0, 167, 167},
-	/*SOLID_ON*/
-	{-1, IWL_LED_SOLID, 0}
-};
-
-#define IWL_1MB_RATE (128 * 1024)
-#define IWL_LED_THRESHOLD (16)
-#define IWL_MAX_BLINK_TBL (ARRAY_SIZE(blink_tbl) - 1) /*Exclude Solid on*/
-#define IWL_SOLID_BLINK_IDX (ARRAY_SIZE(blink_tbl) - 1)
-
-static int iwl3945_led_cmd_callback(struct iwl_priv *priv,
-				    struct iwl_cmd *cmd,
-				    struct sk_buff *skb)
-{
-	return 1;
-}
-
-static inline int iwl3945_brightness_to_idx(enum led_brightness brightness)
-{
-	return fls(0x000000FF & (u32)brightness);
-}
-
-/* Send led command */
-static int iwl_send_led_cmd(struct iwl_priv *priv,
-			    struct iwl_led_cmd *led_cmd)
-{
-	struct iwl_host_cmd cmd = {
-		.id = REPLY_LEDS_CMD,
-		.len = sizeof(struct iwl_led_cmd),
-		.data = led_cmd,
-		.meta.flags = CMD_ASYNC,
-		.meta.u.callback = iwl3945_led_cmd_callback,
-	};
-
-	return iwl3945_send_cmd(priv, &cmd);
-}
-
-
-
-/* Set led on command */
-static int iwl3945_led_pattern(struct iwl_priv *priv, int led_id,
-			       unsigned int idx)
-{
-	struct iwl_led_cmd led_cmd = {
-		.id = led_id,
-		.interval = IWL_DEF_LED_INTRVL
-	};
-
-	BUG_ON(idx > IWL_MAX_BLINK_TBL);
-
-	led_cmd.on = blink_tbl[idx].on_time;
-	led_cmd.off = blink_tbl[idx].off_time;
-
-	return iwl_send_led_cmd(priv, &led_cmd);
-}
-
-
-/* Set led on command */
-static int iwl3945_led_on(struct iwl_priv *priv, int led_id)
-{
-	struct iwl_led_cmd led_cmd = {
-		.id = led_id,
-		.on = IWL_LED_SOLID,
-		.off = 0,
-		.interval = IWL_DEF_LED_INTRVL
-	};
-	return iwl_send_led_cmd(priv, &led_cmd);
-}
-
-/* Set led off command */
-static int iwl3945_led_off(struct iwl_priv *priv, int led_id)
-{
-	struct iwl_led_cmd led_cmd = {
-		.id = led_id,
-		.on = 0,
-		.off = 0,
-		.interval = IWL_DEF_LED_INTRVL
-	};
-	IWL_DEBUG_LED("led off %d\n", led_id);
-	return iwl_send_led_cmd(priv, &led_cmd);
-}
-
-/*
- * brightness call back function for Tx/Rx LED
- */
-static int iwl3945_led_associated(struct iwl_priv *priv, int led_id)
-{
-	if (test_bit(STATUS_EXIT_PENDING, &priv->status) ||
-	    !test_bit(STATUS_READY, &priv->status))
-		return 0;
-
-
-	/* start counting Tx/Rx bytes */
-	if (!priv->last_blink_time && priv->allow_blinking)
-		priv->last_blink_time = jiffies;
-	return 0;
-}
-
-/*
- * brightness call back for association and radio
- */
-static void iwl3945_led_brightness_set(struct led_classdev *led_cdev,
-				enum led_brightness brightness)
-{
-	struct iwl3945_led *led = container_of(led_cdev,
-					       struct iwl3945_led, led_dev);
-	struct iwl_priv *priv = led->priv;
-
-	if (test_bit(STATUS_EXIT_PENDING, &priv->status))
-		return;
-
-	switch (brightness) {
-	case LED_FULL:
-		if (led->type == IWL_LED_TRG_ASSOC) {
-			priv->allow_blinking = 1;
-			IWL_DEBUG_LED("MAC is  associated\n");
-		}
-		if (led->led_on)
-			led->led_on(priv, IWL_LED_LINK);
-		break;
-	case LED_OFF:
-		if (led->type == IWL_LED_TRG_ASSOC) {
-			priv->allow_blinking = 0;
-			IWL_DEBUG_LED("MAC is disassociated\n");
-		}
-		if (led->led_off)
-			led->led_off(priv, IWL_LED_LINK);
-		break;
-	default:
-		if (led->led_pattern) {
-			int idx = iwl3945_brightness_to_idx(brightness);
-			led->led_pattern(priv, IWL_LED_LINK, idx);
-		}
-		break;
-	}
-}
-
-
-
-/*
- * Register led class with the system
- */
-static int iwl3945_led_register_led(struct iwl_priv *priv,
-				   struct iwl3945_led *led,
-				   enum led_type type, u8 set_led,
-				   char *trigger)
-{
-	struct device *device = wiphy_dev(priv->hw->wiphy);
-	int ret;
-
-	led->led_dev.name = led->name;
-	led->led_dev.brightness_set = iwl3945_led_brightness_set;
-	led->led_dev.default_trigger = trigger;
-
-	led->priv = priv;
-	led->type = type;
-
-	ret = led_classdev_register(device, &led->led_dev);
-	if (ret) {
-		IWL_ERR(priv, "Error: failed to register led handler.\n");
-		return ret;
-	}
-
-	led->registered = 1;
-
-	if (set_led && led->led_on)
-		led->led_on(priv, IWL_LED_LINK);
-	return 0;
-}
-
-
-/*
- * calculate blink rate according to last 2 sec Tx/Rx activities
- */
-static inline u8 get_blink_rate(struct iwl_priv *priv)
-{
-	int index;
-	u64 current_tpt = priv->rxtxpackets;
-	s64 tpt = current_tpt - priv->led_tpt;
-
-	if (tpt < 0)
-		tpt = -tpt;
-	priv->led_tpt = current_tpt;
-
-	if (!priv->allow_blinking)
-		index = IWL_MAX_BLINK_TBL;
-	else
-		for (index = 0; index < IWL_MAX_BLINK_TBL; index++)
-			if (tpt > (blink_tbl[index].brightness * IWL_1MB_RATE))
-				break;
-	return index;
-}
-
-static inline int is_rf_kill(struct iwl_priv *priv)
-{
-	return test_bit(STATUS_RF_KILL_HW, &priv->status) ||
-		test_bit(STATUS_RF_KILL_SW, &priv->status);
-}
-
-/*
- * this function called from handler. Since setting Led command can
- * happen very frequent we postpone led command to be called from
- * REPLY handler so we know ucode is up
- */
-void iwl3945_led_background(struct iwl_priv *priv)
-{
-	u8 blink_idx;
-
-	if (test_bit(STATUS_EXIT_PENDING, &priv->status)) {
-		priv->last_blink_time = 0;
-		return;
-	}
-	if (is_rf_kill(priv)) {
-		priv->last_blink_time = 0;
-		return;
-	}
-
-	if (!priv->allow_blinking) {
-		priv->last_blink_time = 0;
-		if (priv->last_blink_rate != IWL_SOLID_BLINK_IDX) {
-			priv->last_blink_rate = IWL_SOLID_BLINK_IDX;
-			iwl3945_led_pattern(priv, IWL_LED_LINK,
-					    IWL_SOLID_BLINK_IDX);
-		}
-		return;
-	}
-	if (!priv->last_blink_time ||
-	    !time_after(jiffies, priv->last_blink_time +
-			msecs_to_jiffies(1000)))
-		return;
-
-	blink_idx = get_blink_rate(priv);
-
-	/* call only if blink rate change */
-	if (blink_idx != priv->last_blink_rate)
-		iwl3945_led_pattern(priv, IWL_LED_LINK, blink_idx);
-
-	priv->last_blink_time = jiffies;
-	priv->last_blink_rate = blink_idx;
-	priv->rxtxpackets = 0;
-}
-
-
-/* Register all led handler */
-int iwl3945_led_register(struct iwl_priv *priv)
-{
-	char *trigger;
-	int ret;
-
-	priv->last_blink_rate = 0;
-	priv->rxtxpackets = 0;
-	priv->led_tpt = 0;
-	priv->last_blink_time = 0;
-	priv->allow_blinking = 0;
-
-	trigger = ieee80211_get_radio_led_name(priv->hw);
-	snprintf(priv->led39[IWL_LED_TRG_RADIO].name,
-		 sizeof(priv->led39[IWL_LED_TRG_RADIO].name), "iwl-%s:radio",
-		 wiphy_name(priv->hw->wiphy));
-
-	priv->led39[IWL_LED_TRG_RADIO].led_on = iwl3945_led_on;
-	priv->led39[IWL_LED_TRG_RADIO].led_off = iwl3945_led_off;
-	priv->led39[IWL_LED_TRG_RADIO].led_pattern = NULL;
-
-	ret = iwl3945_led_register_led(priv,
-				   &priv->led39[IWL_LED_TRG_RADIO],
-				   IWL_LED_TRG_RADIO, 1, trigger);
-
-	if (ret)
-		goto exit_fail;
-
-	trigger = ieee80211_get_assoc_led_name(priv->hw);
-	snprintf(priv->led39[IWL_LED_TRG_ASSOC].name,
-		 sizeof(priv->led39[IWL_LED_TRG_ASSOC].name), "iwl-%s:assoc",
-		 wiphy_name(priv->hw->wiphy));
-
-	ret = iwl3945_led_register_led(priv,
-				   &priv->led39[IWL_LED_TRG_ASSOC],
-				   IWL_LED_TRG_ASSOC, 0, trigger);
-
-	/* for assoc always turn led on */
-	priv->led39[IWL_LED_TRG_ASSOC].led_on = iwl3945_led_on;
-	priv->led39[IWL_LED_TRG_ASSOC].led_off = iwl3945_led_on;
-	priv->led39[IWL_LED_TRG_ASSOC].led_pattern = NULL;
-
-	if (ret)
-		goto exit_fail;
-
-	trigger = ieee80211_get_rx_led_name(priv->hw);
-	snprintf(priv->led39[IWL_LED_TRG_RX].name,
-		 sizeof(priv->led39[IWL_LED_TRG_RX].name), "iwl-%s:RX",
-		 wiphy_name(priv->hw->wiphy));
-
-	ret = iwl3945_led_register_led(priv,
-				   &priv->led39[IWL_LED_TRG_RX],
-				   IWL_LED_TRG_RX, 0, trigger);
-
-	priv->led39[IWL_LED_TRG_RX].led_on = iwl3945_led_associated;
-	priv->led39[IWL_LED_TRG_RX].led_off = iwl3945_led_associated;
-	priv->led39[IWL_LED_TRG_RX].led_pattern = iwl3945_led_pattern;
-
-	if (ret)
-		goto exit_fail;
-
-	trigger = ieee80211_get_tx_led_name(priv->hw);
-	snprintf(priv->led39[IWL_LED_TRG_TX].name,
-		 sizeof(priv->led39[IWL_LED_TRG_TX].name), "iwl-%s:TX",
-		 wiphy_name(priv->hw->wiphy));
-
-	ret = iwl3945_led_register_led(priv,
-				   &priv->led39[IWL_LED_TRG_TX],
-				   IWL_LED_TRG_TX, 0, trigger);
-
-	priv->led39[IWL_LED_TRG_TX].led_on = iwl3945_led_associated;
-	priv->led39[IWL_LED_TRG_TX].led_off = iwl3945_led_associated;
-	priv->led39[IWL_LED_TRG_TX].led_pattern = iwl3945_led_pattern;
-
-	if (ret)
-		goto exit_fail;
-
-	return 0;
-
-exit_fail:
-	iwl3945_led_unregister(priv);
-	return ret;
-}
-
-
-/* unregister led class */
-static void iwl3945_led_unregister_led(struct iwl3945_led *led, u8 set_led)
-{
-	if (!led->registered)
-		return;
-
-	led_classdev_unregister(&led->led_dev);
-
-	if (set_led)
-		led->led_dev.brightness_set(&led->led_dev, LED_OFF);
-	led->registered = 0;
-}
-
-/* Unregister all led handlers */
-void iwl3945_led_unregister(struct iwl_priv *priv)
-{
-	iwl3945_led_unregister_led(&priv->led39[IWL_LED_TRG_ASSOC], 0);
-	iwl3945_led_unregister_led(&priv->led39[IWL_LED_TRG_RX], 0);
-	iwl3945_led_unregister_led(&priv->led39[IWL_LED_TRG_TX], 0);
-	iwl3945_led_unregister_led(&priv->led39[IWL_LED_TRG_RADIO], 1);
-}
-
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945-led.h b/drivers/net/wireless/iwlwifi/iwl-3945-led.h
deleted file mode 100644
index 859bb9b..0000000
--- a/drivers/net/wireless/iwlwifi/iwl-3945-led.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2003 - 2008 Intel Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the 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, USA
- *
- * The full GNU General Public License is included in this distribution in the
- * file called LICENSE.
- *
- * Contact Information:
- *  Intel Linux Wireless <ilw@linux.intel.com>
- * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
- *
- *****************************************************************************/
-
-#ifndef IWL3945_LEDS_H
-#define IWL3945_LEDS_H
-
-struct iwl_priv;
-
-#ifdef CONFIG_IWL3945_LEDS
-
-#include "iwl-led.h"
-
-struct iwl3945_led {
-	struct iwl_priv *priv;
-	struct led_classdev led_dev;
-	char name[32];
-
-	int (*led_on) (struct iwl_priv *priv, int led_id);
-	int (*led_off) (struct iwl_priv *priv, int led_id);
-	int (*led_pattern) (struct iwl_priv *priv, int led_id,
-			    unsigned int idx);
-
-	enum led_type type;
-	unsigned int registered;
-};
-
-extern int iwl3945_led_register(struct iwl_priv *priv);
-extern void iwl3945_led_unregister(struct iwl_priv *priv);
-extern void iwl3945_led_background(struct iwl_priv *priv);
-
-#else
-static inline int iwl3945_led_register(struct iwl_priv *priv) { return 0; }
-static inline void iwl3945_led_unregister(struct iwl_priv *priv) {}
-static inline void iwl3945_led_background(struct iwl_priv *priv) {}
-#endif /* CONFIG_IWL3945_LEDS */
-
-#endif /* IWL3945_LEDS_H */
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.c b/drivers/net/wireless/iwlwifi/iwl-3945.c
index 41556b4..ae68f2b 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945.c
+++ b/drivers/net/wireless/iwlwifi/iwl-3945.c
@@ -399,7 +399,7 @@ void iwl3945_hw_rx_statistics(struct iwl_priv *priv, struct iwl_rx_mem_buffer *r
 
 	memcpy(&priv->statistics_39, pkt->u.raw, sizeof(priv->statistics_39));
 
-	iwl3945_led_background(priv);
+	iwl_leds_background(priv);
 
 	priv->last_statistics_time = jiffies;
 }
@@ -576,9 +576,6 @@ static void iwl3945_pass_packet_to_mac80211(struct iwl_priv *priv,
 				   struct ieee80211_rx_status *stats)
 {
 	struct iwl_rx_packet *pkt = (struct iwl_rx_packet *)rxb->skb->data;
-#ifdef CONFIG_IWL3945_LEDS
-	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)IWL_RX_DATA(pkt);
-#endif
 	struct iwl3945_rx_frame_hdr *rx_hdr = IWL_RX_HDR(pkt);
 	struct iwl3945_rx_frame_end *rx_end = IWL_RX_END(pkt);
 	short len = le16_to_cpu(rx_hdr->len);
@@ -603,11 +600,6 @@ static void iwl3945_pass_packet_to_mac80211(struct iwl_priv *priv,
 	if (iwl3945_mod_params.sw_crypto)
 		iwl3945_set_decrypted_flag(priv, rxb->skb,
 				       le32_to_cpu(rx_end->status), stats);
-
-#ifdef CONFIG_IWL3945_LEDS
-	if (ieee80211_is_data(hdr->frame_control))
-		priv->rxtxpackets += len;
-#endif
 	ieee80211_rx_irqsafe(priv->hw, rxb->skb, stats);
 	rxb->skb = NULL;
 }
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.h b/drivers/net/wireless/iwlwifi/iwl-3945.h
index e584032..941746b 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945.h
+++ b/drivers/net/wireless/iwlwifi/iwl-3945.h
@@ -50,7 +50,6 @@ extern struct pci_device_id iwl3945_hw_card_ids[];
 #include "iwl-debug.h"
 #include "iwl-power.h"
 #include "iwl-dev.h"
-#include "iwl-3945-led.h"
 
 /* Highest firmware API version supported */
 #define IWL3945_UCODE_API_MAX 2
diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h
index 9b9d743..ef1099c 100644
--- a/drivers/net/wireless/iwlwifi/iwl-dev.h
+++ b/drivers/net/wireless/iwlwifi/iwl-dev.h
@@ -44,7 +44,6 @@
 #include "iwl-rfkill.h"
 #include "iwl-4965-hw.h"
 #include "iwl-3945-hw.h"
-#include "iwl-3945-led.h"
 #include "iwl-led.h"
 #include "iwl-power.h"
 #include "iwl-agn-rs.h"
@@ -904,21 +903,13 @@ struct iwl_priv {
 	struct rfkill *rfkill;
 #endif
 
-#if defined(CONFIG_IWLWIFI_LEDS) || defined(CONFIG_IWL3945_LEDS)
+#ifdef	CONFIG_IWLWIFI_LEDS
 	unsigned long last_blink_time;
 	u8 last_blink_rate;
 	u8 allow_blinking;
 	u64 led_tpt;
-#endif
-
-#ifdef CONFIG_IWLWIFI_LEDS
 	struct iwl_led led[IWL_LED_TRG_MAX];
 #endif
-
-#ifdef CONFIG_IWL3945_LEDS
-	struct iwl3945_led led39[IWL_LED_TRG_MAX];
-	unsigned int rxtxpackets;
-#endif
 	u16 active_rate;
 	u16 active_rate_basic;
 
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index 98f5b7f..408a6d0 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -2177,9 +2177,6 @@ static void iwl3945_build_tx_cmd_basic(struct iwl_priv *priv,
 			cmd->cmd.tx.timeout.pm_frame_timeout = cpu_to_le16(2);
 	} else {
 		cmd->cmd.tx.timeout.pm_frame_timeout = 0;
-#ifdef CONFIG_IWL3945_LEDS
-		priv->rxtxpackets += le16_to_cpu(cmd->cmd.tx.len);
-#endif
 	}
 
 	cmd->cmd.tx.driver_txop = 0;
@@ -5386,7 +5383,7 @@ static void iwl3945_alive_start(struct iwl_priv *priv)
 
 	iwl3945_reg_txpower_periodic(priv);
 
-	iwl3945_led_register(priv);
+	iwl_leds_register(priv);
 
 	IWL_DEBUG_INFO("ALIVE processing complete.\n");
 	set_bit(STATUS_READY, &priv->status);
@@ -5424,7 +5421,7 @@ static void __iwl3945_down(struct iwl_priv *priv)
 	if (!exit_pending)
 		set_bit(STATUS_EXIT_PENDING, &priv->status);
 
-	iwl3945_led_unregister(priv);
+	iwl_leds_unregister(priv);
 	iwl3945_clear_stations_table(priv);
 
 	/* Unblock any waiting calls */
-- 
1.5.3.6


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 05/10] iwl3945: switch to the iwl-core send_card_state routine
  2008-12-22  3:31       ` [PATCH 04/10] iwl3945: remove iwl-3945-led.[ch] Zhu Yi
@ 2008-12-22  3:31         ` Zhu Yi
  2008-12-22  3:31           ` [PATCH 06/10] iwl3945: use iwl3945_tx_cmd instead of iwl_tx_cmd Zhu Yi
  0 siblings, 1 reply; 18+ messages in thread
From: Zhu Yi @ 2008-12-22  3:31 UTC (permalink / raw)
  To: linville
  Cc: linux-wireless, ipw3945-devel, Samuel Ortiz, Abhijeet Kolekar,
	Zhu Yi

From: Samuel Ortiz <samuel.ortiz@intel.com>

Switch iwl3945 to use iwl-core:send_card_state routine.

Signed-off-by: Samuel Ortiz <samuel.ortiz@intel.com>
Signed-off-by: Abhijeet Kolekar <abhijeet.kolekar@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
 drivers/net/wireless/iwlwifi/iwl-core.c     |    3 +-
 drivers/net/wireless/iwlwifi/iwl-core.h     |    3 ++
 drivers/net/wireless/iwlwifi/iwl3945-base.c |   34 +--------------------------
 3 files changed, 6 insertions(+), 34 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c
index d3bcbba..eaae79b 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.c
+++ b/drivers/net/wireless/iwlwifi/iwl-core.c
@@ -1370,7 +1370,7 @@ EXPORT_SYMBOL(iwl_rf_kill_ct_config);
  * When in the 'halt' state, the card is shut down and must be fully
  * restarted to come back on.
  */
-static int iwl_send_card_state(struct iwl_priv *priv, u32 flags, u8 meta_flag)
+int iwl_send_card_state(struct iwl_priv *priv, u32 flags, u8 meta_flag)
 {
 	struct iwl_host_cmd cmd = {
 		.id = REPLY_CARD_STATE_CMD,
@@ -1381,6 +1381,7 @@ static int iwl_send_card_state(struct iwl_priv *priv, u32 flags, u8 meta_flag)
 
 	return iwl_send_cmd(priv, &cmd);
 }
+EXPORT_SYMBOL(iwl_send_card_state);
 
 void iwl_radio_kill_sw_disable_radio(struct iwl_priv *priv)
 {
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h
index 7c3a20a..2abda89 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.h
+++ b/drivers/net/wireless/iwlwifi/iwl-core.h
@@ -342,6 +342,9 @@ int iwl_send_cmd_pdu_async(struct iwl_priv *priv, u8 id, u16 len,
 
 int iwl_enqueue_hcmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd);
 
+int iwl_send_card_state(struct iwl_priv *priv, u32 flags,
+			u8 meta_flag);
+
 /*****************************************************
  * PCI						     *
  *****************************************************/
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index 408a6d0..7cace6d 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -1078,38 +1078,6 @@ static int iwl3945_send_scan_abort(struct iwl_priv *priv)
 	return rc;
 }
 
-static int iwl3945_card_state_sync_callback(struct iwl_priv *priv,
-					struct iwl_cmd *cmd,
-					struct sk_buff *skb)
-{
-	return 1;
-}
-
-/*
- * CARD_STATE_CMD
- *
- * Use: Sets the device's internal card state to enable, disable, or halt
- *
- * When in the 'enable' state the card operates as normal.
- * When in the 'disable' state, the card enters into a low power mode.
- * When in the 'halt' state, the card is shut down and must be fully
- * restarted to come back on.
- */
-static int iwl3945_send_card_state(struct iwl_priv *priv, u32 flags, u8 meta_flag)
-{
-	struct iwl_host_cmd cmd = {
-		.id = REPLY_CARD_STATE_CMD,
-		.len = sizeof(u32),
-		.data = &flags,
-		.meta.flags = meta_flag,
-	};
-
-	if (meta_flag & CMD_ASYNC)
-		cmd.meta.u.callback = iwl3945_card_state_sync_callback;
-
-	return iwl3945_send_cmd(priv, &cmd);
-}
-
 static int iwl3945_add_sta_sync_callback(struct iwl_priv *priv,
 				     struct iwl_cmd *cmd, struct sk_buff *skb)
 {
@@ -2548,7 +2516,7 @@ static void iwl3945_radio_kill_sw(struct iwl_priv *priv, int disable_radio)
 			iwl_write32(priv, CSR_UCODE_DRV_GP1_SET,
 				    CSR_UCODE_SW_BIT_RFKILL);
 			spin_unlock_irqrestore(&priv->lock, flags);
-			iwl3945_send_card_state(priv, CARD_STATE_CMD_DISABLE, 0);
+			iwl_send_card_state(priv, CARD_STATE_CMD_DISABLE, 0);
 			set_bit(STATUS_RF_KILL_SW, &priv->status);
 		}
 		return;
-- 
1.5.3.6


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 06/10] iwl3945: use iwl3945_tx_cmd instead of iwl_tx_cmd
  2008-12-22  3:31         ` [PATCH 05/10] iwl3945: switch to the iwl-core send_card_state routine Zhu Yi
@ 2008-12-22  3:31           ` Zhu Yi
  2008-12-22  3:31             ` [PATCH 07/10] iwlwifi: move sysfs status entry to debugfs Zhu Yi
  0 siblings, 1 reply; 18+ messages in thread
From: Zhu Yi @ 2008-12-22  3:31 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, ipw3945-devel, Winkler, Tomas, Zhu Yi

From: Winkler, Tomas <tomas.winkler@intel.com>

The patch replaces iwl_tx_cmd with iwl3945_tx_cmd to complete
transitions introduced by commit
77cb4db173d72d1a8c6c89015784a815bfd85221 "iwlwifi: use iwl_cmd instead
of iwl3945_cmd"

Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
 drivers/net/wireless/iwlwifi/iwl3945-base.c |   64 ++++++++++++++-------------
 1 files changed, 33 insertions(+), 31 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index 7cace6d..32cfc8f 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -2047,36 +2047,37 @@ static void iwl3945_build_tx_cmd_hwcrypto(struct iwl_priv *priv,
 				      struct sk_buff *skb_frag,
 				      int last_frag)
 {
+	struct iwl3945_tx_cmd *tx = (struct iwl3945_tx_cmd *)cmd->cmd.payload;
 	struct iwl3945_hw_key *keyinfo =
 	    &priv->stations_39[info->control.hw_key->hw_key_idx].keyinfo;
 
 	switch (keyinfo->alg) {
 	case ALG_CCMP:
-		cmd->cmd.tx.sec_ctl = TX_CMD_SEC_CCM;
-		memcpy(cmd->cmd.tx.key, keyinfo->key, keyinfo->keylen);
+		tx->sec_ctl = TX_CMD_SEC_CCM;
+		memcpy(tx->key, keyinfo->key, keyinfo->keylen);
 		IWL_DEBUG_TX("tx_cmd with AES hwcrypto\n");
 		break;
 
 	case ALG_TKIP:
 #if 0
-		cmd->cmd.tx.sec_ctl = TX_CMD_SEC_TKIP;
+		tx->sec_ctl = TX_CMD_SEC_TKIP;
 
 		if (last_frag)
-			memcpy(cmd->cmd.tx.tkip_mic.byte, skb_frag->tail - 8,
+			memcpy(tx->tkip_mic.byte, skb_frag->tail - 8,
 			       8);
 		else
-			memset(cmd->cmd.tx.tkip_mic.byte, 0, 8);
+			memset(tx->tkip_mic.byte, 0, 8);
 #endif
 		break;
 
 	case ALG_WEP:
-		cmd->cmd.tx.sec_ctl = TX_CMD_SEC_WEP |
+		tx->sec_ctl = TX_CMD_SEC_WEP |
 		    (info->control.hw_key->hw_key_idx & TX_CMD_SEC_MSK) << TX_CMD_SEC_SHIFT;
 
 		if (keyinfo->keylen == 13)
-			cmd->cmd.tx.sec_ctl |= TX_CMD_SEC_KEY128;
+			tx->sec_ctl |= TX_CMD_SEC_KEY128;
 
-		memcpy(&cmd->cmd.tx.key[3], keyinfo->key, keyinfo->keylen);
+		memcpy(&tx->key[3], keyinfo->key, keyinfo->keylen);
 
 		IWL_DEBUG_TX("Configuring packet for WEP encryption "
 			     "with key %d\n", info->control.hw_key->hw_key_idx);
@@ -2094,14 +2095,14 @@ static void iwl3945_build_tx_cmd_hwcrypto(struct iwl_priv *priv,
 static void iwl3945_build_tx_cmd_basic(struct iwl_priv *priv,
 				  struct iwl_cmd *cmd,
 				  struct ieee80211_tx_info *info,
-				  struct ieee80211_hdr *hdr,
-				  int is_unicast, u8 std_id)
+				  struct ieee80211_hdr *hdr, u8 std_id)
 {
+	struct iwl3945_tx_cmd *tx = (struct iwl3945_tx_cmd *)cmd->cmd.payload;
+	__le32 tx_flags = tx->tx_flags;
 	__le16 fc = hdr->frame_control;
-	__le32 tx_flags = cmd->cmd.tx.tx_flags;
 	u8 rc_flags = info->control.rates[0].flags;
 
-	cmd->cmd.tx.stop_time.life_time = TX_CMD_LIFE_TIME_INFINITE;
+	tx->stop_time.life_time = TX_CMD_LIFE_TIME_INFINITE;
 	if (!(info->flags & IEEE80211_TX_CTL_NO_ACK)) {
 		tx_flags |= TX_CMD_FLG_ACK_MSK;
 		if (ieee80211_is_mgmt(fc))
@@ -2114,13 +2115,13 @@ static void iwl3945_build_tx_cmd_basic(struct iwl_priv *priv,
 		tx_flags |= TX_CMD_FLG_SEQ_CTL_MSK;
 	}
 
-	cmd->cmd.tx.sta_id = std_id;
+	tx->sta_id = std_id;
 	if (ieee80211_has_morefrags(fc))
 		tx_flags |= TX_CMD_FLG_MORE_FRAG_MSK;
 
 	if (ieee80211_is_data_qos(fc)) {
 		u8 *qc = ieee80211_get_qos_ctl(hdr);
-		cmd->cmd.tx.tid_tspec = qc[0] & 0xf;
+		tx->tid_tspec = qc[0] & 0xf;
 		tx_flags &= ~TX_CMD_FLG_SEQ_CTL_MSK;
 	} else {
 		tx_flags |= TX_CMD_FLG_SEQ_CTL_MSK;
@@ -2140,16 +2141,16 @@ static void iwl3945_build_tx_cmd_basic(struct iwl_priv *priv,
 	tx_flags &= ~(TX_CMD_FLG_ANT_SEL_MSK);
 	if (ieee80211_is_mgmt(fc)) {
 		if (ieee80211_is_assoc_req(fc) || ieee80211_is_reassoc_req(fc))
-			cmd->cmd.tx.timeout.pm_frame_timeout = cpu_to_le16(3);
+			tx->timeout.pm_frame_timeout = cpu_to_le16(3);
 		else
-			cmd->cmd.tx.timeout.pm_frame_timeout = cpu_to_le16(2);
+			tx->timeout.pm_frame_timeout = cpu_to_le16(2);
 	} else {
-		cmd->cmd.tx.timeout.pm_frame_timeout = 0;
+		tx->timeout.pm_frame_timeout = 0;
 	}
 
-	cmd->cmd.tx.driver_txop = 0;
-	cmd->cmd.tx.tx_flags = tx_flags;
-	cmd->cmd.tx.next_frame_len = 0;
+	tx->driver_txop = 0;
+	tx->tx_flags = tx_flags;
+	tx->next_frame_len = 0;
 }
 
 /**
@@ -2220,12 +2221,13 @@ static int iwl3945_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
 	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
 	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
 	struct iwl3945_tfd *tfd;
-	int txq_id = skb_get_queue_mapping(skb);
+	struct iwl3945_tx_cmd *tx;
 	struct iwl_tx_queue *txq = NULL;
 	struct iwl_queue *q = NULL;
+	struct iwl_cmd *out_cmd = NULL;
 	dma_addr_t phys_addr;
 	dma_addr_t txcmd_phys;
-	struct iwl_cmd *out_cmd = NULL;
+	int txq_id = skb_get_queue_mapping(skb);
 	u16 len, idx, len_org, hdr_len;
 	u8 id;
 	u8 unicast;
@@ -2316,8 +2318,9 @@ static int iwl3945_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
 
 	/* Init first empty entry in queue's array of Tx/cmd buffers */
 	out_cmd = txq->cmd[idx];
+	tx = (struct iwl3945_tx_cmd *)out_cmd->cmd.payload;
 	memset(&out_cmd->hdr, 0, sizeof(out_cmd->hdr));
-	memset(&out_cmd->cmd.tx, 0, sizeof(out_cmd->cmd.tx));
+	memset(tx, 0, sizeof(*tx));
 
 	/*
 	 * Set up the Tx-command (not MAC!) header.
@@ -2330,7 +2333,7 @@ static int iwl3945_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
 				INDEX_TO_SEQ(q->write_ptr)));
 
 	/* Copy MAC header from skb into command buffer */
-	memcpy(out_cmd->cmd.tx.hdr, hdr, hdr_len);
+	memcpy(tx->hdr, hdr, hdr_len);
 
 	/*
 	 * Use the first empty entry in this queue's command buffer array
@@ -2390,16 +2393,16 @@ static int iwl3945_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
 
 	/* Total # bytes to be transmitted */
 	len = (u16)skb->len;
-	out_cmd->cmd.tx.len = cpu_to_le16(len);
+	tx->len = cpu_to_le16(len);
 
 	/* TODO need this for burst mode later on */
-	iwl3945_build_tx_cmd_basic(priv, out_cmd, info, hdr, unicast, sta_id);
+	iwl3945_build_tx_cmd_basic(priv, out_cmd, info, hdr, sta_id);
 
 	/* set is_hcca to 0; it probably will never be implemented */
 	iwl3945_hw_build_tx_cmd_rate(priv, out_cmd, info, hdr, sta_id, 0);
 
-	out_cmd->cmd.tx.tx_flags &= ~TX_CMD_FLG_ANT_A_MSK;
-	out_cmd->cmd.tx.tx_flags &= ~TX_CMD_FLG_ANT_B_MSK;
+	tx->tx_flags &= ~TX_CMD_FLG_ANT_A_MSK;
+	tx->tx_flags &= ~TX_CMD_FLG_ANT_B_MSK;
 
 	if (!ieee80211_has_morefrags(hdr->frame_control)) {
 		txq->need_update = 1;
@@ -2410,10 +2413,9 @@ static int iwl3945_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
 		txq->need_update = 0;
 	}
 
-	iwl_print_hex_dump(priv, IWL_DL_TX, out_cmd->cmd.payload,
-			   sizeof(out_cmd->cmd.tx));
+	iwl_print_hex_dump(priv, IWL_DL_TX, tx, sizeof(*tx));
 
-	iwl_print_hex_dump(priv, IWL_DL_TX, (u8 *)out_cmd->cmd.tx.hdr,
+	iwl_print_hex_dump(priv, IWL_DL_TX, (u8 *)tx->hdr,
 			   ieee80211_hdrlen(fc));
 
 	/* Tell device the write index *just past* this latest filled TFD */
-- 
1.5.3.6


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 07/10] iwlwifi: move sysfs status entry to debugfs
  2008-12-22  3:31           ` [PATCH 06/10] iwl3945: use iwl3945_tx_cmd instead of iwl_tx_cmd Zhu Yi
@ 2008-12-22  3:31             ` Zhu Yi
  2008-12-22  3:31               ` [PATCH 08/10] iwlwifi: kill retry_rate sysfs for iwlagn Zhu Yi
  0 siblings, 1 reply; 18+ messages in thread
From: Zhu Yi @ 2008-12-22  3:31 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, ipw3945-devel, Winkler, Tomas, Zhu Yi

From: Winkler, Tomas <tomas.winkler@intel.com>

This patch moves priv->status sysfs entry to debugfs. It is for
debugging only anyway.

Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
 drivers/net/wireless/iwlwifi/iwl-agn.c     |   11 -----------
 drivers/net/wireless/iwlwifi/iwl-debug.h   |    1 +
 drivers/net/wireless/iwlwifi/iwl-debugfs.c |   10 +++++++++-
 3 files changed, 10 insertions(+), 12 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index 05cd04c..ecf8141 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -3667,16 +3667,6 @@ static ssize_t show_statistics(struct device *d,
 
 static DEVICE_ATTR(statistics, S_IRUGO, show_statistics, NULL);
 
-static ssize_t show_status(struct device *d,
-			   struct device_attribute *attr, char *buf)
-{
-	struct iwl_priv *priv = (struct iwl_priv *)d->driver_data;
-	if (!iwl_is_alive(priv))
-		return -EAGAIN;
-	return sprintf(buf, "0x%08x\n", (int)priv->status);
-}
-
-static DEVICE_ATTR(status, S_IRUGO, show_status, NULL);
 
 /*****************************************************************************
  *
@@ -3732,7 +3722,6 @@ static struct attribute *iwl_sysfs_entries[] = {
 	&dev_attr_power_level.attr,
 	&dev_attr_retry_rate.attr,
 	&dev_attr_statistics.attr,
-	&dev_attr_status.attr,
 	&dev_attr_temperature.attr,
 	&dev_attr_tx_power.attr,
 #ifdef CONFIG_IWLWIFI_DEBUG
diff --git a/drivers/net/wireless/iwlwifi/iwl-debug.h b/drivers/net/wireless/iwlwifi/iwl-debug.h
index 798f946..057781c 100644
--- a/drivers/net/wireless/iwlwifi/iwl-debug.h
+++ b/drivers/net/wireless/iwlwifi/iwl-debug.h
@@ -72,6 +72,7 @@ struct iwl_debugfs {
 		struct dentry *file_tx_statistics;
 		struct dentry *file_log_event;
 		struct dentry *file_channels;
+		struct dentry *file_status;
 	} dbgfs_data_files;
 	struct dir_rf_files {
 		struct dentry *file_disable_sensitivity;
diff --git a/drivers/net/wireless/iwlwifi/iwl-debugfs.c b/drivers/net/wireless/iwlwifi/iwl-debugfs.c
index ecb3900..61949c8 100644
--- a/drivers/net/wireless/iwlwifi/iwl-debugfs.c
+++ b/drivers/net/wireless/iwlwifi/iwl-debugfs.c
@@ -63,6 +63,14 @@
 		goto err;                                               \
 } while (0)
 
+#define DEBUGFS_ADD_X32(name, parent, ptr) do {                        \
+	dbgfs->dbgfs_##parent##_files.file_##name =                     \
+	debugfs_create_x32(#name, 0444, dbgfs->dir_##parent, ptr);     \
+	if (IS_ERR(dbgfs->dbgfs_##parent##_files.file_##name)		\
+			|| !dbgfs->dbgfs_##parent##_files.file_##name)	\
+		goto err;                                               \
+} while (0)
+
 #define DEBUGFS_REMOVE(name)  do {              \
 	debugfs_remove(name);                   \
 	name = NULL;                            \
@@ -419,7 +427,6 @@ static ssize_t iwl_dbgfs_channels_read(struct file *file, char __user *user_buf,
 	return ret;
 }
 
-
 DEBUGFS_READ_WRITE_FILE_OPS(sram);
 DEBUGFS_WRITE_FILE_OPS(log_event);
 DEBUGFS_READ_FILE_OPS(eeprom);
@@ -461,6 +468,7 @@ int iwl_dbgfs_register(struct iwl_priv *priv, const char *name)
 	DEBUGFS_ADD_FILE(rx_statistics, data);
 	DEBUGFS_ADD_FILE(tx_statistics, data);
 	DEBUGFS_ADD_FILE(channels, data);
+	DEBUGFS_ADD_X32(status, data, (u32 *)&priv->status);
 	DEBUGFS_ADD_BOOL(disable_sensitivity, rf, &priv->disable_sens_cal);
 	DEBUGFS_ADD_BOOL(disable_chain_noise, rf,
 			 &priv->disable_chain_noise_cal);
-- 
1.5.3.6


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 08/10] iwlwifi: kill retry_rate sysfs for iwlagn
  2008-12-22  3:31             ` [PATCH 07/10] iwlwifi: move sysfs status entry to debugfs Zhu Yi
@ 2008-12-22  3:31               ` Zhu Yi
  2008-12-22  3:31                 ` [PATCH 09/10] iwlwifi: fix warning 'Should it be static' Zhu Yi
  0 siblings, 1 reply; 18+ messages in thread
From: Zhu Yi @ 2008-12-22  3:31 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, ipw3945-devel, Winkler, Tomas, Zhu Yi

From: Winkler, Tomas <tomas.winkler@intel.com>

This patch kills retry_rate in sysfs for iwlagn. It's not used.

Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
 drivers/net/wireless/iwlwifi/iwl-agn.c  |   26 --------------------------
 drivers/net/wireless/iwlwifi/iwl-core.c |    1 -
 2 files changed, 0 insertions(+), 27 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index ecf8141..002a151 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -3540,31 +3540,6 @@ static ssize_t store_filter_flags(struct device *d,
 static DEVICE_ATTR(filter_flags, S_IWUSR | S_IRUGO, show_filter_flags,
 		   store_filter_flags);
 
-static ssize_t store_retry_rate(struct device *d,
-				struct device_attribute *attr,
-				const char *buf, size_t count)
-{
-	struct iwl_priv *priv = dev_get_drvdata(d);
-	long val;
-	int ret  = strict_strtol(buf, 10, &val);
-	if (!ret)
-		return ret;
-
-	priv->retry_rate = (val > 0) ? val : 1;
-
-	return count;
-}
-
-static ssize_t show_retry_rate(struct device *d,
-			       struct device_attribute *attr, char *buf)
-{
-	struct iwl_priv *priv = dev_get_drvdata(d);
-	return sprintf(buf, "%d", priv->retry_rate);
-}
-
-static DEVICE_ATTR(retry_rate, S_IWUSR | S_IRUSR, show_retry_rate,
-		   store_retry_rate);
-
 static ssize_t store_power_level(struct device *d,
 				 struct device_attribute *attr,
 				 const char *buf, size_t count)
@@ -3720,7 +3695,6 @@ static struct attribute *iwl_sysfs_entries[] = {
 	&dev_attr_flags.attr,
 	&dev_attr_filter_flags.attr,
 	&dev_attr_power_level.attr,
-	&dev_attr_retry_rate.attr,
 	&dev_attr_statistics.attr,
 	&dev_attr_temperature.attr,
 	&dev_attr_tx_power.attr,
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c
index eaae79b..44e27fd 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.c
+++ b/drivers/net/wireless/iwlwifi/iwl-core.c
@@ -863,7 +863,6 @@ int iwl_init_drv(struct iwl_priv *priv)
 {
 	int ret;
 
-	priv->retry_rate = 1;
 	priv->ibss_beacon = NULL;
 
 	spin_lock_init(&priv->lock);
-- 
1.5.3.6


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 09/10] iwlwifi: fix warning 'Should it be static'
  2008-12-22  3:31               ` [PATCH 08/10] iwlwifi: kill retry_rate sysfs for iwlagn Zhu Yi
@ 2008-12-22  3:31                 ` Zhu Yi
  2008-12-22  3:31                   ` [PATCH 10/10] iwl3945: use rx queue management infrastructure from iwlcore Zhu Yi
  0 siblings, 1 reply; 18+ messages in thread
From: Zhu Yi @ 2008-12-22  3:31 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, ipw3945-devel, Winkler, Tomas, Zhu Yi

From: Winkler, Tomas <tomas.winkler@intel.com>

This patch adds static for functions iwl3945_apm_reset() and
iwl3945_init_drv(). It fixes compile warnings.

Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
 drivers/net/wireless/iwlwifi/iwl-3945.c     |    2 +-
 drivers/net/wireless/iwlwifi/iwl3945-base.c |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.c b/drivers/net/wireless/iwlwifi/iwl-3945.c
index ae68f2b..fb2c2db 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945.c
+++ b/drivers/net/wireless/iwlwifi/iwl-3945.c
@@ -1315,7 +1315,7 @@ static void iwl3945_apm_stop(struct iwl_priv *priv)
 	spin_unlock_irqrestore(&priv->lock, flags);
 }
 
-int iwl3945_apm_reset(struct iwl_priv *priv)
+static int iwl3945_apm_reset(struct iwl_priv *priv)
 {
 	int rc;
 	unsigned long flags;
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index 32cfc8f..2e5c4d8 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -7423,7 +7423,7 @@ static struct ieee80211_ops iwl3945_hw_ops = {
 	.hw_scan = iwl3945_mac_hw_scan
 };
 
-int iwl3945_init_drv(struct iwl_priv *priv)
+static int iwl3945_init_drv(struct iwl_priv *priv)
 {
 	int ret;
 
-- 
1.5.3.6


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 10/10] iwl3945: use rx queue management infrastructure from iwlcore
  2008-12-22  3:31                 ` [PATCH 09/10] iwlwifi: fix warning 'Should it be static' Zhu Yi
@ 2008-12-22  3:31                   ` Zhu Yi
  2008-12-22 14:07                     ` Kalle Valo
  0 siblings, 1 reply; 18+ messages in thread
From: Zhu Yi @ 2008-12-22  3:31 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, ipw3945-devel, Winkler, Tomas, Zhu Yi

From: Winkler, Tomas <tomas.winkler@intel.com>

This patch uses rx queue alloc free and reset function from iwlcore.
This should fix the regression reported by Kalle Valo.

Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
---
 drivers/net/wireless/iwlwifi/iwl-3945.c     |    4 +-
 drivers/net/wireless/iwlwifi/iwl-3945.h     |    3 -
 drivers/net/wireless/iwlwifi/iwl3945-base.c |   81 +--------------------------
 3 files changed, 3 insertions(+), 85 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.c b/drivers/net/wireless/iwlwifi/iwl-3945.c
index fb2c2db..77c55a6 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945.c
+++ b/drivers/net/wireless/iwlwifi/iwl-3945.c
@@ -1195,13 +1195,13 @@ int iwl3945_hw_nic_init(struct iwl_priv *priv)
 
 	/* Allocate the RX queue, or reset if it is already allocated */
 	if (!rxq->bd) {
-		rc = iwl3945_rx_queue_alloc(priv);
+		rc = iwl_rx_queue_alloc(priv);
 		if (rc) {
 			IWL_ERR(priv, "Unable to initialize Rx queue\n");
 			return -ENOMEM;
 		}
 	} else
-		iwl3945_rx_queue_reset(priv, rxq);
+		iwl_rx_queue_reset(priv, rxq);
 
 	iwl3945_rx_replenish(priv);
 
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.h b/drivers/net/wireless/iwlwifi/iwl-3945.h
index 941746b..bd41643 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945.h
+++ b/drivers/net/wireless/iwlwifi/iwl-3945.h
@@ -212,9 +212,6 @@ extern u8 iwl3945_add_station(struct iwl_priv *priv, const u8 *bssid,
 			  int is_ap, u8 flags);
 extern int iwl3945_power_init_handle(struct iwl_priv *priv);
 extern int iwl3945_eeprom_init(struct iwl_priv *priv);
-extern int iwl3945_rx_queue_alloc(struct iwl_priv *priv);
-extern void iwl3945_rx_queue_reset(struct iwl_priv *priv,
-			       struct iwl_rx_queue *rxq);
 extern int iwl3945_calc_db_from_ratio(int sig_ratio);
 extern int iwl3945_calc_sig_qual(int rssi_dbm, int noise_dbm);
 extern int iwl3945_tx_queue_init(struct iwl_priv *priv,
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index 2e5c4d8..c098cac 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -3189,7 +3189,6 @@ static void iwl3945_tx_cmd_complete(struct iwl_priv *priv,
  *
  * Driver sequence:
  *
- * iwl3945_rx_queue_alloc()   Allocates rx_free
  * iwl3945_rx_replenish()     Replenishes rx_free list from rx_used, and calls
  *                            iwl3945_rx_queue_restock
  * iwl3945_rx_queue_restock() Moves available buffers from rx_free into Rx
@@ -3408,84 +3407,6 @@ void iwl3945_rx_replenish(void *data)
 	spin_unlock_irqrestore(&priv->lock, flags);
 }
 
-/* Assumes that the skb field of the buffers in 'pool' is kept accurate.
- * If an SKB has been detached, the POOL needs to have its SKB set to NULL
- * This free routine walks the list of POOL entries and if SKB is set to
- * non NULL it is unmapped and freed
- */
-static void iwl3945_rx_queue_free(struct iwl_priv *priv, struct iwl_rx_queue *rxq)
-{
-	int i;
-	for (i = 0; i < RX_QUEUE_SIZE + RX_FREE_BUFFERS; i++) {
-		if (rxq->pool[i].skb != NULL) {
-			pci_unmap_single(priv->pci_dev,
-					 rxq->pool[i].real_dma_addr,
-					 IWL_RX_BUF_SIZE, PCI_DMA_FROMDEVICE);
-			dev_kfree_skb(rxq->pool[i].skb);
-		}
-	}
-
-	pci_free_consistent(priv->pci_dev, 4 * RX_QUEUE_SIZE, rxq->bd,
-			    rxq->dma_addr);
-	rxq->bd = NULL;
-}
-
-int iwl3945_rx_queue_alloc(struct iwl_priv *priv)
-{
-	struct iwl_rx_queue *rxq = &priv->rxq;
-	struct pci_dev *dev = priv->pci_dev;
-	int i;
-
-	spin_lock_init(&rxq->lock);
-	INIT_LIST_HEAD(&rxq->rx_free);
-	INIT_LIST_HEAD(&rxq->rx_used);
-
-	/* Alloc the circular buffer of Read Buffer Descriptors (RBDs) */
-	rxq->bd = pci_alloc_consistent(dev, 4 * RX_QUEUE_SIZE, &rxq->dma_addr);
-	if (!rxq->bd)
-		return -ENOMEM;
-
-	/* Fill the rx_used queue with _all_ of the Rx buffers */
-	for (i = 0; i < RX_FREE_BUFFERS + RX_QUEUE_SIZE; i++)
-		list_add_tail(&rxq->pool[i].list, &rxq->rx_used);
-
-	/* Set us so that we have processed and used all buffers, but have
-	 * not restocked the Rx queue with fresh buffers */
-	rxq->read = rxq->write = 0;
-	rxq->free_count = 0;
-	rxq->need_update = 0;
-	return 0;
-}
-
-void iwl3945_rx_queue_reset(struct iwl_priv *priv, struct iwl_rx_queue *rxq)
-{
-	unsigned long flags;
-	int i;
-	spin_lock_irqsave(&rxq->lock, flags);
-	INIT_LIST_HEAD(&rxq->rx_free);
-	INIT_LIST_HEAD(&rxq->rx_used);
-	/* Fill the rx_used queue with _all_ of the Rx buffers */
-	for (i = 0; i < RX_FREE_BUFFERS + RX_QUEUE_SIZE; i++) {
-		/* In the reset function, these buffers may have been allocated
-		 * to an SKB, so we need to unmap and free potential storage */
-		if (rxq->pool[i].skb != NULL) {
-			pci_unmap_single(priv->pci_dev,
-					 rxq->pool[i].real_dma_addr,
-					 IWL_RX_BUF_SIZE, PCI_DMA_FROMDEVICE);
-			priv->alloc_rxb_skb--;
-			dev_kfree_skb(rxq->pool[i].skb);
-			rxq->pool[i].skb = NULL;
-		}
-		list_add_tail(&rxq->pool[i].list, &rxq->rx_used);
-	}
-
-	/* Set us so that we have processed and used all buffers, but have
-	 * not restocked the Rx queue with fresh buffers */
-	rxq->read = rxq->write = 0;
-	rxq->free_count = 0;
-	spin_unlock_irqrestore(&rxq->lock, flags);
-}
-
 /* Convert linear signal-to-noise ratio into dB */
 static u8 ratio2dB[100] = {
 /*	 0   1   2   3   4   5   6   7   8   9 */
@@ -7746,7 +7667,7 @@ static void __devexit iwl3945_pci_remove(struct pci_dev *pdev)
 	iwl3945_dealloc_ucode_pci(priv);
 
 	if (priv->rxq.bd)
-		iwl3945_rx_queue_free(priv, &priv->rxq);
+		iwl_rx_queue_free(priv, &priv->rxq);
 	iwl3945_hw_txq_ctx_free(priv);
 
 	iwl3945_unset_hw_params(priv);
-- 
1.5.3.6


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [PATCH 01/10] iwl3945: rearrange 3945 tfd
  2008-12-22  3:31 ` [PATCH 01/10] iwl3945: rearrange 3945 tfd Zhu Yi
  2008-12-22  3:31   ` [PATCH 02/10] iwl3945: adding utils ops Zhu Yi
@ 2008-12-22  3:55   ` Harvey Harrison
  1 sibling, 0 replies; 18+ messages in thread
From: Harvey Harrison @ 2008-12-22  3:55 UTC (permalink / raw)
  To: Zhu Yi; +Cc: linville, linux-wireless, ipw3945-devel, Winkler, Tomas

A few small things I noticed:

On Mon, 2008-12-22 at 11:31 +0800, Zhu Yi wrote:
> From: Winkler, Tomas <tomas.winkler@intel.com>
> diff --git a/drivers/net/wireless/iwlwifi/iwl-3945-fh.h b/drivers/net/wireless/iwlwifi/iwl-3945-fh.h
> index bbcd0ce..53ed249 100644
> --- a/drivers/net/wireless/iwlwifi/iwl-3945-fh.h
> +++ b/drivers/net/wireless/iwlwifi/iwl-3945-fh.h
> @@ -172,7 +172,17 @@
>  
>  #define FH39_RSSR_CHNL0_RX_STATUS_CHNL_IDLE			(0x01000000)
>  
> -#define TFD_QUEUE_SIZE_MAX      (256)
> +struct iwl3945_tfd_tb {
> +	__le32 addr;
> +	__le32 len;
> +} __attribute__ ((packed));
> +
> +struct iwl3945_tfd {
> +	__le32 control_flags;
> +	struct iwl3945_tfd_tb tbs[4];
> +	u8 __pad[28];
> +} __attribute__ ((packed));
> +

Packed doesn't really buy anything with these two structs, if you still
want it, you can also use plain __packed (see compiler-gcc.h)

>  static inline u8 iwl3945_hw_get_rate(__le16 rate_n_flags)
>  {
>  	return le16_to_cpu(rate_n_flags) & 0xFF;
> diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.c b/drivers/net/wireless/iwlwifi/iwl-3945.c
> index 131bae7..24cdc5c 100644
> --- a/drivers/net/wireless/iwlwifi/iwl-3945.c
> +++ b/drivers/net/wireless/iwlwifi/iwl-3945.c
> @@ -38,6 +38,7 @@
>  #include <asm/unaligned.h>
>  #include <net/mac80211.h>
>  
> +#include "iwl-fh.h"
>  #include "iwl-3945-fh.h"
>  #include "iwl-commands.h"
>  #include "iwl-3945.h"
> @@ -307,7 +308,7 @@ static void iwl3945_tx_queue_reclaim(struct iwl_priv *priv,
>  {
>  	struct iwl3945_tx_queue *txq = &priv->txq39[txq_id];
>  	struct iwl_queue *q = &txq->q;
> -	struct iwl3945_tx_info *tx_info;
> +	struct iwl_tx_info *tx_info;
>  
>  	BUG_ON(txq_id == IWL_CMD_QUEUE_NUM);
>  
> @@ -728,7 +729,7 @@ int iwl3945_hw_txq_attach_buf_to_tfd(struct iwl_priv *priv, void *ptr,
>  {
>  	int count;
>  	u32 pad;
> -	struct iwl3945_tfd_frame *tfd = (struct iwl3945_tfd_frame *)ptr;
> +	struct iwl3945_tfd *tfd = (struct iwl3945_tfd *)ptr;

void pointer, no cast needed (although maybe that should get cleaned up.

Cheers,

Harvey


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 10/10] iwl3945: use rx queue management infrastructure from iwlcore
  2008-12-22  3:31                   ` [PATCH 10/10] iwl3945: use rx queue management infrastructure from iwlcore Zhu Yi
@ 2008-12-22 14:07                     ` Kalle Valo
  2008-12-23  2:58                       ` Zhu Yi
  0 siblings, 1 reply; 18+ messages in thread
From: Kalle Valo @ 2008-12-22 14:07 UTC (permalink / raw)
  To: Zhu Yi; +Cc: linville, linux-wireless, ipw3945-devel, Winkler, Tomas

Zhu Yi <yi.zhu@intel.com> writes:

> From: Winkler, Tomas <tomas.winkler@intel.com>
>
> This patch uses rx queue alloc free and reset function from iwlcore.
> This should fix the regression reported by Kalle Valo.

Yes, ifconfig up works but now iwlist wlan0 scan crashes. I just
tested this once due to lack of time.

I hope I get my wifi working before Christmas ;)

[18031.912914] iwl3945: Intel(R) PRO/Wireless 3945ABG/BG Network Connection driver for Linux, 1.2.26kd
[18031.912929] iwl3945: Copyright(c) 2003-2008 Intel Corporation
[18031.913084] iwl3945 0000:03:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17
[18031.972027] iwl3945 0000:03:00.0: Tunable channels: 13 802.11bg, 23 802.11a channels
[18031.972043] iwl3945 0000:03:00.0: Detected Intel Wireless WiFi Link 3945ABG
[18068.633607] iwl3945 0000:03:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17
[18068.634164] iwl3945 0000:03:00.0: firmware: requesting iwlwifi-3945-2.ucode
[18068.758728] iwl3945 0000:03:00.0: iwlwifi-3945-2.ucode firmware file req failed: -2
[18068.758746] iwl3945 0000:03:00.0: firmware: requesting iwlwifi-3945-1.ucode
[18068.803611] iwl3945 0000:03:00.0: Loaded firmware iwlwifi-3945-1.ucode, which is deprecated.  Please use API v2 instead.
[18068.803629] iwl3945 0000:03:00.0: Firmware has old API version. Expected 2, got 1. New firmware can be obtained from http://www.intellinuxwireless.org.
[18068.803638] iwl3945 0000:03:00.0: loaded firmware version 15.28.1.6
[18068.864814] Registered led device: iwl-phy1:radio
[18068.864869] Registered led device: iwl-phy1:assoc
[18068.864916] Registered led device: iwl-phy1:RX
[18068.864958] Registered led device: iwl-phy1:TX
[18068.895330] ADDRCONF(NETDEV_UP): wlan0: link is not ready
[18074.727526] BUG: unable to handle kernel NULL pointer dereference at 00000980
[18074.727549] IP: [<f9a3ee5c>] iwl_enqueue_hcmd+0x155/0x3a2 [iwlcore]
[18074.727583] *pde = 00000000 
[18074.727593] Oops: 0002 [#1] SMP 
[18074.727605] last sysfs file: /sys/class/firmware/0000:03:00.0/loading
[18074.727611] Modules linked in: iwl3945 iwlcore netconsole configfs cdc_acm cdc_ether usbnet mii pl2303 usbserial i915 drm rfcomm l2cap cpufreq_ondemand binfmt_misc ipv6 fuse acpi_cpufreq freq_table loop snd_hda_intel snd_pcm arc4 ecb snd_seq snd_timer snd_seq_device snd mac80211 thinkpad_acpi hci_usb soundcore pcmcia rfkill lib80211 video backlight i2c_i801 psmouse pcspkr cfg80211 bluetooth yenta_socket rsrc_nonstatic pcmcia_core snd_page_alloc rng_core output led_class battery ac nvram ext3 aes_i586 dm_mirror dm_region_hash dm_mod sd_mod ide_pci_generic sdhci ehci_hcd e1000e processor [last unloaded: iwlcore][18074.727916] Pid: 0, comm: swapper Not tainted (2.6.28-rc9-wl #105) 1703Y1F
[18074.727924] EIP: 0060:[<f9a3ee5c>] EFLAGS: 00010002 CPU: 0
[18074.727949] EIP is at iwl_enqueue_hcmd+0x155/0x3a2 [iwlcore]
[18074.727963] ESI: 00000000 EDI: 00000980 EBP: c03b1d80 ESP: c03b1d40
[18074.727970]  DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
[18074.727977] Process swapper (pid: 0, ti=c03b0000 task=c037732c task.ti=c03b0000)
 eebc148c c011a998 c03b1d60
 f2689c00 c03b1dac[18074.728049]  f9a3a8ef cea6b0fc d55555d5[18074.728084] Call Trace:
[18074.728089]  [<f9a3a8ef>] ? iwl_send_cmd_async+0x44/0x8a [iwlcore]
[18074.728136]  [<f9a3ae4c>] ? iwl_send_cmd+0xe/0x1a [iwlcore]
 [<f9a47656>] ? iwl4965_led_pattern+0x156/0x15e [iwlcore]
[18074.728192]  [<f9a3a982>] ? iwl_generic_cmd_callback+0x0/0x108 [iwlcore]
[18074.728220]  [<f9a47917>] ? iwl_leds_background+0x66/0x207 [iwlcore]
[18074.728249]  [<f9b65ae5>] ? iwl3945_hw_rx_statistics+0x92/0xa9 [iwl3945]
 [<f9b5a41d>] ? iwl3945_irq_tasklet+0x863/0x1058 [iwl3945]
[18074.728297]  [<c01373aa>] ? update_wall_time+0x5e1/0x712
[18074.728312]  [<c0125cf9>] ? irq_exit+0x38/0x6d
 [<c010502d>] ? do_IRQ+0x6f/0x86
 [<c01039f3>] ? common_interrupt+0x23/0x28
[18074.728390]  [<c01e7918>] ? acpi_os_release_lock+0x8/0xa
[18074.728435]  [<f806bf80>] ? acpi_idle_enter_bm+0xca/0x35a [processor]
[18074.728457]  [<c0240839>] ? cpuidle_idle_call+0x60/0x93
 [<c0101f60>] ? cpu_idle+0x6b/0x87
 [<c02935ca>] ? rest_init+0x4e/0x50
f0 2c 86 c0 4d 45 f0 8b 00 8b 38 00 00 01 b9 89 55 d4 ab c0 0c 01 38 00 8b 00 00 iwl_enqueue_hcmd+0x155/0x3a2 [iwlcore][18074.728457] Kernel panic - not syncing: Fatal exception in interrupt
[18074.728457] ------------[ cut here ]------------
[18074.728457] WARNING: at kernel/smp.c:333 smp_call_function_mask+0x28/0x17d()
[18074.728457] Modules linked in: iwl3945 configfs cdc_acm usbnet usbserial rfcomm l2cap fuse loop arc4 snd_seq mac80211 soundcore pcmcia rfkill i2c_i801 pcspkr yenta_socket snd_page_alloc rng_core led_class ac jbd mbcache sha256_generic dm_crypt dm_log dm_mod sd_mod ata_generic ide_pci_generic ide_core uhci_hcd usbcore fan
[18074.728457] Pid: 0, comm: swapper Tainted: G      D    2.6.28-rc9-wl #105
[18074.728457]  [<c029f7fb>] ? printk+0xf/0x14
[18074.728457]  [<c01219a3>] warn_on_slowpath+0x41/0x63
[18074.728457]  [<c025a4f2>] ? netpoll_send_udp+0x1e8/0x1f2
[18074.728457]  [<f96f8178>] ? write_msg+0xb1/0xb9 [netconsole]
[18074.728457]  [<c013dd9c>] smp_call_function_mask+0x28/0x17d
[18074.728457]  [<c01100c7>] ? stop_this_cpu+0x0/0x36
[18074.728457]  [<c01100ba>] native_smp_send_stop+0x1b/0x28
[18074.728457]  [<c029f759>] panic+0x41/0xd4
[18074.728457]  [<c0105703>] die+0x5b/0x63
[18074.728457]  [<c0115e45>] do_page_fault+0x549/0x63c
[18074.728457]  [<c011d49f>] ? default_wake_function+0xb/0xd
[18074.728457]  [<c01317fe>] ? autoremove_wake_function+0xf/0x33
[18074.728457]  [<c0131858>] ? wake_bit_function+0x36/0x43
[18074.728457]  [<c01196e4>] ? __wake_up_common+0x35/0x5b
[18074.728457]  [<c0131788>] ? __wake_up_bit+0x2c/0x32
[18074.728457]  [<c014ebe9>] ? mempool_free+0x64/0x6b
[18074.728457]  [<c014ea00>] ? mempool_free_slab+0xe/0x10
[18074.728457]  [<c014ebe9>] ? mempool_free+0x64/0x6b
[18074.728457]  [<c01158fc>] ? do_page_fault+0x0/0x63c
[18074.728457]  [<c01400d8>] ? load_module+0x6dd/0x1908
[18074.728457]  [<f9a3ee5c>] ? iwl_enqueue_hcmd+0x155/0x3a2 [iwlcore]
[18074.728457]  [<c011a998>] ? enqueue_task_fair+0x131/0x17a
[18074.728457]  [<f9a3ae4c>] iwl_send_cmd+0xe/0x1a [iwlcore]
[18074.728457]  [<f9a47656>] iwl4965_led_pattern+0x156/0x15e [iwlcore]
[18074.728457]  [<f9a3a982>] ? iwl_generic_cmd_callback+0x0/0x108 [iwlcore]
[18074.728457]  [<f9a47917>] iwl_leds_background+0x66/0x207 [iwlcore]
[18074.728457]  [<f9b65ae5>] iwl3945_hw_rx_statistics+0x92/0xa9 [iwl3945]
[18074.728457]  [<c01373aa>] ? update_wall_time+0x5e1/0x712
[18074.728457]  [<c012555d>] tasklet_action+0x61/0xac
[18074.728457]  [<c0125bf4>] do_softirq+0x35/0x3a
[18074.728457]  [<c010502d>] do_IRQ+0x6f/0x86
[18074.728457]  [<f806c3a8>] ? acpi_idle_enter_simple+0x198/0x205 [processor]
[18074.728457]  [<c01e7918>] ? acpi_os_release_lock+0x8/0xa
[18074.728457]  [<f806bf80>] acpi_idle_enter_bm+0xca/0x35a [processor]
[18074.728457]  [<c024125e>] ? menu_select+0x38/0x86
[18074.728457]  [<c0240839>] cpuidle_idle_call+0x60/0x93
[18074.728457]  [<c02935ca>] rest_init+0x4e/0x50
[18074.728457] ------------[ cut here ]------------
[18074.728457] WARNING: at kernel/smp.c:220 smp_call_function_single+0x2d/0x9c()
[18074.728457] Modules linked in: iwl3945 cdc_acm mii i915 drm binfmt_misc fuse freq_table snd_pcm arc4 ecb snd thinkpad_acpi soundcore pcmcia backlight psmouse bluetooth rsrc_nonstatic pcmcia_core battery button ext3 jbd mbcache cbc dm_region_hash dm_snapshot dm_mod libata ide_pci_generic sdhci_pci sdhci ehci_hcd ide_core usbcore processor fan
[18074.728457] Pid: 0, comm: swapper Tainted: G      D W  2.6.28-rc9-wl #105
[18074.728457] Call Trace:
[18074.728457]  [<c029f7fb>] ? printk+0xf/0x14
[18074.728457]  [<c01219a3>] warn_on_slowpath+0x41/0x63
[18074.728457]  [<c02a1abf>] ? _spin_unlock+0x8/0xa
[18074.728457]  [<c025a4f2>] ? netpoll_send_udp+0x1e8/0x1f2
[18074.728457]  [<f96f8178>] ? write_msg+0xb1/0xb9 [netconsole]
[18074.728457]  [<c013dd05>] smp_call_function_single+0x2d/0x9c
[18074.728457]  [<c013ddeb>] smp_call_function_mask+0x77/0x17d
[18074.728457]  [<c01100c7>] ? stop_this_cpu+0x0/0x36
[18074.728457]  [<c01100ba>] native_smp_send_stop+0x1b/0x28
[18074.728457]  [<c0105158>] oops_end+0x5d/0x71
[18074.728457]  [<c0115e45>] do_page_fault+0x549/0x63c
[18074.728457]  [<c011d49f>] ? default_wake_function+0xb/0xd
[18074.728457]  [<c0131858>] ? wake_bit_function+0x36/0x43
[18074.728457]  [<c01196e4>] ? __wake_up_common+0x35/0x5b
[18074.728457]  [<c0119db3>] ? __wake_up+0x31/0x3b
[18074.728457]  [<c014ea00>] ? mempool_free_slab+0xe/0x10
[18074.728457]  [<c01895b2>] ? bio_free+0x31/0x35
[18074.728457]  [<c014ea00>] ? mempool_free_slab+0xe/0x10
[18074.728457]  [<c01158fc>] ? do_page_fault+0x0/0x63c
[18074.728457]  [<c01400d8>] ? load_module+0x6dd/0x1908
[18074.728457]  [<f9a3ee5c>] ? iwl_enqueue_hcmd+0x155/0x3a2 [iwlcore]
[18074.728457]  [<c011a998>] ? enqueue_task_fair+0x131/0x17a
[18074.728457]  [<f9a3a8ef>] iwl_send_cmd_async+0x44/0x8a [iwlcore]
[18074.728457]  [<f9a47656>] iwl4965_led_pattern+0x156/0x15e [iwlcore]
[18074.728457]  [<f9a3a982>] ? iwl_generic_cmd_callback+0x0/0x108 [iwlcore]
[18074.728457]  [<f9a47917>] iwl_leds_background+0x66/0x207 [iwlcore]
[18074.728457]  [<f9b65ae5>] iwl3945_hw_rx_statistics+0x92/0xa9 [iwl3945]
[18074.728457]  [<f9b5a41d>] iwl3945_irq_tasklet+0x863/0x1058 [iwl3945]
[18074.728457]  [<c01373aa>] ? update_wall_time+0x5e1/0x712
[18074.728457]  [<c012555d>] tasklet_action+0x61/0xac
[18074.728457]  [<c0125bf4>] do_softirq+0x35/0x3a
[18074.728457]  [<c010502d>] do_IRQ+0x6f/0x86
[18074.728457]  [<f806c3a8>] ? acpi_idle_enter_simple+0x198/0x205 [processor]
[18074.728457]  [<c01e7918>] ? acpi_os_release_lock+0x8/0xa
[18074.728457]  [<f806bf80>] acpi_idle_enter_bm+0xca/0x35a [processor]
[18074.728457]  [<c0240839>] cpuidle_idle_call+0x60/0x93
[18074.728457]  [<c0101f60>] cpu_idle+0x6b/0x87
[18074.728457] ---[ end trace 7a31e9607358195d ]---

-- 
Kalle Valo

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 10/10] iwl3945: use rx queue management infrastructure from iwlcore
  2008-12-22 14:07                     ` Kalle Valo
@ 2008-12-23  2:58                       ` Zhu Yi
  2008-12-23  7:39                         ` Sedat Dilek
                                           ` (2 more replies)
  0 siblings, 3 replies; 18+ messages in thread
From: Zhu Yi @ 2008-12-23  2:58 UTC (permalink / raw)
  To: Kalle Valo
  Cc: linville@tuxdriver.com, linux-wireless@vger.kernel.org,
	ipw3945-devel@lists.sourceforge.net, Winkler, Tomas

On Mon, 2008-12-22 at 22:07 +0800, Kalle Valo wrote:
> Yes, ifconfig up works but now iwlist wlan0 scan crashes. I just
> tested this once due to lack of time.
> 
> I hope I get my wifi working before Christmas ;)

http://marc.info/?l=linux-wireless&m=123000088608330&w=2 should fix the
problem. Thanks a lot for your testing.

Thanks,
-yi


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 10/10] iwl3945: use rx queue management infrastructure from iwlcore
  2008-12-23  2:58                       ` Zhu Yi
@ 2008-12-23  7:39                         ` Sedat Dilek
  2008-12-23 12:49                         ` Sedat Dilek
  2008-12-23 20:43                         ` Kalle Valo
  2 siblings, 0 replies; 18+ messages in thread
From: Sedat Dilek @ 2008-12-23  7:39 UTC (permalink / raw)
  To: Zhu Yi
  Cc: Kalle Valo, linville@tuxdriver.com,
	linux-wireless@vger.kernel.org,
	ipw3945-devel@lists.sourceforge.net, Winkler, Tomas

Hiho,

No Xmas-bells ringing here.

I applied the patch-series 01/10 till 10/10 and afterwards I reverted
04_10_iwl3945-remove-iwl-3945-led.[ch].patch with Yi's revert-patch.

On the first sight, everything seems OK.
iwlist, wpa_cli gave the expected values back, but there is no DNS
resolved properly, e.g. ping.
This new state is also not usable for me :-).

What does this mean?
[...]
/var/log/syslog:Dec 23 08:18:05 seduxbox kernel: mac80211-phy0: failed
to set key (2, ff:ff:ff:ff:ff:ff) to hardware (-22)
[...]
Do I need any mac80211-patches additionally?

The file exists:
$ ls -l /lib/modules/2.6.28-rc9-git3-wl-gcc44/kernel/drivers/crypto/padlock-aes.ko
-rw-r--r-- 1 root root 11724 2008-12-23 07:46
/lib/modules/2.6.28-rc9-git3-wl-gcc44/kernel/drivers/crypto/padlock-aes.ko

Kind Regards,
Sedat

----- Investigations -----

[...]
/var/log/syslog-Dec 23 08:18:05 seduxbox kernel: EXT4-fs: mounted
filesystem with ordered data mode.
/var/log/syslog-Dec 23 08:18:05 seduxbox kernel: kjournald starting.
Commit interval 5 seconds
/var/log/syslog-Dec 23 08:18:05 seduxbox kernel: EXT3 FS on sda6,
internal journal
/var/log/syslog-Dec 23 08:18:05 seduxbox kernel: EXT3-fs: mounted
filesystem with ordered data mode.
/var/log/syslog-Dec 23 08:18:05 seduxbox kernel: iwl3945 0000:10:00.0:
PCI INT A -> GSI 17 (level, low) -> IRQ 17
/var/log/syslog-Dec 23 08:18:05 seduxbox kernel: iwl3945 0000:10:00.0:
restoring config space at offset 0x1 (was 0x100002, writing 0x100006)
/var/log/syslog-Dec 23 08:18:05 seduxbox kernel: iwl3945 0000:10:00.0:
irq 1274 for MSI/MSI-X
/var/log/syslog-Dec 23 08:18:05 seduxbox kernel: iwl3945 0000:10:00.0:
firmware: requesting iwlwifi-3945-2.ucode
/var/log/syslog-Dec 23 08:18:05 seduxbox kernel: iwl3945 0000:10:00.0:
loaded firmware version 15.28.2.8
/var/log/syslog-Dec 23 08:18:05 seduxbox kernel: Registered led
device: iwl-phy0:radio
/var/log/syslog-Dec 23 08:18:05 seduxbox kernel: Registered led
device: iwl-phy0:assoc
/var/log/syslog-Dec 23 08:18:05 seduxbox kernel: Registered led
device: iwl-phy0:RX
/var/log/syslog-Dec 23 08:18:05 seduxbox kernel: Registered led
device: iwl-phy0:TX
/var/log/syslog-Dec 23 08:18:05 seduxbox kernel: NET: Registered
protocol family 17
/var/log/syslog-Dec 23 08:18:05 seduxbox kernel: NET: Registered
protocol family 10
/var/log/syslog-Dec 23 08:18:05 seduxbox kernel: lo: Disabled Privacy Extensions
/var/log/syslog-Dec 23 08:18:05 seduxbox kernel: ADDRCONF(NETDEV_UP):
wlan0: link is not ready
/var/log/syslog-Dec 23 08:18:05 seduxbox kernel: wlan0: authenticate
with AP 00:1c:4a:41:62:2e
/var/log/syslog-Dec 23 08:18:05 seduxbox kernel: wlan0: authenticated
/var/log/syslog-Dec 23 08:18:05 seduxbox kernel: wlan0: associate with
AP 00:1c:4a:41:62:2e
/var/log/syslog-Dec 23 08:18:05 seduxbox kernel: wlan0: RX AssocResp
from 00:1c:4a:41:62:2e (capab=0x411 status=0 aid=1)
/var/log/syslog-Dec 23 08:18:05 seduxbox kernel: wlan0: associated
/var/log/syslog-Dec 23 08:18:05 seduxbox kernel:
ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
/var/log/syslog-Dec 23 08:18:05 seduxbox kernel: padlock: VIA PadLock
not detected.
/var/log/syslog-Dec 23 08:18:05 seduxbox modprobe: WARNING: Error
inserting padlock_aes
(/lib/modules/2.6.28-rc9-git3-wl-gcc44/kernel/drivers/crypto/padlock-aes.ko):
No such device
/var/log/syslog:Dec 23 08:18:05 seduxbox kernel: mac80211-phy0: failed
to set key (2, ff:ff:ff:ff:ff:ff) to hardware (-22)
[...]

On Tue, Dec 23, 2008 at 3:58 AM, Zhu Yi <yi.zhu@intel.com> wrote:
> On Mon, 2008-12-22 at 22:07 +0800, Kalle Valo wrote:
>> Yes, ifconfig up works but now iwlist wlan0 scan crashes. I just
>> tested this once due to lack of time.
>>
>> I hope I get my wifi working before Christmas ;)
>
> http://marc.info/?l=linux-wireless&m=123000088608330&w=2 should fix the
> problem. Thanks a lot for your testing.
>
> Thanks,
> -yi
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 10/10] iwl3945: use rx queue management infrastructure from iwlcore
  2008-12-23  2:58                       ` Zhu Yi
  2008-12-23  7:39                         ` Sedat Dilek
@ 2008-12-23 12:49                         ` Sedat Dilek
  2008-12-23 20:43                         ` Kalle Valo
  2 siblings, 0 replies; 18+ messages in thread
From: Sedat Dilek @ 2008-12-23 12:49 UTC (permalink / raw)
  To: Zhu Yi
  Cc: Kalle Valo, linville@tuxdriver.com,
	linux-wireless@vger.kernel.org,
	ipw3945-devel@lists.sourceforge.net, Winkler, Tomas

The same error-message and as described before no DNS is resolved with
latest iwlwifi-2.6.git, also.
I added info about wpa_supplicant version I am using, maybe this is important.

-SD

----- Investigations -----

[...]
/var/log/syslog:Dec 23 10:05:35 seduxbox kernel: mac80211-phy0: failed
to set key (1, ff:ff:ff:ff:ff:ff) to hardware (-22)
[...]

# env COLUMNS=180 dpkg -l | grep linux-image | grep 2.6.28-rc9
ii  linux-image-2.6.28-rc9-git3-wl-gcc44
2.6.28~rc9+git3+wl~git20081219.30b5741+ Linux kernel binary image for
version 2.6.28-rc9-git3-wl-gcc44
ii  linux-image-2.6.28-rc9-iwlwifi26-gcc44
2.6.28~rc9+iwlwifi26~git20081223.f4f5c9 Linux kernel binary image for
version 2.6.28-rc9-iwlwifi26-gcc44

# env COLUMNS=120 dpkg -l | grep wpa
ii  wpagui                   0.6.6-1+c0.sidux.1       graphical user
interface for wpa_supplicant
ii  wpasupplicant            0.6.6-1+c0.sidux.1       client support
for WPA and WPA2 (IEEE 802.11i)

root@seduxbox:~# modprobe -r -v iwl3945
rmmod /lib/modules/2.6.28-rc9-iwlwifi26-gcc44/kernel/drivers/net/wireless/iwlwifi/iwl3945.ko
rmmod /lib/modules/2.6.28-rc9-iwlwifi26-gcc44/kernel/drivers/net/wireless/iwlwifi/iwlcore.ko
rmmod /lib/modules/2.6.28-rc9-iwlwifi26-gcc44/kernel/net/mac80211/mac80211.ko
rmmod /lib/modules/2.6.28-rc9-iwlwifi26-gcc44/kernel/net/rfkill/rfkill.ko
rmmod /lib/modules/2.6.28-rc9-iwlwifi26-gcc44/kernel/drivers/leds/led-class.ko
rmmod /lib/modules/2.6.28-rc9-iwlwifi26-gcc44/kernel/net/wireless/cfg80211.ko
root@seduxbox:~# modprobe -v iwl3945 debug=0x43fff
insmod /lib/modules/2.6.28-rc9-iwlwifi26-gcc44/kernel/net/wireless/cfg80211.ko
insmod /lib/modules/2.6.28-rc9-iwlwifi26-gcc44/kernel/drivers/leds/led-class.ko
insmod /lib/modules/2.6.28-rc9-iwlwifi26-gcc44/kernel/net/rfkill/rfkill.ko
insmod /lib/modules/2.6.28-rc9-iwlwifi26-gcc44/kernel/net/mac80211/mac80211.ko
insmod /lib/modules/2.6.28-rc9-iwlwifi26-gcc44/kernel/drivers/net/wireless/iwlwifi/iwlcore.ko
insmod /lib/modules/2.6.28-rc9-iwlwifi26-gcc44/kernel/drivers/net/wireless/iwlwifi/iwl3945.ko
debug=0x43fff

root@seduxbox:~# ping www.heise.de
ping: unknown host www.heise.de

root@seduxbox:~# cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

auto wlan0
iface wlan0 inet static
	address 192.168.2.103
	broadcast 192.168.2.255
	dns-nameservers 192.168.2.1 217.237.151.142 217.237.150.188
	gateway 192.168.2.1
	netmask 255.255.255.0
	network 192.168.2.0
	wpa-psk <mySecretPassword>
	wpa-ssid WLAN-001C4A41622E

root@seduxbox:~# lsmod | grep iwl
iwl3945                82308  0
iwlcore                85248  1 iwl3945
mac80211              139048  2 iwl3945,iwlcore
rfkill                 14004  3 iwl3945,iwlcore
led_class               7812  2 iwl3945,iwlcore
cfg80211               36888  3 iwl3945,iwlcore,mac80211

root@seduxbox:~# tail -f /var/log/messages
Dec 23 13:31:06 seduxbox kernel: reserve_memtype failed
0xd8000000-0xdc000000, track write-combining, req write-combining
Dec 23 13:31:06 seduxbox kernel: Xorg:5236 conflicting memory types
d8000000-dc000000 write-combining<->uncached-minus
Dec 23 13:31:06 seduxbox kernel: reserve_memtype failed
0xd8000000-0xdc000000, track write-combining, req write-combining
Dec 23 13:31:06 seduxbox kernel: Xorg:5254 freeing invalid memtype
d8000000-dc000000
Dec 23 13:31:07 seduxbox kernel: Xorg:5236 conflicting memory types
d8000000-dc000000 write-combining<->uncached-minus
Dec 23 13:31:07 seduxbox kernel: reserve_memtype failed
0xd8000000-0xdc000000, track write-combining, req write-combining
Dec 23 13:31:07 seduxbox kernel: Xorg:5258 freeing invalid memtype
d8000000-dc000000
Dec 23 13:31:19 seduxbox kernel: ADDRCONF(NETDEV_CHANGE): wlan0: link
becomes ready
Dec 23 13:31:20 seduxbox kernel: padlock: VIA PadLock not detected.
Dec 23 13:32:22 seduxbox kernel: iwl3945 0000:10:00.0: PCI INT A disabled
Dec 23 13:32:49 seduxbox kernel: cfg80211: Using static regulatory domain info
Dec 23 13:32:49 seduxbox kernel: cfg80211: Regulatory domain: US
Dec 23 13:32:49 seduxbox kernel: 	(start_freq - end_freq @ bandwidth),
(max_antenna_gain, max_eirp)
Dec 23 13:32:49 seduxbox kernel: 	(2402000 KHz - 2472000 KHz @ 40000
KHz), (600 mBi, 2700 mBm)
Dec 23 13:32:49 seduxbox kernel: 	(5170000 KHz - 5190000 KHz @ 40000
KHz), (600 mBi, 2300 mBm)
Dec 23 13:32:49 seduxbox kernel: 	(5190000 KHz - 5210000 KHz @ 40000
KHz), (600 mBi, 2300 mBm)
Dec 23 13:32:49 seduxbox kernel: 	(5210000 KHz - 5230000 KHz @ 40000
KHz), (600 mBi, 2300 mBm)
Dec 23 13:32:49 seduxbox kernel: 	(5230000 KHz - 5330000 KHz @ 40000
KHz), (600 mBi, 2300 mBm)
Dec 23 13:32:49 seduxbox kernel: 	(5735000 KHz - 5835000 KHz @ 40000
KHz), (600 mBi, 3000 mBm)
Dec 23 13:32:49 seduxbox kernel: cfg80211: Calling CRDA for country: US
Dec 23 13:32:50 seduxbox kernel: iwl3945: Intel(R) PRO/Wireless
3945ABG/BG Network Connection driver for Linux, 1.2.26ks
Dec 23 13:32:50 seduxbox kernel: iwl3945: Copyright(c) 2003-2008 Intel
Corporation
Dec 23 13:32:50 seduxbox kernel: iwl3945 0000:10:00.0: PCI INT A ->
GSI 17 (level, low) -> IRQ 17
Dec 23 13:32:50 seduxbox kernel: iwl3945 0000:10:00.0: Tunable
channels: 13 802.11bg, 23 802.11a channels
Dec 23 13:32:50 seduxbox kernel: iwl3945 0000:10:00.0: Detected Intel
Wireless WiFi Link 3945ABG
Dec 23 13:32:50 seduxbox kernel: iwl3945 0000:10:00.0: PCI INT A ->
GSI 17 (level, low) -> IRQ 17
Dec 23 13:32:50 seduxbox kernel: iwl3945 0000:10:00.0: firmware:
requesting iwlwifi-3945-2.ucode
Dec 23 13:32:50 seduxbox kernel: iwl3945 0000:10:00.0: loaded firmware
version 15.28.2.8
Dec 23 13:32:50 seduxbox kernel: Registered led device: iwl-phy0:radio
Dec 23 13:32:50 seduxbox kernel: Registered led device: iwl-phy0:assoc
Dec 23 13:32:50 seduxbox kernel: Registered led device: iwl-phy0:RX
Dec 23 13:32:50 seduxbox kernel: Registered led device: iwl-phy0:TX
Dec 23 13:32:50 seduxbox kernel: ADDRCONF(NETDEV_UP): wlan0: link is not ready
Dec 23 13:32:53 seduxbox kernel: ADDRCONF(NETDEV_CHANGE): wlan0: link
becomes ready

root@seduxbox:~# tail -50 /var/log/kern.log
Dec 23 13:31:07 seduxbox kernel: reserve_memtype failed
0xd8000000-0xdc000000, track write-combining, req write-combining
Dec 23 13:31:07 seduxbox kernel: Xorg:5258 freeing invalid memtype
d8000000-dc000000
Dec 23 13:31:19 seduxbox kernel: wlan0: authenticate with AP 00:1c:4a:41:62:2e
Dec 23 13:31:19 seduxbox kernel: wlan0: authenticated
Dec 23 13:31:19 seduxbox kernel: wlan0: associate with AP 00:1c:4a:41:62:2e
Dec 23 13:31:19 seduxbox kernel: wlan0: RX AssocResp from
00:1c:4a:41:62:2e (capab=0x411 status=0 aid=1)
Dec 23 13:31:19 seduxbox kernel: wlan0: associated
Dec 23 13:31:19 seduxbox kernel: ADDRCONF(NETDEV_CHANGE): wlan0: link
becomes ready
Dec 23 13:31:20 seduxbox kernel: padlock: VIA PadLock not detected.
Dec 23 13:31:20 seduxbox kernel: mac80211-phy0: failed to set key (2,
ff:ff:ff:ff:ff:ff) to hardware (-22)
Dec 23 13:31:29 seduxbox kernel: wlan0: no IPv6 routers present
Dec 23 13:32:22 seduxbox kernel: wlan0: deauthenticating by local
choice (reason=3)
Dec 23 13:32:22 seduxbox kernel: iwl3945 0000:10:00.0: MAC is in deep sleep!
Dec 23 13:32:22 seduxbox kernel: iwl3945 0000:10:00.0: MAC is in deep sleep!
Dec 23 13:32:22 seduxbox kernel: iwl3945 0000:10:00.0: MAC is in deep sleep!
Dec 23 13:32:22 seduxbox kernel: iwl3945 0000:10:00.0: PCI INT A disabled
Dec 23 13:32:49 seduxbox kernel: cfg80211: Using static regulatory domain info
Dec 23 13:32:49 seduxbox kernel: cfg80211: Regulatory domain: US
Dec 23 13:32:49 seduxbox kernel: 	(start_freq - end_freq @ bandwidth),
(max_antenna_gain, max_eirp)
Dec 23 13:32:49 seduxbox kernel: 	(2402000 KHz - 2472000 KHz @ 40000
KHz), (600 mBi, 2700 mBm)
Dec 23 13:32:49 seduxbox kernel: 	(5170000 KHz - 5190000 KHz @ 40000
KHz), (600 mBi, 2300 mBm)
Dec 23 13:32:49 seduxbox kernel: 	(5190000 KHz - 5210000 KHz @ 40000
KHz), (600 mBi, 2300 mBm)
Dec 23 13:32:49 seduxbox kernel: 	(5210000 KHz - 5230000 KHz @ 40000
KHz), (600 mBi, 2300 mBm)
Dec 23 13:32:49 seduxbox kernel: 	(5230000 KHz - 5330000 KHz @ 40000
KHz), (600 mBi, 2300 mBm)
Dec 23 13:32:49 seduxbox kernel: 	(5735000 KHz - 5835000 KHz @ 40000
KHz), (600 mBi, 3000 mBm)
Dec 23 13:32:49 seduxbox kernel: cfg80211: Calling CRDA for country: US
Dec 23 13:32:50 seduxbox kernel: iwl3945: Intel(R) PRO/Wireless
3945ABG/BG Network Connection driver for Linux, 1.2.26ks
Dec 23 13:32:50 seduxbox kernel: iwl3945: Copyright(c) 2003-2008 Intel
Corporation
Dec 23 13:32:50 seduxbox kernel: iwl3945 0000:10:00.0: PCI INT A ->
GSI 17 (level, low) -> IRQ 17
Dec 23 13:32:50 seduxbox kernel: iwl3945 0000:10:00.0: setting latency
timer to 64
Dec 23 13:32:50 seduxbox kernel: iwl3945 0000:10:00.0: Tunable
channels: 13 802.11bg, 23 802.11a channels
Dec 23 13:32:50 seduxbox kernel: iwl3945 0000:10:00.0: Detected Intel
Wireless WiFi Link 3945ABG
Dec 23 13:32:50 seduxbox kernel: phy0: Selected rate control algorithm
'iwl-3945-rs'
Dec 23 13:32:50 seduxbox kernel: iwl3945 0000:10:00.0: PCI INT A ->
GSI 17 (level, low) -> IRQ 17
Dec 23 13:32:50 seduxbox kernel: iwl3945 0000:10:00.0: irq 1274 for MSI/MSI-X
Dec 23 13:32:50 seduxbox kernel: iwl3945 0000:10:00.0: firmware:
requesting iwlwifi-3945-2.ucode
Dec 23 13:32:50 seduxbox kernel: iwl3945 0000:10:00.0: loaded firmware
version 15.28.2.8
Dec 23 13:32:50 seduxbox kernel: Registered led device: iwl-phy0:radio
Dec 23 13:32:50 seduxbox kernel: Registered led device: iwl-phy0:assoc
Dec 23 13:32:50 seduxbox kernel: Registered led device: iwl-phy0:RX
Dec 23 13:32:50 seduxbox kernel: Registered led device: iwl-phy0:TX
Dec 23 13:32:50 seduxbox kernel: ADDRCONF(NETDEV_UP): wlan0: link is not ready
Dec 23 13:32:53 seduxbox kernel: wlan0: authenticate with AP 00:1c:4a:41:62:2e
Dec 23 13:32:53 seduxbox kernel: wlan0: authenticated
Dec 23 13:32:53 seduxbox kernel: wlan0: associate with AP 00:1c:4a:41:62:2e
Dec 23 13:32:53 seduxbox kernel: wlan0: RX AssocResp from
00:1c:4a:41:62:2e (capab=0x411 status=0 aid=1)
Dec 23 13:32:53 seduxbox kernel: wlan0: associated
Dec 23 13:32:53 seduxbox kernel: ADDRCONF(NETDEV_CHANGE): wlan0: link
becomes ready
Dec 23 13:32:54 seduxbox kernel: mac80211-phy0: failed to set key (1,
ff:ff:ff:ff:ff:ff) to hardware (-22)
Dec 23 13:33:03 seduxbox kernel: wlan0: no IPv6 routers present

[EOI] - End Of Investigations

On Tue, Dec 23, 2008 at 3:58 AM, Zhu Yi <yi.zhu@intel.com> wrote:
> On Mon, 2008-12-22 at 22:07 +0800, Kalle Valo wrote:
>> Yes, ifconfig up works but now iwlist wlan0 scan crashes. I just
>> tested this once due to lack of time.
>>
>> I hope I get my wifi working before Christmas ;)
>
> http://marc.info/?l=linux-wireless&m=123000088608330&w=2 should fix the
> problem. Thanks a lot for your testing.
>
> Thanks,
> -yi
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 10/10] iwl3945: use rx queue management infrastructure from iwlcore
  2008-12-23  2:58                       ` Zhu Yi
  2008-12-23  7:39                         ` Sedat Dilek
  2008-12-23 12:49                         ` Sedat Dilek
@ 2008-12-23 20:43                         ` Kalle Valo
  2008-12-25  2:20                           ` Sedat Dilek
  2 siblings, 1 reply; 18+ messages in thread
From: Kalle Valo @ 2008-12-23 20:43 UTC (permalink / raw)
  To: Zhu Yi
  Cc: linville@tuxdriver.com, linux-wireless@vger.kernel.org,
	ipw3945-devel@lists.sourceforge.net, Winkler, Tomas

Zhu Yi <yi.zhu@intel.com> writes:

> On Mon, 2008-12-22 at 22:07 +0800, Kalle Valo wrote:
>> Yes, ifconfig up works but now iwlist wlan0 scan crashes. I just
>> tested this once due to lack of time.
>> 
>> I hope I get my wifi working before Christmas ;)
>
> http://marc.info/?l=linux-wireless&m=123000088608330&w=2 should fix the
> problem. Thanks a lot for your testing.

Yes, that patch fixed it. Now my wifi is working again, thank you for
the present! :)

Just to be clear, these are the patches I have applied on top of
current wireless-testing:

Revert "iwl3945: remove iwl-3945-led.[ch]"
iwl3945: use rx queue management infrastructure from iwlcore
iwlwifi: fix warning 'Should it be static'
iwlwifi: kill retry_rate sysfs for iwlagn
iwlwifi: move sysfs status entry to debugfs
iwl3945: use iwl3945_tx_cmd instead of iwl_tx_cmd
iwl3945: switch to the iwl-core send_card_state routine
iwl3945: remove iwl-3945-led.[ch]
iwl3945: sync tx queue data structure with iwlagn
iwl3945: adding utils ops
iwl3945: rearrange 3945 tfd

If I spot any regressions, you will hear from me ;)

-- 
Kalle Valo

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 10/10] iwl3945: use rx queue management infrastructure from iwlcore
  2008-12-23 20:43                         ` Kalle Valo
@ 2008-12-25  2:20                           ` Sedat Dilek
  0 siblings, 0 replies; 18+ messages in thread
From: Sedat Dilek @ 2008-12-25  2:20 UTC (permalink / raw)
  To: Kalle Valo
  Cc: Zhu Yi, linville@tuxdriver.com, linux-wireless@vger.kernel.org,
	ipw3945-devel@lists.sourceforge.net, Winkler, Tomas

With wireless-testing master-2008-12-23 (also plus 2.6.28-rc9-git4
patch) everthing OK in iwl3945-world.
Both Linux kernel works fine.
Thank you for the gift.

-Sedat

# env COLUMNS=250 dpkg -l | grep linux-image | grep 2.6.28-rc9
ii  linux-image-2.6.28-rc9-git4-wl-gcc44
2.6.28~rc9+git4+wl~git20081223.fd1dae5~dileX+1           Linux kernel
binary image for version 2.6.28-rc9-git4-wl-gcc44
ii  linux-image-2.6.28-rc9-wl-gcc44
2.6.28~rc9+wl~git20081223.fd1dae5~dileX+1                Linux kernel
binary image for version 2.6.28-rc9-wl-gcc44

On Tue, Dec 23, 2008 at 9:43 PM, Kalle Valo <kalle.valo@iki.fi> wrote:
> Zhu Yi <yi.zhu@intel.com> writes:
>
>> On Mon, 2008-12-22 at 22:07 +0800, Kalle Valo wrote:
>>> Yes, ifconfig up works but now iwlist wlan0 scan crashes. I just
>>> tested this once due to lack of time.
>>>
>>> I hope I get my wifi working before Christmas ;)
>>
>> http://marc.info/?l=linux-wireless&m=123000088608330&w=2 should fix the
>> problem. Thanks a lot for your testing.
>
> Yes, that patch fixed it. Now my wifi is working again, thank you for
> the present! :)
>
> Just to be clear, these are the patches I have applied on top of
> current wireless-testing:
>
> Revert "iwl3945: remove iwl-3945-led.[ch]"
> iwl3945: use rx queue management infrastructure from iwlcore
> iwlwifi: fix warning 'Should it be static'
> iwlwifi: kill retry_rate sysfs for iwlagn
> iwlwifi: move sysfs status entry to debugfs
> iwl3945: use iwl3945_tx_cmd instead of iwl_tx_cmd
> iwl3945: switch to the iwl-core send_card_state routine
> iwl3945: remove iwl-3945-led.[ch]
> iwl3945: sync tx queue data structure with iwlagn
> iwl3945: adding utils ops
> iwl3945: rearrange 3945 tfd
>
> If I spot any regressions, you will hear from me ;)
>
> --
> Kalle Valo
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2008-12-25  2:20 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-12-22  3:31 [PATCH 00/10] iwlwifi driver 12/22 updates Zhu Yi
2008-12-22  3:31 ` [PATCH 01/10] iwl3945: rearrange 3945 tfd Zhu Yi
2008-12-22  3:31   ` [PATCH 02/10] iwl3945: adding utils ops Zhu Yi
2008-12-22  3:31     ` [PATCH 03/10] iwl3945: sync tx queue data structure with iwlagn Zhu Yi
2008-12-22  3:31       ` [PATCH 04/10] iwl3945: remove iwl-3945-led.[ch] Zhu Yi
2008-12-22  3:31         ` [PATCH 05/10] iwl3945: switch to the iwl-core send_card_state routine Zhu Yi
2008-12-22  3:31           ` [PATCH 06/10] iwl3945: use iwl3945_tx_cmd instead of iwl_tx_cmd Zhu Yi
2008-12-22  3:31             ` [PATCH 07/10] iwlwifi: move sysfs status entry to debugfs Zhu Yi
2008-12-22  3:31               ` [PATCH 08/10] iwlwifi: kill retry_rate sysfs for iwlagn Zhu Yi
2008-12-22  3:31                 ` [PATCH 09/10] iwlwifi: fix warning 'Should it be static' Zhu Yi
2008-12-22  3:31                   ` [PATCH 10/10] iwl3945: use rx queue management infrastructure from iwlcore Zhu Yi
2008-12-22 14:07                     ` Kalle Valo
2008-12-23  2:58                       ` Zhu Yi
2008-12-23  7:39                         ` Sedat Dilek
2008-12-23 12:49                         ` Sedat Dilek
2008-12-23 20:43                         ` Kalle Valo
2008-12-25  2:20                           ` Sedat Dilek
2008-12-22  3:55   ` [PATCH 01/10] iwl3945: rearrange 3945 tfd Harvey Harrison

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).