Package: kernel-image-2.4.27 Version: jensen.1.0 Severity: normal 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 I wonder if it could at least be possible to include it into a patch set. Currently, I keep the patch in a file 998_lne390.c.diff.bz2 and configured it as a patch set for "2.4.27-10sarge8". Here comes the patch:
--- kernel-source/drivers/net/lne390.c.orig 2003-09-21 18:49:55.000000000 +0200 +++ kernel-source/drivers/net/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) { -- System Information: Debian Release: 3.1 Architecture: alpha Kernel: Linux 2.4.27 Locale: [EMAIL PROTECTED], [EMAIL PROTECTED] (charmap=ISO-8859-15) Versions of packages kernel-image-2.4.27 depends on: ii coreutils [fileutils] 5.2.1-2 The GNU core utilities ii fileutils 5.97-5.3 The GNU file management utilities ii initrd-tools 0.1.81.1 tools to create initrd image for p -- no debconf information -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]