All of lore.kernel.org
 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, linux-wireless, ipw3945-devel, 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, linux-wireless, ipw3945-devel, 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, linux-wireless, ipw3945-devel, 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, linux-wireless, ipw3945-devel, 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, linux-wireless, ipw3945-devel, 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.