* [PATCH] ne2k-pci full duplex with RealTek
@ 2003-09-23 1:22 Paul Gortmaker
2003-09-26 0:46 ` Jeff Garzik
0 siblings, 1 reply; 2+ messages in thread
From: Paul Gortmaker @ 2003-09-23 1:22 UTC (permalink / raw)
To: netdev; +Cc: jgarzik, becker
[-- Attachment #1: Type: text/plain, Size: 463 bytes --]
A while ago Mika Liljeberg dug through the RTL8029.doc and
sent me the sequence to enable full duplex for these after
testing it worked OK. The current sequence is just a copy
of the Holtek sequence and apparently doesn't work.
While updateing the sequence, I separated out the FDX code from
ne2k_pci_open() for enhanced readability and so that it may
also be called from other code paths eventually (e.g. ethtool)
Patch is against 2.6.0-test5.
Thanks,
Paul.
[-- Attachment #2: 2.6-test5-ne2k-diff0 --]
[-- Type: text/plain, Size: 1904 bytes --]
--- linux/drivers/net/ne2k-pci.c Mon Sep 8 12:51:03 2003
+++ linux-net/drivers/net/ne2k-pci.c Mon Sep 22 21:00:14 2003
@@ -26,8 +26,8 @@
*/
#define DRV_NAME "ne2k-pci"
-#define DRV_VERSION "1.02"
-#define DRV_RELDATE "10/19/2000"
+#define DRV_VERSION "1.03"
+#define DRV_RELDATE "9/22/2003"
/* The user-configurable values.
@@ -380,21 +380,48 @@
}
+/*
+ * Magic incantation sequence for full duplex on the supported cards.
+ */
+static inline int set_realtek_fdx(struct net_device *dev)
+{
+ long ioaddr = dev->base_addr;
+
+ outb(0xC0 + E8390_NODMA, ioaddr + NE_CMD); /* Page 3 */
+ outb(0xC0, ioaddr + 0x01); /* Enable writes to CONFIG3 */
+ outb(0x40, ioaddr + 0x06); /* Enable full duplex */
+ outb(0x00, ioaddr + 0x01); /* Disable writes to CONFIG3 */
+ outb(E8390_PAGE0 + E8390_NODMA, ioaddr + NE_CMD); /* Page 0 */
+ return 0;
+}
+
+static inline int set_holtek_fdx(struct net_device *dev)
+{
+ long ioaddr = dev->base_addr;
+
+ outb(inb(ioaddr + 0x20) | 0x80, ioaddr + 0x20);
+ return 0;
+}
+
+static int ne2k_pci_set_fdx(struct net_device *dev)
+{
+ if (ei_status.ne2k_flags & REALTEK_FDX)
+ return set_realtek_fdx(dev);
+ else if (ei_status.ne2k_flags & HOLTEK_FDX)
+ return set_holtek_fdx(dev);
+
+ return -EOPNOTSUPP;
+}
+
static int ne2k_pci_open(struct net_device *dev)
{
int ret = request_irq(dev->irq, ei_interrupt, SA_SHIRQ, dev->name, dev);
if (ret)
return ret;
- /* Set full duplex for the chips that we know about. */
- if (ei_status.ne2k_flags & FORCE_FDX) {
- long ioaddr = dev->base_addr;
- if (ei_status.ne2k_flags & REALTEK_FDX) {
- outb(0xC0 + E8390_NODMA, ioaddr + NE_CMD); /* Page 3 */
- outb(inb(ioaddr + 0x20) | 0x80, ioaddr + 0x20);
- } else if (ei_status.ne2k_flags & HOLTEK_FDX)
- outb(inb(ioaddr + 0x20) | 0x80, ioaddr + 0x20);
- }
+ if (ei_status.ne2k_flags & FORCE_FDX)
+ ne2k_pci_set_fdx(dev);
+
ei_open(dev);
return 0;
}
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] ne2k-pci full duplex with RealTek
2003-09-23 1:22 [PATCH] ne2k-pci full duplex with RealTek Paul Gortmaker
@ 2003-09-26 0:46 ` Jeff Garzik
0 siblings, 0 replies; 2+ messages in thread
From: Jeff Garzik @ 2003-09-26 0:46 UTC (permalink / raw)
To: Paul Gortmaker; +Cc: netdev, becker
all three ne2k patches applied to 2.6
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2003-09-26 0:46 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-09-23 1:22 [PATCH] ne2k-pci full duplex with RealTek Paul Gortmaker
2003-09-26 0:46 ` Jeff Garzik
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).