All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] lne390 and Jensen Alphas
@ 2008-03-29 14:48 Carsten Jacobi
  2008-03-29 18:32 ` Florian Fainelli
  0 siblings, 1 reply; 9+ messages in thread
From: Carsten Jacobi @ 2008-03-29 14:48 UTC (permalink / raw)
  To: netdev

[-- Attachment #1: Type: text/plain, Size: 911 bytes --]

Hello,

I am coming back with an old issue (and I mean 10 years). I have a  
patch for the Mylex LNE390 EISA network adapter that will make it  
work on the Alpha Jensen boards.
The patch has already made public in 1998 (http://lkml.org/lkml/ 
1998/8/9/16) and again in 2003 (http://linux.derkeiler.com/Mailing- 
Lists/Kernel/2003-10/2341.html). I am running the adapter ever since  
in my Jensen Alpha and it had been working just fine during the last  
10 years.
Now, since I posted the patch twice to the linux-kernel mailing list  
without having any snippet of the code getting into the official  
kernel source I try it with this mailing list for a change.
The code itself is supposed for the kernel 2.4.x series but should  
apply to 2.6.x as well. Is there something that speaks against  
pushing it up to the git repository?

With kind regards,

Carsten Jacobi

PS.: I have attached the patch once more

[-- Attachment #2: 998_lne390.c.diff.bz2 --]
[-- Type: application/octet-stream, Size: 2159 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread
* [PATCH] lne390 and Jensen Alphas
@ 2003-10-11 21:10 Carsten Jacobi
  0 siblings, 0 replies; 9+ messages in thread
From: Carsten Jacobi @ 2003-10-11 21:10 UTC (permalink / raw)
  To: Linux Kernel Mailinglist

Sorry, I forgot to add that my patch applies to kernel 2.4.22 and is
meant for the 2.4.x series.

Regards,
	Carsten Jacobi

^ permalink raw reply	[flat|nested] 9+ messages in thread
* [PATCH] lne390 and Jensen Alphas
@ 2003-10-10 22:17 Carsten Jacobi
  2003-10-12 11:24 ` Marc Zyngier
  0 siblings, 1 reply; 9+ messages in thread
From: Carsten Jacobi @ 2003-10-10 22:17 UTC (permalink / raw)
  To: Linux Kernel Mailing list

