{
free_irq(dev->irq, dev);
release_region(dev->base_addr, ES_IO_EXTENT);
- iounmap(ei_status.mem);
}
#ifndef MODULE
printk(" assigning ");
}
- ei_status.mem = ioremap(dev->mem_start, (ES_STOP_PG - ES_START_PG)*256);
- if (!ei_status.mem) {
- printk("ioremap failed - giving up\n");
- retval = -ENXIO;
- goto out1;
- }
-
- dev->mem_end = dev->mem_start + (ES_STOP_PG - ES_START_PG)*256;
+ dev->mem_end = ei_status.rmem_end = dev->mem_start
+ + (ES_STOP_PG - ES_START_PG)*256;
+ ei_status.rmem_start = dev->mem_start + TX_PAGES*256;
printk("mem %#lx-%#lx\n", dev->mem_start, dev->mem_end-1);
static void
es_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr, int ring_page)
{
- void __iomem *hdr_start = ei_status.mem + ((ring_page - ES_START_PG)<<8);
- memcpy_fromio(hdr, hdr_start, sizeof(struct e8390_pkt_hdr));
+ unsigned long hdr_start = dev->mem_start + ((ring_page - ES_START_PG)<<8);
+ isa_memcpy_fromio(hdr, hdr_start, sizeof(struct e8390_pkt_hdr));
hdr->count = (hdr->count + 3) & ~3; /* Round up allocation. */
}
static void es_block_input(struct net_device *dev, int count, struct sk_buff *skb,
int ring_offset)
{
- void __iomem *xfer_start = ei_status.mem + ring_offset - ES_START_PG*256;
+ unsigned long xfer_start = dev->mem_start + ring_offset - (ES_START_PG<<8);
- if (ring_offset + count > ES_STOP_PG*256) {
+ if (xfer_start + count > ei_status.rmem_end) {
/* Packet wraps over end of ring buffer. */
- int semi_count = ES_STOP_PG*256 - ring_offset;
- memcpy_fromio(skb->data, xfer_start, semi_count);
+ int semi_count = ei_status.rmem_end - xfer_start;
+ isa_memcpy_fromio(skb->data, xfer_start, semi_count);
count -= semi_count;
- memcpy_fromio(skb->data + semi_count, ei_status.mem, count);
+ isa_memcpy_fromio(skb->data + semi_count, ei_status.rmem_start, count);
} else {
/* Packet is in one chunk. */
- eth_io_copy_and_sum(skb, xfer_start, count, 0);
+ isa_eth_io_copy_and_sum(skb, xfer_start, count, 0);
}
}
static void es_block_output(struct net_device *dev, int count,
const unsigned char *buf, int start_page)
{
- void __iomem *shmem = ei_status.mem + ((start_page - ES_START_PG)<<8);
+ unsigned long shmem = dev->mem_start + ((start_page - ES_START_PG)<<8);
count = (count + 3) & ~3; /* Round up to doubleword */
- memcpy_toio(shmem, buf, count);
+ isa_memcpy_toio(shmem, buf, count);
}
static int es_open(struct net_device *dev)
static int irq[MAX_ES_CARDS];
static int mem[MAX_ES_CARDS];
-module_param_array(io, int, NULL, 0);
-module_param_array(irq, int, NULL, 0);
-module_param_array(mem, int, NULL, 0);
+MODULE_PARM(io, "1-" __MODULE_STRING(MAX_ES_CARDS) "i");
+MODULE_PARM(irq, "1-" __MODULE_STRING(MAX_ES_CARDS) "i");
+MODULE_PARM(mem, "1-" __MODULE_STRING(MAX_ES_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)");