iwlwifi: add iwl_hw_detect function to iwl core

This patch add iwl_hw_detect function to iwl core

Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
Tomas Winkler 2008-04-23 17:14:54 -07:00 committed by John W. Linville
parent 91238714af
commit b661c8190e
6 changed files with 22 additions and 10 deletions

View File

@ -739,7 +739,6 @@ int iwl4965_hw_nic_init(struct iwl_priv *priv)
{ {
unsigned long flags; unsigned long flags;
struct iwl4965_rx_queue *rxq = &priv->rxq; struct iwl4965_rx_queue *rxq = &priv->rxq;
u8 rev_id;
u8 val_link; u8 val_link;
u32 val; u32 val;
int ret; int ret;
@ -751,18 +750,11 @@ int iwl4965_hw_nic_init(struct iwl_priv *priv)
iwl_write32(priv, CSR_INT_COALESCING, 512 / 32); iwl_write32(priv, CSR_INT_COALESCING, 512 / 32);
spin_unlock_irqrestore(&priv->lock, flags); spin_unlock_irqrestore(&priv->lock, flags);
/* Determine HW type */
ret = pci_read_config_byte(priv->pci_dev, PCI_REVISION_ID, &rev_id);
if (ret)
return ret;
IWL_DEBUG_INFO("HW Revision ID = 0x%X\n", rev_id);
ret = priv->cfg->ops->lib->apm_ops.set_pwr_src(priv, IWL_PWR_SRC_VMAIN); ret = priv->cfg->ops->lib->apm_ops.set_pwr_src(priv, IWL_PWR_SRC_VMAIN);
spin_lock_irqsave(&priv->lock, flags); spin_lock_irqsave(&priv->lock, flags);
if ((rev_id & 0x80) == 0x80 && (rev_id & 0x7f) < 8) { if ((priv->rev_id & 0x80) == 0x80 && (priv->rev_id & 0x7f) < 8) {
pci_read_config_dword(priv->pci_dev, PCI_REG_WUM8, &val); pci_read_config_dword(priv->pci_dev, PCI_REG_WUM8, &val);
/* Enable No Snoop field */ /* Enable No Snoop field */
pci_write_config_dword(priv->pci_dev, PCI_REG_WUM8, pci_write_config_dword(priv->pci_dev, PCI_REG_WUM8,

View File

@ -1003,6 +1003,9 @@ struct iwl_priv {
/* pci hardware address support */ /* pci hardware address support */
void __iomem *hw_base; void __iomem *hw_base;
u32 hw_rev;
u32 hw_wa_rev;
u8 rev_id;
/* uCode images, save to reload in case of failure */ /* uCode images, save to reload in case of failure */
struct fw_desc ucode_code; /* runtime inst */ struct fw_desc ucode_code; /* runtime inst */

View File

@ -36,6 +36,7 @@ struct iwl_priv; /* FIXME: remove */
#include "iwl-eeprom.h" #include "iwl-eeprom.h"
#include "iwl-4965.h" /* FIXME: remove */ #include "iwl-4965.h" /* FIXME: remove */
#include "iwl-core.h" #include "iwl-core.h"
#include "iwl-io.h"
#include "iwl-rfkill.h" #include "iwl-rfkill.h"
#include "iwl-power.h" #include "iwl-power.h"
@ -73,6 +74,14 @@ struct ieee80211_hw *iwl_alloc_all(struct iwl_cfg *cfg,
} }
EXPORT_SYMBOL(iwl_alloc_all); EXPORT_SYMBOL(iwl_alloc_all);
void iwl_hw_detect(struct iwl_priv *priv)
{
priv->hw_rev = _iwl_read32(priv, CSR_HW_REV);
priv->hw_wa_rev = _iwl_read32(priv, CSR_HW_REV_WA_REG);
pci_read_config_byte(priv->pci_dev, PCI_REVISION_ID, &priv->rev_id);
}
EXPORT_SYMBOL(iwl_hw_detect);
/** /**
* iwlcore_clear_stations_table - Clear the driver's station table * iwlcore_clear_stations_table - Clear the driver's station table
* *

View File

@ -159,6 +159,7 @@ struct iwl_cfg {
struct ieee80211_hw *iwl_alloc_all(struct iwl_cfg *cfg, struct ieee80211_hw *iwl_alloc_all(struct iwl_cfg *cfg,
struct ieee80211_ops *hw_ops); struct ieee80211_ops *hw_ops);
void iwl_hw_detect(struct iwl_priv *priv);
void iwlcore_clear_stations_table(struct iwl_priv *priv); void iwlcore_clear_stations_table(struct iwl_priv *priv);
void iwlcore_reset_qos(struct iwl_priv *priv); void iwlcore_reset_qos(struct iwl_priv *priv);

View File

@ -194,6 +194,11 @@
#define CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW (0x08000000) #define CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW (0x08000000)
/* HW REV */
#define CSR_HW_REV_TYPE_MSK (0x00000F0)
#define CSR_HW_REV_TYPE_3945 (0x00000D0)
#define CSR_HW_REV_TYPE_4965 (0x0000000)
/* EEPROM REG */ /* EEPROM REG */
#define CSR_EEPROM_REG_READ_VALID_MSK (0x00000001) #define CSR_EEPROM_REG_READ_VALID_MSK (0x00000001)
#define CSR_EEPROM_REG_BIT_CMD (0x00000002) #define CSR_EEPROM_REG_BIT_CMD (0x00000002)

View File

@ -7459,8 +7459,10 @@ static int iwl4965_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e
(unsigned long long) pci_resource_len(pdev, 0)); (unsigned long long) pci_resource_len(pdev, 0));
IWL_DEBUG_INFO("pci_resource_base = %p\n", priv->hw_base); IWL_DEBUG_INFO("pci_resource_base = %p\n", priv->hw_base);
iwl_hw_detect(priv);
printk(KERN_INFO DRV_NAME printk(KERN_INFO DRV_NAME
": Detected Intel Wireless WiFi Link %s\n", priv->cfg->name); ": Detected Intel Wireless WiFi Link %s REV=0x%X\n",
priv->cfg->name, priv->hw_rev);
/* amp init */ /* amp init */
err = priv->cfg->ops->lib->apm_ops.init(priv); err = priv->cfg->ops->lib->apm_ops.init(priv);