mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
Merge branch 'master'
This commit is contained in:
commit
ac67c62473
147 changed files with 1194 additions and 894 deletions
|
|
@ -10,7 +10,7 @@
|
|||
* trademarks of NVIDIA Corporation in the United States and other
|
||||
* countries.
|
||||
*
|
||||
* Copyright (C) 2003,4 Manfred Spraul
|
||||
* Copyright (C) 2003,4,5 Manfred Spraul
|
||||
* Copyright (C) 2004 Andrew de Quincey (wol support)
|
||||
* Copyright (C) 2004 Carl-Daniel Hailfinger (invalid MAC handling, insane
|
||||
* IRQ rate fixes, bigendian fixes, cleanups, verification)
|
||||
|
|
@ -100,6 +100,7 @@
|
|||
* 0.45: 18 Sep 2005: Remove nv_stop/start_rx from every link check
|
||||
* 0.46: 20 Oct 2005: Add irq optimization modes.
|
||||
* 0.47: 26 Oct 2005: Add phyaddr 0 in phy scan.
|
||||
* 0.48: 24 Dec 2005: Disable TSO, bugfix for pci_map_single
|
||||
*
|
||||
* Known bugs:
|
||||
* We suspect that on some hardware no TX done interrupts are generated.
|
||||
|
|
@ -111,7 +112,7 @@
|
|||
* DEV_NEED_TIMERIRQ will not harm you on sane hardware, only generating a few
|
||||
* superfluous timer interrupts from the nic.
|
||||
*/
|
||||
#define FORCEDETH_VERSION "0.47"
|
||||
#define FORCEDETH_VERSION "0.48"
|
||||
#define DRV_NAME "forcedeth"
|
||||
|
||||
#include <linux/module.h>
|
||||
|
|
@ -871,8 +872,8 @@ static int nv_alloc_rx(struct net_device *dev)
|
|||
} else {
|
||||
skb = np->rx_skbuff[nr];
|
||||
}
|
||||
np->rx_dma[nr] = pci_map_single(np->pci_dev, skb->data, skb->len,
|
||||
PCI_DMA_FROMDEVICE);
|
||||
np->rx_dma[nr] = pci_map_single(np->pci_dev, skb->data,
|
||||
skb->end-skb->data, PCI_DMA_FROMDEVICE);
|
||||
if (np->desc_ver == DESC_VER_1 || np->desc_ver == DESC_VER_2) {
|
||||
np->rx_ring.orig[nr].PacketBuffer = cpu_to_le32(np->rx_dma[nr]);
|
||||
wmb();
|
||||
|
|
@ -999,7 +1000,7 @@ static void nv_drain_rx(struct net_device *dev)
|
|||
wmb();
|
||||
if (np->rx_skbuff[i]) {
|
||||
pci_unmap_single(np->pci_dev, np->rx_dma[i],
|
||||
np->rx_skbuff[i]->len,
|
||||
np->rx_skbuff[i]->end-np->rx_skbuff[i]->data,
|
||||
PCI_DMA_FROMDEVICE);
|
||||
dev_kfree_skb(np->rx_skbuff[i]);
|
||||
np->rx_skbuff[i] = NULL;
|
||||
|
|
@ -1334,7 +1335,7 @@ static void nv_rx_process(struct net_device *dev)
|
|||
* the performance.
|
||||
*/
|
||||
pci_unmap_single(np->pci_dev, np->rx_dma[i],
|
||||
np->rx_skbuff[i]->len,
|
||||
np->rx_skbuff[i]->end-np->rx_skbuff[i]->data,
|
||||
PCI_DMA_FROMDEVICE);
|
||||
|
||||
{
|
||||
|
|
@ -2455,7 +2456,7 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
|
|||
np->txrxctl_bits |= NVREG_TXRXCTL_RXCHECK;
|
||||
dev->features |= NETIF_F_HW_CSUM | NETIF_F_SG;
|
||||
#ifdef NETIF_F_TSO
|
||||
dev->features |= NETIF_F_TSO;
|
||||
/* disabled dev->features |= NETIF_F_TSO; */
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -38,6 +38,10 @@
|
|||
#include <asm/irq.h>
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
MODULE_DESCRIPTION("PHY library");
|
||||
MODULE_AUTHOR("Andy Fleming");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
static struct phy_driver genphy_driver;
|
||||
extern int mdio_bus_init(void);
|
||||
extern void mdio_bus_exit(void);
|
||||
|
|
|
|||
|
|
@ -524,9 +524,6 @@ static int get_filter(void __user *arg, struct sock_filter **p)
|
|||
if (copy_from_user(&uprog, arg, sizeof(uprog)))
|
||||
return -EFAULT;
|
||||
|
||||
if (uprog.len > BPF_MAXINSNS)
|
||||
return -EINVAL;
|
||||
|
||||
if (!uprog.len) {
|
||||
*p = NULL;
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -2907,7 +2907,7 @@ static int __devinit gem_get_device_address(struct gem *gp)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void __devexit gem_remove_one(struct pci_dev *pdev)
|
||||
static void gem_remove_one(struct pci_dev *pdev)
|
||||
{
|
||||
struct net_device *dev = pci_get_drvdata(pdev);
|
||||
|
||||
|
|
@ -3181,7 +3181,7 @@ static struct pci_driver gem_driver = {
|
|||
.name = GEM_MODULE_NAME,
|
||||
.id_table = gem_pci_tbl,
|
||||
.probe = gem_init_one,
|
||||
.remove = __devexit_p(gem_remove_one),
|
||||
.remove = gem_remove_one,
|
||||
#ifdef CONFIG_PM
|
||||
.suspend = gem_suspend,
|
||||
.resume = gem_resume,
|
||||
|
|
|
|||
|
|
@ -68,8 +68,8 @@
|
|||
|
||||
#define DRV_MODULE_NAME "tg3"
|
||||
#define PFX DRV_MODULE_NAME ": "
|
||||
#define DRV_MODULE_VERSION "3.45"
|
||||
#define DRV_MODULE_RELDATE "Dec 13, 2005"
|
||||
#define DRV_MODULE_VERSION "3.47"
|
||||
#define DRV_MODULE_RELDATE "Dec 28, 2005"
|
||||
|
||||
#define TG3_DEF_MAC_MODE 0
|
||||
#define TG3_DEF_RX_MODE 0
|
||||
|
|
@ -341,6 +341,16 @@ static struct {
|
|||
{ "interrupt test (offline)" },
|
||||
};
|
||||
|
||||
static void tg3_write32(struct tg3 *tp, u32 off, u32 val)
|
||||
{
|
||||
writel(val, tp->regs + off);
|
||||
}
|
||||
|
||||
static u32 tg3_read32(struct tg3 *tp, u32 off)
|
||||
{
|
||||
return (readl(tp->regs + off));
|
||||
}
|
||||
|
||||
static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
|
@ -411,13 +421,29 @@ static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off)
|
|||
return val;
|
||||
}
|
||||
|
||||
static void _tw32_flush(struct tg3 *tp, u32 off, u32 val)
|
||||
/* usec_wait specifies the wait time in usec when writing to certain registers
|
||||
* where it is unsafe to read back the register without some delay.
|
||||
* GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power.
|
||||
* TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed.
|
||||
*/
|
||||
static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait)
|
||||
{
|
||||
tp->write32(tp, off, val);
|
||||
if (!(tp->tg3_flags & TG3_FLAG_PCIX_TARGET_HWBUG) &&
|
||||
!(tp->tg3_flags & TG3_FLAG_5701_REG_WRITE_BUG) &&
|
||||
!(tp->tg3_flags2 & TG3_FLG2_ICH_WORKAROUND))
|
||||
tp->read32(tp, off); /* flush */
|
||||
if ((tp->tg3_flags & TG3_FLAG_PCIX_TARGET_HWBUG) ||
|
||||
(tp->tg3_flags2 & TG3_FLG2_ICH_WORKAROUND))
|
||||
/* Non-posted methods */
|
||||
tp->write32(tp, off, val);
|
||||
else {
|
||||
/* Posted method */
|
||||
tg3_write32(tp, off, val);
|
||||
if (usec_wait)
|
||||
udelay(usec_wait);
|
||||
tp->read32(tp, off);
|
||||
}
|
||||
/* Wait again after the read for the posted method to guarantee that
|
||||
* the wait time is met.
|
||||
*/
|
||||
if (usec_wait)
|
||||
udelay(usec_wait);
|
||||
}
|
||||
|
||||
static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val)
|
||||
|
|
@ -438,16 +464,6 @@ static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val)
|
|||
readl(mbox);
|
||||
}
|
||||
|
||||
static void tg3_write32(struct tg3 *tp, u32 off, u32 val)
|
||||
{
|
||||
writel(val, tp->regs + off);
|
||||
}
|
||||
|
||||
static u32 tg3_read32(struct tg3 *tp, u32 off)
|
||||
{
|
||||
return (readl(tp->regs + off));
|
||||
}
|
||||
|
||||
#define tw32_mailbox(reg, val) tp->write32_mbox(tp, reg, val)
|
||||
#define tw32_mailbox_f(reg, val) tw32_mailbox_flush(tp, (reg), (val))
|
||||
#define tw32_rx_mbox(reg, val) tp->write32_rx_mbox(tp, reg, val)
|
||||
|
|
@ -455,7 +471,8 @@ static u32 tg3_read32(struct tg3 *tp, u32 off)
|
|||
#define tr32_mailbox(reg) tp->read32_mbox(tp, reg)
|
||||
|
||||
#define tw32(reg,val) tp->write32(tp, reg, val)
|
||||
#define tw32_f(reg,val) _tw32_flush(tp,(reg),(val))
|
||||
#define tw32_f(reg,val) _tw32_flush(tp,(reg),(val), 0)
|
||||
#define tw32_wait_f(reg,val,us) _tw32_flush(tp,(reg),(val), (us))
|
||||
#define tr32(reg) tp->read32(tp, reg)
|
||||
|
||||
static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val)
|
||||
|
|
@ -595,21 +612,19 @@ static void tg3_switch_clocks(struct tg3 *tp)
|
|||
|
||||
if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
|
||||
if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) {
|
||||
tw32_f(TG3PCI_CLOCK_CTRL,
|
||||
clock_ctrl | CLOCK_CTRL_625_CORE);
|
||||
udelay(40);
|
||||
tw32_wait_f(TG3PCI_CLOCK_CTRL,
|
||||
clock_ctrl | CLOCK_CTRL_625_CORE, 40);
|
||||
}
|
||||
} else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) {
|
||||
tw32_f(TG3PCI_CLOCK_CTRL,
|
||||
clock_ctrl |
|
||||
(CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK));
|
||||
udelay(40);
|
||||
tw32_f(TG3PCI_CLOCK_CTRL,
|
||||
clock_ctrl | (CLOCK_CTRL_ALTCLK));
|
||||
udelay(40);
|
||||
tw32_wait_f(TG3PCI_CLOCK_CTRL,
|
||||
clock_ctrl |
|
||||
(CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK),
|
||||
40);
|
||||
tw32_wait_f(TG3PCI_CLOCK_CTRL,
|
||||
clock_ctrl | (CLOCK_CTRL_ALTCLK),
|
||||
40);
|
||||
}
|
||||
tw32_f(TG3PCI_CLOCK_CTRL, clock_ctrl);
|
||||
udelay(40);
|
||||
tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40);
|
||||
}
|
||||
|
||||
#define PHY_BUSY_LOOPS 5000
|
||||
|
|
@ -1017,12 +1032,15 @@ static void tg3_frob_aux_power(struct tg3 *tp)
|
|||
if ((tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT) != 0)
|
||||
return;
|
||||
|
||||
if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
|
||||
tp_peer = pci_get_drvdata(tp->pdev_peer);
|
||||
if (!tp_peer)
|
||||
BUG();
|
||||
}
|
||||
if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) ||
|
||||
(GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714)) {
|
||||
struct net_device *dev_peer;
|
||||
|
||||
dev_peer = pci_get_drvdata(tp->pdev_peer);
|
||||
if (!dev_peer)
|
||||
BUG();
|
||||
tp_peer = netdev_priv(dev_peer);
|
||||
}
|
||||
|
||||
if ((tp->tg3_flags & TG3_FLAG_WOL_ENABLE) != 0 ||
|
||||
(tp->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0 ||
|
||||
|
|
@ -1030,26 +1048,34 @@ static void tg3_frob_aux_power(struct tg3 *tp)
|
|||
(tp_peer->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0) {
|
||||
if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
|
||||
GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
|
||||
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
(GRC_LCLCTRL_GPIO_OE0 |
|
||||
GRC_LCLCTRL_GPIO_OE1 |
|
||||
GRC_LCLCTRL_GPIO_OE2 |
|
||||
GRC_LCLCTRL_GPIO_OUTPUT0 |
|
||||
GRC_LCLCTRL_GPIO_OUTPUT1));
|
||||
udelay(100);
|
||||
tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
(GRC_LCLCTRL_GPIO_OE0 |
|
||||
GRC_LCLCTRL_GPIO_OE1 |
|
||||
GRC_LCLCTRL_GPIO_OE2 |
|
||||
GRC_LCLCTRL_GPIO_OUTPUT0 |
|
||||
GRC_LCLCTRL_GPIO_OUTPUT1),
|
||||
100);
|
||||
} else {
|
||||
u32 no_gpio2;
|
||||
u32 grc_local_ctrl;
|
||||
u32 grc_local_ctrl = 0;
|
||||
|
||||
if (tp_peer != tp &&
|
||||
(tp_peer->tg3_flags & TG3_FLAG_INIT_COMPLETE) != 0)
|
||||
return;
|
||||
|
||||
/* Workaround to prevent overdrawing Amps. */
|
||||
if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
|
||||
ASIC_REV_5714) {
|
||||
grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
|
||||
tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
grc_local_ctrl, 100);
|
||||
}
|
||||
|
||||
/* On 5753 and variants, GPIO2 cannot be used. */
|
||||
no_gpio2 = tp->nic_sram_data_cfg &
|
||||
NIC_SRAM_DATA_CFG_NO_GPIO2;
|
||||
|
||||
grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 |
|
||||
grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
|
||||
GRC_LCLCTRL_GPIO_OE1 |
|
||||
GRC_LCLCTRL_GPIO_OE2 |
|
||||
GRC_LCLCTRL_GPIO_OUTPUT1 |
|
||||
|
|
@ -1058,21 +1084,18 @@ static void tg3_frob_aux_power(struct tg3 *tp)
|
|||
grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 |
|
||||
GRC_LCLCTRL_GPIO_OUTPUT2);
|
||||
}
|
||||
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
grc_local_ctrl);
|
||||
udelay(100);
|
||||
tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
grc_local_ctrl, 100);
|
||||
|
||||
grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0;
|
||||
|
||||
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
grc_local_ctrl);
|
||||
udelay(100);
|
||||
tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
grc_local_ctrl, 100);
|
||||
|
||||
if (!no_gpio2) {
|
||||
grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2;
|
||||
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
grc_local_ctrl);
|
||||
udelay(100);
|
||||
tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
grc_local_ctrl, 100);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
|
@ -1082,19 +1105,16 @@ static void tg3_frob_aux_power(struct tg3 *tp)
|
|||
(tp_peer->tg3_flags & TG3_FLAG_INIT_COMPLETE) != 0)
|
||||
return;
|
||||
|
||||
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
(GRC_LCLCTRL_GPIO_OE1 |
|
||||
GRC_LCLCTRL_GPIO_OUTPUT1));
|
||||
udelay(100);
|
||||
tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
(GRC_LCLCTRL_GPIO_OE1 |
|
||||
GRC_LCLCTRL_GPIO_OUTPUT1), 100);
|
||||
|
||||
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
(GRC_LCLCTRL_GPIO_OE1));
|
||||
udelay(100);
|
||||
tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
GRC_LCLCTRL_GPIO_OE1, 100);
|
||||
|
||||
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
(GRC_LCLCTRL_GPIO_OE1 |
|
||||
GRC_LCLCTRL_GPIO_OUTPUT1));
|
||||
udelay(100);
|
||||
tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
|
||||
(GRC_LCLCTRL_GPIO_OE1 |
|
||||
GRC_LCLCTRL_GPIO_OUTPUT1), 100);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1137,10 +1157,8 @@ static int tg3_set_power_state(struct tg3 *tp, int state)
|
|||
udelay(100); /* Delay after power state change */
|
||||
|
||||
/* Switch out of Vaux if it is not a LOM */
|
||||
if (!(tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT)) {
|
||||
tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
|
||||
udelay(100);
|
||||
}
|
||||
if (!(tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT))
|
||||
tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 100);
|
||||
|
||||
return 0;
|
||||
|
||||
|
|
@ -1239,10 +1257,8 @@ static int tg3_set_power_state(struct tg3 *tp, int state)
|
|||
base_val |= (CLOCK_CTRL_RXCLK_DISABLE |
|
||||
CLOCK_CTRL_TXCLK_DISABLE);
|
||||
|
||||
tw32_f(TG3PCI_CLOCK_CTRL, base_val |
|
||||
CLOCK_CTRL_ALTCLK |
|
||||
CLOCK_CTRL_PWRDOWN_PLL133);
|
||||
udelay(40);
|
||||
tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK |
|
||||
CLOCK_CTRL_PWRDOWN_PLL133, 40);
|
||||
} else if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) {
|
||||
/* do nothing */
|
||||
} else if (!((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
|
||||
|
|
@ -1263,11 +1279,11 @@ static int tg3_set_power_state(struct tg3 *tp, int state)
|
|||
newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
|
||||
}
|
||||
|
||||
tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1);
|
||||
udelay(40);
|
||||
tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1,
|
||||
40);
|
||||
|
||||
tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2);
|
||||
udelay(40);
|
||||
tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2,
|
||||
40);
|
||||
|
||||
if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
|
||||
u32 newbits3;
|
||||
|
|
@ -1281,9 +1297,8 @@ static int tg3_set_power_state(struct tg3 *tp, int state)
|
|||
newbits3 = CLOCK_CTRL_44MHZ_CORE;
|
||||
}
|
||||
|
||||
tw32_f(TG3PCI_CLOCK_CTRL,
|
||||
tp->pci_clock_ctrl | newbits3);
|
||||
udelay(40);
|
||||
tw32_wait_f(TG3PCI_CLOCK_CTRL,
|
||||
tp->pci_clock_ctrl | newbits3, 40);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1294,7 +1309,8 @@ static int tg3_set_power_state(struct tg3 *tp, int state)
|
|||
tg3_writephy(tp, MII_TG3_EXT_CTRL,
|
||||
MII_TG3_EXT_CTRL_FORCE_LED_OFF);
|
||||
tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x01b2);
|
||||
tg3_writephy(tp, MII_BMCR, BMCR_PDOWN);
|
||||
if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700)
|
||||
tg3_writephy(tp, MII_BMCR, BMCR_PDOWN);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -7135,8 +7151,13 @@ do { p = (u32 *)(orig_p + (reg)); \
|
|||
GET_REG32_LOOP(BUFMGR_MODE, 0x58);
|
||||
GET_REG32_LOOP(RDMAC_MODE, 0x08);
|
||||
GET_REG32_LOOP(WDMAC_MODE, 0x08);
|
||||
GET_REG32_LOOP(RX_CPU_BASE, 0x280);
|
||||
GET_REG32_LOOP(TX_CPU_BASE, 0x280);
|
||||
GET_REG32_1(RX_CPU_MODE);
|
||||
GET_REG32_1(RX_CPU_STATE);
|
||||
GET_REG32_1(RX_CPU_PGMCTR);
|
||||
GET_REG32_1(RX_CPU_HWBKPT);
|
||||
GET_REG32_1(TX_CPU_MODE);
|
||||
GET_REG32_1(TX_CPU_STATE);
|
||||
GET_REG32_1(TX_CPU_PGMCTR);
|
||||
GET_REG32_LOOP(GRCMBOX_INTERRUPT_0, 0x110);
|
||||
GET_REG32_LOOP(FTQ_RESET, 0x120);
|
||||
GET_REG32_LOOP(MSGINT_MODE, 0x0c);
|
||||
|
|
@ -7959,13 +7980,12 @@ static int tg3_test_memory(struct tg3 *tp)
|
|||
u32 offset;
|
||||
u32 len;
|
||||
} mem_tbl_570x[] = {
|
||||
{ 0x00000000, 0x01000},
|
||||
{ 0x00000000, 0x00b50},
|
||||
{ 0x00002000, 0x1c000},
|
||||
{ 0xffffffff, 0x00000}
|
||||
}, mem_tbl_5705[] = {
|
||||
{ 0x00000100, 0x0000c},
|
||||
{ 0x00000200, 0x00008},
|
||||
{ 0x00000b50, 0x00400},
|
||||
{ 0x00004000, 0x00800},
|
||||
{ 0x00006000, 0x01000},
|
||||
{ 0x00008000, 0x02000},
|
||||
|
|
@ -10466,7 +10486,7 @@ static char * __devinit tg3_bus_string(struct tg3 *tp, char *str)
|
|||
return str;
|
||||
}
|
||||
|
||||
static struct pci_dev * __devinit tg3_find_5704_peer(struct tg3 *tp)
|
||||
static struct pci_dev * __devinit tg3_find_peer(struct tg3 *tp)
|
||||
{
|
||||
struct pci_dev *peer;
|
||||
unsigned int func, devnr = tp->pdev->devfn & ~7;
|
||||
|
|
@ -10719,8 +10739,9 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
|
|||
tp->rx_pending = 63;
|
||||
}
|
||||
|
||||
if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
|
||||
tp->pdev_peer = tg3_find_5704_peer(tp);
|
||||
if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) ||
|
||||
(GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714))
|
||||
tp->pdev_peer = tg3_find_peer(tp);
|
||||
|
||||
err = tg3_get_device_address(tp);
|
||||
if (err) {
|
||||
|
|
|
|||
|
|
@ -1124,7 +1124,14 @@
|
|||
/* 0x280 --> 0x400 unused */
|
||||
|
||||
#define RX_CPU_BASE 0x00005000
|
||||
#define RX_CPU_MODE 0x00005000
|
||||
#define RX_CPU_STATE 0x00005004
|
||||
#define RX_CPU_PGMCTR 0x0000501c
|
||||
#define RX_CPU_HWBKPT 0x00005034
|
||||
#define TX_CPU_BASE 0x00005400
|
||||
#define TX_CPU_MODE 0x00005400
|
||||
#define TX_CPU_STATE 0x00005404
|
||||
#define TX_CPU_PGMCTR 0x0000541c
|
||||
|
||||
/* Mailboxes */
|
||||
#define GRCMBOX_INTERRUPT_0 0x00005800 /* 64-bit */
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
/* orinoco_nortel.c
|
||||
*
|
||||
* Driver for Prism II devices which would usually be driven by orinoco_cs,
|
||||
* but are connected to the PCI bus by a PCI-to-PCMCIA adapter used in
|
||||
* Nortel emobility, Symbol LA-4113 and Symbol LA-4123.
|
||||
* but are connected to the PCI bus by a Nortel PCI-PCMCIA-Adapter.
|
||||
*
|
||||
* Copyright (C) 2002 Tobias Hoffmann
|
||||
|
|
@ -165,7 +167,7 @@ static int nortel_pci_init_one(struct pci_dev *pdev,
|
|||
goto fail_resources;
|
||||
}
|
||||
|
||||
iomem = pci_iomap(pdev, 3, 0);
|
||||
iomem = pci_iomap(pdev, 2, 0);
|
||||
if (!iomem) {
|
||||
err = -ENOMEM;
|
||||
goto fail_map_io;
|
||||
|
|
@ -265,6 +267,8 @@ static void __devexit nortel_pci_remove_one(struct pci_dev *pdev)
|
|||
static struct pci_device_id nortel_pci_id_table[] = {
|
||||
/* Nortel emobility PCI */
|
||||
{0x126c, 0x8030, PCI_ANY_ID, PCI_ANY_ID,},
|
||||
/* Symbol LA-4123 PCI */
|
||||
{0x1562, 0x0001, PCI_ANY_ID, PCI_ANY_ID,},
|
||||
{0,},
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue