194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger/****************************************************************************** 294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. 394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * 494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * Based on the r8180 driver, which is: 594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * Copyright 2004-2005 Andrea Merello <andreamrl@tiscali.it>, et al. 694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * This program is free software; you can redistribute it and/or modify it 794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * under the terms of version 2 of the GNU General Public License as 894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * published by the Free Software Foundation. 994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * 1094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * This program is distributed in the hope that it will be useful, but WITHOUT 1194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 1394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * more details. 1494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * 1594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * You should have received a copy of the GNU General Public License along with 1694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * this program; if not, write to the Free Software Foundation, Inc., 1794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA 1894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * 1994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * The full GNU General Public License is included in this distribution in the 2094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * file called LICENSE. 2194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * 2294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * Contact Information: 2394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger * wlanfae <wlanfae@realtek.com> 2494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger *****************************************************************************/ 2594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#include "rtl_pci.h" 2694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger#include "rtl_core.h" 2794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 2862f27cc4ae4183e9ee4e562eae60101966014f58Larry Fingerstatic void rtl8192_parse_pci_configuration(struct pci_dev *pdev, 2962f27cc4ae4183e9ee4e562eae60101966014f58Larry Finger struct net_device *dev) 3094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 3194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); 3294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 3394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u8 tmp; 3494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger int pos; 3594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u8 LinkCtrlReg; 3694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 3794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger pos = pci_find_capability(priv->pdev, PCI_CAP_ID_EXP); 3894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger pci_read_config_byte(priv->pdev, pos + PCI_EXP_LNKCTL, &LinkCtrlReg); 3994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->NdisAdapter.LinkCtrlReg = LinkCtrlReg; 4094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 4162f27cc4ae4183e9ee4e562eae60101966014f58Larry Finger RT_TRACE(COMP_INIT, "Link Control Register =%x\n", 4262f27cc4ae4183e9ee4e562eae60101966014f58Larry Finger priv->NdisAdapter.LinkCtrlReg); 4394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 4494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger pci_read_config_byte(pdev, 0x98, &tmp); 4562f27cc4ae4183e9ee4e562eae60101966014f58Larry Finger tmp |= BIT4; 4694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger pci_write_config_byte(pdev, 0x98, tmp); 4794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 4894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger tmp = 0x17; 4994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger pci_write_config_byte(pdev, 0x70f, tmp); 5094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 5194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 5294a799425eee8225a1e3fbe5f473d2ef04002577Larry Fingerbool rtl8192_pci_findadapter(struct pci_dev *pdev, struct net_device *dev) 5394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger{ 5494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); 5594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u16 VenderID; 5694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u16 DeviceID; 5794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u8 RevisionID; 5894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger u16 IrqLine; 5994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 6094a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger VenderID = pdev->vendor; 6194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger DeviceID = pdev->device; 6294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger RevisionID = pdev->revision; 6394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger pci_read_config_word(pdev, 0x3C, &IrqLine); 6494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 6594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->card_8192 = priv->ops->nic_type; 6694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 6794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (DeviceID == 0x8172) { 6894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger switch (RevisionID) { 6994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case HAL_HW_PCI_REVISION_ID_8192PCIE: 7062f27cc4ae4183e9ee4e562eae60101966014f58Larry Finger printk(KERN_INFO "Adapter(8192 PCI-E) is found - " 7162f27cc4ae4183e9ee4e562eae60101966014f58Larry Finger "DeviceID=%x\n", DeviceID); 7294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->card_8192 = NIC_8192E; 7394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 7494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger case HAL_HW_PCI_REVISION_ID_8192SE: 7562f27cc4ae4183e9ee4e562eae60101966014f58Larry Finger printk(KERN_INFO "Adapter(8192SE) is found - " 7662f27cc4ae4183e9ee4e562eae60101966014f58Larry Finger "DeviceID=%x\n", DeviceID); 7794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->card_8192 = NIC_8192SE; 7894a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger break; 7994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger default: 8062f27cc4ae4183e9ee4e562eae60101966014f58Larry Finger printk(KERN_INFO "UNKNOWN nic type(%4x:%4x)\n", 8162f27cc4ae4183e9ee4e562eae60101966014f58Larry Finger pdev->vendor, pdev->device); 8294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->card_8192 = NIC_UNKNOWN; 8394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return false; 8494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 8594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 8694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 8794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger if (priv->ops->nic_type != priv->card_8192) { 8862f27cc4ae4183e9ee4e562eae60101966014f58Larry Finger printk(KERN_INFO "Detect info(%x) and hardware info(%x) not match!\n", 8994a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger priv->ops->nic_type, priv->card_8192); 9062f27cc4ae4183e9ee4e562eae60101966014f58Larry Finger printk(KERN_INFO "Please select proper driver before install!!!!\n"); 9194a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return false; 9294a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger } 9394a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 9494a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger rtl8192_parse_pci_configuration(pdev, dev); 9594a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger 9694a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger return true; 9794a799425eee8225a1e3fbe5f473d2ef04002577Larry Finger} 98