static void rtl8169_common_start(pci_dev_t dev, unsigned char *enetaddr, unsigned long dev_iobase) #endif { int i; #ifdef DEBUG_RTL8169 int stime = currticks(); printf ("%s\n", __FUNCTION__); #endif ioaddr = dev_iobase; rtl8169_init_ring(dev); rtl8169_hw_start(dev); /* Construct a perfect filter frame with the mac address as first match * and broadcast for all others */ for (i = 0; i < 192; i++) txb[i] = 0xFF; txb[0] = enetaddr[0]; txb[1] = enetaddr[1]; txb[2] = enetaddr[2]; txb[3] = enetaddr[3]; txb[4] = enetaddr[4]; txb[5] = enetaddr[5]; #ifdef DEBUG_RTL8169 printf("%s elapsed time : %lu\n", __func__, currticks()-stime); #endif }
/************************************************************************** RESET - Finish setting up the ethernet interface ***************************************************************************/ static int rtl_reset(struct eth_device *dev, bd_t *bis) { int i; #ifdef DEBUG_RTL8169 int stime = currticks(); printf ("%s\n", __FUNCTION__); #endif rtl8169_init_ring(dev); rtl8169_hw_start(dev); /* Construct a perfect filter frame with the mac address as first match * and broadcast for all others */ for (i = 0; i < 192; i++) txb[i] = 0xFF; txb[0] = dev->enetaddr[0]; txb[1] = dev->enetaddr[1]; txb[2] = dev->enetaddr[2]; txb[3] = dev->enetaddr[3]; txb[4] = dev->enetaddr[4]; txb[5] = dev->enetaddr[5]; #ifdef DEBUG_RTL8169 printf("%s elapsed time : %lu\n", __func__, currticks()-stime); #endif return 0; }
static void rtl8169_tx_timeout(struct net_device *dev) { struct rtl8169_private *tp = dev->priv; void *ioaddr = tp->mmio_addr; u8 tmp8; /* disable Tx, if not already */ tmp8 = RTL_R8(ChipCmd); if (tmp8 & CmdTxEnb) RTL_W8(ChipCmd, tmp8 & ~CmdTxEnb); /* Disable interrupts by clearing the interrupt mask. */ RTL_W16(IntrMask, 0x0000); /* Stop a shared interrupt from scavenging while we are. */ spin_lock_irq(&tp->lock); rtl8169_tx_clear(tp); spin_unlock_irq(&tp->lock); /* ...and finally, reset everything */ rtl8169_hw_start(dev); netif_wake_queue(dev); }
static int rtl8169_resume(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); if (!netif_running(dev)) return 0; netif_device_attach(dev); rtl8169_hw_start(dev); return 0; }
static int rtl8169_open(struct net_device *dev) { struct rtl8169_private *tp = dev->priv; struct pci_dev *pdev = tp->pci_dev; int retval; retval = request_irq(dev->irq, rtl8169_interrupt, SA_SHIRQ, dev->name, dev); if (retval < 0) goto out; retval = -ENOMEM; /* * Rx and Tx desscriptors needs 256 bytes alignment. * pci_alloc_consistent provides more. */ tp->TxDescArray = pci_alloc_consistent(pdev, R8169_TX_RING_BYTES, &tp->TxPhyAddr); if (!tp->TxDescArray) goto err_free_irq; tp->RxDescArray = pci_alloc_consistent(pdev, R8169_RX_RING_BYTES, &tp->RxPhyAddr); if (!tp->RxDescArray) goto err_free_tx; retval = rtl8169_init_ring(dev); if (retval < 0) goto err_free_rx; rtl8169_hw_start(dev); rtl8169_request_timer(dev); out: return retval; err_free_rx: pci_free_consistent(pdev, R8169_RX_RING_BYTES, tp->RxDescArray, tp->RxPhyAddr); err_free_tx: pci_free_consistent(pdev, R8169_TX_RING_BYTES, tp->TxDescArray, tp->TxPhyAddr); err_free_irq: free_irq(dev->irq, dev); goto out; }
/************************************************************************** RESET - Finish setting up the ethernet interface ***************************************************************************/ static int rtl_reset(struct eth_device *dev, bd_t *bis) { int i; #ifdef DEBUG_RTL8169 int stime = currticks(); printf ("%s\n", __FUNCTION__); #endif tpc->TxDescArrays = tx_ring; /* Tx Desscriptor needs 256 bytes alignment; */ tpc->TxDescArray = (struct TxDesc *) ((unsigned long)(tpc->TxDescArrays + 255) & ~255); tpc->RxDescArrays = rx_ring; /* Rx Desscriptor needs 256 bytes alignment; */ tpc->RxDescArray = (struct RxDesc *) ((unsigned long)(tpc->RxDescArrays + 255) & ~255); rtl8169_init_ring(dev); rtl8169_hw_start(dev); /* Construct a perfect filter frame with the mac address as first match * and broadcast for all others */ for (i = 0; i < 192; i++) txb[i] = 0xFF; txb[0] = dev->enetaddr[0]; txb[1] = dev->enetaddr[1]; txb[2] = dev->enetaddr[2]; txb[3] = dev->enetaddr[3]; txb[4] = dev->enetaddr[4]; txb[5] = dev->enetaddr[5]; #ifdef DEBUG_RTL8169 printf ("%s elapsed time : %d\n", __FUNCTION__, currticks()-stime); #endif return 0; }