[-- Attachment #1: Type: text/plain, Size: 1470 bytes --]

Hi there!

I am running a Jensen board with a lne390 network adapter for two years
with some private patches that I would like to have in the official
kernel releases.
About five years ago, I sent some patches to Alan Cox and to this mailing
list (http://lkml.org/lkml/1998/8/9/16) that didn't make it into the
kernel. This here is my second approach!
The patch is attached and provides activation support for the EISA
adapter. This is very helpful for the Jensen board since the EISA config
utility won't help for operating systems started on the SRM console (as
i.e. Linux). When you load the module with the argument "activation=1"
it will not only request interrupt number and iospace in the kernel API
but also configure the adapter accordingly.

A CNET 900E EISA Ethernet adapter is also here that I would like to use.
Can anyone give me some information or better datasheets about that
adapter. I would also write the driver. Last time I asked (also about
five years ago) they gave me Lan-Manager drivers and two useless
EISA-Config files (all configurations shared the same bit pattern) ...
still better than nothing. Is it easy to disassemble Lan-Manager drivers
and retrieve appropriate info from them to write a driver? The CNET 900E
also seems to use a National Semiconductor 8390-compatible Chip set and
it seems to have 16K of shared mem on board.

Anyways, I would be glad if I saw my patches in one of the next kernel
releases.

Regards,
	Carsten Jacobi

[-- Attachment #2: lne390.c.patch --]
[-- Type: text/plain, Size: 5162 bytes --]

--- lne390.c.orig	2003-09-21 18:49:55.000000000 +0200
+++ lne390.c	2003-10-10 23:38:48.000000000 +0200
@@ -94,6 +94,7 @@
 #define LNE390_DEBUG	0
 
 static unsigned char irq_map[] __initdata = {15, 12, 11, 10, 9, 7, 5, 3};
+static unsigned char irq_reverse_map[] __initdata = {0xff, 0xff, 0xff, 7, 0xff, 6, 0xff, 5, 0xff, 4, 3, 2, 1, 0xff, 0xff, 0};
 static unsigned int shmem_mapA[] __initdata = {0xff, 0xfe, 0xfd, 0xfff, 0xffe, 0xffc, 0x0d, 0x0};
 static unsigned int shmem_mapB[] __initdata = {0xff, 0xfe, 0x0e, 0xfff, 0xffe, 0xffc, 0x0d, 0x0};
 
@@ -221,6 +222,10 @@
 	printk("%dkB memory at physical address %#lx\n",
 			LNE390_STOP_PG/4, dev->mem_start);
 
+#ifdef CONFIG_ALPHA_JENSEN
+	/* On the Jensen board EISA cards will see their own address
+	 * space */
+#else
 	/*
 	   BEWARE!! Some dain-bramaged EISA SCUs will allow you to put
 	   the card mem within the region covered by `normal' RAM  !!!
@@ -246,6 +251,7 @@
 		printk("lne390.c: remapped %dkB card memory to virtual address %#lx\n",
 				LNE390_STOP_PG/4, dev->mem_start);
 	}
+#endif /* CONFIG_ALPHA_JENSEN */
 
 	dev->mem_end = dev->rmem_end = dev->mem_start
 		+ (LNE390_STOP_PG - LNE390_START_PG)*256;
@@ -352,7 +358,24 @@
 	unsigned long shmem = dev->mem_start + ((start_page - LNE390_START_PG)<<8);
 
 	count = (count + 3) & ~3;     /* Round up to doubleword */
+#ifndef CONFIG_ALPHA_JENSEN
 	isa_memcpy_toio(shmem, buf, count);
+#else
+	/* The mylex lne390 adapter requires 32bit access (see above) for every
+	 * operation to the shared mem buffer. Since the block buffer is hardly
+	 * aligned to a 32bit boundary isa_memcpy_toio() will use 16bit
+	 * operations to access the buffer ... we must use something else here. */
+
+	const void *from = buf;
+	count -= 4;
+	do {
+		__raw_writel(*(const u16 *)from | (*(const u16 *)(from+2))<<16, (unsigned long) shmem);
+		count -= 4;
+		(unsigned long) shmem += 4;
+		from += 4;
+	} while (count >= 0);
+#endif
+
 }
 
 static int lne390_open(struct net_device *dev)
@@ -377,19 +400,23 @@
 static int io[MAX_LNE_CARDS];
 static int irq[MAX_LNE_CARDS];
 static int mem[MAX_LNE_CARDS];
+static int activate[MAX_LNE_CARDS];
 
 MODULE_PARM(io, "1-" __MODULE_STRING(MAX_LNE_CARDS) "i");
 MODULE_PARM(irq, "1-" __MODULE_STRING(MAX_LNE_CARDS) "i");
 MODULE_PARM(mem, "1-" __MODULE_STRING(MAX_LNE_CARDS) "i");
+MODULE_PARM(activate, "1-" __MODULE_STRING(MAX_LNE_CARDS) "i");
 MODULE_PARM_DESC(io, "I/O base address(es)");
 MODULE_PARM_DESC(irq, "IRQ number(s)");
 MODULE_PARM_DESC(mem, "memory base address(es)");
+MODULE_PARM_DESC(activate, "activate the board(s) to use indicated configuration(s)\n\tAttention: This overwrites the settings of your EISA Configuration!");
 MODULE_DESCRIPTION("Mylex LNE390A/B EISA Ethernet driver");
 MODULE_LICENSE("GPL");
 
 int init_module(void)
 {
-	int this_dev, found = 0;
+	int this_dev, index, found = 0;
+	unsigned char lne390_config;
 
 	for (this_dev = 0; this_dev < MAX_LNE_CARDS; this_dev++) {
 		struct net_device *dev = &dev_lne[this_dev];
@@ -397,6 +424,52 @@
 		dev->base_addr = io[this_dev];
 		dev->mem_start = mem[this_dev];
 		dev->init = lne390_probe;
+
+		/* Activate the adapter, this may overwrite the settings
+		 * done in the EISA Configuration Utility! */
+
+		if (activate[this_dev]) {
+
+			if (inb_p(dev->base_addr + LNE390_ID_PORT) == 0xff) return -ENODEV; 
+			if (dev->mem_start & 0xffff) {
+				printk (KERN_ERR "The lne390 shared mem buffer must be on a 16-bit boundary,\nwill try to initialize 0x%lx instead of 0x%lx\n", dev->mem_start & 0xffff0000, dev->mem_start);
+				dev->mem_start = dev->mem_start & 0xffff0000;
+			}
+			printk("Trying to activate LNE390 card in slot %d with irq %d and shared mem at 0x%lx\n", (int)dev->base_addr>>12, dev->irq, dev->mem_start);
+
+			/* Verify the irq number */
+			if ((dev->irq < 16) && (irq_reverse_map[dev->irq]!=0xff)) lne390_config = irq_reverse_map[dev->irq]<<3;
+			else {
+				printk(KERN_ERR "Sorry, the irq of lne390 cards can not be mapped to %d\n", dev->irq);
+				return -ENXIO;
+			}
+
+			/* Verify shared memory */
+			int revision = (inl(dev->base_addr + LNE390_ID_PORT) >> 24) & 0x01;
+			if (revision) {
+				for (index = 0; (index < 8) && (dev->mem_start >> 16 != shmem_mapB[index]); index++);
+				if (index > 7) {
+					printk (KERN_ERR "The lne390B adapter can not map shared mem at 0x%lx\n", dev->mem_start);
+					return -ENXIO;
+				}
+				else lne390_config = lne390_config | index;
+			}
+			else {
+				for (index = 0; (index < 8) && (dev->mem_start >> 16 != shmem_mapA[index]); index++);
+				if (index > 7) {
+					printk (KERN_ERR "The lne390A adapter can not map shared mem at 0x%lx\n", dev->mem_start);
+					return -ENXIO;
+				}
+				else lne390_config = lne390_config | index;
+			}
+
+			/* Now activate the adapter */
+			outb (0x0, dev->base_addr + LNE390_RESET_PORT);
+			outb (0x1, dev->base_addr + LNE390_RESET_PORT);
+			outb (lne390_config, dev->base_addr + LNE390_CFG2);
+			printk ("lne390 in slot %d has been activated\n", dev->base_addr>>12);
+		}
+
 		/* Default is to only install one card. */
 		if (io[this_dev] == 0 && this_dev != 0) break;
 		if (register_netdev(dev) != 0) {

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2008-04-20 12:54 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-03-29 14:48 [PATCH] lne390 and Jensen Alphas Carsten Jacobi
2008-03-29 18:32 ` Florian Fainelli
2008-04-13 21:06   ` Carsten Jacobi
2008-04-13 22:11     ` Al Viro
2008-04-20 12:54       ` Carsten Jacobi
  -- strict thread matches above, loose matches on Subject: below --
2003-10-11 21:10 Carsten Jacobi
2003-10-10 22:17 Carsten Jacobi
2003-10-12 11:24 ` Marc Zyngier
2003-10-13 21:14   ` Carsten Jacobi

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.