iwl3945: use iwl_rb_status
authorWinkler, Tomas <tomas.winkler@intel.com>
Fri, 19 Dec 2008 02:37:43 +0000 (10:37 +0800)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 29 Jan 2009 20:59:23 +0000 (15:59 -0500)
This patch makes use of iwl_rb_status also in 3945. The structure
for 3945 is not the same but since only closed_rb_num filed is used
in both cases there is no reason to duplicate it.

Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/iwlwifi/iwl-3945-hw.h
drivers/net/wireless/iwlwifi/iwl-3945.c
drivers/net/wireless/iwlwifi/iwl-3945.h
drivers/net/wireless/iwlwifi/iwl-dev.h
drivers/net/wireless/iwlwifi/iwl-fh.h
drivers/net/wireless/iwlwifi/iwl3945-base.c

index 5d461bd775674b69d5b6d2c866ad0f8c397ffa58..fc1b774c806be3d3321f17259811897042bf6c5d 100644 (file)
@@ -302,7 +302,6 @@ static inline int iwl3945_hw_valid_rtc_data_addr(u32 addr)
  * and &iwl3945_shared.rx_read_ptr[0] is provided to FH_RCSR_RPTR_ADDR(0) */
 struct iwl3945_shared {
        __le32 tx_base_ptr[8];
-       __le32 rx_read_ptr[3];
 } __attribute__ ((packed));
 
 struct iwl3945_tfd_frame_data {
index 5a8b75d94d7d99c6d4d98ff6771b436151de2441..cb864449c3977be9306760fa3980f6775781f507 100644 (file)
@@ -974,9 +974,7 @@ static int iwl3945_rx_init(struct iwl_priv *priv, struct iwl_rx_queue *rxq)
        }
 
        iwl_write_direct32(priv, FH39_RCSR_RBD_BASE(0), rxq->dma_addr);
-       iwl_write_direct32(priv, FH39_RCSR_RPTR_ADDR(0),
-                            priv->shared_phys +
-                            offsetof(struct iwl3945_shared, rx_read_ptr[0]));
+       iwl_write_direct32(priv, FH39_RCSR_RPTR_ADDR(0), rxq->rb_stts_dma);
        iwl_write_direct32(priv, FH39_RCSR_WPTR(0), 0);
        iwl_write_direct32(priv, FH39_RCSR_CONFIG(0),
                FH39_RCSR_RX_CONFIG_REG_VAL_DMA_CHNL_EN_ENABLE |
@@ -2377,13 +2375,6 @@ int iwl3945_hw_tx_queue_init(struct iwl_priv *priv, struct iwl3945_tx_queue *txq
        return 0;
 }
 
-int iwl3945_hw_get_rx_read(struct iwl_priv *priv)
-{
-       struct iwl3945_shared *shared_data = priv->shared_virt;
-
-       return le32_to_cpu(shared_data->rx_read_ptr[0]);
-}
-
 /**
  * iwl3945_init_hw_rate_table - Initialize the hardware rate fallback table
  */
index 9c520c455a4be9c1af477fc4d402b08ed10cd48d..aff6a3a5389885dfb723fd0da5741129a442da49 100644 (file)
@@ -282,7 +282,6 @@ extern int iwl3945_hw_tx_queue_init(struct iwl_priv *priv,
                                struct iwl3945_tx_queue *txq);
 extern unsigned int iwl3945_hw_get_beacon_cmd(struct iwl_priv *priv,
                                 struct iwl3945_frame *frame, u8 rate);
-extern int iwl3945_hw_get_rx_read(struct iwl_priv *priv);
 void iwl3945_hw_build_tx_cmd_rate(struct iwl_priv *priv, struct iwl_cmd *cmd,
                                     struct ieee80211_tx_info *info,
                                     struct ieee80211_hdr *hdr,
index 6a07a686f85c8c332a30205f2dc0e993f4ad76c5..8981c054a4cbfc2abecb6f59c03a0e00cdeae1d4 100644 (file)
@@ -1021,7 +1021,7 @@ struct iwl_priv {
        u16 beacon_int;
        struct ieee80211_vif *vif;
 
-       /*Added for 3945 */
+       /*Added for 3945 */
        void *shared_virt;
        dma_addr_t shared_phys;
        /*End*/
index d7da1986455092ac6b5cfe47582630f436caeffb..7c19790a3ea7f2744b13026d50a65c59ca694edc 100644 (file)
@@ -414,6 +414,7 @@ struct iwl_rb_status {
        __le16 closed_fr_num;
        __le16 finished_rb_num;
        __le16 finished_fr_nam;
+       __le32 __unused; /* 3945 only */
 } __attribute__ ((packed));
 
 
index aaa6058dd8b0dd00e8d4e2ce3b677936415a0229..207d55bea5fa43953b239018046194b955275aac 100644 (file)
@@ -3588,7 +3588,7 @@ static void iwl3945_rx_handle(struct iwl_priv *priv)
 
        /* uCode's read index (stored in shared DRAM) indicates the last Rx
         * buffer that the driver may process (last buffer filled by ucode). */
-       r = iwl3945_hw_get_rx_read(priv);
+       r = le16_to_cpu(rxq->rb_stts->closed_rb_num) &  0x0FFF;
        i = rxq->read;
 
        if (iwl3945_rx_queue_space(rxq) > (RX_QUEUE_SIZE / 2))