X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fnet%2Fes3210.c;h=50d8aadbb2c7ff345f8e3a0a43f496f76eb90a3c;hb=f1227cd3e0e73c48b93368800aa89f4341103a00;hp=f1e8150ed2a0918882a4654bc2564e54064e91e2;hpb=340e2b1a4c74f653454348914c408420d5d3c28a;p=linux-2.6.git diff --git a/drivers/net/es3210.c b/drivers/net/es3210.c index f1e8150ed..50d8aadbb 100644 --- a/drivers/net/es3210.c +++ b/drivers/net/es3210.c @@ -159,7 +159,6 @@ static void cleanup_card(struct net_device *dev) { free_irq(dev->irq, dev); release_region(dev->base_addr, ES_IO_EXTENT); - iounmap(ei_status.mem); } #ifndef MODULE @@ -272,14 +271,9 @@ static int __init es_probe1(struct net_device *dev, int ioaddr) 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); @@ -359,8 +353,8 @@ static void es_reset_8390(struct net_device *dev) 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. */ } @@ -373,27 +367,27 @@ es_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr, int ring_page 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) @@ -420,9 +414,9 @@ static int io[MAX_ES_CARDS]; 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)");