X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fnet%2Fdm9000.c;h=24996da4c1c44f9919b3a6277422c158c0312232;hb=9464c7cf61b9433057924c36e6e02f303a00e768;hp=a860ebbbf815f34d3c70e0c4a0d0096d7e56c261;hpb=41689045f6a3cbe0550e1d34e9cc20d2e8c432ba;p=linux-2.6.git diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c index a860ebbbf..24996da4c 100644 --- a/drivers/net/dm9000.c +++ b/drivers/net/dm9000.c @@ -339,17 +339,6 @@ static void dm9000_timeout(struct net_device *dev) spin_unlock_irqrestore(&db->lock,flags); } -#ifdef CONFIG_NET_POLL_CONTROLLER -/* - *Used by netconsole - */ -static void dm9000_poll_controller(struct net_device *dev) -{ - disable_irq(dev->irq); - dm9000_interrupt(dev->irq,dev,NULL); - enable_irq(dev->irq); -} -#endif /* dm9000_release_board * @@ -377,8 +366,8 @@ dm9000_release_board(struct platform_device *pdev, struct board_info *db) kfree(db->data_req); } - if (db->addr_req != NULL) { - release_resource(db->addr_req); + if (db->addr_res != NULL) { + release_resource(db->addr_res); kfree(db->addr_req); } } @@ -421,7 +410,10 @@ dm9000_probe(struct platform_device *pdev) if (pdev->num_resources < 2) { ret = -ENODEV; goto out; - } else if (pdev->num_resources == 2) { + } + + switch (pdev->num_resources) { + case 2: base = pdev->resource[0].start; if (!request_mem_region(base, 4, ndev->name)) { @@ -431,16 +423,17 @@ dm9000_probe(struct platform_device *pdev) ndev->base_addr = base; ndev->irq = pdev->resource[1].start; - db->io_addr = (void __iomem *)base; - db->io_data = (void __iomem *)(base + 4); + db->io_addr = (void *)base; + db->io_data = (void *)(base + 4); - } else { + break; + + case 3: db->addr_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); db->data_res = platform_get_resource(pdev, IORESOURCE_MEM, 1); db->irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); - if (db->addr_res == NULL || db->data_res == NULL || - db->irq_res == NULL) { + if (db->addr_res == NULL || db->data_res == NULL) { printk(KERN_ERR PFX "insufficient resources\n"); ret = -ENOENT; goto out; @@ -489,6 +482,7 @@ dm9000_probe(struct platform_device *pdev) /* ensure at least we have a default set of IO routines */ dm9000_set_io(db, iosize); + } /* check to see if anything is being over-ridden */ @@ -549,9 +543,6 @@ dm9000_probe(struct platform_device *pdev) ndev->stop = &dm9000_stop; ndev->get_stats = &dm9000_get_stats; ndev->set_multicast_list = &dm9000_hash_table; -#ifdef CONFIG_NET_POLL_CONTROLLER - ndev->poll_controller = &dm9000_poll_controller; -#endif #ifdef DM9000_PROGRAM_EEPROM program_eeprom(db); @@ -573,13 +564,6 @@ dm9000_probe(struct platform_device *pdev) for (i = 0; i < 6; i++) ndev->dev_addr[i] = db->srom[i]; - if (!is_valid_ether_addr(ndev->dev_addr)) { - /* try reading from mac */ - - for (i = 0; i < 6; i++) - ndev->dev_addr[i] = ior(db, i+DM9000_PAR); - } - if (!is_valid_ether_addr(ndev->dev_addr)) printk("%s: Invalid ethernet MAC address. Please " "set using ifconfig\n", ndev->name); @@ -617,7 +601,7 @@ dm9000_open(struct net_device *dev) PRINTK2("entering dm9000_open\n"); - if (request_irq(dev->irq, &dm9000_interrupt, IRQF_SHARED, dev->name, dev)) + if (request_irq(dev->irq, &dm9000_interrupt, SA_SHIRQ, dev->name, dev)) return -EAGAIN; /* Initialize DM9000 board */ @@ -679,6 +663,7 @@ dm9000_init_dm9000(struct net_device *dev) db->tx_pkt_cnt = 0; db->queue_pkt_len = 0; dev->trans_start = 0; + spin_lock_init(&db->lock); } /* @@ -782,7 +767,7 @@ dm9000_stop(struct net_device *ndev) * receive the packet to upper layer, free the transmitted packet */ -static void +void dm9000_tx_done(struct net_device *dev, board_info_t * db) { int tx_status = ior(db, DM9000_NSR); /* Got TX status */ @@ -1202,14 +1187,13 @@ dm9000_drv_remove(struct platform_device *pdev) } static struct platform_driver dm9000_driver = { - .driver = { - .name = "dm9000", - .owner = THIS_MODULE, - }, .probe = dm9000_probe, .remove = dm9000_drv_remove, .suspend = dm9000_drv_suspend, .resume = dm9000_drv_resume, + .driver = { + .name = "dm9000", + }, }; static int __init