📄 1014.rtl8139.patch
字号:
diff -Naur --exclude=CVS --exclude='*.o' --exclude='*.a' --exclude='*.so' --exclude='*.elf' --exclude=System.map --exclude=Makefile.d --exclude='*log' --exclude='*log2' --exclude='*~' --exclude='.*~' --exclude='.#*' --exclude='*.bak' --exclude='*.orig' --exclude='*.rej' --exclude='core.[0-9]*' --exclude=.depend --exclude='.*.o.flags' --exclude='*.gz' --exclude=.depend --exclude='.*.o.flags' --exclude='*.gz' --exclude=vmlinux --exclude=vmlinux.bin --exclude=yamon-02.06-SIGMADESIGNS-01_el.bin linuxmips-2.4.30.ref/drivers/net/8139too.c linuxmips-2.4.30/drivers/net/8139too.c--- linuxmips-2.4.30.ref/drivers/net/8139too.c 2004-11-18 16:28:39.000000000 -0800+++ linuxmips-2.4.30/drivers/net/8139too.c 2005-03-25 20:08:41.000000000 -0800@@ -92,7 +92,8 @@ */ #define DRV_NAME "8139too"-#define DRV_VERSION "0.9.26"+#define DRV_VERSION "0.9.27"+ #include <linux/config.h>@@ -113,14 +114,19 @@ #include <asm/io.h> #include <asm/uaccess.h> ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,23)+/* For 2.6.x compatibility */+typedef void irqreturn_t;+#define IRQ_NONE+#define IRQ_HANDLED+#endif+++ #define RTL8139_DRIVER_NAME DRV_NAME " Fast Ethernet driver " DRV_VERSION #define PFX DRV_NAME ": " -/* Default Message level */-#define RTL8139_DEF_MSG_ENABLE (NETIF_MSG_DRV | \- NETIF_MSG_PROBE | \- NETIF_MSG_LINK)- /* enable PIO instead of MMIO, if CONFIG_8139TOO_PIO is selected */ #ifdef CONFIG_8139TOO_PIO@@ -163,9 +169,6 @@ static int media[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1}; static int full_duplex[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1}; -/* Maximum events (Rx packets, etc.) to handle at each interrupt. */-static int max_interrupt_work = 20;- /* Maximum number of multicast addresses to filter (vs. Rx-all-multicast). The RTL chips use a 64 element hash table based on the Ethernet CRC. */ static int multicast_filter_limit = 32;@@ -568,7 +571,6 @@ int drv_flags; struct pci_dev *pci_dev; u32 pci_state[16];- u32 msg_enable; struct net_device_stats stats; unsigned char *rx_ring; unsigned int cur_rx; /* Index into the Rx buffer of next Rx pkt. */@@ -599,13 +601,11 @@ MODULE_LICENSE("GPL"); MODULE_PARM (multicast_filter_limit, "i");-MODULE_PARM (max_interrupt_work, "i"); MODULE_PARM (media, "1-" __MODULE_STRING(MAX_UNITS) "i"); MODULE_PARM (full_duplex, "1-" __MODULE_STRING(MAX_UNITS) "i"); MODULE_PARM (debug, "i"); MODULE_PARM_DESC (debug, "8139too bitmapped message enable number"); MODULE_PARM_DESC (multicast_filter_limit, "8139too maximum number of filtered multicast addresses");-MODULE_PARM_DESC (max_interrupt_work, "8139too maximum events handled per interrupt"); MODULE_PARM_DESC (media, "8139too: Bits 4+9: force full duplex, bit 5: 100Mbps"); MODULE_PARM_DESC (full_duplex, "8139too: Force full duplex for board(s) (1)"); @@ -627,7 +627,10 @@ static void rtl8139_set_rx_mode (struct net_device *dev); static void __set_rx_mode (struct net_device *dev); static void rtl8139_hw_start (struct net_device *dev);+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,23) static struct ethtool_ops rtl8139_ethtool_ops;+#endif+static int rtl8139_poll(struct net_device *dev, int *budget); #ifdef USE_IO_OPS @@ -971,11 +974,15 @@ /* The Rtl8139-specific entries in the device structure. */ dev->open = rtl8139_open; dev->hard_start_xmit = rtl8139_start_xmit;+ dev->poll = rtl8139_poll;+ dev->weight = 16; dev->stop = rtl8139_close; dev->get_stats = rtl8139_get_stats; dev->set_multicast_list = rtl8139_set_rx_mode; dev->do_ioctl = netdev_ioctl;+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,23) dev->ethtool_ops = &rtl8139_ethtool_ops;+#endif dev->tx_timeout = rtl8139_tx_timeout; dev->watchdog_timeo = TX_TIMEOUT; @@ -993,8 +1000,6 @@ /* note: tp->chipset set in rtl8139_init_board */ tp->drv_flags = board_info[ent->driver_data].hw_flags; tp->mmio_addr = ioaddr;- tp->msg_enable =- (debug < 0 ? RTL8139_DEF_MSG_ENABLE : ((1 << debug) - 1)); spin_lock_init (&tp->lock); init_waitqueue_head (&tp->thr_wait); init_completion (&tp->thr_exited);@@ -1297,7 +1302,9 @@ { struct rtl8139_private *tp = dev->priv; int retval;+#ifdef RTL8139_DEBUG void *ioaddr = tp->mmio_addr;+#endif retval = request_irq (dev->irq, rtl8139_interrupt, SA_SHIRQ, dev->name, dev); if (retval)@@ -1327,8 +1334,7 @@ rtl8139_init_ring (dev); rtl8139_hw_start (dev); - if (netif_msg_ifup(tp))- printk(KERN_DEBUG "%s: rtl8139_open() ioaddr %#lx IRQ %d"+ DPRINTK ("%s: rtl8139_open() ioaddr %#lx IRQ %d" " GP Pins %2.2x %s-duplex.\n", dev->name, pci_resource_start (tp->pci_dev, 1), dev->irq, RTL_R8 (MediaStatus),@@ -1345,7 +1351,7 @@ struct rtl8139_private *tp = dev->priv; if (tp->phys[0] >= 0) {- mii_check_media(&tp->mii, netif_msg_link(tp), init_media);+ mii_check_media(&tp->mii, 1, init_media); } } @@ -1734,9 +1740,8 @@ netif_stop_queue (dev); spin_unlock_irq(&tp->lock); - if (netif_msg_tx_queued(tp))- printk (KERN_DEBUG "%s: Queued Tx packet size %u to slot %d.\n",- dev->name, len, entry);+ DPRINTK ("%s: Queued Tx packet size %u to slot %d.\n",+ dev->name, len, entry); return 0; }@@ -1766,9 +1771,8 @@ /* Note: TxCarrierLost is always asserted at 100mbps. */ if (txstatus & (TxOutOfWindow | TxAborted)) { /* There was an major error, log it. */- if (netif_msg_tx_err(tp))- printk(KERN_DEBUG "%s: Transmit error, Tx status %8.8x.\n",- dev->name, txstatus);+ DPRINTK ("%s: Transmit error, Tx status %8.8x.\n",+ dev->name, txstatus); tp->stats.tx_errors++; if (txstatus & TxAborted) { tp->stats.tx_aborted_errors++;@@ -1823,9 +1827,8 @@ int tmp_work; #endif - if (netif_msg_rx_err (tp)) - printk(KERN_DEBUG "%s: Ethernet frame had errors, status %8.8x.\n",- dev->name, rx_status);+ DPRINTK ("%s: Ethernet frame had errors, status %8.8x.\n",+ dev->name, rx_status); tp->stats.rx_errors++; if (!(rx_status & RxStatusOK)) { if (rx_status & RxTooLong) {@@ -1897,24 +1900,28 @@ #endif } -static void rtl8139_rx_interrupt (struct net_device *dev,- struct rtl8139_private *tp, void *ioaddr)+/*+ * NAPI poll routine.+ */+static int rtl8139_poll(struct net_device *dev, int *budget) {+ struct rtl8139_private *tp = dev->priv;+ void *ioaddr = tp->mmio_addr; unsigned char *rx_ring; u16 cur_rx;+ int rx, status;+ unsigned long flags; - assert (dev != NULL);- assert (tp != NULL);- assert (ioaddr != NULL);-+ spin_lock_irqsave(&tp->lock, flags);+ rescan: rx_ring = tp->rx_ring; cur_rx = tp->cur_rx;-- DPRINTK ("%s: In rtl8139_rx(), current %4.4x BufAddr %4.4x,"+ rx = 0;+ DPRINTK ("%s: In rtl8139_rx_poll(), current %4.4x BufAddr %4.4x," " free to %4.4x, Cmd %2.2x.\n", dev->name, cur_rx, RTL_R16 (RxBufAddr), RTL_R16 (RxBufPtr), RTL_R8 (ChipCmd));-+ while ((RTL_R8 (ChipCmd) & RxBufEmpty) == 0) { int ring_offset = cur_rx % RX_BUF_LEN; u32 rx_status;@@ -1929,9 +1936,8 @@ rx_size = rx_status >> 16; pkt_size = rx_size - 4; - if (netif_msg_rx_status(tp))- printk(KERN_DEBUG "%s: rtl8139_rx() status %4.4x, size %4.4x,"- " cur %4.4x.\n", dev->name, rx_status,+ DPRINTK ("%s: rtl8139_rx() status %4.4x, size %4.4x,"+ " cur %4.4x.\n", dev->name, rx_status, rx_size, cur_rx); #if RTL8139_DEBUG > 2 {@@ -1962,18 +1968,13 @@ (rx_size < 8) || (!(rx_status & RxStatusOK))) { rtl8139_rx_err (rx_status, dev, tp, ioaddr);- return;+ goto err; } - /* Malloc up new buffer, compatible with net-2e. */- /* Omit the four octet CRC from the length. */-- /* TODO: consider allocating skb's outside of- * interrupt context, both to speed interrupt processing,- * and also to reduce the chances of having to- * drop packets here under memory pressure.- */+ /* Drop lock so we can copy data with interrupts enabled. */+ spin_unlock_irqrestore(&tp->lock, flags); + /* Omit the four octet CRC from the length. */ skb = dev_alloc_skb (pkt_size + 2); if (skb) { skb->dev = dev;@@ -1983,22 +1984,35 @@ skb_put (skb, pkt_size); skb->protocol = eth_type_trans (skb, dev);- netif_rx (skb);+ netif_receive_skb(skb); dev->last_rx = jiffies; tp->stats.rx_bytes += pkt_size; tp->stats.rx_packets++; } else {- printk (KERN_WARNING- "%s: Memory squeeze, dropping packet.\n",- dev->name);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -