int awc4500_isa_probe(struct net_device *dev) { // int cards_found = 0; // static int isa_index; /* Static, for multiple probe calls. */ int isa_irq_line = 0; int isa_ioaddr = 0; // int p; int card = 0; int i=0; if (! io[0] || ! irq[0]) { // printk(" Both irq and io params must be supplied for ISA mode !!!\n"); return -ENODEV; } printk(KERN_WARNING " Aironet ISA Card in non-PNP(ISA) mode sometimes feels bad on interrupt \n"); printk(KERN_WARNING " Use aironet4500_pnp if any problems(i.e. card malfunctioning). \n"); printk(KERN_WARNING " Note that this isa probe is not friendly... must give exact parameters \n"); while (irq[card] != 0) { isa_ioaddr = io[card]; isa_irq_line = irq[card]; request_region(isa_ioaddr, AIRONET4X00_IO_SIZE, "aironet4x00 ioaddr"); if (!dev) { dev = init_etherdev(NULL, 0); if (!dev) { release_region(isa_ioaddr, AIRONET4X00_IO_SIZE); return (card == 0) ? -ENOMEM : 0; } } dev->priv = kmalloc(sizeof(struct awc_private),GFP_KERNEL ); memset(dev->priv,0,sizeof(struct awc_private)); if (!dev->priv) { printk(KERN_CRIT "aironet4x00: could not allocate device private, some unstability may follow\n"); return -1; }; // ether_setup(dev); // dev->tx_queue_len = tx_queue_len; dev->hard_start_xmit = &awc_start_xmit; // dev->set_config = &awc_config_misiganes,aga mitte awc_config; dev->get_stats = &awc_get_stats; // dev->set_multicast_list = &awc_set_multicast_list; dev->change_mtu = awc_change_mtu; dev->init = &awc_init; dev->open = &awc_open; dev->stop = &awc_close; dev->base_addr = isa_ioaddr; dev->irq = isa_irq_line; dev->tx_timeout = &awc_tx_timeout; dev->watchdog_timeo = AWC_TX_TIMEOUT; request_irq(dev->irq,awc_interrupt ,SA_INTERRUPT ,"Aironet 4X00",dev); awc_private_init( dev); if ( awc_init(dev) ) { printk("card not found at irq %x mem %x\n",irq[card],io[card]); if (card==0) return -1; break; } i=0; while (aironet4500_devices[i] && i < MAX_AWCS-1) i++; if (!aironet4500_devices[i]) { aironet4500_devices[i]=dev; ((struct awc_private *) aironet4500_devices[i]->priv)->card_type = AIRONET4500_ISA; if (awc_proc_set_fun) awc_proc_set_fun(i); } card++; } if (card == 0 ) { return -ENODEV; }; return 0; }
static int awc_pci_init(struct net_device * dev, struct pci_dev *pdev, int ioaddr, int cis_addr, int mem_addr, u8 pci_irq_line) { int i, allocd_dev = 0; if (!dev) { dev = init_etherdev(NULL, 0); if (!dev) return -ENOMEM; allocd_dev = 1; } dev->priv = kmalloc(sizeof(struct awc_private),GFP_KERNEL ); if (!dev->priv) { if (allocd_dev) { unregister_netdev(dev); kfree(dev); } return -ENOMEM; } memset(dev->priv,0,sizeof(struct awc_private)); if (!dev->priv) { printk(KERN_CRIT "aironet4x00: could not allocate device private, some unstability may follow\n"); if (allocd_dev) { unregister_netdev(dev); kfree(dev); } return -ENOMEM; }; // ether_setup(dev); // dev->tx_queue_len = tx_queue_len; dev->hard_start_xmit = &awc_start_xmit; // dev->set_config = &awc_config_misiganes,aga mitte awc_config; dev->get_stats = &awc_get_stats; // dev->set_multicast_list = &awc_set_multicast_list; dev->change_mtu = awc_change_mtu; dev->init = &awc_init; dev->open = &awc_open; dev->stop = &awc_close; dev->base_addr = ioaddr; dev->irq = pci_irq_line; dev->tx_timeout = &awc_tx_timeout; dev->watchdog_timeo = AWC_TX_TIMEOUT; i = request_irq(dev->irq,awc_interrupt, SA_SHIRQ | SA_INTERRUPT, dev->name, dev); if (i) { kfree(dev->priv); dev->priv = NULL; if (allocd_dev) { unregister_netdev(dev); kfree(dev); } return i; } awc_private_init( dev); awc_init(dev); i=0; while (aironet4500_devices[i] && i < MAX_AWCS-1) i++; if (!aironet4500_devices[i]) { aironet4500_devices[i]=dev; ((struct awc_private *) aironet4500_devices[i]->priv)->card_type = AIRONET4500_PCI; if (awc_proc_set_fun) awc_proc_set_fun(i); } // if (register_netdev(dev) != 0) { // printk(KERN_NOTICE "awc_cs: register_netdev() failed\n"); // goto failed; // } return 0; // failed: // return -1; }
int awc4500_pnp_probe(struct net_device *dev) { int isa_index = 0; int isa_irq_line = 0; int isa_ioaddr = 0; int card = 0; int i=0; struct isapnp_dev * pnp_dev ; struct isapnp_logdev *logdev; while (1) { pnp_dev = isapnp_find_device( ISAPNP_VENDOR('A','W','L'), ISAPNP_DEVICE(1), 0); if (!pnp_dev) break; isa_index++; logdev = isapnp_find_logdev(pnp_dev, ISAPNP_VENDOR('A','W','L'), ISAPNP_FUNCTION(1), 0); if (!logdev) { printk("No logical device found on Aironet board \n"); return -ENODEV; } if (isapnp_cfg_begin(logdev->PNP_BUS->PNP_BUS_NUMBER, logdev->PNP_DEV_NUMBER) < 0) { printk("cfg begin failed for csn %x devnum %x \n", logdev->PNP_BUS->PNP_BUS_NUMBER, logdev->PNP_DEV_NUMBER); return -EAGAIN; } isapnp_activate(logdev->PNP_DEV_NUMBER); /* activate device */ isapnp_cfg_end(); isa_irq_line = logdev->irq; isa_ioaddr = logdev->resource[0].start; request_region(isa_ioaddr, AIRONET4X00_IO_SIZE, "aironet4x00 ioaddr"); if (!dev) { dev = init_etherdev(NULL, 0); if (!dev) { release_region(isa_ioaddr, AIRONET4X00_IO_SIZE); isapnp_cfg_begin(logdev->PNP_BUS->PNP_BUS_NUMBER, logdev->PNP_DEV_NUMBER); isapnp_deactivate(logdev->PNP_DEV_NUMBER); isapnp_cfg_end(); return -ENOMEM; } } dev->priv = kmalloc(sizeof(struct awc_private),GFP_KERNEL ); memset(dev->priv,0,sizeof(struct awc_private)); if (!dev->priv) { printk(KERN_CRIT "aironet4x00: could not allocate device private, some unstability may follow\n"); return -1; }; ((struct awc_private *)dev->priv)->bus = logdev; // ether_setup(dev); // dev->tx_queue_len = tx_queue_len; dev->hard_start_xmit = &awc_start_xmit; // dev->set_config = &awc_config_misiganes,aga mitte awc_config; dev->get_stats = &awc_get_stats; // dev->set_multicast_list = &awc_set_multicast_list; dev->change_mtu = awc_change_mtu; dev->init = &awc_init; dev->open = &awc_open; dev->stop = &awc_close; dev->base_addr = isa_ioaddr; dev->irq = isa_irq_line; dev->tx_timeout = &awc_tx_timeout; dev->watchdog_timeo = AWC_TX_TIMEOUT; netif_start_queue (dev); request_irq(dev->irq,awc_interrupt , SA_SHIRQ | SA_INTERRUPT ,"Aironet 4X00",dev); awc_private_init( dev); ((struct awc_private *)dev->priv)->bus = logdev; cli(); if ( awc_init(dev) ) { printk("card not found at irq %x io %lx\n",dev->irq, dev->base_addr); if (card==0) { sti(); return -1; } sti(); break; } udelay(10); sti(); i=0; while (aironet4500_devices[i] && i < MAX_AWCS-1) i++; if (!aironet4500_devices[i] && i < MAX_AWCS-1 ) { aironet4500_devices[i]=dev; ((struct awc_private *) aironet4500_devices[i]->priv)->card_type = AIRONET4500_PNP; if (awc_proc_set_fun) awc_proc_set_fun(i); } else { printk(KERN_CRIT "Out of resources (MAX_AWCS) \n"); return -1; } card++; } if (card == 0) return -ENODEV; return 0; }
static int awc_pcmcia_init(struct net_device *dev) { return awc_init(dev); }