Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[netdrvr] Convert madgemc to new MCA API.

Now that all tms380 devices have a valid
struct device with dma_mask, remove dmalimit from tmsdev_init().

Kconfig: depend tms380tr and madgemc on MCA.
abyss.c, proteon.c, skisa.c, tmspci.c, tms380tr.h:
remove dmalimit parameter from tmsdev_init().
tms380tr.c: use device->dma_mask instead of dmalimit.
madgemc.c: move to new MCA API using struct device.

Signed-off-by: Jochen Friedrich <jochen@scram.de>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>

authored by

Jochen Friedrich and committed by
Jeff Garzik
84c3ea01 9f7f0098

+265 -266
+2 -2
drivers/net/tokenring/Kconfig
··· 84 84 85 85 config TMS380TR 86 86 tristate "Generic TMS380 Token Ring ISA/PCI adapter support" 87 - depends on TR && (PCI || ISA) 87 + depends on TR && (PCI || ISA || MCA) 88 88 select FW_LOADER 89 89 ---help--- 90 90 This driver provides generic support for token ring adapters ··· 158 158 159 159 config MADGEMC 160 160 tristate "Madge Smart 16/4 Ringnode MicroChannel" 161 - depends on TR && TMS380TR && MCA_LEGACY 161 + depends on TR && TMS380TR && MCA 162 162 help 163 163 This tms380 module supports the Madge Smart 16/4 MC16 and MC32 164 164 MicroChannel adapters.
+1 -1
drivers/net/tokenring/abyss.c
··· 139 139 */ 140 140 dev->base_addr += 0x10; 141 141 142 - ret = tmsdev_init(dev, PCI_MAX_ADDRESS, &pdev->dev); 142 + ret = tmsdev_init(dev, &pdev->dev); 143 143 if (ret) { 144 144 printk("%s: unable to get memory for dev->priv.\n", 145 145 dev->name);
+251 -254
drivers/net/tokenring/madgemc.c
··· 20 20 static const char version[] = "madgemc.c: v0.91 23/01/2000 by Adam Fritzler\n"; 21 21 22 22 #include <linux/module.h> 23 - #include <linux/mca-legacy.h> 23 + #include <linux/mca.h> 24 24 #include <linux/kernel.h> 25 25 #include <linux/errno.h> 26 26 #include <linux/pci.h> ··· 38 38 #define MADGEMC_IO_EXTENT 32 39 39 #define MADGEMC_SIF_OFFSET 0x08 40 40 41 - struct madgemc_card { 42 - struct net_device *dev; 43 - 41 + struct card_info { 44 42 /* 45 43 * These are read from the BIA ROM. 46 44 */ ··· 55 57 unsigned int arblevel:4; 56 58 unsigned int ringspeed:2; /* 0 = 4mb, 1 = 16, 2 = Auto/none */ 57 59 unsigned int cabletype:1; /* 0 = RJ45, 1 = DB9 */ 58 - 59 - struct madgemc_card *next; 60 60 }; 61 - static struct madgemc_card *madgemc_card_list; 62 - 63 61 64 62 static int madgemc_open(struct net_device *dev); 65 63 static int madgemc_close(struct net_device *dev); 66 64 static int madgemc_chipset_init(struct net_device *dev); 67 - static void madgemc_read_rom(struct madgemc_card *card); 65 + static void madgemc_read_rom(struct net_device *dev, struct card_info *card); 68 66 static unsigned short madgemc_setnselout_pins(struct net_device *dev); 69 67 static void madgemc_setcabletype(struct net_device *dev, int type); 70 68 ··· 145 151 146 152 147 153 148 - static int __init madgemc_probe(void) 154 + static int __devinit madgemc_probe(struct device *device) 149 155 { 150 156 static int versionprinted; 151 157 struct net_device *dev; 152 158 struct net_local *tp; 153 - struct madgemc_card *card; 154 - int i,slot = 0; 155 - __u8 posreg[4]; 159 + struct card_info *card; 160 + struct mca_device *mdev = to_mca_device(device); 161 + int ret = 0, i = 0; 156 162 157 - if (!MCA_bus) 158 - return -1; 159 - 160 - while (slot != MCA_NOTFOUND) { 161 - /* 162 - * Currently we only support the MC16/32 (MCA ID 002d) 163 - */ 164 - slot = mca_find_unused_adapter(0x002d, slot); 165 - if (slot == MCA_NOTFOUND) 166 - break; 163 + if (versionprinted++ == 0) 164 + printk("%s", version); 167 165 168 - /* 169 - * If we get here, we have an adapter. 170 - */ 171 - if (versionprinted++ == 0) 172 - printk("%s", version); 166 + if(mca_device_claimed(mdev)) 167 + return -EBUSY; 168 + mca_device_set_claim(mdev, 1); 173 169 174 - dev = alloc_trdev(sizeof(struct net_local)); 175 - if (dev == NULL) { 176 - printk("madgemc: unable to allocate dev space\n"); 177 - if (madgemc_card_list) 178 - return 0; 179 - return -1; 180 - } 170 + dev = alloc_trdev(sizeof(struct net_local)); 171 + if (!dev) { 172 + printk("madgemc: unable to allocate dev space\n"); 173 + mca_device_set_claim(mdev, 0); 174 + ret = -ENOMEM; 175 + goto getout; 176 + } 181 177 182 - SET_MODULE_OWNER(dev); 183 - dev->dma = 0; 178 + SET_MODULE_OWNER(dev); 179 + dev->dma = 0; 184 180 185 - /* 186 - * Fetch MCA config registers 187 - */ 188 - for(i=0;i<4;i++) 189 - posreg[i] = mca_read_stored_pos(slot, i+2); 190 - 191 - card = kmalloc(sizeof(struct madgemc_card), GFP_KERNEL); 192 - if (card==NULL) { 193 - printk("madgemc: unable to allocate card struct\n"); 194 - free_netdev(dev); 195 - if (madgemc_card_list) 196 - return 0; 197 - return -1; 198 - } 199 - card->dev = dev; 181 + card = kmalloc(sizeof(struct card_info), GFP_KERNEL); 182 + if (card==NULL) { 183 + printk("madgemc: unable to allocate card struct\n"); 184 + ret = -ENOMEM; 185 + goto getout1; 186 + } 200 187 201 - /* 202 - * Parse configuration information. This all comes 203 - * directly from the publicly available @002d.ADF. 204 - * Get it from Madge or your local ADF library. 205 - */ 188 + /* 189 + * Parse configuration information. This all comes 190 + * directly from the publicly available @002d.ADF. 191 + * Get it from Madge or your local ADF library. 192 + */ 206 193 207 - /* 208 - * Base address 209 - */ 210 - dev->base_addr = 0x0a20 + 211 - ((posreg[2] & MC16_POS2_ADDR2)?0x0400:0) + 212 - ((posreg[0] & MC16_POS0_ADDR1)?0x1000:0) + 213 - ((posreg[3] & MC16_POS3_ADDR3)?0x2000:0); 194 + /* 195 + * Base address 196 + */ 197 + dev->base_addr = 0x0a20 + 198 + ((mdev->pos[2] & MC16_POS2_ADDR2)?0x0400:0) + 199 + ((mdev->pos[0] & MC16_POS0_ADDR1)?0x1000:0) + 200 + ((mdev->pos[3] & MC16_POS3_ADDR3)?0x2000:0); 214 201 215 - /* 216 - * Interrupt line 217 - */ 218 - switch(posreg[0] >> 6) { /* upper two bits */ 202 + /* 203 + * Interrupt line 204 + */ 205 + switch(mdev->pos[0] >> 6) { /* upper two bits */ 219 206 case 0x1: dev->irq = 3; break; 220 207 case 0x2: dev->irq = 9; break; /* IRQ 2 = IRQ 9 */ 221 208 case 0x3: dev->irq = 10; break; 222 209 default: dev->irq = 0; break; 223 - } 210 + } 224 211 225 - if (dev->irq == 0) { 226 - printk("%s: invalid IRQ\n", dev->name); 227 - goto getout1; 228 - } 212 + if (dev->irq == 0) { 213 + printk("%s: invalid IRQ\n", dev->name); 214 + ret = -EBUSY; 215 + goto getout2; 216 + } 229 217 230 - if (!request_region(dev->base_addr, MADGEMC_IO_EXTENT, 231 - "madgemc")) { 232 - printk(KERN_INFO "madgemc: unable to setup Smart MC in slot %d because of I/O base conflict at 0x%04lx\n", slot, dev->base_addr); 233 - dev->base_addr += MADGEMC_SIF_OFFSET; 234 - goto getout1; 235 - } 218 + if (!request_region(dev->base_addr, MADGEMC_IO_EXTENT, 219 + "madgemc")) { 220 + printk(KERN_INFO "madgemc: unable to setup Smart MC in slot %d because of I/O base conflict at 0x%04lx\n", mdev->slot, dev->base_addr); 236 221 dev->base_addr += MADGEMC_SIF_OFFSET; 222 + ret = -EBUSY; 223 + goto getout2; 224 + } 225 + dev->base_addr += MADGEMC_SIF_OFFSET; 226 + 227 + /* 228 + * Arbitration Level 229 + */ 230 + card->arblevel = ((mdev->pos[0] >> 1) & 0x7) + 8; 231 + 232 + /* 233 + * Burst mode and Fairness 234 + */ 235 + card->burstmode = ((mdev->pos[2] >> 6) & 0x3); 236 + card->fairness = ((mdev->pos[2] >> 4) & 0x1); 237 + 238 + /* 239 + * Ring Speed 240 + */ 241 + if ((mdev->pos[1] >> 2)&0x1) 242 + card->ringspeed = 2; /* not selected */ 243 + else if ((mdev->pos[2] >> 5) & 0x1) 244 + card->ringspeed = 1; /* 16Mb */ 245 + else 246 + card->ringspeed = 0; /* 4Mb */ 247 + 248 + /* 249 + * Cable type 250 + */ 251 + if ((mdev->pos[1] >> 6)&0x1) 252 + card->cabletype = 1; /* STP/DB9 */ 253 + else 254 + card->cabletype = 0; /* UTP/RJ-45 */ 255 + 256 + 257 + /* 258 + * ROM Info. This requires us to actually twiddle 259 + * bits on the card, so we must ensure above that 260 + * the base address is free of conflict (request_region above). 261 + */ 262 + madgemc_read_rom(dev, card); 237 263 238 - /* 239 - * Arbitration Level 240 - */ 241 - card->arblevel = ((posreg[0] >> 1) & 0x7) + 8; 242 - 243 - /* 244 - * Burst mode and Fairness 245 - */ 246 - card->burstmode = ((posreg[2] >> 6) & 0x3); 247 - card->fairness = ((posreg[2] >> 4) & 0x1); 248 - 249 - /* 250 - * Ring Speed 251 - */ 252 - if ((posreg[1] >> 2)&0x1) 253 - card->ringspeed = 2; /* not selected */ 254 - else if ((posreg[2] >> 5) & 0x1) 255 - card->ringspeed = 1; /* 16Mb */ 256 - else 257 - card->ringspeed = 0; /* 4Mb */ 258 - 259 - /* 260 - * Cable type 261 - */ 262 - if ((posreg[1] >> 6)&0x1) 263 - card->cabletype = 1; /* STP/DB9 */ 264 - else 265 - card->cabletype = 0; /* UTP/RJ-45 */ 266 - 267 - 268 - /* 269 - * ROM Info. This requires us to actually twiddle 270 - * bits on the card, so we must ensure above that 271 - * the base address is free of conflict (request_region above). 272 - */ 273 - madgemc_read_rom(card); 264 + if (card->manid != 0x4d) { /* something went wrong */ 265 + printk(KERN_INFO "%s: Madge MC ROM read failed (unknown manufacturer ID %02x)\n", dev->name, card->manid); 266 + goto getout3; 267 + } 274 268 275 - if (card->manid != 0x4d) { /* something went wrong */ 276 - printk(KERN_INFO "%s: Madge MC ROM read failed (unknown manufacturer ID %02x)\n", dev->name, card->manid); 277 - goto getout; 278 - } 279 - 280 - if ((card->cardtype != 0x08) && (card->cardtype != 0x0d)) { 281 - printk(KERN_INFO "%s: Madge MC ROM read failed (unknown card ID %02x)\n", dev->name, card->cardtype); 282 - goto getout; 283 - } 269 + if ((card->cardtype != 0x08) && (card->cardtype != 0x0d)) { 270 + printk(KERN_INFO "%s: Madge MC ROM read failed (unknown card ID %02x)\n", dev->name, card->cardtype); 271 + ret = -EIO; 272 + goto getout3; 273 + } 284 274 285 - /* All cards except Rev 0 and 1 MC16's have 256kb of RAM */ 286 - if ((card->cardtype == 0x08) && (card->cardrev <= 0x01)) 287 - card->ramsize = 128; 288 - else 289 - card->ramsize = 256; 275 + /* All cards except Rev 0 and 1 MC16's have 256kb of RAM */ 276 + if ((card->cardtype == 0x08) && (card->cardrev <= 0x01)) 277 + card->ramsize = 128; 278 + else 279 + card->ramsize = 256; 290 280 291 - printk("%s: %s Rev %d at 0x%04lx IRQ %d\n", 292 - dev->name, 293 - (card->cardtype == 0x08)?MADGEMC16_CARDNAME: 294 - MADGEMC32_CARDNAME, card->cardrev, 295 - dev->base_addr, dev->irq); 281 + printk("%s: %s Rev %d at 0x%04lx IRQ %d\n", 282 + dev->name, 283 + (card->cardtype == 0x08)?MADGEMC16_CARDNAME: 284 + MADGEMC32_CARDNAME, card->cardrev, 285 + dev->base_addr, dev->irq); 296 286 297 - if (card->cardtype == 0x0d) 298 - printk("%s: Warning: MC32 support is experimental and highly untested\n", dev->name); 287 + if (card->cardtype == 0x0d) 288 + printk("%s: Warning: MC32 support is experimental and highly untested\n", dev->name); 289 + 290 + if (card->ringspeed==2) { /* Unknown */ 291 + printk("%s: Warning: Ring speed not set in POS -- Please run the reference disk and set it!\n", dev->name); 292 + card->ringspeed = 1; /* default to 16mb */ 293 + } 299 294 300 - if (card->ringspeed==2) { /* Unknown */ 301 - printk("%s: Warning: Ring speed not set in POS -- Please run the reference disk and set it!\n", dev->name); 302 - card->ringspeed = 1; /* default to 16mb */ 303 - } 304 - 305 - printk("%s: RAM Size: %dKB\n", dev->name, card->ramsize); 295 + printk("%s: RAM Size: %dKB\n", dev->name, card->ramsize); 306 296 307 - printk("%s: Ring Speed: %dMb/sec on %s\n", dev->name, 308 - (card->ringspeed)?16:4, 309 - card->cabletype?"STP/DB9":"UTP/RJ-45"); 310 - printk("%s: Arbitration Level: %d\n", dev->name, 311 - card->arblevel); 297 + printk("%s: Ring Speed: %dMb/sec on %s\n", dev->name, 298 + (card->ringspeed)?16:4, 299 + card->cabletype?"STP/DB9":"UTP/RJ-45"); 300 + printk("%s: Arbitration Level: %d\n", dev->name, 301 + card->arblevel); 312 302 313 - printk("%s: Burst Mode: ", dev->name); 314 - switch(card->burstmode) { 303 + printk("%s: Burst Mode: ", dev->name); 304 + switch(card->burstmode) { 315 305 case 0: printk("Cycle steal"); break; 316 306 case 1: printk("Limited burst"); break; 317 307 case 2: printk("Delayed release"); break; 318 308 case 3: printk("Immediate release"); break; 319 - } 320 - printk(" (%s)\n", (card->fairness)?"Unfair":"Fair"); 309 + } 310 + printk(" (%s)\n", (card->fairness)?"Unfair":"Fair"); 321 311 322 312 323 - /* 324 - * Enable SIF before we assign the interrupt handler, 325 - * just in case we get spurious interrupts that need 326 - * handling. 327 - */ 328 - outb(0, dev->base_addr + MC_CONTROL_REG0); /* sanity */ 329 - madgemc_setsifsel(dev, 1); 330 - if (request_irq(dev->irq, madgemc_interrupt, SA_SHIRQ, 331 - "madgemc", dev)) 332 - goto getout; 333 - 334 - madgemc_chipset_init(dev); /* enables interrupts! */ 335 - madgemc_setcabletype(dev, card->cabletype); 336 - 337 - /* Setup MCA structures */ 338 - mca_set_adapter_name(slot, (card->cardtype == 0x08)?MADGEMC16_CARDNAME:MADGEMC32_CARDNAME); 339 - mca_set_adapter_procfn(slot, madgemc_mcaproc, dev); 340 - mca_mark_as_used(slot); 341 - 342 - printk("%s: Ring Station Address: ", dev->name); 343 - printk("%2.2x", dev->dev_addr[0]); 344 - for (i = 1; i < 6; i++) 345 - printk(":%2.2x", dev->dev_addr[i]); 346 - printk("\n"); 347 - 348 - /* XXX is ISA_MAX_ADDRESS correct here? */ 349 - if (tmsdev_init(dev, ISA_MAX_ADDRESS, NULL)) { 350 - printk("%s: unable to get memory for dev->priv.\n", 351 - dev->name); 352 - release_region(dev->base_addr-MADGEMC_SIF_OFFSET, 353 - MADGEMC_IO_EXTENT); 354 - 355 - kfree(card); 356 - tmsdev_term(dev); 357 - free_netdev(dev); 358 - if (madgemc_card_list) 359 - return 0; 360 - return -1; 361 - } 362 - tp = netdev_priv(dev); 363 - 364 - /* 365 - * The MC16 is physically a 32bit card. However, Madge 366 - * insists on calling it 16bit, so I'll assume here that 367 - * they know what they're talking about. Cut off DMA 368 - * at 16mb. 369 - */ 370 - tp->setnselout = madgemc_setnselout_pins; 371 - tp->sifwriteb = madgemc_sifwriteb; 372 - tp->sifreadb = madgemc_sifreadb; 373 - tp->sifwritew = madgemc_sifwritew; 374 - tp->sifreadw = madgemc_sifreadw; 375 - tp->DataRate = (card->ringspeed)?SPEED_16:SPEED_4; 376 - 377 - memcpy(tp->ProductID, "Madge MCA 16/4 ", PROD_ID_SIZE + 1); 378 - 379 - dev->open = madgemc_open; 380 - dev->stop = madgemc_close; 381 - 382 - if (register_netdev(dev) == 0) { 383 - /* Enlist in the card list */ 384 - card->next = madgemc_card_list; 385 - madgemc_card_list = card; 386 - slot++; 387 - continue; /* successful, try to find another */ 388 - } 389 - 390 - free_irq(dev->irq, dev); 391 - getout: 392 - release_region(dev->base_addr-MADGEMC_SIF_OFFSET, 393 - MADGEMC_IO_EXTENT); 394 - getout1: 395 - kfree(card); 396 - free_netdev(dev); 397 - slot++; 313 + /* 314 + * Enable SIF before we assign the interrupt handler, 315 + * just in case we get spurious interrupts that need 316 + * handling. 317 + */ 318 + outb(0, dev->base_addr + MC_CONTROL_REG0); /* sanity */ 319 + madgemc_setsifsel(dev, 1); 320 + if (request_irq(dev->irq, madgemc_interrupt, SA_SHIRQ, 321 + "madgemc", dev)) { 322 + ret = -EBUSY; 323 + goto getout3; 398 324 } 399 325 400 - if (madgemc_card_list) 326 + madgemc_chipset_init(dev); /* enables interrupts! */ 327 + madgemc_setcabletype(dev, card->cabletype); 328 + 329 + /* Setup MCA structures */ 330 + mca_device_set_name(mdev, (card->cardtype == 0x08)?MADGEMC16_CARDNAME:MADGEMC32_CARDNAME); 331 + mca_set_adapter_procfn(mdev->slot, madgemc_mcaproc, dev); 332 + 333 + printk("%s: Ring Station Address: ", dev->name); 334 + printk("%2.2x", dev->dev_addr[0]); 335 + for (i = 1; i < 6; i++) 336 + printk(":%2.2x", dev->dev_addr[i]); 337 + printk("\n"); 338 + 339 + if (tmsdev_init(dev, device)) { 340 + printk("%s: unable to get memory for dev->priv.\n", 341 + dev->name); 342 + ret = -ENOMEM; 343 + goto getout4; 344 + } 345 + tp = netdev_priv(dev); 346 + 347 + /* 348 + * The MC16 is physically a 32bit card. However, Madge 349 + * insists on calling it 16bit, so I'll assume here that 350 + * they know what they're talking about. Cut off DMA 351 + * at 16mb. 352 + */ 353 + tp->setnselout = madgemc_setnselout_pins; 354 + tp->sifwriteb = madgemc_sifwriteb; 355 + tp->sifreadb = madgemc_sifreadb; 356 + tp->sifwritew = madgemc_sifwritew; 357 + tp->sifreadw = madgemc_sifreadw; 358 + tp->DataRate = (card->ringspeed)?SPEED_16:SPEED_4; 359 + 360 + memcpy(tp->ProductID, "Madge MCA 16/4 ", PROD_ID_SIZE + 1); 361 + 362 + dev->open = madgemc_open; 363 + dev->stop = madgemc_close; 364 + 365 + tp->tmspriv = card; 366 + dev_set_drvdata(device, dev); 367 + 368 + if (register_netdev(dev) == 0) 401 369 return 0; 402 - return -1; 370 + 371 + dev_set_drvdata(device, NULL); 372 + ret = -ENOMEM; 373 + getout4: 374 + free_irq(dev->irq, dev); 375 + getout3: 376 + release_region(dev->base_addr-MADGEMC_SIF_OFFSET, 377 + MADGEMC_IO_EXTENT); 378 + getout2: 379 + kfree(card); 380 + getout1: 381 + free_netdev(dev); 382 + getout: 383 + mca_device_set_claim(mdev, 0); 384 + return ret; 403 385 } 404 386 405 387 /* ··· 634 664 * is complete. 635 665 * 636 666 */ 637 - static void madgemc_read_rom(struct madgemc_card *card) 667 + static void madgemc_read_rom(struct net_device *dev, struct card_info *card) 638 668 { 639 669 unsigned long ioaddr; 640 670 unsigned char reg0, reg1, tmpreg0, i; 641 671 642 - ioaddr = card->dev->base_addr; 672 + ioaddr = dev->base_addr; 643 673 644 674 reg0 = inb(ioaddr + MC_CONTROL_REG0); 645 675 reg1 = inb(ioaddr + MC_CONTROL_REG1); ··· 656 686 outb(tmpreg0 | MC_CONTROL_REG0_PAGE, ioaddr + MC_CONTROL_REG0); 657 687 658 688 /* Read BIA */ 659 - card->dev->addr_len = 6; 689 + dev->addr_len = 6; 660 690 for (i = 0; i < 6; i++) 661 - card->dev->dev_addr[i] = inb(ioaddr + MC_ROM_BIA_START + i); 691 + dev->dev_addr[i] = inb(ioaddr + MC_ROM_BIA_START + i); 662 692 663 693 /* Restore original register values */ 664 694 outb(reg0, ioaddr + MC_CONTROL_REG0); ··· 691 721 static int madgemc_mcaproc(char *buf, int slot, void *d) 692 722 { 693 723 struct net_device *dev = (struct net_device *)d; 694 - struct madgemc_card *curcard = madgemc_card_list; 724 + struct net_local *tp = dev->priv; 725 + struct card_info *curcard = tp->tmspriv; 695 726 int len = 0; 696 727 697 - while (curcard) { /* search for card struct */ 698 - if (curcard->dev == dev) 699 - break; 700 - curcard = curcard->next; 701 - } 702 728 len += sprintf(buf+len, "-------\n"); 703 729 if (curcard) { 704 730 struct net_local *tp = netdev_priv(dev); ··· 729 763 return len; 730 764 } 731 765 732 - static void __exit madgemc_exit(void) 766 + static int __devexit madgemc_remove(struct device *device) 733 767 { 734 - struct net_device *dev; 735 - struct madgemc_card *this_card; 736 - 737 - while (madgemc_card_list) { 738 - dev = madgemc_card_list->dev; 739 - unregister_netdev(dev); 740 - release_region(dev->base_addr-MADGEMC_SIF_OFFSET, MADGEMC_IO_EXTENT); 741 - free_irq(dev->irq, dev); 742 - tmsdev_term(dev); 743 - free_netdev(dev); 744 - this_card = madgemc_card_list; 745 - madgemc_card_list = this_card->next; 746 - kfree(this_card); 747 - } 768 + struct net_device *dev = dev_get_drvdata(device); 769 + struct net_local *tp; 770 + struct card_info *card; 771 + 772 + if (!dev) 773 + BUG(); 774 + 775 + tp = dev->priv; 776 + card = tp->tmspriv; 777 + kfree(card); 778 + tp->tmspriv = NULL; 779 + 780 + unregister_netdev(dev); 781 + release_region(dev->base_addr-MADGEMC_SIF_OFFSET, MADGEMC_IO_EXTENT); 782 + free_irq(dev->irq, dev); 783 + tmsdev_term(dev); 784 + free_netdev(dev); 785 + dev_set_drvdata(device, NULL); 786 + 787 + return 0; 748 788 } 749 789 750 - module_init(madgemc_probe); 790 + static short madgemc_adapter_ids[] __initdata = { 791 + 0x002d, 792 + 0x0000 793 + }; 794 + 795 + static struct mca_driver madgemc_driver = { 796 + .id_table = madgemc_adapter_ids, 797 + .driver = { 798 + .name = "madgemc", 799 + .bus = &mca_bus_type, 800 + .probe = madgemc_probe, 801 + .remove = __devexit_p(madgemc_remove), 802 + }, 803 + }; 804 + 805 + static int __init madgemc_init (void) 806 + { 807 + return mca_register_driver (&madgemc_driver); 808 + } 809 + 810 + static void __exit madgemc_exit (void) 811 + { 812 + mca_unregister_driver (&madgemc_driver); 813 + } 814 + 815 + module_init(madgemc_init); 751 816 module_exit(madgemc_exit); 752 817 753 818 MODULE_LICENSE("GPL");
+1 -1
drivers/net/tokenring/proteon.c
··· 145 145 146 146 err = -EIO; 147 147 pdev->dma_mask = &dma_mask; 148 - if (tmsdev_init(dev, ISA_MAX_ADDRESS, pdev)) 148 + if (tmsdev_init(dev, pdev)) 149 149 goto out4; 150 150 151 151 dev->base_addr &= ~3;
+1 -1
drivers/net/tokenring/skisa.c
··· 162 162 163 163 err = -EIO; 164 164 pdev->dma_mask = &dma_mask; 165 - if (tmsdev_init(dev, ISA_MAX_ADDRESS, pdev)) 165 + if (tmsdev_init(dev, pdev)) 166 166 goto out4; 167 167 168 168 dev->base_addr &= ~3;
+7 -4
drivers/net/tokenring/tms380tr.c
··· 2333 2333 DMA_BIDIRECTIONAL); 2334 2334 } 2335 2335 2336 - int tmsdev_init(struct net_device *dev, unsigned long dmalimit, 2337 - struct device *pdev) 2336 + int tmsdev_init(struct net_device *dev, struct device *pdev) 2338 2337 { 2339 2338 struct net_local *tms_local; 2340 2339 2341 2340 memset(dev->priv, 0, sizeof(struct net_local)); 2342 2341 tms_local = netdev_priv(dev); 2343 2342 init_waitqueue_head(&tms_local->wait_for_tok_int); 2344 - tms_local->dmalimit = dmalimit; 2343 + if (pdev->dma_mask) 2344 + tms_local->dmalimit = *pdev->dma_mask; 2345 + else 2346 + return -ENOMEM; 2345 2347 tms_local->pdev = pdev; 2346 2348 tms_local->dmabuffer = dma_map_single(pdev, (void *)tms_local, 2347 2349 sizeof(struct net_local), DMA_BIDIRECTIONAL); 2348 - if (tms_local->dmabuffer + sizeof(struct net_local) > dmalimit) 2350 + if (tms_local->dmabuffer + sizeof(struct net_local) > 2351 + tms_local->dmalimit) 2349 2352 { 2350 2353 printk(KERN_INFO "%s: Memory not accessible for DMA\n", 2351 2354 dev->name);
+1 -2
drivers/net/tokenring/tms380tr.h
··· 17 17 int tms380tr_open(struct net_device *dev); 18 18 int tms380tr_close(struct net_device *dev); 19 19 irqreturn_t tms380tr_interrupt(int irq, void *dev_id, struct pt_regs *regs); 20 - int tmsdev_init(struct net_device *dev, unsigned long dmalimit, 21 - struct device *pdev); 20 + int tmsdev_init(struct net_device *dev, struct device *pdev); 22 21 void tmsdev_term(struct net_device *dev); 23 22 void tms380tr_wait(unsigned long time); 24 23
+1 -1
drivers/net/tokenring/tmspci.c
··· 143 143 printk(":%2.2x", dev->dev_addr[i]); 144 144 printk("\n"); 145 145 146 - ret = tmsdev_init(dev, PCI_MAX_ADDRESS, &pdev->dev); 146 + ret = tmsdev_init(dev, &pdev->dev); 147 147 if (ret) { 148 148 printk("%s: unable to get memory for dev->priv.\n", dev->name); 149 149 goto err_out_irq;