|
@@ -725,6 +725,12 @@ static int rtl8169_set_speed_xmii(struct net_device *dev,
|
|
|
|
|
|
auto_nego |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
|
|
|
|
|
|
+ if (tp->mac_version == RTL_GIGA_MAC_VER_12) {
|
|
|
+ /* Vendor specific (0x1f) and reserved (0x0e) MII registers. */
|
|
|
+ mdio_write(ioaddr, 0x1f, 0x0000);
|
|
|
+ mdio_write(ioaddr, 0x0e, 0x0000);
|
|
|
+ }
|
|
|
+
|
|
|
tp->phy_auto_nego_reg = auto_nego;
|
|
|
tp->phy_1000_ctrl_reg = giga_ctrl;
|
|
|
|
|
@@ -2760,14 +2766,16 @@ static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance)
|
|
|
rtl8169_check_link_status(dev, tp, ioaddr);
|
|
|
|
|
|
#ifdef CONFIG_R8169_NAPI
|
|
|
- RTL_W16(IntrMask, tp->intr_event & ~tp->napi_event);
|
|
|
- tp->intr_mask = ~tp->napi_event;
|
|
|
-
|
|
|
- if (likely(netif_rx_schedule_prep(dev)))
|
|
|
- __netif_rx_schedule(dev);
|
|
|
- else if (netif_msg_intr(tp)) {
|
|
|
- printk(KERN_INFO "%s: interrupt %04x taken in poll\n",
|
|
|
- dev->name, status);
|
|
|
+ if (status & tp->napi_event) {
|
|
|
+ RTL_W16(IntrMask, tp->intr_event & ~tp->napi_event);
|
|
|
+ tp->intr_mask = ~tp->napi_event;
|
|
|
+
|
|
|
+ if (likely(netif_rx_schedule_prep(dev)))
|
|
|
+ __netif_rx_schedule(dev);
|
|
|
+ else if (netif_msg_intr(tp)) {
|
|
|
+ printk(KERN_INFO "%s: interrupt %04x in poll\n",
|
|
|
+ dev->name, status);
|
|
|
+ }
|
|
|
}
|
|
|
break;
|
|
|
#else
|