Merge git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6: (76 commits)
ide: use proper printk() KERN_* levels in ide-probe.c
ide: fix for EATA SCSI HBA in ATA emulating mode
ide: remove stale comments from drivers/ide/Makefile
ide: enable local IRQs in all handlers for TASKFILE_NO_DATA data phase
ide-scsi: remove kmalloced struct request
ht6560b: remove old history
ht6560b: update email address
ide-cd: fix oops when using growisofs
gayle: release resources on ide_host_add() failure
palm_bk3710: add UltraDMA/100 support
ide: trivial sparse annotations
ide: ide-tape.c sparse annotations and unaligned access removal
ide: drop 'name' parameter from ->init_chipset method
ide: prefix messages from IDE PCI host drivers by driver name
it821x: remove DECLARE_ITE_DEV() macro
it8213: remove DECLARE_ITE_DEV() macro
ide: include PCI device name in messages from IDE PCI host drivers
ide: remove <asm/ide.h> for some archs
ide-generic: remove ide_default_{io_base,irq}() inlines (take 3)
ide-generic: is no longer needed on ppc32
...

+1394 -1471
+1 -1
drivers/ide/Kconfig
··· 314 314 315 315 config IDE_GENERIC 316 316 tristate "generic/default IDE chipset support" 317 - depends on ALPHA || X86 || IA64 || M32R || MIPS || PPC32 317 + depends on ALPHA || X86 || IA64 || M32R || MIPS 318 318 help 319 319 If unsure, say N. 320 320
+1 -8
drivers/ide/Makefile
··· 1 1 # 2 - # Makefile for the kernel ata, atapi, and ide block device drivers. 3 - # 4 - # 12 September 2000, Bartlomiej Zolnierkiewicz <bkz@linux-ide.org> 5 - # Rewritten to use lists instead of if-statements. 6 - # 7 - # Note : at this point, these files are compiled on all systems. 8 - # In the future, some of these should be built conditionally. 9 - # 10 2 # link order is important here 3 + # 11 4 12 5 EXTRA_CFLAGS += -Idrivers/ide 13 6
+6
drivers/ide/arm/icside.c
··· 710 710 return ecard_register_driver(&icside_driver); 711 711 } 712 712 713 + static void __exit icside_exit(void); 714 + { 715 + ecard_unregister_driver(&icside_driver); 716 + } 717 + 713 718 MODULE_AUTHOR("Russell King <rmk@arm.linux.org.uk>"); 714 719 MODULE_LICENSE("GPL"); 715 720 MODULE_DESCRIPTION("ICS IDE driver"); 716 721 717 722 module_init(icside_init); 723 + module_exit(icside_exit);
+6 -3
drivers/ide/arm/palm_bk3710.c
··· 82 82 {100, 120}, /* UDMA Mode 2 */ 83 83 {100, 90}, /* UDMA Mode 3 */ 84 84 {100, 60}, /* UDMA Mode 4 */ 85 + {85, 40}, /* UDMA Mode 5 */ 85 86 }; 86 87 87 88 static void palm_bk3710_setudmamode(void __iomem *base, unsigned int dev, ··· 335 334 .cable_detect = palm_bk3710_cable_detect, 336 335 }; 337 336 338 - static const struct ide_port_info __devinitdata palm_bk3710_port_info = { 337 + static struct ide_port_info __devinitdata palm_bk3710_port_info = { 339 338 .init_dma = palm_bk3710_init_dma, 340 339 .port_ops = &palm_bk3710_ports_ops, 341 340 .host_flags = IDE_HFLAG_MMIO, 342 341 .pio_mask = ATA_PIO4, 343 - .udma_mask = ATA_UDMA4, /* (input clk 99MHz) */ 344 342 .mwdma_mask = ATA_MWDMA2, 345 343 }; 346 344 ··· 352 352 int i, rc; 353 353 hw_regs_t hw, *hws[] = { &hw, NULL, NULL, NULL }; 354 354 355 - clk = clk_get(NULL, "IDECLK"); 355 + clk = clk_get(&pdev->dev, "IDECLK"); 356 356 if (IS_ERR(clk)) 357 357 return -ENODEV; 358 358 ··· 391 391 hw.io_ports.ctl_addr = base + IDE_PALM_ATA_PRI_CTL_OFFSET; 392 392 hw.irq = irq->start; 393 393 hw.chipset = ide_palm3710; 394 + 395 + palm_bk3710_port_info.udma_mask = rate < 100000000 ? ATA_UDMA4 : 396 + ATA_UDMA5; 394 397 395 398 rc = ide_host_add(&palm_bk3710_port_info, hws, NULL); 396 399 if (rc)
+6
drivers/ide/arm/rapide.c
··· 95 95 return ecard_register_driver(&rapide_driver); 96 96 } 97 97 98 + static void __exit rapide_exit(void) 99 + { 100 + ecard_unregister_driver(&rapide_driver); 101 + } 102 + 98 103 MODULE_LICENSE("GPL"); 99 104 MODULE_DESCRIPTION("Yellowstone RAPIDE driver"); 100 105 101 106 module_init(rapide_init); 107 + module_exit(rapide_exit);
+31 -8
drivers/ide/ide-cd.c
··· 57 57 #define ide_cd_g(disk) \ 58 58 container_of((disk)->private_data, struct cdrom_info, driver) 59 59 60 + static void ide_cd_release(struct kref *); 61 + 60 62 static struct cdrom_info *ide_cd_get(struct gendisk *disk) 61 63 { 62 64 struct cdrom_info *cd = NULL; 63 65 64 66 mutex_lock(&idecd_ref_mutex); 65 67 cd = ide_cd_g(disk); 66 - if (cd) 68 + if (cd) { 67 69 kref_get(&cd->kref); 70 + if (ide_device_get(cd->drive)) { 71 + kref_put(&cd->kref, ide_cd_release); 72 + cd = NULL; 73 + } 74 + } 68 75 mutex_unlock(&idecd_ref_mutex); 69 76 return cd; 70 77 } 71 78 72 - static void ide_cd_release(struct kref *); 73 - 74 79 static void ide_cd_put(struct cdrom_info *cd) 75 80 { 76 81 mutex_lock(&idecd_ref_mutex); 82 + ide_device_put(cd->drive); 77 83 kref_put(&cd->kref, ide_cd_release); 78 84 mutex_unlock(&idecd_ref_mutex); 79 85 } ··· 1311 1305 1312 1306 stat = ide_cd_queue_pc(drive, cmd, 0, &capbuf, &len, sense, 0, 1313 1307 REQ_QUIET); 1314 - if (stat == 0) { 1315 - *capacity = 1 + be32_to_cpu(capbuf.lba); 1316 - *sectors_per_frame = 1317 - be32_to_cpu(capbuf.blocklen) >> SECTOR_BITS; 1308 + if (stat) 1309 + return stat; 1310 + 1311 + /* 1312 + * Sanity check the given block size 1313 + */ 1314 + switch (capbuf.blocklen) { 1315 + case __constant_cpu_to_be32(512): 1316 + case __constant_cpu_to_be32(1024): 1317 + case __constant_cpu_to_be32(2048): 1318 + case __constant_cpu_to_be32(4096): 1319 + break; 1320 + default: 1321 + printk(KERN_ERR "%s: weird block size %u\n", 1322 + drive->name, capbuf.blocklen); 1323 + printk(KERN_ERR "%s: default to 2kb block size\n", 1324 + drive->name); 1325 + capbuf.blocklen = __constant_cpu_to_be32(2048); 1326 + break; 1318 1327 } 1319 1328 1320 - return stat; 1329 + *capacity = 1 + be32_to_cpu(capbuf.lba); 1330 + *sectors_per_frame = be32_to_cpu(capbuf.blocklen) >> SECTOR_BITS; 1331 + return 0; 1321 1332 } 1322 1333 1323 1334 static int cdrom_read_tocentry(ide_drive_t *drive, int trackno, int msf_flag,
+9 -3
drivers/ide/ide-disk.c
··· 56 56 #define ide_disk_g(disk) \ 57 57 container_of((disk)->private_data, struct ide_disk_obj, driver) 58 58 59 + static void ide_disk_release(struct kref *); 60 + 59 61 static struct ide_disk_obj *ide_disk_get(struct gendisk *disk) 60 62 { 61 63 struct ide_disk_obj *idkp = NULL; 62 64 63 65 mutex_lock(&idedisk_ref_mutex); 64 66 idkp = ide_disk_g(disk); 65 - if (idkp) 67 + if (idkp) { 66 68 kref_get(&idkp->kref); 69 + if (ide_device_get(idkp->drive)) { 70 + kref_put(&idkp->kref, ide_disk_release); 71 + idkp = NULL; 72 + } 73 + } 67 74 mutex_unlock(&idedisk_ref_mutex); 68 75 return idkp; 69 76 } 70 77 71 - static void ide_disk_release(struct kref *); 72 - 73 78 static void ide_disk_put(struct ide_disk_obj *idkp) 74 79 { 75 80 mutex_lock(&idedisk_ref_mutex); 81 + ide_device_put(idkp->drive); 76 82 kref_put(&idkp->kref, ide_disk_release); 77 83 mutex_unlock(&idedisk_ref_mutex); 78 84 }
+1 -1
drivers/ide/ide-dma.c
··· 173 173 int ide_build_dmatable (ide_drive_t *drive, struct request *rq) 174 174 { 175 175 ide_hwif_t *hwif = HWIF(drive); 176 - unsigned int *table = hwif->dmatable_cpu; 176 + __le32 *table = (__le32 *)hwif->dmatable_cpu; 177 177 unsigned int is_trm290 = (hwif->chipset == ide_trm290) ? 1 : 0; 178 178 unsigned int count = 0; 179 179 int i;
+9 -3
drivers/ide/ide-floppy.c
··· 158 158 #define ide_floppy_g(disk) \ 159 159 container_of((disk)->private_data, struct ide_floppy_obj, driver) 160 160 161 + static void idefloppy_cleanup_obj(struct kref *); 162 + 161 163 static struct ide_floppy_obj *ide_floppy_get(struct gendisk *disk) 162 164 { 163 165 struct ide_floppy_obj *floppy = NULL; 164 166 165 167 mutex_lock(&idefloppy_ref_mutex); 166 168 floppy = ide_floppy_g(disk); 167 - if (floppy) 169 + if (floppy) { 168 170 kref_get(&floppy->kref); 171 + if (ide_device_get(floppy->drive)) { 172 + kref_put(&floppy->kref, idefloppy_cleanup_obj); 173 + floppy = NULL; 174 + } 175 + } 169 176 mutex_unlock(&idefloppy_ref_mutex); 170 177 return floppy; 171 178 } 172 179 173 - static void idefloppy_cleanup_obj(struct kref *); 174 - 175 180 static void ide_floppy_put(struct ide_floppy_obj *floppy) 176 181 { 177 182 mutex_lock(&idefloppy_ref_mutex); 183 + ide_device_put(floppy->drive); 178 184 kref_put(&floppy->kref, idefloppy_cleanup_obj); 179 185 mutex_unlock(&idefloppy_ref_mutex); 180 186 }
+33 -3
drivers/ide/ide-generic.c
··· 20 20 #include <linux/module.h> 21 21 #include <linux/ide.h> 22 22 23 + /* FIXME: convert m32r to use ide_platform host driver */ 24 + #ifdef CONFIG_M32R 25 + #include <asm/m32r.h> 26 + #endif 27 + 23 28 #define DRV_NAME "ide_generic" 24 29 25 30 static int probe_mask = 0x03; ··· 85 80 return 0; 86 81 } 87 82 83 + #if defined(CONFIG_PLAT_M32700UT) || defined(CONFIG_PLAT_MAPPI2) \ 84 + || defined(CONFIG_PLAT_OPSPUT) 85 + static const u16 legacy_bases[] = { 0x1f0 }; 86 + static const int legacy_irqs[] = { PLD_IRQ_CFIREQ }; 87 + #elif defined(CONFIG_PLAT_MAPPI3) 88 + static const u16 legacy_bases[] = { 0x1f0, 0x170 }; 89 + static const int legacy_irqs[] = { PLD_IRQ_CFIREQ, PLD_IRQ_IDEIREQ }; 90 + #elif defined(CONFIG_ALPHA) 91 + static const u16 legacy_bases[] = { 0x1f0, 0x170, 0x1e8, 0x168 }; 92 + static const int legacy_irqs[] = { 14, 15, 11, 10 }; 93 + #else 94 + static const u16 legacy_bases[] = { 0x1f0, 0x170, 0x1e8, 0x168, 0x1e0, 0x160 }; 95 + static const int legacy_irqs[] = { 14, 15, 11, 10, 8, 12 }; 96 + #endif 97 + 88 98 static int __init ide_generic_init(void) 89 99 { 90 100 hw_regs_t hw[MAX_HWIFS], *hws[MAX_HWIFS]; ··· 107 87 unsigned long io_addr; 108 88 int i, rc; 109 89 90 + #ifdef CONFIG_MIPS 91 + if (!ide_probe_legacy()) 92 + return -ENODEV; 93 + #endif 110 94 printk(KERN_INFO DRV_NAME ": please use \"probe_mask=0x3f\" module " 111 95 "parameter for probing all legacy ISA IDE ports\n"); 112 96 113 - for (i = 0; i < MAX_HWIFS; i++) { 114 - io_addr = ide_default_io_base(i); 97 + memset(hws, 0, sizeof(hw_regs_t *) * MAX_HWIFS); 98 + 99 + for (i = 0; i < ARRAY_SIZE(legacy_bases); i++) { 100 + io_addr = legacy_bases[i]; 115 101 116 102 hws[i] = NULL; 117 103 ··· 139 113 140 114 memset(&hw[i], 0, sizeof(hw[i])); 141 115 ide_std_init_ports(&hw[i], io_addr, io_addr + 0x206); 142 - hw[i].irq = ide_default_irq(io_addr); 116 + #ifdef CONFIG_IA64 117 + hw[i].irq = isa_irq_to_vector(legacy_irqs[i]); 118 + #else 119 + hw[i].irq = legacy_irqs[i]; 120 + #endif 143 121 hw[i].chipset = ide_generic; 144 122 145 123 hws[i] = &hw[i];
+2 -4
drivers/ide/ide-iops.c
··· 510 510 511 511 if (byteswap) { 512 512 /* convert from big-endian to host byte order */ 513 - for (p = end ; p != s;) { 514 - unsigned short *pp = (unsigned short *) (p -= 2); 515 - *pp = ntohs(*pp); 516 - } 513 + for (p = end ; p != s;) 514 + be16_to_cpus((u16 *)(p -= 2)); 517 515 } 518 516 /* strip leading blanks */ 519 517 while (s != end && *s == ' ')
+36 -35
drivers/ide/ide-probe.c
··· 134 134 #endif 135 135 ide_fix_driveid(id); 136 136 137 - #if defined (CONFIG_SCSI_EATA_PIO) || defined (CONFIG_SCSI_EATA) 138 - /* 139 - * EATA SCSI controllers do a hardware ATA emulation: 140 - * Ignore them if there is a driver for them available. 141 - */ 142 - if ((id->model[0] == 'P' && id->model[1] == 'M') || 143 - (id->model[0] == 'S' && id->model[1] == 'K')) { 144 - printk("%s: EATA SCSI HBA %.10s\n", drive->name, id->model); 145 - goto err_misc; 146 - } 147 - #endif /* CONFIG_SCSI_EATA || CONFIG_SCSI_EATA_PIO */ 148 - 149 137 /* 150 138 * WIN_IDENTIFY returns little-endian info, 151 139 * WIN_PIDENTIFY *usually* returns little-endian info. ··· 155 167 if (strstr(id->model, "E X A B Y T E N E S T")) 156 168 goto err_misc; 157 169 158 - printk("%s: %s, ", drive->name, id->model); 170 + printk(KERN_INFO "%s: %s, ", drive->name, id->model); 171 + 159 172 drive->present = 1; 160 173 drive->dead = 0; 161 174 ··· 165 176 */ 166 177 if (cmd == WIN_PIDENTIFY) { 167 178 u8 type = (id->config >> 8) & 0x1f; 168 - printk("ATAPI "); 179 + 180 + printk(KERN_CONT "ATAPI "); 169 181 switch (type) { 170 182 case ide_floppy: 171 183 if (!strstr(id->model, "CD-ROM")) { 172 184 if (!strstr(id->model, "oppy") && 173 185 !strstr(id->model, "poyp") && 174 186 !strstr(id->model, "ZIP")) 175 - printk("cdrom or floppy?, assuming "); 187 + printk(KERN_CONT "cdrom or floppy?, assuming "); 176 188 if (drive->media != ide_cdrom) { 177 - printk ("FLOPPY"); 189 + printk(KERN_CONT "FLOPPY"); 178 190 drive->removable = 1; 179 191 break; 180 192 } ··· 188 198 /* kludge for Apple PowerBook internal zip */ 189 199 if (!strstr(id->model, "CD-ROM") && 190 200 strstr(id->model, "ZIP")) { 191 - printk ("FLOPPY"); 201 + printk(KERN_CONT "FLOPPY"); 192 202 type = ide_floppy; 193 203 break; 194 204 } 195 205 #endif 196 - printk ("CD/DVD-ROM"); 206 + printk(KERN_CONT "CD/DVD-ROM"); 197 207 break; 198 208 case ide_tape: 199 - printk ("TAPE"); 209 + printk(KERN_CONT "TAPE"); 200 210 break; 201 211 case ide_optical: 202 - printk ("OPTICAL"); 212 + printk(KERN_CONT "OPTICAL"); 203 213 drive->removable = 1; 204 214 break; 205 215 default: 206 - printk("UNKNOWN (type %d)", type); 216 + printk(KERN_CONT "UNKNOWN (type %d)", type); 207 217 break; 208 218 } 209 - printk (" drive\n"); 219 + printk(KERN_CONT " drive\n"); 210 220 drive->media = type; 211 221 /* an ATAPI device ignores DRDY */ 212 222 drive->ready_stat = 0; ··· 226 236 drive->removable = 1; 227 237 228 238 drive->media = ide_disk; 229 - printk("%s DISK drive\n", (id->config == 0x848a) ? "CFA" : "ATA" ); 239 + 240 + printk(KERN_CONT "%s DISK drive\n", 241 + (id->config == 0x848a) ? "CFA" : "ATA"); 230 242 231 243 return; 232 244 ··· 379 387 /* Mmmm.. multiple IRQs.. 380 388 * don't know which was ours 381 389 */ 382 - printk("%s: IRQ probe failed (0x%lx)\n", 390 + printk(KERN_ERR "%s: IRQ probe failed (0x%lx)\n", 383 391 drive->name, cookie); 384 392 } 385 393 } ··· 448 456 return 4; 449 457 } 450 458 #ifdef DEBUG 451 - printk("probing for %s: present=%d, media=%d, probetype=%s\n", 459 + printk(KERN_INFO "probing for %s: present=%d, media=%d, probetype=%s\n", 452 460 drive->name, drive->present, drive->media, 453 461 (cmd == WIN_IDENTIFY) ? "ATA" : "ATAPI"); 454 462 #endif ··· 526 534 const struct ide_tp_ops *tp_ops = hwif->tp_ops; 527 535 u8 stat; 528 536 529 - printk("%s: enabling %s -- ", hwif->name, drive->id->model); 537 + printk(KERN_INFO "%s: enabling %s -- ", hwif->name, drive->id->model); 538 + 530 539 SELECT_DRIVE(drive); 531 540 msleep(50); 532 541 tp_ops->exec_command(hwif, EXABYTE_ENABLE_NEST); ··· 876 883 if (m && m->hwgroup && m->hwgroup != new->hwgroup) { 877 884 if (!new->hwgroup) 878 885 return; 879 - printk("%s: potential irq problem with %s and %s\n", 886 + printk(KERN_WARNING "%s: potential IRQ problem with %s and %s\n", 880 887 hwif->name, new->name, m->name); 881 888 } 882 889 if (!m || m->irq != hwif->irq) /* don't undo a prior perfect match */ ··· 1135 1142 } 1136 1143 1137 1144 #if !defined(__mc68000__) 1138 - printk("%s at 0x%03lx-0x%03lx,0x%03lx on irq %d", hwif->name, 1145 + printk(KERN_INFO "%s at 0x%03lx-0x%03lx,0x%03lx on irq %d", hwif->name, 1139 1146 io_ports->data_addr, io_ports->status_addr, 1140 1147 io_ports->ctl_addr, hwif->irq); 1141 1148 #else 1142 - printk("%s at 0x%08lx on irq %d", hwif->name, 1149 + printk(KERN_INFO "%s at 0x%08lx on irq %d", hwif->name, 1143 1150 io_ports->data_addr, hwif->irq); 1144 1151 #endif /* __mc68000__ */ 1145 1152 if (match) 1146 - printk(" (%sed with %s)", 1153 + printk(KERN_CONT " (%sed with %s)", 1147 1154 hwif->sharing_irq ? "shar" : "serializ", match->name); 1148 - printk("\n"); 1155 + printk(KERN_CONT "\n"); 1149 1156 1150 1157 mutex_unlock(&ide_cfg_mtx); 1151 1158 return 0; ··· 1280 1287 if (!hwif->irq) { 1281 1288 hwif->irq = __ide_default_irq(hwif->io_ports.data_addr); 1282 1289 if (!hwif->irq) { 1283 - printk("%s: DISABLED, NO IRQ\n", hwif->name); 1290 + printk(KERN_ERR "%s: disabled, no IRQ\n", hwif->name); 1284 1291 return 0; 1285 1292 } 1286 1293 } ··· 1310 1317 */ 1311 1318 hwif->irq = __ide_default_irq(hwif->io_ports.data_addr); 1312 1319 if (!hwif->irq) { 1313 - printk("%s: Disabled unable to get IRQ %d.\n", 1320 + printk(KERN_ERR "%s: disabled, unable to get IRQ %d\n", 1314 1321 hwif->name, old_irq); 1315 1322 goto out; 1316 1323 } 1317 1324 if (init_irq(hwif)) { 1318 - printk("%s: probed IRQ %d and default IRQ %d failed.\n", 1325 + printk(KERN_ERR "%s: probed IRQ %d and default IRQ %d failed\n", 1319 1326 hwif->name, old_irq, hwif->irq); 1320 1327 goto out; 1321 1328 } 1322 - printk("%s: probed IRQ %d failed, using default.\n", 1329 + printk(KERN_WARNING "%s: probed IRQ %d failed, using default\n", 1323 1330 hwif->name, hwif->irq); 1324 1331 1325 1332 done: ··· 1588 1595 1589 1596 ide_init_port_data(hwif, idx); 1590 1597 1598 + hwif->host = host; 1599 + 1591 1600 host->ports[i] = hwif; 1592 1601 host->n_ports++; 1593 1602 } ··· 1598 1603 kfree(host); 1599 1604 return NULL; 1600 1605 } 1606 + 1607 + if (hws[0]) 1608 + host->dev[0] = hws[0]->dev; 1609 + 1610 + if (d) 1611 + host->host_flags = d->host_flags; 1601 1612 1602 1613 return host; 1603 1614 }
+2 -2
drivers/ide/ide-proc.c
··· 105 105 len = sprintf(page, "\n"); 106 106 107 107 if (drive) { 108 - unsigned short *val = (unsigned short *) page; 108 + __le16 *val = (__le16 *)page; 109 109 110 110 err = taskfile_lib_get_identify(drive, page); 111 111 if (!err) { ··· 113 113 page = out; 114 114 do { 115 115 out += sprintf(out, "%04x%c", 116 - le16_to_cpu(*val), (++i & 7) ? ' ' : '\n'); 116 + le16_to_cpup(val), (++i & 7) ? ' ' : '\n'); 117 117 val += 1; 118 118 } while (i < (SECTOR_WORDS * 2)); 119 119 len = out - page;
+19 -13
drivers/ide/ide-tape.c
··· 322 322 #define ide_tape_g(disk) \ 323 323 container_of((disk)->private_data, struct ide_tape_obj, driver) 324 324 325 + static void ide_tape_release(struct kref *); 326 + 325 327 static struct ide_tape_obj *ide_tape_get(struct gendisk *disk) 326 328 { 327 329 struct ide_tape_obj *tape = NULL; 328 330 329 331 mutex_lock(&idetape_ref_mutex); 330 332 tape = ide_tape_g(disk); 331 - if (tape) 333 + if (tape) { 332 334 kref_get(&tape->kref); 335 + if (ide_device_get(tape->drive)) { 336 + kref_put(&tape->kref, ide_tape_release); 337 + tape = NULL; 338 + } 339 + } 333 340 mutex_unlock(&idetape_ref_mutex); 334 341 return tape; 335 342 } 336 343 337 - static void ide_tape_release(struct kref *); 338 - 339 344 static void ide_tape_put(struct ide_tape_obj *tape) 340 345 { 341 346 mutex_lock(&idetape_ref_mutex); 347 + ide_device_put(tape->drive); 342 348 kref_put(&tape->kref, ide_tape_release); 343 349 mutex_unlock(&idetape_ref_mutex); 344 350 } ··· 655 649 uptodate = 0; 656 650 } else { 657 651 debug_log(DBG_SENSE, "Block Location - %u\n", 658 - be32_to_cpu(*(u32 *)&readpos[4])); 652 + be32_to_cpup((__be32 *)&readpos[4])); 659 653 660 654 tape->partition = readpos[1]; 661 - tape->first_frame = be32_to_cpu(*(u32 *)&readpos[4]); 655 + tape->first_frame = be32_to_cpup((__be32 *)&readpos[4]); 662 656 set_bit(IDE_AFLAG_ADDRESS_VALID, &drive->atapi_flags); 663 657 } 664 658 } ··· 2381 2375 caps = pc.buf + 4 + pc.buf[3]; 2382 2376 2383 2377 /* convert to host order and save for later use */ 2384 - speed = be16_to_cpu(*(u16 *)&caps[14]); 2385 - max_speed = be16_to_cpu(*(u16 *)&caps[8]); 2378 + speed = be16_to_cpup((__be16 *)&caps[14]); 2379 + max_speed = be16_to_cpup((__be16 *)&caps[8]); 2386 2380 2387 - put_unaligned(max_speed, (u16 *)&caps[8]); 2388 - put_unaligned(be16_to_cpu(*(u16 *)&caps[12]), (u16 *)&caps[12]); 2389 - put_unaligned(speed, (u16 *)&caps[14]); 2390 - put_unaligned(be16_to_cpu(*(u16 *)&caps[16]), (u16 *)&caps[16]); 2381 + *(u16 *)&caps[8] = max_speed; 2382 + *(u16 *)&caps[12] = be16_to_cpup((__be16 *)&caps[12]); 2383 + *(u16 *)&caps[14] = speed; 2384 + *(u16 *)&caps[16] = be16_to_cpup((__be16 *)&caps[16]); 2391 2385 2392 2386 if (!speed) { 2393 2387 printk(KERN_INFO "ide-tape: %s: invalid tape speed " 2394 2388 "(assuming 650KB/sec)\n", drive->name); 2395 - put_unaligned(650, (u16 *)&caps[14]); 2389 + *(u16 *)&caps[14] = 650; 2396 2390 } 2397 2391 if (!max_speed) { 2398 2392 printk(KERN_INFO "ide-tape: %s: invalid max_speed " 2399 2393 "(assuming 650KB/sec)\n", drive->name); 2400 - put_unaligned(650, (u16 *)&caps[8]); 2394 + *(u16 *)&caps[8] = 650; 2401 2395 } 2402 2396 2403 2397 memcpy(&tape->caps, caps, 20);
+10 -2
drivers/ide/ide-taskfile.c
··· 126 126 static ide_startstop_t set_multmode_intr(ide_drive_t *drive) 127 127 { 128 128 ide_hwif_t *hwif = drive->hwif; 129 - u8 stat = hwif->tp_ops->read_status(hwif); 129 + u8 stat; 130 + 131 + local_irq_enable_in_hardirq(); 132 + stat = hwif->tp_ops->read_status(hwif); 130 133 131 134 if (OK_STAT(stat, READY_STAT, BAD_STAT)) 132 135 drive->mult_count = drive->mult_req; ··· 149 146 ide_hwif_t *hwif = drive->hwif; 150 147 int retries = 5; 151 148 u8 stat; 149 + 150 + local_irq_enable_in_hardirq(); 152 151 153 152 while (1) { 154 153 stat = hwif->tp_ops->read_status(hwif); ··· 175 170 static ide_startstop_t recal_intr(ide_drive_t *drive) 176 171 { 177 172 ide_hwif_t *hwif = drive->hwif; 178 - u8 stat = hwif->tp_ops->read_status(hwif); 173 + u8 stat; 174 + 175 + local_irq_enable_in_hardirq(); 176 + stat = hwif->tp_ops->read_status(hwif); 179 177 180 178 if (!OK_STAT(stat, READY_STAT, BAD_STAT)) 181 179 return ide_error(drive, "recal_intr", stat);
+47
drivers/ide/ide.c
··· 618 618 619 619 EXPORT_SYMBOL(generic_ide_ioctl); 620 620 621 + /** 622 + * ide_device_get - get an additional reference to a ide_drive_t 623 + * @drive: device to get a reference to 624 + * 625 + * Gets a reference to the ide_drive_t and increments the use count of the 626 + * underlying LLDD module. 627 + */ 628 + int ide_device_get(ide_drive_t *drive) 629 + { 630 + struct device *host_dev; 631 + struct module *module; 632 + 633 + if (!get_device(&drive->gendev)) 634 + return -ENXIO; 635 + 636 + host_dev = drive->hwif->host->dev[0]; 637 + module = host_dev ? host_dev->driver->owner : NULL; 638 + 639 + if (module && !try_module_get(module)) { 640 + put_device(&drive->gendev); 641 + return -ENXIO; 642 + } 643 + 644 + return 0; 645 + } 646 + EXPORT_SYMBOL_GPL(ide_device_get); 647 + 648 + /** 649 + * ide_device_put - release a reference to a ide_drive_t 650 + * @drive: device to release a reference on 651 + * 652 + * Release a reference to the ide_drive_t and decrements the use count of 653 + * the underlying LLDD module. 654 + */ 655 + void ide_device_put(ide_drive_t *drive) 656 + { 657 + #ifdef CONFIG_MODULE_UNLOAD 658 + struct device *host_dev = drive->hwif->host->dev[0]; 659 + struct module *module = host_dev ? host_dev->driver->owner : NULL; 660 + 661 + if (module) 662 + module_put(module); 663 + #endif 664 + put_device(&drive->gendev); 665 + } 666 + EXPORT_SYMBOL_GPL(ide_device_put); 667 + 621 668 static int ide_bus_match(struct device *dev, struct device_driver *drv) 622 669 { 623 670 return 1;
+6 -2
drivers/ide/legacy/gayle.c
··· 127 127 unsigned long phys_base, res_start, res_n; 128 128 unsigned long base, ctrlport, irqport; 129 129 ide_ack_intr_t *ack_intr; 130 - int a4000, i; 130 + int a4000, i, rc; 131 131 hw_regs_t hw[GAYLE_NUM_HWIFS], *hws[] = { NULL, NULL, NULL, NULL }; 132 132 133 133 if (!MACH_IS_AMIGA) ··· 179 179 hws[i] = &hw[i]; 180 180 } 181 181 182 - return ide_host_add(NULL, hws, NULL); 182 + rc = ide_host_add(NULL, hws, NULL); 183 + if (rc) 184 + release_mem_region(res_start, res_n); 185 + 186 + return rc; 183 187 } 184 188 185 189 module_init(gayle_init);
+1 -23
drivers/ide/legacy/ht6560b.c
··· 3 3 */ 4 4 5 5 /* 6 - * 7 - * Version 0.01 Initial version hacked out of ide.c 8 - * 9 - * Version 0.02 Added support for PIO modes, auto-tune 10 - * 11 - * Version 0.03 Some cleanups 12 - * 13 - * Version 0.05 PIO mode cycle timings auto-tune using bus-speed 14 - * 15 - * Version 0.06 Prefetch mode now defaults no OFF. To set 16 - * prefetch mode OFF/ON use "hdparm -p8/-p9". 17 - * Unmask irq is disabled when prefetch mode 18 - * is enabled. 19 - * 20 - * Version 0.07 Trying to fix CD-ROM detection problem. 21 - * "Prefetch" mode bit OFF for ide disks and 22 - * ON for anything else. 23 - * 24 - * Version 0.08 Need to force prefetch for CDs and other non-disk 25 - * devices. (not sure which devices exactly need 26 - * prefetch) 27 - * 28 6 * HT-6560B EIDE-controller support 29 7 * To activate controller support use kernel parameter "ide0=ht6560b". 30 8 * Use hdparm utility to enable PIO mode support. 31 9 * 32 10 * Author: Mikko Ala-Fossi <maf@iki.fi> 33 - * Jan Evert van Grootheest <janevert@caiway.nl> 11 + * Jan Evert van Grootheest <j.e.van.grootheest@caiway.nl> 34 12 * 35 13 * Try: http://www.maf.iki.fi/~maf/ht6560b/ 36 14 */
+48 -28
drivers/ide/pci/aec62xx.c
··· 13 13 14 14 #include <asm/io.h> 15 15 16 + #define DRV_NAME "aec62xx" 17 + 16 18 struct chipset_bus_clock_list_entry { 17 19 u8 xfer_speed; 18 20 u8 chipset_settings; ··· 61 59 { 0, 0x00, 0x00 } 62 60 }; 63 61 64 - #define BUSCLOCK(D) \ 65 - ((struct chipset_bus_clock_list_entry *) pci_get_drvdata((D))) 66 - 67 - 68 62 /* 69 63 * TO DO: active tuning and correction of cards without a bios. 70 64 */ ··· 86 88 { 87 89 ide_hwif_t *hwif = HWIF(drive); 88 90 struct pci_dev *dev = to_pci_dev(hwif->dev); 91 + struct ide_host *host = pci_get_drvdata(dev); 92 + struct chipset_bus_clock_list_entry *bus_clock = host->host_priv; 89 93 u16 d_conf = 0; 90 94 u8 ultra = 0, ultra_conf = 0; 91 95 u8 tmp0 = 0, tmp1 = 0, tmp2 = 0; ··· 96 96 local_irq_save(flags); 97 97 /* 0x40|(2*drive->dn): Active, 0x41|(2*drive->dn): Recovery */ 98 98 pci_read_config_word(dev, 0x40|(2*drive->dn), &d_conf); 99 - tmp0 = pci_bus_clock_list(speed, BUSCLOCK(dev)); 99 + tmp0 = pci_bus_clock_list(speed, bus_clock); 100 100 d_conf = ((tmp0 & 0xf0) << 4) | (tmp0 & 0xf); 101 101 pci_write_config_word(dev, 0x40|(2*drive->dn), d_conf); 102 102 ··· 104 104 tmp2 = 0x00; 105 105 pci_read_config_byte(dev, 0x54, &ultra); 106 106 tmp1 = ((0x00 << (2*drive->dn)) | (ultra & ~(3 << (2*drive->dn)))); 107 - ultra_conf = pci_bus_clock_list_ultra(speed, BUSCLOCK(dev)); 107 + ultra_conf = pci_bus_clock_list_ultra(speed, bus_clock); 108 108 tmp2 = ((ultra_conf << (2*drive->dn)) | (tmp1 & ~(3 << (2*drive->dn)))); 109 109 pci_write_config_byte(dev, 0x54, tmp2); 110 110 local_irq_restore(flags); ··· 114 114 { 115 115 ide_hwif_t *hwif = HWIF(drive); 116 116 struct pci_dev *dev = to_pci_dev(hwif->dev); 117 + struct ide_host *host = pci_get_drvdata(dev); 118 + struct chipset_bus_clock_list_entry *bus_clock = host->host_priv; 117 119 u8 unit = (drive->select.b.unit & 0x01); 118 120 u8 tmp1 = 0, tmp2 = 0; 119 121 u8 ultra = 0, drive_conf = 0, ultra_conf = 0; ··· 124 122 local_irq_save(flags); 125 123 /* high 4-bits: Active, low 4-bits: Recovery */ 126 124 pci_read_config_byte(dev, 0x40|drive->dn, &drive_conf); 127 - drive_conf = pci_bus_clock_list(speed, BUSCLOCK(dev)); 125 + drive_conf = pci_bus_clock_list(speed, bus_clock); 128 126 pci_write_config_byte(dev, 0x40|drive->dn, drive_conf); 129 127 130 128 pci_read_config_byte(dev, (0x44|hwif->channel), &ultra); 131 129 tmp1 = ((0x00 << (4*unit)) | (ultra & ~(7 << (4*unit)))); 132 - ultra_conf = pci_bus_clock_list_ultra(speed, BUSCLOCK(dev)); 130 + ultra_conf = pci_bus_clock_list_ultra(speed, bus_clock); 133 131 tmp2 = ((ultra_conf << (4*unit)) | (tmp1 & ~(7 << (4*unit)))); 134 132 pci_write_config_byte(dev, (0x44|hwif->channel), tmp2); 135 133 local_irq_restore(flags); ··· 140 138 drive->hwif->port_ops->set_dma_mode(drive, pio + XFER_PIO_0); 141 139 } 142 140 143 - static unsigned int __devinit init_chipset_aec62xx(struct pci_dev *dev, const char *name) 141 + static unsigned int __devinit init_chipset_aec62xx(struct pci_dev *dev) 144 142 { 145 - int bus_speed = ide_pci_clk ? ide_pci_clk : 33; 146 - 147 - if (bus_speed <= 33) 148 - pci_set_drvdata(dev, (void *) aec6xxx_33_base); 149 - else 150 - pci_set_drvdata(dev, (void *) aec6xxx_34_base); 151 - 152 143 /* These are necessary to get AEC6280 Macintosh cards to work */ 153 144 if ((dev->device == PCI_DEVICE_ID_ARTOP_ATP865) || 154 145 (dev->device == PCI_DEVICE_ID_ARTOP_ATP865R)) { ··· 182 187 }; 183 188 184 189 static const struct ide_port_info aec62xx_chipsets[] __devinitdata = { 185 - { /* 0 */ 186 - .name = "AEC6210", 190 + { /* 0: AEC6210 */ 191 + .name = DRV_NAME, 187 192 .init_chipset = init_chipset_aec62xx, 188 193 .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}}, 189 194 .port_ops = &atp850_port_ops, ··· 194 199 .pio_mask = ATA_PIO4, 195 200 .mwdma_mask = ATA_MWDMA2, 196 201 .udma_mask = ATA_UDMA2, 197 - },{ /* 1 */ 198 - .name = "AEC6260", 202 + }, 203 + { /* 1: AEC6260 */ 204 + .name = DRV_NAME, 199 205 .init_chipset = init_chipset_aec62xx, 200 206 .port_ops = &atp86x_port_ops, 201 207 .host_flags = IDE_HFLAG_NO_ATAPI_DMA | IDE_HFLAG_NO_AUTODMA | ··· 204 208 .pio_mask = ATA_PIO4, 205 209 .mwdma_mask = ATA_MWDMA2, 206 210 .udma_mask = ATA_UDMA4, 207 - },{ /* 2 */ 208 - .name = "AEC6260R", 211 + }, 212 + { /* 2: AEC6260R */ 213 + .name = DRV_NAME, 209 214 .init_chipset = init_chipset_aec62xx, 210 215 .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}}, 211 216 .port_ops = &atp86x_port_ops, ··· 215 218 .pio_mask = ATA_PIO4, 216 219 .mwdma_mask = ATA_MWDMA2, 217 220 .udma_mask = ATA_UDMA4, 218 - },{ /* 3 */ 219 - .name = "AEC6280", 221 + }, 222 + { /* 3: AEC6280 */ 223 + .name = DRV_NAME, 220 224 .init_chipset = init_chipset_aec62xx, 221 225 .port_ops = &atp86x_port_ops, 222 226 .host_flags = IDE_HFLAG_NO_ATAPI_DMA | ··· 225 227 .pio_mask = ATA_PIO4, 226 228 .mwdma_mask = ATA_MWDMA2, 227 229 .udma_mask = ATA_UDMA5, 228 - },{ /* 4 */ 229 - .name = "AEC6280R", 230 + }, 231 + { /* 4: AEC6280R */ 232 + .name = DRV_NAME, 230 233 .init_chipset = init_chipset_aec62xx, 231 234 .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}}, 232 235 .port_ops = &atp86x_port_ops, ··· 253 254 254 255 static int __devinit aec62xx_init_one(struct pci_dev *dev, const struct pci_device_id *id) 255 256 { 257 + const struct chipset_bus_clock_list_entry *bus_clock; 256 258 struct ide_port_info d; 257 259 u8 idx = id->driver_data; 260 + int bus_speed = ide_pci_clk ? ide_pci_clk : 33; 258 261 int err; 262 + 263 + if (bus_speed <= 33) 264 + bus_clock = aec6xxx_33_base; 265 + else 266 + bus_clock = aec6xxx_34_base; 259 267 260 268 err = pci_enable_device(dev); 261 269 if (err) ··· 274 268 unsigned long dma_base = pci_resource_start(dev, 4); 275 269 276 270 if (inb(dma_base + 2) & 0x10) { 277 - d.name = (idx == 4) ? "AEC6880R" : "AEC6880"; 271 + printk(KERN_INFO DRV_NAME " %s: AEC6880%s card detected" 272 + "\n", pci_name(dev), (idx == 4) ? "R" : ""); 278 273 d.udma_mask = ATA_UDMA6; 279 274 } 280 275 } 281 276 282 - err = ide_setup_pci_device(dev, &d); 277 + err = ide_pci_init_one(dev, &d, (void *)bus_clock); 283 278 if (err) 284 279 pci_disable_device(dev); 285 280 286 281 return err; 282 + } 283 + 284 + static void __devexit aec62xx_remove(struct pci_dev *dev) 285 + { 286 + ide_pci_remove(dev); 287 + pci_disable_device(dev); 287 288 } 288 289 289 290 static const struct pci_device_id aec62xx_pci_tbl[] = { ··· 307 294 .name = "AEC62xx_IDE", 308 295 .id_table = aec62xx_pci_tbl, 309 296 .probe = aec62xx_init_one, 297 + .remove = aec62xx_remove, 310 298 }; 311 299 312 300 static int __init aec62xx_ide_init(void) ··· 315 301 return ide_pci_register_driver(&driver); 316 302 } 317 303 304 + static void __exit aec62xx_ide_exit(void) 305 + { 306 + pci_unregister_driver(&driver); 307 + } 308 + 318 309 module_init(aec62xx_ide_init); 310 + module_exit(aec62xx_ide_exit); 319 311 320 312 MODULE_AUTHOR("Andre Hedrick"); 321 313 MODULE_DESCRIPTION("PCI driver module for ARTOP AEC62xx IDE");
+13 -5
drivers/ide/pci/alim15x3.c
··· 38 38 39 39 #include <asm/io.h> 40 40 41 + #define DRV_NAME "alim15x3" 42 + 41 43 /* 42 44 * Allow UDMA on M1543C-E chipset for WDC disks that ignore CRC checking 43 45 * (this is DANGEROUS and could result in data corruption). ··· 209 207 /** 210 208 * init_chipset_ali15x3 - Initialise an ALi IDE controller 211 209 * @dev: PCI device 212 - * @name: Name of the controller 213 210 * 214 211 * This function initializes the ALI IDE controller and where 215 212 * appropriate also sets up the 1533 southbridge. 216 213 */ 217 - 218 - static unsigned int __devinit init_chipset_ali15x3 (struct pci_dev *dev, const char *name) 214 + 215 + static unsigned int __devinit init_chipset_ali15x3(struct pci_dev *dev) 219 216 { 220 217 unsigned long flags; 221 218 u8 tmpbyte; ··· 516 515 }; 517 516 518 517 static const struct ide_port_info ali15x3_chipset __devinitdata = { 519 - .name = "ALI15X3", 518 + .name = DRV_NAME, 520 519 .init_chipset = init_chipset_ali15x3, 521 520 .init_hwif = init_hwif_ali15x3, 522 521 .init_dma = init_dma_ali15x3, ··· 566 565 if (idx == 0) 567 566 d.host_flags |= IDE_HFLAG_CLEAR_SIMPLEX; 568 567 569 - return ide_setup_pci_device(dev, &d); 568 + return ide_pci_init_one(dev, &d, NULL); 570 569 } 571 570 572 571 ··· 581 580 .name = "ALI15x3_IDE", 582 581 .id_table = alim15x3_pci_tbl, 583 582 .probe = alim15x3_init_one, 583 + .remove = ide_pci_remove, 584 584 }; 585 585 586 586 static int __init ali15x3_ide_init(void) ··· 589 587 return ide_pci_register_driver(&driver); 590 588 } 591 589 590 + static void __exit ali15x3_ide_exit(void) 591 + { 592 + return pci_unregister_driver(&driver); 593 + } 594 + 592 595 module_init(ali15x3_ide_init); 596 + module_exit(ali15x3_ide_exit); 593 597 594 598 MODULE_AUTHOR("Michael Aubry, Andrzej Krzysztofowicz, CJ, Andre Hedrick, Alan Cox"); 595 599 MODULE_DESCRIPTION("PCI driver module for ALi 15x3 IDE");
+70 -81
drivers/ide/pci/amd74xx.c
··· 21 21 #include <linux/init.h> 22 22 #include <linux/ide.h> 23 23 24 + #define DRV_NAME "amd74xx" 25 + 24 26 enum { 25 27 AMD_IDE_CONFIG = 0x41, 26 28 AMD_CABLE_DETECT = 0x42, ··· 112 110 amd_set_drive(drive, XFER_PIO_0 + pio); 113 111 } 114 112 115 - static void __devinit amd7409_cable_detect(struct pci_dev *dev, 116 - const char *name) 113 + static void __devinit amd7409_cable_detect(struct pci_dev *dev) 117 114 { 118 115 /* no host side cable detection */ 119 116 amd_80w = 0x03; 120 117 } 121 118 122 - static void __devinit amd7411_cable_detect(struct pci_dev *dev, 123 - const char *name) 119 + static void __devinit amd7411_cable_detect(struct pci_dev *dev) 124 120 { 125 121 int i; 126 122 u32 u = 0; ··· 129 129 amd_80w = ((t & 0x3) ? 1 : 0) | ((t & 0xc) ? 2 : 0); 130 130 for (i = 24; i >= 0; i -= 8) 131 131 if (((u >> i) & 4) && !(amd_80w & (1 << (1 - (i >> 4))))) { 132 - printk(KERN_WARNING "%s: BIOS didn't set cable bits " 133 - "correctly. Enabling workaround.\n", 134 - name); 132 + printk(KERN_WARNING DRV_NAME " %s: BIOS didn't set " 133 + "cable bits correctly. Enabling workaround.\n", 134 + pci_name(dev)); 135 135 amd_80w |= (1 << (1 - (i >> 4))); 136 136 } 137 137 } ··· 140 140 * The initialization callback. Initialize drive independent registers. 141 141 */ 142 142 143 - static unsigned int __devinit init_chipset_amd74xx(struct pci_dev *dev, 144 - const char *name) 143 + static unsigned int __devinit init_chipset_amd74xx(struct pci_dev *dev) 145 144 { 146 145 u8 t = 0, offset = amd_offset(dev); 147 146 ··· 153 154 ; /* no UDMA > 2 */ 154 155 else if (dev->vendor == PCI_VENDOR_ID_AMD && 155 156 dev->device == PCI_DEVICE_ID_AMD_VIPER_7409) 156 - amd7409_cable_detect(dev, name); 157 + amd7409_cable_detect(dev); 157 158 else 158 - amd7411_cable_detect(dev, name); 159 + amd7411_cable_detect(dev); 159 160 160 161 /* 161 162 * Take care of prefetch & postwrite. ··· 171 172 else 172 173 t |= 0xf0; 173 174 pci_write_config_byte(dev, AMD_IDE_CONFIG + offset, t); 174 - 175 - /* 176 - * Determine the system bus clock. 177 - */ 178 - 179 - amd_clock = (ide_pci_clk ? ide_pci_clk : 33) * 1000; 180 - 181 - switch (amd_clock) { 182 - case 33000: amd_clock = 33333; break; 183 - case 37000: amd_clock = 37500; break; 184 - case 41000: amd_clock = 41666; break; 185 - } 186 - 187 - if (amd_clock < 20000 || amd_clock > 50000) { 188 - printk(KERN_WARNING "%s: User given PCI clock speed impossible (%d), using 33 MHz instead.\n", 189 - name, amd_clock); 190 - amd_clock = 33333; 191 - } 192 175 193 176 return dev->irq; 194 177 } ··· 203 222 IDE_HFLAG_IO_32BIT | \ 204 223 IDE_HFLAG_UNMASK_IRQS) 205 224 206 - #define DECLARE_AMD_DEV(name_str, swdma, udma) \ 225 + #define DECLARE_AMD_DEV(swdma, udma) \ 207 226 { \ 208 - .name = name_str, \ 227 + .name = DRV_NAME, \ 209 228 .init_chipset = init_chipset_amd74xx, \ 210 229 .init_hwif = init_hwif_amd74xx, \ 211 230 .enablebits = {{0x40,0x02,0x02}, {0x40,0x01,0x01}}, \ ··· 217 236 .udma_mask = udma, \ 218 237 } 219 238 220 - #define DECLARE_NV_DEV(name_str, udma) \ 239 + #define DECLARE_NV_DEV(udma) \ 221 240 { \ 222 - .name = name_str, \ 241 + .name = DRV_NAME, \ 223 242 .init_chipset = init_chipset_amd74xx, \ 224 243 .init_hwif = init_hwif_amd74xx, \ 225 244 .enablebits = {{0x50,0x02,0x02}, {0x50,0x01,0x01}}, \ ··· 232 251 } 233 252 234 253 static const struct ide_port_info amd74xx_chipsets[] __devinitdata = { 235 - /* 0 */ DECLARE_AMD_DEV("AMD7401", 0x00, ATA_UDMA2), 236 - /* 1 */ DECLARE_AMD_DEV("AMD7409", ATA_SWDMA2, ATA_UDMA4), 237 - /* 2 */ DECLARE_AMD_DEV("AMD7411", ATA_SWDMA2, ATA_UDMA5), 238 - /* 3 */ DECLARE_AMD_DEV("AMD7441", ATA_SWDMA2, ATA_UDMA5), 239 - /* 4 */ DECLARE_AMD_DEV("AMD8111", ATA_SWDMA2, ATA_UDMA6), 254 + /* 0: AMD7401 */ DECLARE_AMD_DEV(0x00, ATA_UDMA2), 255 + /* 1: AMD7409 */ DECLARE_AMD_DEV(ATA_SWDMA2, ATA_UDMA4), 256 + /* 2: AMD7411/7441 */ DECLARE_AMD_DEV(ATA_SWDMA2, ATA_UDMA5), 257 + /* 3: AMD8111 */ DECLARE_AMD_DEV(ATA_SWDMA2, ATA_UDMA6), 240 258 241 - /* 5 */ DECLARE_NV_DEV("NFORCE", ATA_UDMA5), 242 - /* 6 */ DECLARE_NV_DEV("NFORCE2", ATA_UDMA6), 243 - /* 7 */ DECLARE_NV_DEV("NFORCE2-U400R", ATA_UDMA6), 244 - /* 8 */ DECLARE_NV_DEV("NFORCE2-U400R-SATA", ATA_UDMA6), 245 - /* 9 */ DECLARE_NV_DEV("NFORCE3-150", ATA_UDMA6), 246 - /* 10 */ DECLARE_NV_DEV("NFORCE3-250", ATA_UDMA6), 247 - /* 11 */ DECLARE_NV_DEV("NFORCE3-250-SATA", ATA_UDMA6), 248 - /* 12 */ DECLARE_NV_DEV("NFORCE3-250-SATA2", ATA_UDMA6), 249 - /* 13 */ DECLARE_NV_DEV("NFORCE-CK804", ATA_UDMA6), 250 - /* 14 */ DECLARE_NV_DEV("NFORCE-MCP04", ATA_UDMA6), 251 - /* 15 */ DECLARE_NV_DEV("NFORCE-MCP51", ATA_UDMA6), 252 - /* 16 */ DECLARE_NV_DEV("NFORCE-MCP55", ATA_UDMA6), 253 - /* 17 */ DECLARE_NV_DEV("NFORCE-MCP61", ATA_UDMA6), 254 - /* 18 */ DECLARE_NV_DEV("NFORCE-MCP65", ATA_UDMA6), 255 - /* 19 */ DECLARE_NV_DEV("NFORCE-MCP67", ATA_UDMA6), 256 - /* 20 */ DECLARE_NV_DEV("NFORCE-MCP73", ATA_UDMA6), 257 - /* 21 */ DECLARE_NV_DEV("NFORCE-MCP77", ATA_UDMA6), 259 + /* 4: NFORCE */ DECLARE_NV_DEV(ATA_UDMA5), 260 + /* 5: >= NFORCE2 */ DECLARE_NV_DEV(ATA_UDMA6), 258 261 259 - /* 22 */ DECLARE_AMD_DEV("AMD5536", ATA_SWDMA2, ATA_UDMA5), 262 + /* 6: AMD5536 */ DECLARE_AMD_DEV(ATA_SWDMA2, ATA_UDMA5), 260 263 }; 261 264 262 265 static int __devinit amd74xx_probe(struct pci_dev *dev, const struct pci_device_id *id) ··· 257 292 if (dev->revision <= 7) 258 293 d.swdma_mask = 0; 259 294 d.host_flags |= IDE_HFLAG_CLEAR_SIMPLEX; 260 - } else if (idx == 4) { 295 + } else if (idx == 3) { 261 296 if (dev->subsystem_vendor == PCI_VENDOR_ID_AMD && 262 297 dev->subsystem_device == PCI_DEVICE_ID_AMD_SERENADE) 263 298 d.udma_mask = ATA_UDMA5; 264 299 } 265 300 266 - printk(KERN_INFO "%s: %s (rev %02x) UDMA%s controller\n", 267 - d.name, pci_name(dev), dev->revision, 268 - amd_dma[fls(d.udma_mask) - 1]); 301 + printk(KERN_INFO "%s %s: UDMA%s controller\n", 302 + d.name, pci_name(dev), amd_dma[fls(d.udma_mask) - 1]); 269 303 270 - return ide_setup_pci_device(dev, &d); 304 + /* 305 + * Determine the system bus clock. 306 + */ 307 + amd_clock = (ide_pci_clk ? ide_pci_clk : 33) * 1000; 308 + 309 + switch (amd_clock) { 310 + case 33000: amd_clock = 33333; break; 311 + case 37000: amd_clock = 37500; break; 312 + case 41000: amd_clock = 41666; break; 313 + } 314 + 315 + if (amd_clock < 20000 || amd_clock > 50000) { 316 + printk(KERN_WARNING "%s: User given PCI clock speed impossible" 317 + " (%d), using 33 MHz instead.\n", 318 + d.name, amd_clock); 319 + amd_clock = 33333; 320 + } 321 + 322 + return ide_pci_init_one(dev, &d, NULL); 271 323 } 272 324 273 325 static const struct pci_device_id amd74xx_pci_tbl[] = { 274 326 { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_COBRA_7401), 0 }, 275 327 { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_VIPER_7409), 1 }, 276 328 { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_VIPER_7411), 2 }, 277 - { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_OPUS_7441), 3 }, 278 - { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_8111_IDE), 4 }, 279 - { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_IDE), 5 }, 280 - { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE), 6 }, 281 - { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2S_IDE), 7 }, 329 + { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_OPUS_7441), 2 }, 330 + { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_8111_IDE), 3 }, 331 + { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_IDE), 4 }, 332 + { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE), 5 }, 333 + { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2S_IDE), 5 }, 282 334 #ifdef CONFIG_BLK_DEV_IDE_SATA 283 - { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA), 8 }, 335 + { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA), 5 }, 284 336 #endif 285 - { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE), 9 }, 286 - { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE), 10 }, 337 + { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE), 5 }, 338 + { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE), 5 }, 287 339 #ifdef CONFIG_BLK_DEV_IDE_SATA 288 - { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA), 11 }, 289 - { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2), 12 }, 340 + { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA), 5 }, 341 + { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2), 5 }, 290 342 #endif 291 - { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE), 13 }, 292 - { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE), 14 }, 293 - { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_IDE), 15 }, 294 - { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE), 16 }, 295 - { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE), 17 }, 296 - { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_IDE), 18 }, 297 - { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_IDE), 19 }, 298 - { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_IDE), 20 }, 299 - { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP77_IDE), 21 }, 300 - { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_CS5536_IDE), 22 }, 343 + { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE), 5 }, 344 + { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE), 5 }, 345 + { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_IDE), 5 }, 346 + { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE), 5 }, 347 + { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE), 5 }, 348 + { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_IDE), 5 }, 349 + { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_IDE), 5 }, 350 + { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_IDE), 5 }, 351 + { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP77_IDE), 5 }, 352 + { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_CS5536_IDE), 6 }, 301 353 { 0, }, 302 354 }; 303 355 MODULE_DEVICE_TABLE(pci, amd74xx_pci_tbl); ··· 323 341 .name = "AMD_IDE", 324 342 .id_table = amd74xx_pci_tbl, 325 343 .probe = amd74xx_probe, 344 + .remove = ide_pci_remove, 326 345 }; 327 346 328 347 static int __init amd74xx_ide_init(void) ··· 331 348 return ide_pci_register_driver(&driver); 332 349 } 333 350 351 + static void __exit amd74xx_ide_exit(void) 352 + { 353 + pci_unregister_driver(&driver); 354 + } 355 + 334 356 module_init(amd74xx_ide_init); 357 + module_exit(amd74xx_ide_exit); 335 358 336 359 MODULE_AUTHOR("Vojtech Pavlik"); 337 360 MODULE_DESCRIPTION("AMD PCI IDE driver");
+15 -5
drivers/ide/pci/atiixp.c
··· 11 11 #include <linux/ide.h> 12 12 #include <linux/init.h> 13 13 14 + #define DRV_NAME "atiixp" 15 + 14 16 #define ATIIXP_IDE_PIO_TIMING 0x40 15 17 #define ATIIXP_IDE_MDMA_TIMING 0x44 16 18 #define ATIIXP_IDE_PIO_CONTROL 0x48 ··· 139 137 }; 140 138 141 139 static const struct ide_port_info atiixp_pci_info[] __devinitdata = { 142 - { /* 0 */ 143 - .name = "ATIIXP", 140 + { /* 0: IXP200/300/400/700 */ 141 + .name = DRV_NAME, 144 142 .enablebits = {{0x48,0x01,0x00}, {0x48,0x08,0x00}}, 145 143 .port_ops = &atiixp_port_ops, 146 144 .host_flags = IDE_HFLAG_LEGACY_IRQS, 147 145 .pio_mask = ATA_PIO4, 148 146 .mwdma_mask = ATA_MWDMA2, 149 147 .udma_mask = ATA_UDMA5, 150 - },{ /* 1 */ 151 - .name = "SB600_PATA", 148 + }, 149 + { /* 1: IXP600 */ 150 + .name = DRV_NAME, 152 151 .enablebits = {{0x48,0x01,0x00}, {0x00,0x00,0x00}}, 153 152 .port_ops = &atiixp_port_ops, 154 153 .host_flags = IDE_HFLAG_SINGLE | IDE_HFLAG_LEGACY_IRQS, ··· 170 167 171 168 static int __devinit atiixp_init_one(struct pci_dev *dev, const struct pci_device_id *id) 172 169 { 173 - return ide_setup_pci_device(dev, &atiixp_pci_info[id->driver_data]); 170 + return ide_pci_init_one(dev, &atiixp_pci_info[id->driver_data], NULL); 174 171 } 175 172 176 173 static const struct pci_device_id atiixp_pci_tbl[] = { ··· 187 184 .name = "ATIIXP_IDE", 188 185 .id_table = atiixp_pci_tbl, 189 186 .probe = atiixp_init_one, 187 + .remove = ide_pci_remove, 190 188 }; 191 189 192 190 static int __init atiixp_ide_init(void) ··· 195 191 return ide_pci_register_driver(&driver); 196 192 } 197 193 194 + static void __exit atiixp_ide_exit(void) 195 + { 196 + pci_unregister_driver(&driver); 197 + } 198 + 198 199 module_init(atiixp_ide_init); 200 + module_exit(atiixp_ide_exit); 199 201 200 202 MODULE_AUTHOR("HUI YU"); 201 203 MODULE_DESCRIPTION("PCI driver module for ATI IXP IDE");
+22 -28
drivers/ide/pci/cmd64x.c
··· 19 19 20 20 #include <asm/io.h> 21 21 22 + #define DRV_NAME "cmd64x" 23 + 22 24 #define CMD_DEBUG 0 23 25 24 26 #if CMD_DEBUG ··· 332 330 return (dma_stat & 7) != 4; 333 331 } 334 332 335 - static unsigned int __devinit init_chipset_cmd64x(struct pci_dev *dev, const char *name) 333 + static unsigned int __devinit init_chipset_cmd64x(struct pci_dev *dev) 336 334 { 337 335 u8 mrdmode = 0; 338 - 339 - if (dev->device == PCI_DEVICE_ID_CMD_646) { 340 - 341 - switch (dev->revision) { 342 - case 0x07: 343 - case 0x05: 344 - printk("%s: UltraDMA capable\n", name); 345 - break; 346 - case 0x03: 347 - default: 348 - printk("%s: MultiWord DMA force limited\n", name); 349 - break; 350 - case 0x01: 351 - printk("%s: MultiWord DMA limited, " 352 - "IRQ workaround enabled\n", name); 353 - break; 354 - } 355 - } 356 336 357 337 /* Set a good latency timer and cache line size value. */ 358 338 (void) pci_write_config_byte(dev, PCI_LATENCY_TIMER, 64); ··· 409 425 }; 410 426 411 427 static const struct ide_port_info cmd64x_chipsets[] __devinitdata = { 412 - { /* 0 */ 413 - .name = "CMD643", 428 + { /* 0: CMD643 */ 429 + .name = DRV_NAME, 414 430 .init_chipset = init_chipset_cmd64x, 415 431 .enablebits = {{0x00,0x00,0x00}, {0x51,0x08,0x08}}, 416 432 .port_ops = &cmd64x_port_ops, ··· 420 436 .pio_mask = ATA_PIO5, 421 437 .mwdma_mask = ATA_MWDMA2, 422 438 .udma_mask = 0x00, /* no udma */ 423 - },{ /* 1 */ 424 - .name = "CMD646", 439 + }, 440 + { /* 1: CMD646 */ 441 + .name = DRV_NAME, 425 442 .init_chipset = init_chipset_cmd64x, 426 443 .enablebits = {{0x51,0x04,0x04}, {0x51,0x08,0x08}}, 427 444 .chipset = ide_cmd646, ··· 432 447 .pio_mask = ATA_PIO5, 433 448 .mwdma_mask = ATA_MWDMA2, 434 449 .udma_mask = ATA_UDMA2, 435 - },{ /* 2 */ 436 - .name = "CMD648", 450 + }, 451 + { /* 2: CMD648 */ 452 + .name = DRV_NAME, 437 453 .init_chipset = init_chipset_cmd64x, 438 454 .enablebits = {{0x51,0x04,0x04}, {0x51,0x08,0x08}}, 439 455 .port_ops = &cmd64x_port_ops, ··· 443 457 .pio_mask = ATA_PIO5, 444 458 .mwdma_mask = ATA_MWDMA2, 445 459 .udma_mask = ATA_UDMA4, 446 - },{ /* 3 */ 447 - .name = "CMD649", 460 + }, 461 + { /* 3: CMD649 */ 462 + .name = DRV_NAME, 448 463 .init_chipset = init_chipset_cmd64x, 449 464 .enablebits = {{0x51,0x04,0x04}, {0x51,0x08,0x08}}, 450 465 .port_ops = &cmd64x_port_ops, ··· 494 507 } 495 508 } 496 509 497 - return ide_setup_pci_device(dev, &d); 510 + return ide_pci_init_one(dev, &d, NULL); 498 511 } 499 512 500 513 static const struct pci_device_id cmd64x_pci_tbl[] = { ··· 510 523 .name = "CMD64x_IDE", 511 524 .id_table = cmd64x_pci_tbl, 512 525 .probe = cmd64x_init_one, 526 + .remove = ide_pci_remove, 513 527 }; 514 528 515 529 static int __init cmd64x_ide_init(void) ··· 518 530 return ide_pci_register_driver(&driver); 519 531 } 520 532 533 + static void __exit cmd64x_ide_exit(void) 534 + { 535 + pci_unregister_driver(&driver); 536 + } 537 + 521 538 module_init(cmd64x_ide_init); 539 + module_exit(cmd64x_ide_exit); 522 540 523 541 MODULE_AUTHOR("Eddie Dost, David Miller, Andre Hedrick"); 524 542 MODULE_DESCRIPTION("PCI driver module for CMD64x IDE");
+10 -14
drivers/ide/pci/cs5520.c
··· 41 41 #include <linux/ide.h> 42 42 #include <linux/dma-mapping.h> 43 43 44 + #define DRV_NAME "cs5520" 45 + 44 46 struct pio_clocks 45 47 { 46 48 int address; ··· 94 92 .set_dma_mode = cs5520_set_dma_mode, 95 93 }; 96 94 97 - #define DECLARE_CS_DEV(name_str) \ 98 - { \ 99 - .name = name_str, \ 100 - .port_ops = &cs5520_port_ops, \ 101 - .host_flags = IDE_HFLAG_ISA_PORTS | \ 102 - IDE_HFLAG_CS5520, \ 103 - .pio_mask = ATA_PIO4, \ 104 - } 105 - 106 - static const struct ide_port_info cyrix_chipsets[] __devinitdata = { 107 - /* 0 */ DECLARE_CS_DEV("Cyrix 5510"), 108 - /* 1 */ DECLARE_CS_DEV("Cyrix 5520") 95 + static const struct ide_port_info cyrix_chipset __devinitdata = { 96 + .name = DRV_NAME, 97 + .port_ops = &cs5520_port_ops, 98 + .host_flags = IDE_HFLAG_ISA_PORTS | IDE_HFLAG_CS5520, 99 + .pio_mask = ATA_PIO4, 109 100 }; 110 101 111 102 /* ··· 109 114 110 115 static int __devinit cs5520_init_one(struct pci_dev *dev, const struct pci_device_id *id) 111 116 { 112 - const struct ide_port_info *d = &cyrix_chipsets[id->driver_data]; 117 + const struct ide_port_info *d = &cyrix_chipset; 113 118 hw_regs_t hw[4], *hws[] = { NULL, NULL, NULL, NULL }; 114 119 115 120 ide_setup_pci_noise(dev, d); ··· 123 128 } 124 129 pci_set_master(dev); 125 130 if (pci_set_dma_mask(dev, DMA_32BIT_MASK)) { 126 - printk(KERN_WARNING "cs5520: No suitable DMA available.\n"); 131 + printk(KERN_WARNING "%s: No suitable DMA available.\n", 132 + d->name); 127 133 return -ENODEV; 128 134 } 129 135
+14 -6
drivers/ide/pci/cs5530.c
··· 22 22 23 23 #include <asm/io.h> 24 24 25 + #define DRV_NAME "cs5530" 26 + 25 27 /* 26 28 * Here are the standard PIO mode 0-4 timings for each "format". 27 29 * Format-0 uses fast data reg timings, with slower command reg timings. ··· 129 127 /** 130 128 * init_chipset_5530 - set up 5530 bridge 131 129 * @dev: PCI device 132 - * @name: device name 133 130 * 134 131 * Initialize the cs5530 bridge for reliable IDE DMA operation. 135 132 */ 136 133 137 - static unsigned int __devinit init_chipset_cs5530 (struct pci_dev *dev, const char *name) 134 + static unsigned int __devinit init_chipset_cs5530(struct pci_dev *dev) 138 135 { 139 136 struct pci_dev *master_0 = NULL, *cs5530_0 = NULL; 140 137 ··· 152 151 } 153 152 } 154 153 if (!master_0) { 155 - printk(KERN_ERR "%s: unable to locate PCI MASTER function\n", name); 154 + printk(KERN_ERR DRV_NAME ": unable to locate PCI MASTER function\n"); 156 155 goto out; 157 156 } 158 157 if (!cs5530_0) { 159 - printk(KERN_ERR "%s: unable to locate CS5530 LEGACY function\n", name); 158 + printk(KERN_ERR DRV_NAME ": unable to locate CS5530 LEGACY function\n"); 160 159 goto out; 161 160 } 162 161 ··· 244 243 }; 245 244 246 245 static const struct ide_port_info cs5530_chipset __devinitdata = { 247 - .name = "CS5530", 246 + .name = DRV_NAME, 248 247 .init_chipset = init_chipset_cs5530, 249 248 .init_hwif = init_hwif_cs5530, 250 249 .port_ops = &cs5530_port_ops, ··· 257 256 258 257 static int __devinit cs5530_init_one(struct pci_dev *dev, const struct pci_device_id *id) 259 258 { 260 - return ide_setup_pci_device(dev, &cs5530_chipset); 259 + return ide_pci_init_one(dev, &cs5530_chipset, NULL); 261 260 } 262 261 263 262 static const struct pci_device_id cs5530_pci_tbl[] = { ··· 270 269 .name = "CS5530 IDE", 271 270 .id_table = cs5530_pci_tbl, 272 271 .probe = cs5530_init_one, 272 + .remove = ide_pci_remove, 273 273 }; 274 274 275 275 static int __init cs5530_ide_init(void) ··· 278 276 return ide_pci_register_driver(&driver); 279 277 } 280 278 279 + static void __exit cs5530_ide_exit(void) 280 + { 281 + pci_unregister_driver(&driver); 282 + } 283 + 281 284 module_init(cs5530_ide_init); 285 + module_exit(cs5530_ide_exit); 282 286 283 287 MODULE_AUTHOR("Mark Lord"); 284 288 MODULE_DESCRIPTION("PCI driver module for Cyrix/NS 5530 IDE");
+11 -2
drivers/ide/pci/cs5535.c
··· 26 26 #include <linux/pci.h> 27 27 #include <linux/ide.h> 28 28 29 + #define DRV_NAME "cs5535" 30 + 29 31 #define MSR_ATAC_BASE 0x51300000 30 32 #define ATAC_GLD_MSR_CAP (MSR_ATAC_BASE+0) 31 33 #define ATAC_GLD_MSR_CONFIG (MSR_ATAC_BASE+0x01) ··· 171 169 }; 172 170 173 171 static const struct ide_port_info cs5535_chipset __devinitdata = { 174 - .name = "CS5535", 172 + .name = DRV_NAME, 175 173 .port_ops = &cs5535_port_ops, 176 174 .host_flags = IDE_HFLAG_SINGLE | IDE_HFLAG_POST_SET_MODE, 177 175 .pio_mask = ATA_PIO4, ··· 182 180 static int __devinit cs5535_init_one(struct pci_dev *dev, 183 181 const struct pci_device_id *id) 184 182 { 185 - return ide_setup_pci_device(dev, &cs5535_chipset); 183 + return ide_pci_init_one(dev, &cs5535_chipset, NULL); 186 184 } 187 185 188 186 static const struct pci_device_id cs5535_pci_tbl[] = { ··· 196 194 .name = "CS5535_IDE", 197 195 .id_table = cs5535_pci_tbl, 198 196 .probe = cs5535_init_one, 197 + .remove = ide_pci_remove, 199 198 }; 200 199 201 200 static int __init cs5535_ide_init(void) ··· 204 201 return ide_pci_register_driver(&driver); 205 202 } 206 203 204 + static void __exit cs5535_ide_exit(void) 205 + { 206 + pci_unregister_driver(&driver); 207 + } 208 + 207 209 module_init(cs5535_ide_init); 210 + module_exit(cs5535_ide_exit); 208 211 209 212 MODULE_AUTHOR("AMD"); 210 213 MODULE_DESCRIPTION("PCI driver module for AMD/NS CS5535 IDE");
+27 -8
drivers/ide/pci/cy82c693.c
··· 48 48 49 49 #include <asm/io.h> 50 50 51 + #define DRV_NAME "cy82c693" 52 + 51 53 /* the current version */ 52 54 #define CY82_VERSION "CY82C693U driver v0.34 99-13-12 Andreas S. Krebs (akrebs@altavista.net)" 53 55 ··· 332 330 /* 333 331 * this function is called during init and is used to setup the cy82c693 chip 334 332 */ 335 - static unsigned int __devinit init_chipset_cy82c693(struct pci_dev *dev, const char *name) 333 + static unsigned int __devinit init_chipset_cy82c693(struct pci_dev *dev) 336 334 { 337 335 if (PCI_FUNC(dev->devfn) != 1) 338 336 return 0; ··· 351 349 data = inb(CY82_DATA_PORT); 352 350 353 351 #if CY82C693_DEBUG_INFO 354 - printk(KERN_INFO "%s: Peripheral Configuration Register: 0x%X\n", 355 - name, data); 352 + printk(KERN_INFO DRV_NAME ": Peripheral Configuration Register: 0x%X\n", 353 + data); 356 354 #endif /* CY82C693_DEBUG_INFO */ 357 355 358 356 /* ··· 373 371 outb(data, CY82_DATA_PORT); 374 372 375 373 #if CY82C693_DEBUG_INFO 376 - printk(KERN_INFO "%s: New Peripheral Configuration Register: 0x%X\n", 377 - name, data); 374 + printk(KERN_INFO ": New Peripheral Configuration Register: 0x%X\n", 375 + data); 378 376 #endif /* CY82C693_DEBUG_INFO */ 379 377 380 378 #endif /* CY82C693_SETDMA_CLOCK */ ··· 400 398 }; 401 399 402 400 static const struct ide_port_info cy82c693_chipset __devinitdata = { 403 - .name = "CY82C693", 401 + .name = DRV_NAME, 404 402 .init_chipset = init_chipset_cy82c693, 405 403 .init_iops = init_iops_cy82c693, 406 404 .port_ops = &cy82c693_port_ops, ··· 421 419 if ((dev->class >> 8) == PCI_CLASS_STORAGE_IDE && 422 420 PCI_FUNC(dev->devfn) == 1) { 423 421 dev2 = pci_get_slot(dev->bus, dev->devfn + 1); 424 - ret = ide_setup_pci_devices(dev, dev2, &cy82c693_chipset); 425 - /* We leak pci refs here but thats ok - we can't be unloaded */ 422 + ret = ide_pci_init_two(dev, dev2, &cy82c693_chipset, NULL); 423 + if (ret) 424 + pci_dev_put(dev2); 426 425 } 427 426 return ret; 427 + } 428 + 429 + static void __devexit cy82c693_remove(struct pci_dev *dev) 430 + { 431 + struct ide_host *host = pci_get_drvdata(dev); 432 + struct pci_dev *dev2 = host->dev[1] ? to_pci_dev(host->dev[1]) : NULL; 433 + 434 + ide_pci_remove(dev); 435 + pci_dev_put(dev2); 428 436 } 429 437 430 438 static const struct pci_device_id cy82c693_pci_tbl[] = { ··· 447 435 .name = "Cypress_IDE", 448 436 .id_table = cy82c693_pci_tbl, 449 437 .probe = cy82c693_init_one, 438 + .remove = cy82c693_remove, 450 439 }; 451 440 452 441 static int __init cy82c693_ide_init(void) ··· 455 442 return ide_pci_register_driver(&driver); 456 443 } 457 444 445 + static void __exit cy82c693_ide_exit(void) 446 + { 447 + pci_unregister_driver(&driver); 448 + } 449 + 458 450 module_init(cy82c693_ide_init); 451 + module_exit(cy82c693_ide_exit); 459 452 460 453 MODULE_AUTHOR("Andreas Krebs, Andre Hedrick"); 461 454 MODULE_DESCRIPTION("PCI driver module for the Cypress CY82C693 IDE");
+40 -36
drivers/ide/pci/generic.c
··· 27 27 #include <linux/ide.h> 28 28 #include <linux/init.h> 29 29 30 + #define DRV_NAME "ide_pci_generic" 31 + 30 32 static int ide_generic_all; /* Set to claim all devices */ 31 33 32 34 module_param_named(all_generic_ide, ide_generic_all, bool, 0444); ··· 36 34 37 35 #define IDE_HFLAGS_UMC (IDE_HFLAG_NO_DMA | IDE_HFLAG_FORCE_LEGACY_IRQS) 38 36 39 - #define DECLARE_GENERIC_PCI_DEV(name_str, extra_flags) \ 37 + #define DECLARE_GENERIC_PCI_DEV(extra_flags) \ 40 38 { \ 41 - .name = name_str, \ 39 + .name = DRV_NAME, \ 42 40 .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA | \ 43 41 extra_flags, \ 44 42 .swdma_mask = ATA_SWDMA2, \ ··· 47 45 } 48 46 49 47 static const struct ide_port_info generic_chipsets[] __devinitdata = { 50 - /* 0 */ DECLARE_GENERIC_PCI_DEV("Unknown", 0), 48 + /* 0: Unknown */ 49 + DECLARE_GENERIC_PCI_DEV(0), 51 50 52 - { /* 1 */ 53 - .name = "NS87410", 51 + { /* 1: NS87410 */ 52 + .name = DRV_NAME, 54 53 .enablebits = { {0x43, 0x08, 0x08}, {0x47, 0x08, 0x08} }, 55 54 .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA, 56 55 .swdma_mask = ATA_SWDMA2, ··· 59 56 .udma_mask = ATA_UDMA6, 60 57 }, 61 58 62 - /* 2 */ DECLARE_GENERIC_PCI_DEV("SAMURAI", 0), 63 - /* 3 */ DECLARE_GENERIC_PCI_DEV("HT6565", 0), 64 - /* 4 */ DECLARE_GENERIC_PCI_DEV("UM8673F", IDE_HFLAGS_UMC), 65 - /* 5 */ DECLARE_GENERIC_PCI_DEV("UM8886A", IDE_HFLAGS_UMC), 66 - /* 6 */ DECLARE_GENERIC_PCI_DEV("UM8886BF", IDE_HFLAGS_UMC), 67 - /* 7 */ DECLARE_GENERIC_PCI_DEV("HINT_IDE", 0), 68 - /* 8 */ DECLARE_GENERIC_PCI_DEV("VIA_IDE", IDE_HFLAG_NO_AUTODMA), 69 - /* 9 */ DECLARE_GENERIC_PCI_DEV("OPTI621V", IDE_HFLAG_NO_AUTODMA), 59 + /* 2: SAMURAI / HT6565 / HINT_IDE */ 60 + DECLARE_GENERIC_PCI_DEV(0), 61 + /* 3: UM8673F / UM8886A / UM8886BF */ 62 + DECLARE_GENERIC_PCI_DEV(IDE_HFLAGS_UMC), 63 + /* 4: VIA_IDE / OPTI621V / Piccolo010{2,3,5} */ 64 + DECLARE_GENERIC_PCI_DEV(IDE_HFLAG_NO_AUTODMA), 70 65 71 - { /* 10 */ 72 - .name = "VIA8237SATA", 66 + { /* 5: VIA8237SATA */ 67 + .name = DRV_NAME, 73 68 .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA | 74 69 IDE_HFLAG_OFF_BOARD, 75 70 .swdma_mask = ATA_SWDMA2, ··· 75 74 .udma_mask = ATA_UDMA6, 76 75 }, 77 76 78 - /* 11 */ DECLARE_GENERIC_PCI_DEV("Piccolo0102", IDE_HFLAG_NO_AUTODMA), 79 - /* 12 */ DECLARE_GENERIC_PCI_DEV("Piccolo0103", IDE_HFLAG_NO_AUTODMA), 80 - /* 13 */ DECLARE_GENERIC_PCI_DEV("Piccolo0105", IDE_HFLAG_NO_AUTODMA), 81 - 82 - { /* 14 */ 83 - .name = "Revolution", 77 + { /* 6: Revolution */ 78 + .name = DRV_NAME, 84 79 .host_flags = IDE_HFLAG_CLEAR_SIMPLEX | 85 80 IDE_HFLAG_TRUST_BIOS_FOR_DMA | 86 81 IDE_HFLAG_OFF_BOARD, ··· 131 134 u16 command; 132 135 pci_read_config_word(dev, PCI_COMMAND, &command); 133 136 if (!(command & PCI_COMMAND_IO)) { 134 - printk(KERN_INFO "Skipping disabled %s IDE " 135 - "controller.\n", d->name); 137 + printk(KERN_INFO "%s %s: skipping disabled " 138 + "controller\n", d->name, pci_name(dev)); 136 139 goto out; 137 140 } 138 141 } 139 - ret = ide_setup_pci_device(dev, d); 142 + ret = ide_pci_init_one(dev, d, NULL); 140 143 out: 141 144 return ret; 142 145 } ··· 144 147 static const struct pci_device_id generic_pci_tbl[] = { 145 148 { PCI_VDEVICE(NS, PCI_DEVICE_ID_NS_87410), 1 }, 146 149 { PCI_VDEVICE(PCTECH, PCI_DEVICE_ID_PCTECH_SAMURAI_IDE), 2 }, 147 - { PCI_VDEVICE(HOLTEK, PCI_DEVICE_ID_HOLTEK_6565), 3 }, 148 - { PCI_VDEVICE(UMC, PCI_DEVICE_ID_UMC_UM8673F), 4 }, 149 - { PCI_VDEVICE(UMC, PCI_DEVICE_ID_UMC_UM8886A), 5 }, 150 - { PCI_VDEVICE(UMC, PCI_DEVICE_ID_UMC_UM8886BF), 6 }, 151 - { PCI_VDEVICE(HINT, PCI_DEVICE_ID_HINT_VXPROII_IDE), 7 }, 152 - { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_82C561), 8 }, 153 - { PCI_VDEVICE(OPTI, PCI_DEVICE_ID_OPTI_82C558), 9 }, 150 + { PCI_VDEVICE(HOLTEK, PCI_DEVICE_ID_HOLTEK_6565), 2 }, 151 + { PCI_VDEVICE(UMC, PCI_DEVICE_ID_UMC_UM8673F), 3 }, 152 + { PCI_VDEVICE(UMC, PCI_DEVICE_ID_UMC_UM8886A), 3 }, 153 + { PCI_VDEVICE(UMC, PCI_DEVICE_ID_UMC_UM8886BF), 3 }, 154 + { PCI_VDEVICE(HINT, PCI_DEVICE_ID_HINT_VXPROII_IDE), 2 }, 155 + { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_82C561), 4 }, 156 + { PCI_VDEVICE(OPTI, PCI_DEVICE_ID_OPTI_82C558), 4 }, 154 157 #ifdef CONFIG_BLK_DEV_IDE_SATA 155 - { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_8237_SATA), 10 }, 158 + { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_8237_SATA), 5 }, 156 159 #endif 157 - { PCI_VDEVICE(TOSHIBA, PCI_DEVICE_ID_TOSHIBA_PICCOLO), 11 }, 158 - { PCI_VDEVICE(TOSHIBA, PCI_DEVICE_ID_TOSHIBA_PICCOLO_1), 12 }, 159 - { PCI_VDEVICE(TOSHIBA, PCI_DEVICE_ID_TOSHIBA_PICCOLO_2), 13 }, 160 - { PCI_VDEVICE(NETCELL, PCI_DEVICE_ID_REVOLUTION), 14 }, 160 + { PCI_VDEVICE(TOSHIBA, PCI_DEVICE_ID_TOSHIBA_PICCOLO), 4 }, 161 + { PCI_VDEVICE(TOSHIBA, PCI_DEVICE_ID_TOSHIBA_PICCOLO_1), 4 }, 162 + { PCI_VDEVICE(TOSHIBA, PCI_DEVICE_ID_TOSHIBA_PICCOLO_2), 4 }, 163 + { PCI_VDEVICE(NETCELL, PCI_DEVICE_ID_REVOLUTION), 6 }, 161 164 /* 162 165 * Must come last. If you add entries adjust 163 166 * this table and generic_chipsets[] appropriately. ··· 171 174 .name = "PCI_IDE", 172 175 .id_table = generic_pci_tbl, 173 176 .probe = generic_init_one, 177 + .remove = ide_pci_remove, 174 178 }; 175 179 176 180 static int __init generic_ide_init(void) ··· 179 181 return ide_pci_register_driver(&driver); 180 182 } 181 183 184 + static void __exit generic_ide_exit(void) 185 + { 186 + pci_unregister_driver(&driver); 187 + } 188 + 182 189 module_init(generic_ide_init); 190 + module_exit(generic_ide_exit); 183 191 184 192 MODULE_AUTHOR("Andre Hedrick"); 185 193 MODULE_DESCRIPTION("PCI driver module for generic PCI IDE");
+15 -6
drivers/ide/pci/hpt34x.c
··· 33 33 #include <linux/init.h> 34 34 #include <linux/ide.h> 35 35 36 + #define DRV_NAME "hpt34x" 37 + 36 38 #define HPT343_DEBUG_DRIVE_INFO 0 37 39 38 40 static void hpt34x_set_mode(ide_drive_t *drive, const u8 speed) ··· 79 77 */ 80 78 #define HPT34X_PCI_INIT_REG 0x80 81 79 82 - static unsigned int __devinit init_chipset_hpt34x(struct pci_dev *dev, const char *name) 80 + static unsigned int __devinit init_chipset_hpt34x(struct pci_dev *dev) 83 81 { 84 82 int i = 0; 85 83 unsigned long hpt34xIoBase = pci_resource_start(dev, 4); ··· 128 126 IDE_HFLAG_NO_AUTODMA) 129 127 130 128 static const struct ide_port_info hpt34x_chipsets[] __devinitdata = { 131 - { /* 0 */ 132 - .name = "HPT343", 129 + { /* 0: HPT343 */ 130 + .name = DRV_NAME, 133 131 .init_chipset = init_chipset_hpt34x, 134 132 .port_ops = &hpt34x_port_ops, 135 133 .host_flags = IDE_HFLAGS_HPT34X | IDE_HFLAG_NON_BOOTABLE, 136 134 .pio_mask = ATA_PIO5, 137 135 }, 138 - { /* 1 */ 139 - .name = "HPT345", 136 + { /* 1: HPT345 */ 137 + .name = DRV_NAME, 140 138 .init_chipset = init_chipset_hpt34x, 141 139 .port_ops = &hpt34x_port_ops, 142 140 .host_flags = IDE_HFLAGS_HPT34X | IDE_HFLAG_OFF_BOARD, ··· 158 156 159 157 d = &hpt34x_chipsets[(pcicmd & PCI_COMMAND_MEMORY) ? 1 : 0]; 160 158 161 - return ide_setup_pci_device(dev, d); 159 + return ide_pci_init_one(dev, d, NULL); 162 160 } 163 161 164 162 static const struct pci_device_id hpt34x_pci_tbl[] = { ··· 171 169 .name = "HPT34x_IDE", 172 170 .id_table = hpt34x_pci_tbl, 173 171 .probe = hpt34x_init_one, 172 + .remove = ide_pci_remove, 174 173 }; 175 174 176 175 static int __init hpt34x_ide_init(void) ··· 179 176 return ide_pci_register_driver(&driver); 180 177 } 181 178 179 + static void __exit hpt34x_ide_exit(void) 180 + { 181 + pci_unregister_driver(&driver); 182 + } 183 + 182 184 module_init(hpt34x_ide_init); 185 + module_exit(hpt34x_ide_exit); 183 186 184 187 MODULE_AUTHOR("Andre Hedrick"); 185 188 MODULE_DESCRIPTION("PCI driver module for Highpoint 34x IDE");
+89 -94
drivers/ide/pci/hpt366.c
··· 131 131 #include <asm/uaccess.h> 132 132 #include <asm/io.h> 133 133 134 + #define DRV_NAME "hpt366" 135 + 134 136 /* various tuning parameters */ 135 137 #define HPT_RESET_STATE_ENGINE 136 138 #undef HPT_DELAY_INTERRUPT ··· 622 620 { 623 621 ide_hwif_t *hwif = HWIF(drive); 624 622 struct pci_dev *dev = to_pci_dev(hwif->dev); 625 - struct hpt_info *info = pci_get_drvdata(dev); 623 + struct ide_host *host = pci_get_drvdata(dev); 624 + struct hpt_info *info = host->host_priv + (hwif->dev == host->dev[1]); 626 625 u8 mask = hwif->ultra_mask; 627 626 628 627 switch (info->chip_type) { ··· 663 660 { 664 661 ide_hwif_t *hwif = HWIF(drive); 665 662 struct pci_dev *dev = to_pci_dev(hwif->dev); 666 - struct hpt_info *info = pci_get_drvdata(dev); 663 + struct ide_host *host = pci_get_drvdata(dev); 664 + struct hpt_info *info = host->host_priv + (hwif->dev == host->dev[1]); 667 665 668 666 switch (info->chip_type) { 669 667 case HPT372 : ··· 698 694 699 695 static void hpt3xx_set_mode(ide_drive_t *drive, const u8 speed) 700 696 { 701 - struct pci_dev *dev = to_pci_dev(drive->hwif->dev); 702 - struct hpt_info *info = pci_get_drvdata(dev); 697 + ide_hwif_t *hwif = drive->hwif; 698 + struct pci_dev *dev = to_pci_dev(hwif->dev); 699 + struct ide_host *host = pci_get_drvdata(dev); 700 + struct hpt_info *info = host->host_priv + (hwif->dev == host->dev[1]); 703 701 struct hpt_timings *t = info->timings; 704 702 u8 itr_addr = 0x40 + (drive->dn * 4); 705 703 u32 old_itr = 0; ··· 744 738 { 745 739 ide_hwif_t *hwif = HWIF(drive); 746 740 struct pci_dev *dev = to_pci_dev(hwif->dev); 747 - struct hpt_info *info = pci_get_drvdata(dev); 741 + struct ide_host *host = pci_get_drvdata(dev); 742 + struct hpt_info *info = host->host_priv + (hwif->dev == host->dev[1]); 748 743 749 744 if (drive->quirk_list) { 750 745 if (info->chip_type >= HPT370) { ··· 970 963 return 1; 971 964 } 972 965 973 - static unsigned int __devinit init_chipset_hpt366(struct pci_dev *dev, const char *name) 966 + static unsigned int __devinit init_chipset_hpt366(struct pci_dev *dev) 974 967 { 975 - struct hpt_info *info = kmalloc(sizeof(struct hpt_info), GFP_KERNEL); 976 968 unsigned long io_base = pci_resource_start(dev, 4); 969 + struct ide_host *host = pci_get_drvdata(dev); 970 + struct hpt_info *info = host->host_priv + (&dev->dev == host->dev[1]); 971 + const char *name = DRV_NAME; 977 972 u8 pci_clk, dpll_clk = 0; /* PCI and DPLL clock in MHz */ 978 973 u8 chip_type; 979 974 enum ata_clock clock; 980 975 981 - if (info == NULL) { 982 - printk(KERN_ERR "%s: out of memory!\n", name); 983 - return -ENOMEM; 984 - } 985 - 986 - /* 987 - * Copy everything from a static "template" structure 988 - * to just allocated per-chip hpt_info structure. 989 - */ 990 - memcpy(info, pci_get_drvdata(dev), sizeof(struct hpt_info)); 991 976 chip_type = info->chip_type; 992 977 993 978 pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, (L1_CACHE_BYTES / 4)); ··· 1047 1048 if ((temp & 0xFFFFF000) != 0xABCDE000) { 1048 1049 int i; 1049 1050 1050 - printk(KERN_WARNING "%s: no clock data saved by BIOS\n", 1051 - name); 1051 + printk(KERN_WARNING "%s %s: no clock data saved by " 1052 + "BIOS\n", name, pci_name(dev)); 1052 1053 1053 1054 /* Calculate the average value of f_CNT. */ 1054 1055 for (temp = i = 0; i < 128; i++) { ··· 1073 1074 else 1074 1075 pci_clk = 66; 1075 1076 1076 - printk(KERN_INFO "%s: DPLL base: %d MHz, f_CNT: %d, " 1077 - "assuming %d MHz PCI\n", name, dpll_clk, f_cnt, pci_clk); 1077 + printk(KERN_INFO "%s %s: DPLL base: %d MHz, f_CNT: %d, " 1078 + "assuming %d MHz PCI\n", name, pci_name(dev), 1079 + dpll_clk, f_cnt, pci_clk); 1078 1080 } else { 1079 1081 u32 itr1 = 0; 1080 1082 ··· 1141 1141 } 1142 1142 1143 1143 if (info->timings->clock_table[clock] == NULL) { 1144 - printk(KERN_ERR "%s: unknown bus timing!\n", name); 1145 - kfree(info); 1144 + printk(KERN_ERR "%s %s: unknown bus timing!\n", 1145 + name, pci_name(dev)); 1146 1146 return -EIO; 1147 1147 } 1148 1148 ··· 1168 1168 f_low += adjust >> 1; 1169 1169 } 1170 1170 if (adjust == 8) { 1171 - printk(KERN_ERR "%s: DPLL did not stabilize!\n", name); 1172 - kfree(info); 1171 + printk(KERN_ERR "%s %s: DPLL did not stabilize!\n", 1172 + name, pci_name(dev)); 1173 1173 return -EIO; 1174 1174 } 1175 1175 1176 - printk("%s: using %d MHz DPLL clock\n", name, dpll_clk); 1176 + printk(KERN_INFO "%s %s: using %d MHz DPLL clock\n", 1177 + name, pci_name(dev), dpll_clk); 1177 1178 } else { 1178 1179 /* Mark the fact that we're not using the DPLL. */ 1179 1180 dpll_clk = 0; 1180 1181 1181 - printk("%s: using %d MHz PCI clock\n", name, pci_clk); 1182 + printk(KERN_INFO "%s %s: using %d MHz PCI clock\n", 1183 + name, pci_name(dev), pci_clk); 1182 1184 } 1183 1185 1184 1186 /* Store the clock frequencies. */ 1185 1187 info->dpll_clk = dpll_clk; 1186 1188 info->pci_clk = pci_clk; 1187 1189 info->clock = clock; 1188 - 1189 - /* Point to this chip's own instance of the hpt_info structure. */ 1190 - pci_set_drvdata(dev, info); 1191 1190 1192 1191 if (chip_type >= HPT370) { 1193 1192 u8 mcr1, mcr4; ··· 1217 1218 static u8 __devinit hpt3xx_cable_detect(ide_hwif_t *hwif) 1218 1219 { 1219 1220 struct pci_dev *dev = to_pci_dev(hwif->dev); 1220 - struct hpt_info *info = pci_get_drvdata(dev); 1221 + struct ide_host *host = pci_get_drvdata(dev); 1222 + struct hpt_info *info = host->host_priv + (hwif->dev == host->dev[1]); 1221 1223 u8 chip_type = info->chip_type; 1222 1224 u8 scr1 = 0, ata66 = hwif->channel ? 0x01 : 0x02; 1223 1225 ··· 1262 1262 static void __devinit init_hwif_hpt366(ide_hwif_t *hwif) 1263 1263 { 1264 1264 struct pci_dev *dev = to_pci_dev(hwif->dev); 1265 - struct hpt_info *info = pci_get_drvdata(dev); 1265 + struct ide_host *host = pci_get_drvdata(dev); 1266 + struct hpt_info *info = host->host_priv + (hwif->dev == host->dev[1]); 1266 1267 int serialize = HPT_SERIALIZE_IO; 1267 1268 u8 chip_type = info->chip_type; 1268 1269 u8 new_mcr, old_mcr = 0; ··· 1365 1364 if (dev2->irq != dev->irq) { 1366 1365 /* FIXME: we need a core pci_set_interrupt() */ 1367 1366 dev2->irq = dev->irq; 1368 - printk(KERN_INFO "HPT374: PCI config space interrupt fixed\n"); 1367 + printk(KERN_INFO DRV_NAME " %s: PCI config space interrupt " 1368 + "fixed\n", pci_name(dev2)); 1369 1369 } 1370 1370 } 1371 1371 ··· 1401 1399 pci_read_config_byte(dev2, PCI_INTERRUPT_PIN, &pin2); 1402 1400 1403 1401 if (pin1 != pin2 && dev->irq == dev2->irq) { 1404 - printk(KERN_INFO "HPT36x: onboard version of chipset, " 1405 - "pin1=%d pin2=%d\n", pin1, pin2); 1402 + printk(KERN_INFO DRV_NAME " %s: onboard version of chipset, " 1403 + "pin1=%d pin2=%d\n", pci_name(dev), pin1, pin2); 1406 1404 return 1; 1407 1405 } 1408 1406 ··· 1457 1455 }; 1458 1456 1459 1457 static const struct ide_port_info hpt366_chipsets[] __devinitdata = { 1460 - { /* 0 */ 1461 - .name = "HPT36x", 1458 + { /* 0: HPT36x */ 1459 + .name = DRV_NAME, 1462 1460 .init_chipset = init_chipset_hpt366, 1463 1461 .init_hwif = init_hwif_hpt366, 1464 1462 .init_dma = init_dma_hpt366, ··· 1474 1472 .host_flags = IDE_HFLAGS_HPT3XX | IDE_HFLAG_SINGLE, 1475 1473 .pio_mask = ATA_PIO4, 1476 1474 .mwdma_mask = ATA_MWDMA2, 1477 - },{ /* 1 */ 1478 - .name = "HPT372A", 1479 - .init_chipset = init_chipset_hpt366, 1480 - .init_hwif = init_hwif_hpt366, 1481 - .init_dma = init_dma_hpt366, 1482 - .enablebits = {{0x50,0x04,0x04}, {0x54,0x04,0x04}}, 1483 - .port_ops = &hpt3xx_port_ops, 1484 - .dma_ops = &hpt37x_dma_ops, 1485 - .host_flags = IDE_HFLAGS_HPT3XX, 1486 - .pio_mask = ATA_PIO4, 1487 - .mwdma_mask = ATA_MWDMA2, 1488 - },{ /* 2 */ 1489 - .name = "HPT302", 1490 - .init_chipset = init_chipset_hpt366, 1491 - .init_hwif = init_hwif_hpt366, 1492 - .init_dma = init_dma_hpt366, 1493 - .enablebits = {{0x50,0x04,0x04}, {0x54,0x04,0x04}}, 1494 - .port_ops = &hpt3xx_port_ops, 1495 - .dma_ops = &hpt37x_dma_ops, 1496 - .host_flags = IDE_HFLAGS_HPT3XX, 1497 - .pio_mask = ATA_PIO4, 1498 - .mwdma_mask = ATA_MWDMA2, 1499 - },{ /* 3 */ 1500 - .name = "HPT371", 1501 - .init_chipset = init_chipset_hpt366, 1502 - .init_hwif = init_hwif_hpt366, 1503 - .init_dma = init_dma_hpt366, 1504 - .enablebits = {{0x50,0x04,0x04}, {0x54,0x04,0x04}}, 1505 - .port_ops = &hpt3xx_port_ops, 1506 - .dma_ops = &hpt37x_dma_ops, 1507 - .host_flags = IDE_HFLAGS_HPT3XX, 1508 - .pio_mask = ATA_PIO4, 1509 - .mwdma_mask = ATA_MWDMA2, 1510 - },{ /* 4 */ 1511 - .name = "HPT374", 1512 - .init_chipset = init_chipset_hpt366, 1513 - .init_hwif = init_hwif_hpt366, 1514 - .init_dma = init_dma_hpt366, 1515 - .enablebits = {{0x50,0x04,0x04}, {0x54,0x04,0x04}}, 1516 - .udma_mask = ATA_UDMA5, 1517 - .port_ops = &hpt3xx_port_ops, 1518 - .dma_ops = &hpt37x_dma_ops, 1519 - .host_flags = IDE_HFLAGS_HPT3XX, 1520 - .pio_mask = ATA_PIO4, 1521 - .mwdma_mask = ATA_MWDMA2, 1522 - },{ /* 5 */ 1523 - .name = "HPT372N", 1475 + }, 1476 + { /* 1: HPT3xx */ 1477 + .name = DRV_NAME, 1524 1478 .init_chipset = init_chipset_hpt366, 1525 1479 .init_hwif = init_hwif_hpt366, 1526 1480 .init_dma = init_dma_hpt366, ··· 1500 1542 static int __devinit hpt366_init_one(struct pci_dev *dev, const struct pci_device_id *id) 1501 1543 { 1502 1544 const struct hpt_info *info = NULL; 1545 + struct hpt_info *dyn_info; 1503 1546 struct pci_dev *dev2 = NULL; 1504 1547 struct ide_port_info d; 1505 1548 u8 idx = id->driver_data; 1506 1549 u8 rev = dev->revision; 1550 + int ret; 1507 1551 1508 1552 if ((idx == 0 || idx == 4) && (PCI_FUNC(dev->devfn) & 1)) 1509 1553 return -ENODEV; ··· 1542 1582 break; 1543 1583 } 1544 1584 1545 - d = hpt366_chipsets[idx]; 1585 + printk(KERN_INFO DRV_NAME ": %s chipset detected\n", info->chip_name); 1546 1586 1547 - d.name = info->chip_name; 1587 + d = hpt366_chipsets[min_t(u8, idx, 1)]; 1588 + 1548 1589 d.udma_mask = info->udma_mask; 1549 1590 1550 1591 /* fixup ->dma_ops for HPT370/HPT370A */ 1551 1592 if (info == &hpt370 || info == &hpt370a) 1552 1593 d.dma_ops = &hpt370_dma_ops; 1553 1594 1554 - pci_set_drvdata(dev, (void *)info); 1555 - 1556 1595 if (info == &hpt36x || info == &hpt374) 1557 1596 dev2 = pci_get_slot(dev->bus, dev->devfn + 1); 1558 1597 1559 - if (dev2) { 1560 - int ret; 1598 + dyn_info = kzalloc(sizeof(*dyn_info) * (dev2 ? 2 : 1), GFP_KERNEL); 1599 + if (dyn_info == NULL) { 1600 + printk(KERN_ERR "%s %s: out of memory!\n", 1601 + d.name, pci_name(dev)); 1602 + pci_dev_put(dev2); 1603 + return -ENOMEM; 1604 + } 1561 1605 1562 - pci_set_drvdata(dev2, (void *)info); 1606 + /* 1607 + * Copy everything from a static "template" structure 1608 + * to just allocated per-chip hpt_info structure. 1609 + */ 1610 + memcpy(dyn_info, info, sizeof(*dyn_info)); 1611 + 1612 + if (dev2) { 1613 + memcpy(dyn_info + 1, info, sizeof(*dyn_info)); 1563 1614 1564 1615 if (info == &hpt374) 1565 1616 hpt374_init(dev, dev2); ··· 1579 1608 d.host_flags &= ~IDE_HFLAG_NON_BOOTABLE; 1580 1609 } 1581 1610 1582 - ret = ide_setup_pci_devices(dev, dev2, &d); 1583 - if (ret < 0) 1611 + ret = ide_pci_init_two(dev, dev2, &d, dyn_info); 1612 + if (ret < 0) { 1584 1613 pci_dev_put(dev2); 1614 + kfree(dyn_info); 1615 + } 1585 1616 return ret; 1586 1617 } 1587 1618 1588 - return ide_setup_pci_device(dev, &d); 1619 + ret = ide_pci_init_one(dev, &d, dyn_info); 1620 + if (ret < 0) 1621 + kfree(dyn_info); 1622 + 1623 + return ret; 1624 + } 1625 + 1626 + static void __devexit hpt366_remove(struct pci_dev *dev) 1627 + { 1628 + struct ide_host *host = pci_get_drvdata(dev); 1629 + struct ide_info *info = host->host_priv; 1630 + struct pci_dev *dev2 = host->dev[1] ? to_pci_dev(host->dev[1]) : NULL; 1631 + 1632 + ide_pci_remove(dev); 1633 + pci_dev_put(dev2); 1634 + kfree(info); 1589 1635 } 1590 1636 1591 1637 static const struct pci_device_id hpt366_pci_tbl[] __devinitconst = { ··· 1620 1632 .name = "HPT366_IDE", 1621 1633 .id_table = hpt366_pci_tbl, 1622 1634 .probe = hpt366_init_one, 1635 + .remove = hpt366_remove, 1623 1636 }; 1624 1637 1625 1638 static int __init hpt366_ide_init(void) ··· 1628 1639 return ide_pci_register_driver(&driver); 1629 1640 } 1630 1641 1642 + static void __exit hpt366_ide_exit(void) 1643 + { 1644 + pci_unregister_driver(&driver); 1645 + } 1646 + 1631 1647 module_init(hpt366_ide_init); 1648 + module_exit(hpt366_ide_exit); 1632 1649 1633 1650 MODULE_AUTHOR("Andre Hedrick"); 1634 1651 MODULE_DESCRIPTION("PCI driver module for Highpoint HPT366 IDE");
+19 -16
drivers/ide/pci/it8213.c
··· 14 14 #include <linux/ide.h> 15 15 #include <linux/init.h> 16 16 17 + #define DRV_NAME "it8213" 18 + 17 19 /** 18 20 * it8213_set_pio_mode - set host controller for PIO mode 19 21 * @drive: drive ··· 157 155 .cable_detect = it8213_cable_detect, 158 156 }; 159 157 160 - #define DECLARE_ITE_DEV(name_str) \ 161 - { \ 162 - .name = name_str, \ 163 - .enablebits = { {0x41, 0x80, 0x80} }, \ 164 - .port_ops = &it8213_port_ops, \ 165 - .host_flags = IDE_HFLAG_SINGLE, \ 166 - .pio_mask = ATA_PIO4, \ 167 - .swdma_mask = ATA_SWDMA2_ONLY, \ 168 - .mwdma_mask = ATA_MWDMA12_ONLY, \ 169 - .udma_mask = ATA_UDMA6, \ 170 - } 171 - 172 - static const struct ide_port_info it8213_chipsets[] __devinitdata = { 173 - /* 0 */ DECLARE_ITE_DEV("IT8213"), 158 + static const struct ide_port_info it8213_chipset __devinitdata = { 159 + .name = DRV_NAME, 160 + .enablebits = { {0x41, 0x80, 0x80} }, 161 + .port_ops = &it8213_port_ops, 162 + .host_flags = IDE_HFLAG_SINGLE, 163 + .pio_mask = ATA_PIO4, 164 + .swdma_mask = ATA_SWDMA2_ONLY, 165 + .mwdma_mask = ATA_MWDMA12_ONLY, 166 + .udma_mask = ATA_UDMA6, 174 167 }; 175 - 176 168 177 169 /** 178 170 * it8213_init_one - pci layer discovery entry ··· 180 184 181 185 static int __devinit it8213_init_one(struct pci_dev *dev, const struct pci_device_id *id) 182 186 { 183 - return ide_setup_pci_device(dev, &it8213_chipsets[id->driver_data]); 187 + return ide_pci_init_one(dev, &it8213_chipset, NULL); 184 188 } 185 189 186 190 static const struct pci_device_id it8213_pci_tbl[] = { ··· 194 198 .name = "ITE8213_IDE", 195 199 .id_table = it8213_pci_tbl, 196 200 .probe = it8213_init_one, 201 + .remove = ide_pci_remove, 197 202 }; 198 203 199 204 static int __init it8213_ide_init(void) ··· 202 205 return ide_pci_register_driver(&driver); 203 206 } 204 207 208 + static void __exit it8213_ide_exit(void) 209 + { 210 + pci_unregister_driver(&driver); 211 + } 212 + 205 213 module_init(it8213_ide_init); 214 + module_exit(it8213_ide_exit); 206 215 207 216 MODULE_AUTHOR("Jack Lee, Alan Cox"); 208 217 MODULE_DESCRIPTION("PCI driver module for the ITE 8213");
+44 -30
drivers/ide/pci/it821x.c
··· 67 67 #include <linux/ide.h> 68 68 #include <linux/init.h> 69 69 70 + #define DRV_NAME "it821x" 71 + 70 72 struct it821x_dev 71 73 { 72 74 unsigned int smart:1, /* Are we in smart raid mode */ ··· 536 534 static void __devinit init_hwif_it821x(ide_hwif_t *hwif) 537 535 { 538 536 struct pci_dev *dev = to_pci_dev(hwif->dev); 539 - struct it821x_dev **itdevs = (struct it821x_dev **)pci_get_drvdata(dev); 540 - struct it821x_dev *idev = itdevs[hwif->channel]; 537 + struct ide_host *host = pci_get_drvdata(dev); 538 + struct it821x_dev *itdevs = host->host_priv; 539 + struct it821x_dev *idev = itdevs + hwif->channel; 541 540 u8 conf; 542 541 543 542 ide_set_hwifdata(hwif, idev); ··· 571 568 idev->timing10 = 1; 572 569 hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA; 573 570 if (idev->smart == 0) 574 - printk(KERN_WARNING "it821x: Revision 0x10, workarounds activated.\n"); 571 + printk(KERN_WARNING DRV_NAME " %s: revision 0x10, " 572 + "workarounds activated\n", pci_name(dev)); 575 573 } 576 574 577 575 if (idev->smart == 0) { ··· 605 601 pci_write_config_byte(dev, PCI_LATENCY_TIMER, 0x20); 606 602 } 607 603 608 - static unsigned int __devinit init_chipset_it821x(struct pci_dev *dev, const char *name) 604 + static unsigned int __devinit init_chipset_it821x(struct pci_dev *dev) 609 605 { 610 606 u8 conf; 611 607 static char *mode[2] = { "pass through", "smart" }; 612 608 613 609 /* Force the card into bypass mode if so requested */ 614 610 if (it8212_noraid) { 615 - printk(KERN_INFO "it8212: forcing bypass mode.\n"); 611 + printk(KERN_INFO DRV_NAME " %s: forcing bypass mode\n", 612 + pci_name(dev)); 616 613 it8212_disable_raid(dev); 617 614 } 618 615 pci_read_config_byte(dev, 0x50, &conf); 619 - printk(KERN_INFO "it821x: controller in %s mode.\n", mode[conf & 1]); 616 + printk(KERN_INFO DRV_NAME " %s: controller in %s mode\n", 617 + pci_name(dev), mode[conf & 1]); 620 618 return 0; 621 619 } 622 620 ··· 630 624 .cable_detect = it821x_cable_detect, 631 625 }; 632 626 633 - #define DECLARE_ITE_DEV(name_str) \ 634 - { \ 635 - .name = name_str, \ 636 - .init_chipset = init_chipset_it821x, \ 637 - .init_hwif = init_hwif_it821x, \ 638 - .port_ops = &it821x_port_ops, \ 639 - .pio_mask = ATA_PIO4, \ 640 - } 641 - 642 - static const struct ide_port_info it821x_chipsets[] __devinitdata = { 643 - /* 0 */ DECLARE_ITE_DEV("IT8212"), 627 + static const struct ide_port_info it821x_chipset __devinitdata = { 628 + .name = DRV_NAME, 629 + .init_chipset = init_chipset_it821x, 630 + .init_hwif = init_hwif_it821x, 631 + .port_ops = &it821x_port_ops, 632 + .pio_mask = ATA_PIO4, 644 633 }; 645 634 646 635 /** ··· 649 648 650 649 static int __devinit it821x_init_one(struct pci_dev *dev, const struct pci_device_id *id) 651 650 { 652 - struct it821x_dev *itdevs[2] = { NULL, NULL} , *itdev; 653 - unsigned int i; 651 + struct it821x_dev *itdevs; 652 + int rc; 654 653 655 - for (i = 0; i < 2; i++) { 656 - itdev = kzalloc(sizeof(*itdev), GFP_KERNEL); 657 - if (itdev == NULL) { 658 - kfree(itdevs[0]); 659 - printk(KERN_ERR "it821x: out of memory\n"); 660 - return -ENOMEM; 661 - } 662 - 663 - itdevs[i] = itdev; 654 + itdevs = kzalloc(2 * sizeof(*itdevs), GFP_KERNEL); 655 + if (itdevs == NULL) { 656 + printk(KERN_ERR DRV_NAME " %s: out of memory\n", pci_name(dev)); 657 + return -ENOMEM; 664 658 } 665 659 666 - pci_set_drvdata(dev, itdevs); 660 + rc = ide_pci_init_one(dev, &it821x_chipset, itdevs); 661 + if (rc) 662 + kfree(itdevs); 667 663 668 - return ide_setup_pci_device(dev, &it821x_chipsets[id->driver_data]); 664 + return rc; 665 + } 666 + 667 + static void __devexit it821x_remove(struct pci_dev *dev) 668 + { 669 + struct ide_host *host = pci_get_drvdata(dev); 670 + struct it821x_dev *itdevs = host->host_priv; 671 + 672 + ide_pci_remove(dev); 673 + kfree(itdevs); 669 674 } 670 675 671 676 static const struct pci_device_id it821x_pci_tbl[] = { ··· 686 679 .name = "ITE821x IDE", 687 680 .id_table = it821x_pci_tbl, 688 681 .probe = it821x_init_one, 682 + .remove = it821x_remove, 689 683 }; 690 684 691 685 static int __init it821x_ide_init(void) ··· 694 686 return ide_pci_register_driver(&driver); 695 687 } 696 688 689 + static void __exit it821x_ide_exit(void) 690 + { 691 + pci_unregister_driver(&driver); 692 + } 693 + 697 694 module_init(it821x_ide_init); 695 + module_exit(it821x_ide_exit); 698 696 699 697 module_param_named(noraid, it8212_noraid, int, S_IRUGO); 700 698 MODULE_PARM_DESC(noraid, "Force card into bypass mode");
+11 -2
drivers/ide/pci/jmicron.c
··· 12 12 #include <linux/ide.h> 13 13 #include <linux/init.h> 14 14 15 + #define DRV_NAME "jmicron" 16 + 15 17 typedef enum { 16 18 PORT_PATA0 = 0, 17 19 PORT_PATA1 = 1, ··· 104 102 }; 105 103 106 104 static const struct ide_port_info jmicron_chipset __devinitdata = { 107 - .name = "JMB", 105 + .name = DRV_NAME, 108 106 .enablebits = { { 0x40, 0x01, 0x01 }, { 0x40, 0x10, 0x10 } }, 109 107 .port_ops = &jmicron_port_ops, 110 108 .pio_mask = ATA_PIO5, ··· 123 121 124 122 static int __devinit jmicron_init_one(struct pci_dev *dev, const struct pci_device_id *id) 125 123 { 126 - return ide_setup_pci_device(dev, &jmicron_chipset); 124 + return ide_pci_init_one(dev, &jmicron_chipset, NULL); 127 125 } 128 126 129 127 /* All JMB PATA controllers have and will continue to have the same ··· 154 152 .name = "JMicron IDE", 155 153 .id_table = jmicron_pci_tbl, 156 154 .probe = jmicron_init_one, 155 + .remove = ide_pci_remove, 157 156 }; 158 157 159 158 static int __init jmicron_ide_init(void) ··· 162 159 return ide_pci_register_driver(&driver); 163 160 } 164 161 162 + static void __exit jmicron_ide_exit(void) 163 + { 164 + pci_unregister_driver(&driver); 165 + } 166 + 165 167 module_init(jmicron_ide_init); 168 + module_exit(jmicron_ide_exit); 166 169 167 170 MODULE_AUTHOR("Alan Cox"); 168 171 MODULE_DESCRIPTION("PCI driver module for the JMicron in legacy modes");
+11 -2
drivers/ide/pci/ns87415.c
··· 19 19 20 20 #include <asm/io.h> 21 21 22 + #define DRV_NAME "ns87415" 23 + 22 24 #ifdef CONFIG_SUPERIO 23 25 /* SUPERIO 87560 is a PoS chip that NatSem denies exists. 24 26 * Unfortunately, it's built-in on all Astro-based PA-RISC workstations ··· 307 305 }; 308 306 309 307 static const struct ide_port_info ns87415_chipset __devinitdata = { 310 - .name = "NS87415", 308 + .name = DRV_NAME, 311 309 .init_hwif = init_hwif_ns87415, 312 310 .port_ops = &ns87415_port_ops, 313 311 .dma_ops = &ns87415_dma_ops, ··· 326 324 d.tp_ops = &superio_tp_ops; 327 325 } 328 326 #endif 329 - return ide_setup_pci_device(dev, &d); 327 + return ide_pci_init_one(dev, &d, NULL); 330 328 } 331 329 332 330 static const struct pci_device_id ns87415_pci_tbl[] = { ··· 339 337 .name = "NS87415_IDE", 340 338 .id_table = ns87415_pci_tbl, 341 339 .probe = ns87415_init_one, 340 + .remove = ide_pci_remove, 342 341 }; 343 342 344 343 static int __init ns87415_ide_init(void) ··· 347 344 return ide_pci_register_driver(&driver); 348 345 } 349 346 347 + static void __exit ns87415_ide_exit(void) 348 + { 349 + pci_unregister_driver(&driver); 350 + } 351 + 350 352 module_init(ns87415_ide_init); 353 + module_exit(ns87415_ide_exit); 351 354 352 355 MODULE_AUTHOR("Mark Lord, Eddie Dost, Andre Hedrick"); 353 356 MODULE_DESCRIPTION("PCI driver module for NS87415 IDE");
+11 -2
drivers/ide/pci/opti621.c
··· 90 90 91 91 #include <asm/io.h> 92 92 93 + #define DRV_NAME "opti621" 94 + 93 95 #define READ_REG 0 /* index of Read cycle timing register */ 94 96 #define WRITE_REG 1 /* index of Write cycle timing register */ 95 97 #define CNTRL_REG 3 /* index of Control register */ ··· 202 200 }; 203 201 204 202 static const struct ide_port_info opti621_chipset __devinitdata = { 205 - .name = "OPTI621/X", 203 + .name = DRV_NAME, 206 204 .enablebits = { {0x45, 0x80, 0x00}, {0x40, 0x08, 0x00} }, 207 205 .port_ops = &opti621_port_ops, 208 206 .host_flags = IDE_HFLAG_NO_DMA, ··· 211 209 212 210 static int __devinit opti621_init_one(struct pci_dev *dev, const struct pci_device_id *id) 213 211 { 214 - return ide_setup_pci_device(dev, &opti621_chipset); 212 + return ide_pci_init_one(dev, &opti621_chipset, NULL); 215 213 } 216 214 217 215 static const struct pci_device_id opti621_pci_tbl[] = { ··· 225 223 .name = "Opti621_IDE", 226 224 .id_table = opti621_pci_tbl, 227 225 .probe = opti621_init_one, 226 + .remove = ide_pci_remove, 228 227 }; 229 228 230 229 static int __init opti621_ide_init(void) ··· 233 230 return ide_pci_register_driver(&driver); 234 231 } 235 232 233 + static void __exit opti621_ide_exit(void) 234 + { 235 + pci_unregister_driver(&driver); 236 + } 237 + 236 238 module_init(opti621_ide_init); 239 + module_exit(opti621_ide_exit); 237 240 238 241 MODULE_AUTHOR("Jaromir Koutek, Jan Harkes, Mark Lord"); 239 242 MODULE_DESCRIPTION("PCI driver module for Opti621 IDE");
+46 -32
drivers/ide/pci/pdc202xx_new.c
··· 31 31 #include <asm/pci-bridge.h> 32 32 #endif 33 33 34 + #define DRV_NAME "pdc202xx_new" 35 + 34 36 #undef DEBUG 35 37 36 38 #ifdef DEBUG ··· 326 324 } 327 325 #endif /* CONFIG_PPC_PMAC */ 328 326 329 - static unsigned int __devinit init_chipset_pdcnew(struct pci_dev *dev, const char *name) 327 + static unsigned int __devinit init_chipset_pdcnew(struct pci_dev *dev) 330 328 { 329 + const char *name = DRV_NAME; 331 330 unsigned long dma_base = pci_resource_start(dev, 4); 332 331 unsigned long sec_dma_base = dma_base + 0x08; 333 332 long pll_input, pll_output, ratio; ··· 361 358 * registers setting. 362 359 */ 363 360 pll_input = detect_pll_input_clock(dma_base); 364 - printk("%s: PLL input clock is %ld kHz\n", name, pll_input / 1000); 361 + printk(KERN_INFO "%s %s: PLL input clock is %ld kHz\n", 362 + name, pci_name(dev), pll_input / 1000); 365 363 366 364 /* Sanity check */ 367 365 if (unlikely(pll_input < 5000000L || pll_input > 70000000L)) { 368 - printk(KERN_ERR "%s: Bad PLL input clock %ld Hz, giving up!\n", 369 - name, pll_input); 366 + printk(KERN_ERR "%s %s: Bad PLL input clock %ld Hz, giving up!" 367 + "\n", name, pci_name(dev), pll_input); 370 368 goto out; 371 369 } 372 370 ··· 403 399 r = 0x00; 404 400 } else { 405 401 /* Invalid ratio */ 406 - printk(KERN_ERR "%s: Bad ratio %ld, giving up!\n", name, ratio); 402 + printk(KERN_ERR "%s %s: Bad ratio %ld, giving up!\n", 403 + name, pci_name(dev), ratio); 407 404 goto out; 408 405 } 409 406 ··· 414 409 415 410 if (unlikely(f < 0 || f > 127)) { 416 411 /* Invalid F */ 417 - printk(KERN_ERR "%s: F[%d] invalid!\n", name, f); 412 + printk(KERN_ERR "%s %s: F[%d] invalid!\n", 413 + name, pci_name(dev), f); 418 414 goto out; 419 415 } 420 416 ··· 461 455 462 456 if (dev2->irq != dev->irq) { 463 457 dev2->irq = dev->irq; 464 - printk(KERN_INFO "PDC20270: PCI config space " 465 - "interrupt fixed\n"); 458 + printk(KERN_INFO DRV_NAME " %s: PCI config space " 459 + "interrupt fixed\n", pci_name(dev)); 466 460 } 467 461 468 462 return dev2; ··· 479 473 .cable_detect = pdcnew_cable_detect, 480 474 }; 481 475 482 - #define DECLARE_PDCNEW_DEV(name_str, udma) \ 476 + #define DECLARE_PDCNEW_DEV(udma) \ 483 477 { \ 484 - .name = name_str, \ 478 + .name = DRV_NAME, \ 485 479 .init_chipset = init_chipset_pdcnew, \ 486 480 .port_ops = &pdcnew_port_ops, \ 487 481 .host_flags = IDE_HFLAG_POST_SET_MODE | \ ··· 493 487 } 494 488 495 489 static const struct ide_port_info pdcnew_chipsets[] __devinitdata = { 496 - /* 0 */ DECLARE_PDCNEW_DEV("PDC20268", ATA_UDMA5), 497 - /* 1 */ DECLARE_PDCNEW_DEV("PDC20269", ATA_UDMA6), 498 - /* 2 */ DECLARE_PDCNEW_DEV("PDC20270", ATA_UDMA5), 499 - /* 3 */ DECLARE_PDCNEW_DEV("PDC20271", ATA_UDMA6), 500 - /* 4 */ DECLARE_PDCNEW_DEV("PDC20275", ATA_UDMA6), 501 - /* 5 */ DECLARE_PDCNEW_DEV("PDC20276", ATA_UDMA6), 502 - /* 6 */ DECLARE_PDCNEW_DEV("PDC20277", ATA_UDMA6), 490 + /* 0: PDC202{68,70} */ DECLARE_PDCNEW_DEV(ATA_UDMA5), 491 + /* 1: PDC202{69,71,75,76,77} */ DECLARE_PDCNEW_DEV(ATA_UDMA6), 503 492 }; 504 493 505 494 /** ··· 508 507 509 508 static int __devinit pdc202new_init_one(struct pci_dev *dev, const struct pci_device_id *id) 510 509 { 511 - const struct ide_port_info *d; 510 + const struct ide_port_info *d = &pdcnew_chipsets[id->driver_data]; 512 511 struct pci_dev *bridge = dev->bus->self; 513 - u8 idx = id->driver_data; 514 512 515 - d = &pdcnew_chipsets[idx]; 516 - 517 - if (idx == 2 && bridge && 513 + if (dev->device == PCI_DEVICE_ID_PROMISE_20270 && bridge && 518 514 bridge->vendor == PCI_VENDOR_ID_DEC && 519 515 bridge->device == PCI_DEVICE_ID_DEC_21150) { 520 516 struct pci_dev *dev2; ··· 522 524 dev2 = pdc20270_get_dev2(dev); 523 525 524 526 if (dev2) { 525 - int ret = ide_setup_pci_devices(dev, dev2, d); 527 + int ret = ide_pci_init_two(dev, dev2, d, NULL); 526 528 if (ret < 0) 527 529 pci_dev_put(dev2); 528 530 return ret; 529 531 } 530 532 } 531 533 532 - if (idx == 5 && bridge && 534 + if (dev->device == PCI_DEVICE_ID_PROMISE_20276 && bridge && 533 535 bridge->vendor == PCI_VENDOR_ID_INTEL && 534 536 (bridge->device == PCI_DEVICE_ID_INTEL_I960 || 535 537 bridge->device == PCI_DEVICE_ID_INTEL_I960RM)) { 536 - printk(KERN_INFO "PDC20276: attached to I2O RAID controller, " 537 - "skipping\n"); 538 + printk(KERN_INFO DRV_NAME " %s: attached to I2O RAID controller," 539 + " skipping\n", pci_name(dev)); 538 540 return -ENODEV; 539 541 } 540 542 541 - return ide_setup_pci_device(dev, d); 543 + return ide_pci_init_one(dev, d, NULL); 544 + } 545 + 546 + static void __devexit pdc202new_remove(struct pci_dev *dev) 547 + { 548 + struct ide_host *host = pci_get_drvdata(dev); 549 + struct pci_dev *dev2 = host->dev[1] ? to_pci_dev(host->dev[1]) : NULL; 550 + 551 + ide_pci_remove(dev); 552 + pci_dev_put(dev2); 542 553 } 543 554 544 555 static const struct pci_device_id pdc202new_pci_tbl[] = { 545 556 { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20268), 0 }, 546 557 { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20269), 1 }, 547 - { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20270), 2 }, 548 - { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20271), 3 }, 549 - { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20275), 4 }, 550 - { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20276), 5 }, 551 - { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20277), 6 }, 558 + { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20270), 0 }, 559 + { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20271), 1 }, 560 + { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20275), 1 }, 561 + { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20276), 1 }, 562 + { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20277), 1 }, 552 563 { 0, }, 553 564 }; 554 565 MODULE_DEVICE_TABLE(pci, pdc202new_pci_tbl); ··· 566 559 .name = "Promise_IDE", 567 560 .id_table = pdc202new_pci_tbl, 568 561 .probe = pdc202new_init_one, 562 + .remove = pdc202new_remove, 569 563 }; 570 564 571 565 static int __init pdc202new_ide_init(void) ··· 574 566 return ide_pci_register_driver(&driver); 575 567 } 576 568 569 + static void __exit pdc202new_ide_exit(void) 570 + { 571 + pci_unregister_driver(&driver); 572 + } 573 + 577 574 module_init(pdc202new_ide_init); 575 + module_exit(pdc202new_ide_exit); 578 576 579 577 MODULE_AUTHOR("Andre Hedrick, Frank Tiernan"); 580 578 MODULE_DESCRIPTION("PCI driver module for Promise PDC20268 and higher");
+29 -20
drivers/ide/pci/pdc202xx_old.c
··· 20 20 21 21 #include <asm/io.h> 22 22 23 + #define DRV_NAME "pdc202xx_old" 24 + 23 25 #define PDC202XX_DEBUG_DRIVE_INFO 0 24 26 25 27 static const char *pdc_quirk_drives[] = { ··· 265 263 ide_dma_timeout(drive); 266 264 } 267 265 268 - static unsigned int __devinit init_chipset_pdc202xx(struct pci_dev *dev, 269 - const char *name) 266 + static unsigned int __devinit init_chipset_pdc202xx(struct pci_dev *dev) 270 267 { 271 268 unsigned long dmabase = pci_resource_start(dev, 4); 272 269 u8 udma_speed_flag = 0, primary_mode = 0, secondary_mode = 0; ··· 305 304 if (irq != irq2) { 306 305 pci_write_config_byte(dev, 307 306 (PCI_INTERRUPT_LINE)|0x80, irq); /* 0xbc */ 308 - printk(KERN_INFO "%s: PCI config space interrupt " 309 - "mirror fixed\n", name); 307 + printk(KERN_INFO "%s %s: PCI config space interrupt " 308 + "mirror fixed\n", name, pci_name(dev)); 310 309 } 311 310 } 312 311 } ··· 351 350 .dma_timeout = pdc202xx_dma_timeout, 352 351 }; 353 352 354 - #define DECLARE_PDC2026X_DEV(name_str, udma, extra_flags) \ 353 + #define DECLARE_PDC2026X_DEV(udma, extra_flags) \ 355 354 { \ 356 - .name = name_str, \ 355 + .name = DRV_NAME, \ 357 356 .init_chipset = init_chipset_pdc202xx, \ 358 357 .port_ops = &pdc2026x_port_ops, \ 359 358 .dma_ops = &pdc2026x_dma_ops, \ ··· 364 363 } 365 364 366 365 static const struct ide_port_info pdc202xx_chipsets[] __devinitdata = { 367 - { /* 0 */ 368 - .name = "PDC20246", 366 + { /* 0: PDC20246 */ 367 + .name = DRV_NAME, 369 368 .init_chipset = init_chipset_pdc202xx, 370 369 .port_ops = &pdc20246_port_ops, 371 370 .dma_ops = &pdc20246_dma_ops, ··· 375 374 .udma_mask = ATA_UDMA2, 376 375 }, 377 376 378 - /* 1 */ DECLARE_PDC2026X_DEV("PDC20262", ATA_UDMA4, 0), 379 - /* 2 */ DECLARE_PDC2026X_DEV("PDC20263", ATA_UDMA4, 0), 380 - /* 3 */ DECLARE_PDC2026X_DEV("PDC20265", ATA_UDMA5, IDE_HFLAG_RQSIZE_256), 381 - /* 4 */ DECLARE_PDC2026X_DEV("PDC20267", ATA_UDMA5, IDE_HFLAG_RQSIZE_256), 377 + /* 1: PDC2026{2,3} */ 378 + DECLARE_PDC2026X_DEV(ATA_UDMA4, 0), 379 + /* 2: PDC2026{5,7} */ 380 + DECLARE_PDC2026X_DEV(ATA_UDMA5, IDE_HFLAG_RQSIZE_256), 382 381 }; 383 382 384 383 /** ··· 397 396 398 397 d = &pdc202xx_chipsets[idx]; 399 398 400 - if (idx < 3) 399 + if (idx < 2) 401 400 pdc202ata4_fixup_irq(dev, d->name); 402 401 403 - if (idx == 3) { 402 + if (dev->vendor == PCI_DEVICE_ID_PROMISE_20265) { 404 403 struct pci_dev *bridge = dev->bus->self; 405 404 406 405 if (bridge && 407 406 bridge->vendor == PCI_VENDOR_ID_INTEL && 408 407 (bridge->device == PCI_DEVICE_ID_INTEL_I960 || 409 408 bridge->device == PCI_DEVICE_ID_INTEL_I960RM)) { 410 - printk(KERN_INFO "ide: Skipping Promise PDC20265 " 411 - "attached to I2O RAID controller\n"); 409 + printk(KERN_INFO DRV_NAME " %s: skipping Promise " 410 + "PDC20265 attached to I2O RAID controller\n", 411 + pci_name(dev)); 412 412 return -ENODEV; 413 413 } 414 414 } 415 415 416 - return ide_setup_pci_device(dev, d); 416 + return ide_pci_init_one(dev, d, NULL); 417 417 } 418 418 419 419 static const struct pci_device_id pdc202xx_pci_tbl[] = { 420 420 { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20246), 0 }, 421 421 { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20262), 1 }, 422 - { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20263), 2 }, 423 - { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20265), 3 }, 424 - { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20267), 4 }, 422 + { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20263), 1 }, 423 + { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20265), 2 }, 424 + { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20267), 2 }, 425 425 { 0, }, 426 426 }; 427 427 MODULE_DEVICE_TABLE(pci, pdc202xx_pci_tbl); ··· 431 429 .name = "Promise_Old_IDE", 432 430 .id_table = pdc202xx_pci_tbl, 433 431 .probe = pdc202xx_init_one, 432 + .remove = ide_pci_remove, 434 433 }; 435 434 436 435 static int __init pdc202xx_ide_init(void) ··· 439 436 return ide_pci_register_driver(&driver); 440 437 } 441 438 439 + static void __exit pdc202xx_ide_exit(void) 440 + { 441 + pci_unregister_driver(&driver); 442 + } 443 + 442 444 module_init(pdc202xx_ide_init); 445 + module_exit(pdc202xx_ide_exit); 443 446 444 447 MODULE_AUTHOR("Andre Hedrick, Frank Tiernan"); 445 448 MODULE_DESCRIPTION("PCI driver module for older Promise IDE");
+56 -62
drivers/ide/pci/piix.c
··· 54 54 55 55 #include <asm/io.h> 56 56 57 + #define DRV_NAME "piix" 58 + 57 59 static int no_piix_dma; 58 60 59 61 /** ··· 200 198 /** 201 199 * init_chipset_ich - set up the ICH chipset 202 200 * @dev: PCI device to set up 203 - * @name: Name of the device 204 201 * 205 202 * Initialize the PCI device as required. For the ICH this turns 206 203 * out to be nice and simple. 207 204 */ 208 205 209 - static unsigned int __devinit init_chipset_ich(struct pci_dev *dev, const char *name) 206 + static unsigned int __devinit init_chipset_ich(struct pci_dev *dev) 210 207 { 211 208 u32 extra = 0; 212 209 ··· 315 314 #define IDE_HFLAGS_PIIX 0 316 315 #endif 317 316 318 - #define DECLARE_PIIX_DEV(name_str, udma) \ 317 + #define DECLARE_PIIX_DEV(udma) \ 319 318 { \ 320 - .name = name_str, \ 319 + .name = DRV_NAME, \ 321 320 .init_hwif = init_hwif_piix, \ 322 321 .enablebits = {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, \ 323 322 .port_ops = &piix_port_ops, \ ··· 328 327 .udma_mask = udma, \ 329 328 } 330 329 331 - #define DECLARE_ICH_DEV(name_str, udma) \ 330 + #define DECLARE_ICH_DEV(udma) \ 332 331 { \ 333 - .name = name_str, \ 332 + .name = DRV_NAME, \ 334 333 .init_chipset = init_chipset_ich, \ 335 334 .init_hwif = init_hwif_ich, \ 336 335 .enablebits = {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, \ ··· 343 342 } 344 343 345 344 static const struct ide_port_info piix_pci_info[] __devinitdata = { 346 - /* 0 */ DECLARE_PIIX_DEV("PIIXa", 0x00), /* no udma */ 347 - /* 1 */ DECLARE_PIIX_DEV("PIIXb", 0x00), /* no udma */ 348 - 349 - /* 2 */ 345 + /* 0: MPIIX */ 350 346 { /* 351 347 * MPIIX actually has only a single IDE channel mapped to 352 348 * the primary or secondary ports depending on the value 353 349 * of the bit 14 of the IDETIM register at offset 0x6c 354 350 */ 355 - .name = "MPIIX", 351 + .name = DRV_NAME, 356 352 .enablebits = {{0x6d,0xc0,0x80}, {0x6d,0xc0,0xc0}}, 357 353 .host_flags = IDE_HFLAG_ISA_PORTS | IDE_HFLAG_NO_DMA | 358 354 IDE_HFLAGS_PIIX, 359 355 .pio_mask = ATA_PIO4, 360 356 /* This is a painful system best to let it self tune for now */ 361 357 }, 362 - 363 - /* 3 */ DECLARE_PIIX_DEV("PIIX3", 0x00), /* no udma */ 364 - /* 4 */ DECLARE_PIIX_DEV("PIIX4", ATA_UDMA2), 365 - /* 5 */ DECLARE_ICH_DEV("ICH0", ATA_UDMA2), 366 - /* 6 */ DECLARE_PIIX_DEV("PIIX4", ATA_UDMA2), 367 - /* 7 */ DECLARE_ICH_DEV("ICH", ATA_UDMA4), 368 - /* 8 */ DECLARE_PIIX_DEV("PIIX4", ATA_UDMA4), 369 - /* 9 */ DECLARE_PIIX_DEV("PIIX4", ATA_UDMA2), 370 - /* 10 */ DECLARE_ICH_DEV("ICH2", ATA_UDMA5), 371 - /* 11 */ DECLARE_ICH_DEV("ICH2M", ATA_UDMA5), 372 - /* 12 */ DECLARE_ICH_DEV("ICH3M", ATA_UDMA5), 373 - /* 13 */ DECLARE_ICH_DEV("ICH3", ATA_UDMA5), 374 - /* 14 */ DECLARE_ICH_DEV("ICH4", ATA_UDMA5), 375 - /* 15 */ DECLARE_ICH_DEV("ICH5", ATA_UDMA5), 376 - /* 16 */ DECLARE_ICH_DEV("C-ICH", ATA_UDMA5), 377 - /* 17 */ DECLARE_ICH_DEV("ICH4", ATA_UDMA5), 378 - /* 18 */ DECLARE_ICH_DEV("ICH5-SATA", ATA_UDMA5), 379 - /* 19 */ DECLARE_ICH_DEV("ICH5", ATA_UDMA5), 380 - /* 20 */ DECLARE_ICH_DEV("ICH6", ATA_UDMA5), 381 - /* 21 */ DECLARE_ICH_DEV("ICH7", ATA_UDMA5), 382 - /* 22 */ DECLARE_ICH_DEV("ICH4", ATA_UDMA5), 383 - /* 23 */ DECLARE_ICH_DEV("ESB2", ATA_UDMA5), 384 - /* 24 */ DECLARE_ICH_DEV("ICH8M", ATA_UDMA5), 358 + /* 1: PIIXa/PIIXb/PIIX3 */ 359 + DECLARE_PIIX_DEV(0x00), /* no udma */ 360 + /* 2: PIIX4 */ 361 + DECLARE_PIIX_DEV(ATA_UDMA2), 362 + /* 3: ICH0 */ 363 + DECLARE_ICH_DEV(ATA_UDMA2), 364 + /* 4: ICH */ 365 + DECLARE_ICH_DEV(ATA_UDMA4), 366 + /* 5: PIIX4 */ 367 + DECLARE_PIIX_DEV(ATA_UDMA4), 368 + /* 6: ICH[2-7]/ICH[2-3]M/C-ICH/ICH5-SATA/ESB2/ICH8M */ 369 + DECLARE_ICH_DEV(ATA_UDMA5), 385 370 }; 386 371 387 372 /** ··· 381 394 382 395 static int __devinit piix_init_one(struct pci_dev *dev, const struct pci_device_id *id) 383 396 { 384 - return ide_setup_pci_device(dev, &piix_pci_info[id->driver_data]); 397 + return ide_pci_init_one(dev, &piix_pci_info[id->driver_data], NULL); 385 398 } 386 399 387 400 /** ··· 408 421 no_piix_dma = 2; 409 422 } 410 423 if(no_piix_dma) 411 - printk(KERN_WARNING "piix: 450NX errata present, disabling IDE DMA.\n"); 424 + printk(KERN_WARNING DRV_NAME ": 450NX errata present, disabling IDE DMA.\n"); 412 425 if(no_piix_dma == 2) 413 - printk(KERN_WARNING "piix: A BIOS update may resolve this.\n"); 426 + printk(KERN_WARNING DRV_NAME ": A BIOS update may resolve this.\n"); 414 427 } 415 428 416 429 static const struct pci_device_id piix_pci_tbl[] = { 417 - { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82371FB_0), 0 }, 418 - { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82371FB_1), 1 }, 419 - { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82371MX), 2 }, 420 - { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82371SB_1), 3 }, 421 - { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82371AB), 4 }, 422 - { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801AB_1), 5 }, 423 - { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82443MX_1), 6 }, 424 - { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801AA_1), 7 }, 425 - { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82372FB_1), 8 }, 426 - { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82451NX), 9 }, 427 - { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801BA_9), 10 }, 428 - { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801BA_8), 11 }, 429 - { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801CA_10), 12 }, 430 - { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801CA_11), 13 }, 431 - { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801DB_11), 14 }, 432 - { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801EB_11), 15 }, 433 - { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801E_11), 16 }, 434 - { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801DB_10), 17 }, 430 + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82371FB_0), 1 }, 431 + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82371FB_1), 1 }, 432 + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82371MX), 0 }, 433 + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82371SB_1), 1 }, 434 + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82371AB), 2 }, 435 + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801AB_1), 3 }, 436 + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82443MX_1), 2 }, 437 + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801AA_1), 4 }, 438 + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82372FB_1), 5 }, 439 + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82451NX), 2 }, 440 + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801BA_9), 6 }, 441 + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801BA_8), 6 }, 442 + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801CA_10), 6 }, 443 + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801CA_11), 6 }, 444 + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801DB_11), 6 }, 445 + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801EB_11), 6 }, 446 + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801E_11), 6 }, 447 + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801DB_10), 6 }, 435 448 #ifdef CONFIG_BLK_DEV_IDE_SATA 436 - { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801EB_1), 18 }, 449 + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801EB_1), 6 }, 437 450 #endif 438 - { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ESB_2), 19 }, 439 - { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ICH6_19), 20 }, 440 - { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ICH7_21), 21 }, 441 - { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801DB_1), 22 }, 442 - { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ESB2_18), 23 }, 443 - { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ICH8_6), 24 }, 451 + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ESB_2), 6 }, 452 + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ICH6_19), 6 }, 453 + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ICH7_21), 6 }, 454 + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82801DB_1), 6 }, 455 + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ESB2_18), 6 }, 456 + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ICH8_6), 6 }, 444 457 { 0, }, 445 458 }; 446 459 MODULE_DEVICE_TABLE(pci, piix_pci_tbl); ··· 449 462 .name = "PIIX_IDE", 450 463 .id_table = piix_pci_tbl, 451 464 .probe = piix_init_one, 465 + .remove = ide_pci_remove, 452 466 }; 453 467 454 468 static int __init piix_ide_init(void) ··· 458 470 return ide_pci_register_driver(&driver); 459 471 } 460 472 473 + static void __exit piix_ide_exit(void) 474 + { 475 + pci_unregister_driver(&driver); 476 + } 477 + 461 478 module_init(piix_ide_init); 479 + module_exit(piix_ide_exit); 462 480 463 481 MODULE_AUTHOR("Andre Hedrick, Andrzej Krzysztofowicz"); 464 482 MODULE_DESCRIPTION("PCI driver module for Intel PIIX IDE");
+11 -2
drivers/ide/pci/rz1000.c
··· 21 21 #include <linux/ide.h> 22 22 #include <linux/init.h> 23 23 24 + #define DRV_NAME "rz1000" 25 + 24 26 static void __devinit init_hwif_rz1000 (ide_hwif_t *hwif) 25 27 { 26 28 struct pci_dev *dev = to_pci_dev(hwif->dev); ··· 42 40 } 43 41 44 42 static const struct ide_port_info rz1000_chipset __devinitdata = { 45 - .name = "RZ100x", 43 + .name = DRV_NAME, 46 44 .init_hwif = init_hwif_rz1000, 47 45 .chipset = ide_rz1000, 48 46 .host_flags = IDE_HFLAG_NO_DMA, ··· 50 48 51 49 static int __devinit rz1000_init_one(struct pci_dev *dev, const struct pci_device_id *id) 52 50 { 53 - return ide_setup_pci_device(dev, &rz1000_chipset); 51 + return ide_pci_init_one(dev, &rz1000_chipset, NULL); 54 52 } 55 53 56 54 static const struct pci_device_id rz1000_pci_tbl[] = { ··· 64 62 .name = "RZ1000_IDE", 65 63 .id_table = rz1000_pci_tbl, 66 64 .probe = rz1000_init_one, 65 + .remove = ide_pci_remove, 67 66 }; 68 67 69 68 static int __init rz1000_ide_init(void) ··· 72 69 return ide_pci_register_driver(&driver); 73 70 } 74 71 72 + static void __exit rz1000_ide_exit(void) 73 + { 74 + pci_unregister_driver(&driver); 75 + } 76 + 75 77 module_init(rz1000_ide_init); 78 + module_exit(rz1000_ide_exit); 76 79 77 80 MODULE_AUTHOR("Andre Hedrick"); 78 81 MODULE_DESCRIPTION("PCI driver module for RZ1000 IDE");
+29 -21
drivers/ide/pci/sc1200.c
··· 22 22 23 23 #include <asm/io.h> 24 24 25 + #define DRV_NAME "sc1200" 26 + 25 27 #define SC1200_REV_A 0x00 26 28 #define SC1200_REV_B1 0x01 27 29 #define SC1200_REV_B3 0x02 ··· 236 234 * we only save state when going from full power to less 237 235 */ 238 236 if (state.event == PM_EVENT_ON) { 239 - struct sc1200_saved_state *ss; 237 + struct ide_host *host = pci_get_drvdata(dev); 238 + struct sc1200_saved_state *ss = host->host_priv; 240 239 unsigned int r; 241 - 242 - /* 243 - * allocate a permanent save area, if not already allocated 244 - */ 245 - ss = (struct sc1200_saved_state *)pci_get_drvdata(dev); 246 - if (ss == NULL) { 247 - ss = kmalloc(sizeof(*ss), GFP_KERNEL); 248 - if (ss == NULL) 249 - return -ENOMEM; 250 - pci_set_drvdata(dev, ss); 251 - } 252 240 253 241 /* 254 242 * save timing registers ··· 255 263 256 264 static int sc1200_resume (struct pci_dev *dev) 257 265 { 258 - struct sc1200_saved_state *ss; 266 + struct ide_host *host = pci_get_drvdata(dev); 267 + struct sc1200_saved_state *ss = host->host_priv; 259 268 unsigned int r; 260 269 int i; 261 270 ··· 264 271 if (i) 265 272 return i; 266 273 267 - ss = (struct sc1200_saved_state *)pci_get_drvdata(dev); 268 - 269 274 /* 270 275 * restore timing registers 271 276 * (this may be unnecessary if BIOS also does it) 272 277 */ 273 - if (ss) { 274 - for (r = 0; r < 8; r++) 275 - pci_write_config_dword(dev, 0x40 + r * 4, ss->regs[r]); 276 - } 278 + for (r = 0; r < 8; r++) 279 + pci_write_config_dword(dev, 0x40 + r * 4, ss->regs[r]); 277 280 278 281 return 0; 279 282 } ··· 293 304 }; 294 305 295 306 static const struct ide_port_info sc1200_chipset __devinitdata = { 296 - .name = "SC1200", 307 + .name = DRV_NAME, 297 308 .port_ops = &sc1200_port_ops, 298 309 .dma_ops = &sc1200_dma_ops, 299 310 .host_flags = IDE_HFLAG_SERIALIZE | ··· 306 317 307 318 static int __devinit sc1200_init_one(struct pci_dev *dev, const struct pci_device_id *id) 308 319 { 309 - return ide_setup_pci_device(dev, &sc1200_chipset); 320 + struct sc1200_saved_state *ss = NULL; 321 + int rc; 322 + 323 + #ifdef CONFIG_PM 324 + ss = kmalloc(sizeof(*ss), GFP_KERNEL); 325 + if (ss == NULL) 326 + return -ENOMEM; 327 + #endif 328 + rc = ide_pci_init_one(dev, &sc1200_chipset, ss); 329 + if (rc) 330 + kfree(ss); 331 + 332 + return rc; 310 333 } 311 334 312 335 static const struct pci_device_id sc1200_pci_tbl[] = { ··· 331 330 .name = "SC1200_IDE", 332 331 .id_table = sc1200_pci_tbl, 333 332 .probe = sc1200_init_one, 333 + .remove = ide_pci_remove, 334 334 #ifdef CONFIG_PM 335 335 .suspend = sc1200_suspend, 336 336 .resume = sc1200_resume, ··· 343 341 return ide_pci_register_driver(&driver); 344 342 } 345 343 344 + static void __exit sc1200_ide_exit(void) 345 + { 346 + pci_unregister_driver(&driver); 347 + } 348 + 346 349 module_init(sc1200_ide_init); 350 + module_exit(sc1200_ide_exit); 347 351 348 352 MODULE_AUTHOR("Mark Lord"); 349 353 MODULE_DESCRIPTION("PCI driver module for NS SC1200 IDE");
+27 -13
drivers/ide/pci/serverworks.c
··· 38 38 39 39 #include <asm/io.h> 40 40 41 + #define DRV_NAME "serverworks" 42 + 41 43 #define SVWKS_CSB5_REVISION_NEW 0x92 /* min PCI_REVISION_ID for UDMA5 (A2.0) */ 42 44 #define SVWKS_CSB6_REVISION 0xa0 /* min PCI_REVISION_ID for UDMA4 (A1.0) */ 43 45 ··· 174 172 pci_write_config_byte(dev, 0x54, ultra_enable); 175 173 } 176 174 177 - static unsigned int __devinit init_chipset_svwks (struct pci_dev *dev, const char *name) 175 + static unsigned int __devinit init_chipset_svwks(struct pci_dev *dev) 178 176 { 179 177 unsigned int reg; 180 178 u8 btr; ··· 190 188 pci_read_config_dword(isa_dev, 0x64, &reg); 191 189 reg &= ~0x00002000; /* disable 600ns interrupt mask */ 192 190 if(!(reg & 0x00004000)) 193 - printk(KERN_DEBUG "%s: UDMA not BIOS enabled.\n", name); 191 + printk(KERN_DEBUG DRV_NAME " %s: UDMA not BIOS " 192 + "enabled.\n", pci_name(dev)); 194 193 reg |= 0x00004000; /* enable UDMA/33 support */ 195 194 pci_write_config_dword(isa_dev, 0x64, reg); 196 195 } ··· 355 352 #define IDE_HFLAGS_SVWKS IDE_HFLAG_LEGACY_IRQS 356 353 357 354 static const struct ide_port_info serverworks_chipsets[] __devinitdata = { 358 - { /* 0 */ 359 - .name = "SvrWks OSB4", 355 + { /* 0: OSB4 */ 356 + .name = DRV_NAME, 360 357 .init_chipset = init_chipset_svwks, 361 358 .port_ops = &osb4_port_ops, 362 359 .host_flags = IDE_HFLAGS_SVWKS, 363 360 .pio_mask = ATA_PIO4, 364 361 .mwdma_mask = ATA_MWDMA2, 365 362 .udma_mask = 0x00, /* UDMA is problematic on OSB4 */ 366 - },{ /* 1 */ 367 - .name = "SvrWks CSB5", 363 + }, 364 + { /* 1: CSB5 */ 365 + .name = DRV_NAME, 368 366 .init_chipset = init_chipset_svwks, 369 367 .port_ops = &svwks_port_ops, 370 368 .host_flags = IDE_HFLAGS_SVWKS, 371 369 .pio_mask = ATA_PIO4, 372 370 .mwdma_mask = ATA_MWDMA2, 373 371 .udma_mask = ATA_UDMA5, 374 - },{ /* 2 */ 375 - .name = "SvrWks CSB6", 372 + }, 373 + { /* 2: CSB6 */ 374 + .name = DRV_NAME, 376 375 .init_chipset = init_chipset_svwks, 377 376 .port_ops = &svwks_port_ops, 378 377 .host_flags = IDE_HFLAGS_SVWKS, 379 378 .pio_mask = ATA_PIO4, 380 379 .mwdma_mask = ATA_MWDMA2, 381 380 .udma_mask = ATA_UDMA5, 382 - },{ /* 3 */ 383 - .name = "SvrWks CSB6", 381 + }, 382 + { /* 3: CSB6-2 */ 383 + .name = DRV_NAME, 384 384 .init_chipset = init_chipset_svwks, 385 385 .port_ops = &svwks_port_ops, 386 386 .host_flags = IDE_HFLAGS_SVWKS | IDE_HFLAG_SINGLE, 387 387 .pio_mask = ATA_PIO4, 388 388 .mwdma_mask = ATA_MWDMA2, 389 389 .udma_mask = ATA_UDMA5, 390 - },{ /* 4 */ 391 - .name = "SvrWks HT1000", 390 + }, 391 + { /* 4: HT1000 */ 392 + .name = DRV_NAME, 392 393 .init_chipset = init_chipset_svwks, 393 394 .port_ops = &svwks_port_ops, 394 395 .host_flags = IDE_HFLAGS_SVWKS | IDE_HFLAG_SINGLE, ··· 429 422 d.host_flags &= ~IDE_HFLAG_SINGLE; 430 423 } 431 424 432 - return ide_setup_pci_device(dev, &d); 425 + return ide_pci_init_one(dev, &d, NULL); 433 426 } 434 427 435 428 static const struct pci_device_id svwks_pci_tbl[] = { ··· 446 439 .name = "Serverworks_IDE", 447 440 .id_table = svwks_pci_tbl, 448 441 .probe = svwks_init_one, 442 + .remove = ide_pci_remove, 449 443 }; 450 444 451 445 static int __init svwks_ide_init(void) ··· 454 446 return ide_pci_register_driver(&driver); 455 447 } 456 448 449 + static void __exit svwks_ide_exit(void) 450 + { 451 + pci_unregister_driver(&driver); 452 + } 453 + 457 454 module_init(svwks_ide_init); 455 + module_exit(svwks_ide_exit); 458 456 459 457 MODULE_AUTHOR("Michael Aubry. Andrzej Krzysztofowicz, Andre Hedrick"); 460 458 MODULE_DESCRIPTION("PCI driver module for Serverworks OSB4/CSB5/CSB6 IDE");
+94 -67
drivers/ide/pci/siimage.c
··· 44 44 #include <linux/init.h> 45 45 #include <linux/io.h> 46 46 47 + #define DRV_NAME "siimage" 48 + 47 49 /** 48 50 * pdev_is_sata - check if device is SATA 49 51 * @pdev: PCI device to check ··· 129 127 130 128 static u8 sil_ioread8(struct pci_dev *dev, unsigned long addr) 131 129 { 130 + struct ide_host *host = pci_get_drvdata(dev); 132 131 u8 tmp = 0; 133 132 134 - if (pci_get_drvdata(dev)) 133 + if (host->host_priv) 135 134 tmp = readb((void __iomem *)addr); 136 135 else 137 136 pci_read_config_byte(dev, addr, &tmp); ··· 142 139 143 140 static u16 sil_ioread16(struct pci_dev *dev, unsigned long addr) 144 141 { 142 + struct ide_host *host = pci_get_drvdata(dev); 145 143 u16 tmp = 0; 146 144 147 - if (pci_get_drvdata(dev)) 145 + if (host->host_priv) 148 146 tmp = readw((void __iomem *)addr); 149 147 else 150 148 pci_read_config_word(dev, addr, &tmp); ··· 155 151 156 152 static void sil_iowrite8(struct pci_dev *dev, u8 val, unsigned long addr) 157 153 { 158 - if (pci_get_drvdata(dev)) 154 + struct ide_host *host = pci_get_drvdata(dev); 155 + 156 + if (host->host_priv) 159 157 writeb(val, (void __iomem *)addr); 160 158 else 161 159 pci_write_config_byte(dev, addr, val); ··· 165 159 166 160 static void sil_iowrite16(struct pci_dev *dev, u16 val, unsigned long addr) 167 161 { 168 - if (pci_get_drvdata(dev)) 162 + struct ide_host *host = pci_get_drvdata(dev); 163 + 164 + if (host->host_priv) 169 165 writew(val, (void __iomem *)addr); 170 166 else 171 167 pci_write_config_word(dev, addr, val); ··· 175 167 176 168 static void sil_iowrite32(struct pci_dev *dev, u32 val, unsigned long addr) 177 169 { 178 - if (pci_get_drvdata(dev)) 170 + struct ide_host *host = pci_get_drvdata(dev); 171 + 172 + if (host->host_priv) 179 173 writel(val, (void __iomem *)addr); 180 174 else 181 175 pci_write_config_dword(dev, addr, val); ··· 455 445 } 456 446 457 447 /** 458 - * setup_mmio_siimage - switch controller into MMIO mode 459 - * @dev: PCI device we are configuring 460 - * @name: device name 461 - * 462 - * Attempt to put the device into MMIO mode. There are some slight 463 - * complications here with certain systems where the MMIO BAR isn't 464 - * mapped, so we have to be sure that we can fall back to I/O. 465 - */ 466 - 467 - static unsigned int setup_mmio_siimage(struct pci_dev *dev, const char *name) 468 - { 469 - resource_size_t bar5 = pci_resource_start(dev, 5); 470 - unsigned long barsize = pci_resource_len(dev, 5); 471 - void __iomem *ioaddr; 472 - 473 - /* 474 - * Drop back to PIO if we can't map the MMIO. Some systems 475 - * seem to get terminally confused in the PCI spaces. 476 - */ 477 - if (!request_mem_region(bar5, barsize, name)) { 478 - printk(KERN_WARNING "siimage: IDE controller MMIO ports not " 479 - "available.\n"); 480 - return 0; 481 - } 482 - 483 - ioaddr = ioremap(bar5, barsize); 484 - if (ioaddr == NULL) { 485 - release_mem_region(bar5, barsize); 486 - return 0; 487 - } 488 - 489 - pci_set_master(dev); 490 - pci_set_drvdata(dev, (void *) ioaddr); 491 - 492 - return 1; 493 - } 494 - 495 - /** 496 448 * init_chipset_siimage - set up an SI device 497 449 * @dev: PCI device 498 - * @name: device name 499 450 * 500 451 * Perform the initial PCI set up for this device. Attempt to switch 501 452 * to 133 MHz clocking if the system isn't already set up to do it. 502 453 */ 503 454 504 - static unsigned int __devinit init_chipset_siimage(struct pci_dev *dev, 505 - const char *name) 455 + static unsigned int __devinit init_chipset_siimage(struct pci_dev *dev) 506 456 { 457 + struct ide_host *host = pci_get_drvdata(dev); 458 + void __iomem *ioaddr = host->host_priv; 507 459 unsigned long base, scsc_addr; 508 - void __iomem *ioaddr = NULL; 509 - u8 rev = dev->revision, tmp, BA5_EN; 460 + u8 rev = dev->revision, tmp; 510 461 511 462 pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, rev ? 1 : 255); 512 463 513 - pci_read_config_byte(dev, 0x8A, &BA5_EN); 514 - 515 - if ((BA5_EN & 0x01) || pci_resource_start(dev, 5)) 516 - if (setup_mmio_siimage(dev, name)) 517 - ioaddr = pci_get_drvdata(dev); 464 + if (ioaddr) 465 + pci_set_master(dev); 518 466 519 467 base = (unsigned long)ioaddr; 520 468 ··· 539 571 { "== 100", "== 133", "== 2X PCI", "DISABLED!" }; 540 572 541 573 tmp >>= 4; 542 - printk(KERN_INFO "%s: BASE CLOCK %s\n", name, clk_str[tmp & 3]); 574 + printk(KERN_INFO DRV_NAME " %s: BASE CLOCK %s\n", 575 + pci_name(dev), clk_str[tmp & 3]); 543 576 } 544 577 545 578 return 0; ··· 561 592 static void __devinit init_mmio_iops_siimage(ide_hwif_t *hwif) 562 593 { 563 594 struct pci_dev *dev = to_pci_dev(hwif->dev); 564 - void *addr = pci_get_drvdata(dev); 595 + struct ide_host *host = pci_get_drvdata(dev); 596 + void *addr = host->host_priv; 565 597 u8 ch = hwif->channel; 566 598 struct ide_io_ports *io_ports = &hwif->io_ports; 567 599 unsigned long base; ··· 661 691 static void __devinit init_iops_siimage(ide_hwif_t *hwif) 662 692 { 663 693 struct pci_dev *dev = to_pci_dev(hwif->dev); 694 + struct ide_host *host = pci_get_drvdata(dev); 664 695 665 696 hwif->hwif_data = NULL; 666 697 667 698 /* Pessimal until we finish probing */ 668 699 hwif->rqsize = 15; 669 700 670 - if (pci_get_drvdata(dev) == NULL) 671 - return; 672 - 673 - init_mmio_iops_siimage(hwif); 701 + if (host->host_priv) 702 + init_mmio_iops_siimage(hwif); 674 703 } 675 704 676 705 /** ··· 717 748 .dma_lost_irq = ide_dma_lost_irq, 718 749 }; 719 750 720 - #define DECLARE_SII_DEV(name_str, p_ops) \ 751 + #define DECLARE_SII_DEV(p_ops) \ 721 752 { \ 722 - .name = name_str, \ 753 + .name = DRV_NAME, \ 723 754 .init_chipset = init_chipset_siimage, \ 724 755 .init_iops = init_iops_siimage, \ 725 756 .port_ops = p_ops, \ ··· 730 761 } 731 762 732 763 static const struct ide_port_info siimage_chipsets[] __devinitdata = { 733 - /* 0 */ DECLARE_SII_DEV("SiI680", &sil_pata_port_ops), 734 - /* 1 */ DECLARE_SII_DEV("SiI3112 Serial ATA", &sil_sata_port_ops), 735 - /* 2 */ DECLARE_SII_DEV("Adaptec AAR-1210SA", &sil_sata_port_ops) 764 + /* 0: SiI680 */ DECLARE_SII_DEV(&sil_pata_port_ops), 765 + /* 1: SiI3112 */ DECLARE_SII_DEV(&sil_sata_port_ops) 736 766 }; 737 767 738 768 /** ··· 746 778 static int __devinit siimage_init_one(struct pci_dev *dev, 747 779 const struct pci_device_id *id) 748 780 { 781 + void __iomem *ioaddr = NULL; 782 + resource_size_t bar5 = pci_resource_start(dev, 5); 783 + unsigned long barsize = pci_resource_len(dev, 5); 784 + int rc; 749 785 struct ide_port_info d; 750 786 u8 idx = id->driver_data; 787 + u8 BA5_EN; 751 788 752 789 d = siimage_chipsets[idx]; 753 790 ··· 760 787 static int first = 1; 761 788 762 789 if (first) { 763 - printk(KERN_INFO "siimage: For full SATA support you " 790 + printk(KERN_INFO DRV_NAME ": For full SATA support you " 764 791 "should use the libata sata_sil module.\n"); 765 792 first = 0; 766 793 } ··· 768 795 d.host_flags |= IDE_HFLAG_NO_ATAPI_DMA; 769 796 } 770 797 771 - return ide_setup_pci_device(dev, &d); 798 + rc = pci_enable_device(dev); 799 + if (rc) 800 + return rc; 801 + 802 + pci_read_config_byte(dev, 0x8A, &BA5_EN); 803 + if ((BA5_EN & 0x01) || bar5) { 804 + /* 805 + * Drop back to PIO if we can't map the MMIO. Some systems 806 + * seem to get terminally confused in the PCI spaces. 807 + */ 808 + if (!request_mem_region(bar5, barsize, d.name)) { 809 + printk(KERN_WARNING DRV_NAME " %s: MMIO ports not " 810 + "available\n", pci_name(dev)); 811 + } else { 812 + ioaddr = ioremap(bar5, barsize); 813 + if (ioaddr == NULL) 814 + release_mem_region(bar5, barsize); 815 + } 816 + } 817 + 818 + rc = ide_pci_init_one(dev, &d, ioaddr); 819 + if (rc) { 820 + if (ioaddr) { 821 + iounmap(ioaddr); 822 + release_mem_region(bar5, barsize); 823 + } 824 + pci_disable_device(dev); 825 + } 826 + 827 + return rc; 828 + } 829 + 830 + static void __devexit siimage_remove(struct pci_dev *dev) 831 + { 832 + struct ide_host *host = pci_get_drvdata(dev); 833 + void __iomem *ioaddr = host->host_priv; 834 + 835 + ide_pci_remove(dev); 836 + 837 + if (ioaddr) { 838 + resource_size_t bar5 = pci_resource_start(dev, 5); 839 + unsigned long barsize = pci_resource_len(dev, 5); 840 + 841 + iounmap(ioaddr); 842 + release_mem_region(bar5, barsize); 843 + } 844 + 845 + pci_disable_device(dev); 772 846 } 773 847 774 848 static const struct pci_device_id siimage_pci_tbl[] = { 775 849 { PCI_VDEVICE(CMD, PCI_DEVICE_ID_SII_680), 0 }, 776 850 #ifdef CONFIG_BLK_DEV_IDE_SATA 777 851 { PCI_VDEVICE(CMD, PCI_DEVICE_ID_SII_3112), 1 }, 778 - { PCI_VDEVICE(CMD, PCI_DEVICE_ID_SII_1210SA), 2 }, 852 + { PCI_VDEVICE(CMD, PCI_DEVICE_ID_SII_1210SA), 1 }, 779 853 #endif 780 854 { 0, }, 781 855 }; ··· 832 812 .name = "SiI_IDE", 833 813 .id_table = siimage_pci_tbl, 834 814 .probe = siimage_init_one, 815 + .remove = siimage_remove, 835 816 }; 836 817 837 818 static int __init siimage_ide_init(void) ··· 840 819 return ide_pci_register_driver(&driver); 841 820 } 842 821 822 + static void __exit siimage_ide_exit(void) 823 + { 824 + pci_unregister_driver(&driver); 825 + } 826 + 843 827 module_init(siimage_ide_init); 828 + module_exit(siimage_ide_exit); 844 829 845 830 MODULE_AUTHOR("Andre Hedrick, Alan Cox"); 846 831 MODULE_DESCRIPTION("PCI driver module for SiI IDE");
+29 -10
drivers/ide/pci/sis5513.c
··· 52 52 #include <linux/init.h> 53 53 #include <linux/ide.h> 54 54 55 + #define DRV_NAME "sis5513" 56 + 55 57 /* registers layout and init values are chipset family dependant */ 56 58 57 59 #define ATA_16 0x01 ··· 382 380 } 383 381 pci_dev_put(host); 384 382 385 - printk(KERN_INFO "SIS5513: %s %s controller\n", 386 - SiSHostChipInfo[i].name, chipset_capability[chipset_family]); 383 + printk(KERN_INFO DRV_NAME " %s: %s %s controller\n", 384 + pci_name(dev), SiSHostChipInfo[i].name, 385 + chipset_capability[chipset_family]); 387 386 } 388 387 389 388 if (!chipset_family) { /* Belongs to pci-quirks */ ··· 399 396 pci_write_config_dword(dev, 0x54, idemisc); 400 397 401 398 if (trueid == 0x5518) { 402 - printk(KERN_INFO "SIS5513: SiS 962/963 MuTIOL IDE UDMA133 controller\n"); 399 + printk(KERN_INFO DRV_NAME " %s: SiS 962/963 MuTIOL IDE UDMA133 controller\n", 400 + pci_name(dev)); 403 401 chipset_family = ATA_133; 404 402 405 403 /* Check for 5513 compability mapping ··· 409 405 */ 410 406 if ((idemisc & 0x40000000) == 0) { 411 407 pci_write_config_dword(dev, 0x54, idemisc | 0x40000000); 412 - printk(KERN_INFO "SIS5513: Switching to 5513 register mapping\n"); 408 + printk(KERN_INFO DRV_NAME " %s: Switching to 5513 register mapping\n", 409 + pci_name(dev)); 413 410 } 414 411 } 415 412 } ··· 434 429 pci_dev_put(lpc_bridge); 435 430 436 431 if (lpc_bridge->revision == 0x10 && (prefctl & 0x80)) { 437 - printk(KERN_INFO "SIS5513: SiS 961B MuTIOL IDE UDMA133 controller\n"); 432 + printk(KERN_INFO DRV_NAME " %s: SiS 961B MuTIOL IDE UDMA133 controller\n", 433 + pci_name(dev)); 438 434 chipset_family = ATA_133a; 439 435 } else { 440 - printk(KERN_INFO "SIS5513: SiS 961 MuTIOL IDE UDMA100 controller\n"); 436 + printk(KERN_INFO DRV_NAME " %s: SiS 961 MuTIOL IDE UDMA100 controller\n", 437 + pci_name(dev)); 441 438 chipset_family = ATA_100; 442 439 } 443 440 } ··· 448 441 return chipset_family; 449 442 } 450 443 451 - static unsigned int __devinit init_chipset_sis5513(struct pci_dev *dev, 452 - const char *name) 444 + static unsigned int __devinit init_chipset_sis5513(struct pci_dev *dev) 453 445 { 454 446 /* Make general config ops here 455 447 1/ tell IDE channels to operate in Compatibility mode only ··· 561 555 }; 562 556 563 557 static const struct ide_port_info sis5513_chipset __devinitdata = { 564 - .name = "SIS5513", 558 + .name = DRV_NAME, 565 559 .init_chipset = init_chipset_sis5513, 566 560 .enablebits = { {0x4a, 0x02, 0x02}, {0x4a, 0x04, 0x04} }, 567 561 .host_flags = IDE_HFLAG_LEGACY_IRQS | IDE_HFLAG_NO_AUTODMA, ··· 589 583 590 584 d.udma_mask = udma_rates[chipset_family]; 591 585 592 - return ide_setup_pci_device(dev, &d); 586 + return ide_pci_init_one(dev, &d, NULL); 587 + } 588 + 589 + static void __devexit sis5513_remove(struct pci_dev *dev) 590 + { 591 + ide_pci_remove(dev); 592 + pci_disable_device(dev); 593 593 } 594 594 595 595 static const struct pci_device_id sis5513_pci_tbl[] = { ··· 610 598 .name = "SIS_IDE", 611 599 .id_table = sis5513_pci_tbl, 612 600 .probe = sis5513_init_one, 601 + .remove = sis5513_remove, 613 602 }; 614 603 615 604 static int __init sis5513_ide_init(void) ··· 618 605 return ide_pci_register_driver(&driver); 619 606 } 620 607 608 + static void __exit sis5513_ide_exit(void) 609 + { 610 + pci_unregister_driver(&driver); 611 + } 612 + 621 613 module_init(sis5513_ide_init); 614 + module_exit(sis5513_ide_exit); 622 615 623 616 MODULE_AUTHOR("Lionel Bouton, L C Chang, Andre Hedrick, Vojtech Pavlik"); 624 617 MODULE_DESCRIPTION("PCI driver module for SIS IDE");
+13 -4
drivers/ide/pci/sl82c105.c
··· 23 23 24 24 #include <asm/io.h> 25 25 26 + #define DRV_NAME "sl82c105" 27 + 26 28 #undef DEBUG 27 29 28 30 #ifdef DEBUG ··· 272 270 * channel 0 here at least, but channel 1 has to be enabled by 273 271 * firmware or arch code. We still set both to 16 bits mode. 274 272 */ 275 - static unsigned int __devinit init_chipset_sl82c105(struct pci_dev *dev, const char *msg) 273 + static unsigned int __devinit init_chipset_sl82c105(struct pci_dev *dev) 276 274 { 277 275 u32 val; 278 276 ··· 303 301 }; 304 302 305 303 static const struct ide_port_info sl82c105_chipset __devinitdata = { 306 - .name = "W82C105", 304 + .name = DRV_NAME, 307 305 .init_chipset = init_chipset_sl82c105, 308 306 .enablebits = {{0x40,0x01,0x01}, {0x40,0x10,0x10}}, 309 307 .port_ops = &sl82c105_port_ops, ··· 330 328 * Never ever EVER under any circumstances enable 331 329 * DMA when the bridge is this old. 332 330 */ 333 - printk(KERN_INFO "W82C105_IDE: Winbond W83C553 bridge " 331 + printk(KERN_INFO DRV_NAME ": Winbond W83C553 bridge " 334 332 "revision %d, BM-DMA disabled\n", rev); 335 333 d.dma_ops = NULL; 336 334 d.mwdma_mask = 0; 337 335 d.host_flags &= ~IDE_HFLAG_SERIALIZE_DMA; 338 336 } 339 337 340 - return ide_setup_pci_device(dev, &d); 338 + return ide_pci_init_one(dev, &d, NULL); 341 339 } 342 340 343 341 static const struct pci_device_id sl82c105_pci_tbl[] = { ··· 350 348 .name = "W82C105_IDE", 351 349 .id_table = sl82c105_pci_tbl, 352 350 .probe = sl82c105_init_one, 351 + .remove = ide_pci_remove, 353 352 }; 354 353 355 354 static int __init sl82c105_ide_init(void) ··· 358 355 return ide_pci_register_driver(&driver); 359 356 } 360 357 358 + static void __exit sl82c105_ide_exit(void) 359 + { 360 + pci_unregister_driver(&driver); 361 + } 362 + 361 363 module_init(sl82c105_ide_init); 364 + module_exit(sl82c105_ide_exit); 362 365 363 366 MODULE_DESCRIPTION("PCI driver module for W82C105 IDE"); 364 367 MODULE_LICENSE("GPL");
+11 -2
drivers/ide/pci/slc90e66.c
··· 15 15 #include <linux/ide.h> 16 16 #include <linux/init.h> 17 17 18 + #define DRV_NAME "slc90e66" 19 + 18 20 static DEFINE_SPINLOCK(slc90e66_lock); 19 21 20 22 static void slc90e66_set_pio_mode(ide_drive_t *drive, const u8 pio) ··· 134 132 }; 135 133 136 134 static const struct ide_port_info slc90e66_chipset __devinitdata = { 137 - .name = "SLC90E66", 135 + .name = DRV_NAME, 138 136 .enablebits = { {0x41, 0x80, 0x80}, {0x43, 0x80, 0x80} }, 139 137 .port_ops = &slc90e66_port_ops, 140 138 .host_flags = IDE_HFLAG_LEGACY_IRQS, ··· 146 144 147 145 static int __devinit slc90e66_init_one(struct pci_dev *dev, const struct pci_device_id *id) 148 146 { 149 - return ide_setup_pci_device(dev, &slc90e66_chipset); 147 + return ide_pci_init_one(dev, &slc90e66_chipset, NULL); 150 148 } 151 149 152 150 static const struct pci_device_id slc90e66_pci_tbl[] = { ··· 159 157 .name = "SLC90e66_IDE", 160 158 .id_table = slc90e66_pci_tbl, 161 159 .probe = slc90e66_init_one, 160 + .remove = ide_pci_remove, 162 161 }; 163 162 164 163 static int __init slc90e66_ide_init(void) ··· 167 164 return ide_pci_register_driver(&driver); 168 165 } 169 166 167 + static void __exit slc90e66_ide_exit(void) 168 + { 169 + pci_unregister_driver(&driver); 170 + } 171 + 170 172 module_init(slc90e66_ide_init); 173 + module_exit(slc90e66_ide_exit); 171 174 172 175 MODULE_AUTHOR("Andre Hedrick"); 173 176 MODULE_DESCRIPTION("PCI driver module for SLC90E66 IDE");
+43 -14
drivers/ide/pci/tc86c001.c
··· 11 11 #include <linux/pci.h> 12 12 #include <linux/ide.h> 13 13 14 + #define DRV_NAME "tc86c001" 15 + 14 16 static void tc86c001_set_mode(ide_drive_t *drive, const u8 speed) 15 17 { 16 18 ide_hwif_t *hwif = HWIF(drive); ··· 175 173 hwif->rqsize = 0xffff; 176 174 } 177 175 178 - static unsigned int __devinit init_chipset_tc86c001(struct pci_dev *dev, 179 - const char *name) 180 - { 181 - int err = pci_request_region(dev, 5, name); 182 - 183 - if (err) 184 - printk(KERN_ERR "%s: system control regs already in use", name); 185 - return err; 186 - } 187 - 188 176 static const struct ide_port_ops tc86c001_port_ops = { 189 177 .set_pio_mode = tc86c001_set_pio_mode, 190 178 .set_dma_mode = tc86c001_set_mode, ··· 193 201 }; 194 202 195 203 static const struct ide_port_info tc86c001_chipset __devinitdata = { 196 - .name = "TC86C001", 197 - .init_chipset = init_chipset_tc86c001, 204 + .name = DRV_NAME, 198 205 .init_hwif = init_hwif_tc86c001, 199 206 .port_ops = &tc86c001_port_ops, 200 207 .dma_ops = &tc86c001_dma_ops, ··· 206 215 static int __devinit tc86c001_init_one(struct pci_dev *dev, 207 216 const struct pci_device_id *id) 208 217 { 209 - return ide_setup_pci_device(dev, &tc86c001_chipset); 218 + int rc; 219 + 220 + rc = pci_enable_device(dev); 221 + if (rc) 222 + goto out; 223 + 224 + rc = pci_request_region(dev, 5, DRV_NAME); 225 + if (rc) { 226 + printk(KERN_ERR DRV_NAME ": system control regs already in use"); 227 + goto out_disable; 228 + } 229 + 230 + rc = ide_pci_init_one(dev, &tc86c001_chipset, NULL); 231 + if (rc) 232 + goto out_release; 233 + 234 + goto out; 235 + 236 + out_release: 237 + pci_release_region(dev, 5); 238 + out_disable: 239 + pci_disable_device(dev); 240 + out: 241 + return rc; 242 + } 243 + 244 + static void __devexit tc86c001_remove(struct pci_dev *dev) 245 + { 246 + ide_pci_remove(dev); 247 + pci_release_region(dev, 5); 248 + pci_disable_device(dev); 210 249 } 211 250 212 251 static const struct pci_device_id tc86c001_pci_tbl[] = { ··· 248 227 static struct pci_driver driver = { 249 228 .name = "TC86C001", 250 229 .id_table = tc86c001_pci_tbl, 251 - .probe = tc86c001_init_one 230 + .probe = tc86c001_init_one, 231 + .remove = tc86c001_remove, 252 232 }; 253 233 254 234 static int __init tc86c001_ide_init(void) 255 235 { 256 236 return ide_pci_register_driver(&driver); 257 237 } 238 + 239 + static void __exit tc86c001_ide_exit(void) 240 + { 241 + pci_unregister_driver(&driver); 242 + } 243 + 258 244 module_init(tc86c001_ide_init); 245 + module_exit(tc86c001_ide_exit); 259 246 260 247 MODULE_AUTHOR("MontaVista Software, Inc. <source@mvista.com>"); 261 248 MODULE_DESCRIPTION("PCI driver module for TC86C001 IDE");
+11 -2
drivers/ide/pci/triflex.c
··· 33 33 #include <linux/ide.h> 34 34 #include <linux/init.h> 35 35 36 + #define DRV_NAME "triflex" 37 + 36 38 static void triflex_set_mode(ide_drive_t *drive, const u8 speed) 37 39 { 38 40 ide_hwif_t *hwif = HWIF(drive); ··· 95 93 }; 96 94 97 95 static const struct ide_port_info triflex_device __devinitdata = { 98 - .name = "TRIFLEX", 96 + .name = DRV_NAME, 99 97 .enablebits = {{0x80, 0x01, 0x01}, {0x80, 0x02, 0x02}}, 100 98 .port_ops = &triflex_port_ops, 101 99 .pio_mask = ATA_PIO4, ··· 106 104 static int __devinit triflex_init_one(struct pci_dev *dev, 107 105 const struct pci_device_id *id) 108 106 { 109 - return ide_setup_pci_device(dev, &triflex_device); 107 + return ide_pci_init_one(dev, &triflex_device, NULL); 110 108 } 111 109 112 110 static const struct pci_device_id triflex_pci_tbl[] = { ··· 119 117 .name = "TRIFLEX_IDE", 120 118 .id_table = triflex_pci_tbl, 121 119 .probe = triflex_init_one, 120 + .remove = ide_pci_remove, 122 121 }; 123 122 124 123 static int __init triflex_ide_init(void) ··· 127 124 return ide_pci_register_driver(&driver); 128 125 } 129 126 127 + static void __exit triflex_ide_exit(void) 128 + { 129 + pci_unregister_driver(&driver); 130 + } 131 + 130 132 module_init(triflex_ide_init); 133 + module_exit(triflex_ide_exit); 131 134 132 135 MODULE_AUTHOR("Torben Mathiasen"); 133 136 MODULE_DESCRIPTION("PCI driver module for Compaq Triflex IDE");
+13 -4
drivers/ide/pci/trm290.c
··· 141 141 142 142 #include <asm/io.h> 143 143 144 + #define DRV_NAME "trm290" 145 + 144 146 static void trm290_prepare_drive (ide_drive_t *drive, unsigned int use_dma) 145 147 { 146 148 ide_hwif_t *hwif = HWIF(drive); ··· 247 245 u8 reg = 0; 248 246 249 247 if ((dev->class & 5) && cfg_base) 250 - printk(KERN_INFO "TRM290: chip"); 248 + printk(KERN_INFO DRV_NAME " %s: chip", pci_name(dev)); 251 249 else { 252 250 cfg_base = 0x3df0; 253 - printk(KERN_INFO "TRM290: using default"); 251 + printk(KERN_INFO DRV_NAME " %s: using default", pci_name(dev)); 254 252 } 255 253 printk(KERN_CONT " config base at 0x%04x\n", cfg_base); 256 254 hwif->config_data = cfg_base; ··· 327 325 }; 328 326 329 327 static const struct ide_port_info trm290_chipset __devinitdata = { 330 - .name = "TRM290", 328 + .name = DRV_NAME, 331 329 .init_hwif = init_hwif_trm290, 332 330 .chipset = ide_trm290, 333 331 .port_ops = &trm290_port_ops, ··· 342 340 343 341 static int __devinit trm290_init_one(struct pci_dev *dev, const struct pci_device_id *id) 344 342 { 345 - return ide_setup_pci_device(dev, &trm290_chipset); 343 + return ide_pci_init_one(dev, &trm290_chipset, NULL); 346 344 } 347 345 348 346 static const struct pci_device_id trm290_pci_tbl[] = { ··· 355 353 .name = "TRM290_IDE", 356 354 .id_table = trm290_pci_tbl, 357 355 .probe = trm290_init_one, 356 + .remove = ide_pci_remove, 358 357 }; 359 358 360 359 static int __init trm290_ide_init(void) ··· 363 360 return ide_pci_register_driver(&driver); 364 361 } 365 362 363 + static void __exit trm290_ide_exit(void) 364 + { 365 + pci_unregister_driver(&driver); 366 + } 367 + 366 368 module_init(trm290_ide_init); 369 + module_exit(trm290_ide_exit); 367 370 368 371 MODULE_AUTHOR("Mark Lord"); 369 372 MODULE_DESCRIPTION("PCI driver module for Tekram TRM290 IDE");
+77 -62
drivers/ide/pci/via82cxxx.c
··· 35 35 #include <asm/processor.h> 36 36 #endif 37 37 38 + #define DRV_NAME "via82cxxx" 39 + 38 40 #define VIA_IDE_ENABLE 0x40 39 41 #define VIA_IDE_CONFIG 0x41 40 42 #define VIA_FIFO_CONFIG 0x43 ··· 115 113 static void via_set_speed(ide_hwif_t *hwif, u8 dn, struct ide_timing *timing) 116 114 { 117 115 struct pci_dev *dev = to_pci_dev(hwif->dev); 118 - struct via82cxxx_dev *vdev = pci_get_drvdata(dev); 116 + struct ide_host *host = pci_get_drvdata(dev); 117 + struct via82cxxx_dev *vdev = host->host_priv; 119 118 u8 t; 120 119 121 120 if (~vdev->via_config->flags & VIA_BAD_AST) { ··· 156 153 ide_hwif_t *hwif = drive->hwif; 157 154 ide_drive_t *peer = hwif->drives + (~drive->dn & 1); 158 155 struct pci_dev *dev = to_pci_dev(hwif->dev); 159 - struct via82cxxx_dev *vdev = pci_get_drvdata(dev); 156 + struct ide_host *host = pci_get_drvdata(dev); 157 + struct via82cxxx_dev *vdev = host->host_priv; 160 158 struct ide_timing t, p; 161 159 unsigned int T, UT; 162 160 ··· 262 258 /** 263 259 * init_chipset_via82cxxx - initialization handler 264 260 * @dev: PCI device 265 - * @name: Name of interface 266 261 * 267 262 * The initialization callback. Here we determine the IDE chip type 268 263 * and initialize its drive independent registers. 269 264 */ 270 265 271 - static unsigned int __devinit init_chipset_via82cxxx(struct pci_dev *dev, const char *name) 266 + static unsigned int __devinit init_chipset_via82cxxx(struct pci_dev *dev) 272 267 { 273 - struct pci_dev *isa = NULL; 274 - struct via82cxxx_dev *vdev; 275 - struct via_isa_bridge *via_config; 268 + struct ide_host *host = pci_get_drvdata(dev); 269 + struct via82cxxx_dev *vdev = host->host_priv; 270 + struct via_isa_bridge *via_config = vdev->via_config; 276 271 u8 t, v; 277 272 u32 u; 278 - 279 - vdev = kzalloc(sizeof(*vdev), GFP_KERNEL); 280 - if (!vdev) { 281 - printk(KERN_ERR "VP_IDE: out of memory :(\n"); 282 - return -ENOMEM; 283 - } 284 - pci_set_drvdata(dev, vdev); 285 - 286 - /* 287 - * Find the ISA bridge to see how good the IDE is. 288 - */ 289 - vdev->via_config = via_config = via_config_find(&isa); 290 - 291 - /* We checked this earlier so if it fails here deeep badness 292 - is involved */ 293 - 294 - BUG_ON(!via_config->id); 295 273 296 274 /* 297 275 * Detect cable and configure Clk66 ··· 320 334 321 335 pci_write_config_byte(dev, VIA_FIFO_CONFIG, t); 322 336 323 - /* 324 - * Determine system bus clock. 325 - */ 326 - 327 - via_clock = (ide_pci_clk ? ide_pci_clk : 33) * 1000; 328 - 329 - switch (via_clock) { 330 - case 33000: via_clock = 33333; break; 331 - case 37000: via_clock = 37500; break; 332 - case 41000: via_clock = 41666; break; 333 - } 334 - 335 - if (via_clock < 20000 || via_clock > 50000) { 336 - printk(KERN_WARNING "VP_IDE: User given PCI clock speed " 337 - "impossible (%d), using 33 MHz instead.\n", via_clock); 338 - printk(KERN_WARNING "VP_IDE: Use ide0=ata66 if you want " 339 - "to assume 80-wire cable.\n"); 340 - via_clock = 33333; 341 - } 342 - 343 - /* 344 - * Print the boot message. 345 - */ 346 - 347 - printk(KERN_INFO "VP_IDE: VIA %s (rev %02x) IDE %sDMA%s " 348 - "controller on pci%s\n", 349 - via_config->name, isa->revision, 350 - via_config->udma_mask ? "U" : "MW", 351 - via_dma[via_config->udma_mask ? 352 - (fls(via_config->udma_mask) - 1) : 0], 353 - pci_name(dev)); 354 - 355 - pci_dev_put(isa); 356 337 return 0; 357 338 } 358 339 ··· 355 402 static u8 __devinit via82cxxx_cable_detect(ide_hwif_t *hwif) 356 403 { 357 404 struct pci_dev *pdev = to_pci_dev(hwif->dev); 358 - struct via82cxxx_dev *vdev = pci_get_drvdata(pdev); 405 + struct ide_host *host = pci_get_drvdata(pdev); 406 + struct via82cxxx_dev *vdev = host->host_priv; 359 407 360 408 if (via_cable_override(pdev)) 361 409 return ATA_CBL_PATA40_SHORT; ··· 374 420 }; 375 421 376 422 static const struct ide_port_info via82cxxx_chipset __devinitdata = { 377 - .name = "VP_IDE", 423 + .name = DRV_NAME, 378 424 .init_chipset = init_chipset_via82cxxx, 379 425 .enablebits = { { 0x40, 0x02, 0x02 }, { 0x40, 0x01, 0x01 } }, 380 426 .port_ops = &via_port_ops, ··· 390 436 { 391 437 struct pci_dev *isa = NULL; 392 438 struct via_isa_bridge *via_config; 439 + struct via82cxxx_dev *vdev; 440 + int rc; 393 441 u8 idx = id->driver_data; 394 442 struct ide_port_info d; 395 443 ··· 401 445 * Find the ISA bridge and check we know what it is. 402 446 */ 403 447 via_config = via_config_find(&isa); 404 - pci_dev_put(isa); 405 448 if (!via_config->id) { 406 - printk(KERN_WARNING "VP_IDE: Unknown VIA SouthBridge, disabling DMA.\n"); 449 + printk(KERN_WARNING DRV_NAME " %s: unknown chipset, skipping\n", 450 + pci_name(dev)); 407 451 return -ENODEV; 452 + } 453 + 454 + /* 455 + * Print the boot message. 456 + */ 457 + printk(KERN_INFO DRV_NAME " %s: VIA %s (rev %02x) IDE %sDMA%s\n", 458 + pci_name(dev), via_config->name, isa->revision, 459 + via_config->udma_mask ? "U" : "MW", 460 + via_dma[via_config->udma_mask ? 461 + (fls(via_config->udma_mask) - 1) : 0]); 462 + 463 + pci_dev_put(isa); 464 + 465 + /* 466 + * Determine system bus clock. 467 + */ 468 + via_clock = (ide_pci_clk ? ide_pci_clk : 33) * 1000; 469 + 470 + switch (via_clock) { 471 + case 33000: via_clock = 33333; break; 472 + case 37000: via_clock = 37500; break; 473 + case 41000: via_clock = 41666; break; 474 + } 475 + 476 + if (via_clock < 20000 || via_clock > 50000) { 477 + printk(KERN_WARNING DRV_NAME ": User given PCI clock speed " 478 + "impossible (%d), using 33 MHz instead.\n", via_clock); 479 + printk(KERN_WARNING DRV_NAME ": Use ide0=ata66 if you want " 480 + "to assume 80-wire cable.\n"); 481 + via_clock = 33333; 408 482 } 409 483 410 484 if (idx == 0) ··· 452 466 453 467 d.udma_mask = via_config->udma_mask; 454 468 455 - return ide_setup_pci_device(dev, &d); 469 + vdev = kzalloc(sizeof(*vdev), GFP_KERNEL); 470 + if (!vdev) { 471 + printk(KERN_ERR DRV_NAME " %s: out of memory :(\n", 472 + pci_name(dev)); 473 + return -ENOMEM; 474 + } 475 + 476 + vdev->via_config = via_config; 477 + 478 + rc = ide_pci_init_one(dev, &d, vdev); 479 + if (rc) 480 + kfree(vdev); 481 + 482 + return rc; 483 + } 484 + 485 + static void __devexit via_remove(struct pci_dev *dev) 486 + { 487 + struct ide_host *host = pci_get_drvdata(dev); 488 + struct via82cxxx_dev *vdev = host->host_priv; 489 + 490 + ide_pci_remove(dev); 491 + kfree(vdev); 456 492 } 457 493 458 494 static const struct pci_device_id via_pci_tbl[] = { ··· 491 483 .name = "VIA_IDE", 492 484 .id_table = via_pci_tbl, 493 485 .probe = via_init_one, 486 + .remove = via_remove, 494 487 }; 495 488 496 489 static int __init via_ide_init(void) ··· 499 490 return ide_pci_register_driver(&driver); 500 491 } 501 492 493 + static void __exit via_ide_exit(void) 494 + { 495 + pci_unregister_driver(&driver); 496 + } 497 + 502 498 module_init(via_ide_init); 499 + module_exit(via_ide_exit); 503 500 504 501 MODULE_AUTHOR("Vojtech Pavlik, Michel Aubry, Jeff Garzik, Andre Hedrick"); 505 502 MODULE_DESCRIPTION("PCI driver module for VIA IDE");
+158 -82
drivers/ide/setup-pci.c
··· 39 39 if (pci_read_config_byte(dev, PCI_CLASS_PROG, &progif) || 40 40 (progif & 5) != 5) { 41 41 if ((progif & 0xa) != 0xa) { 42 - printk(KERN_INFO "%s: device not capable of full " 43 - "native PCI mode\n", name); 42 + printk(KERN_INFO "%s %s: device not capable of full " 43 + "native PCI mode\n", name, pci_name(dev)); 44 44 return -EOPNOTSUPP; 45 45 } 46 - printk("%s: placing both ports into native PCI mode\n", name); 46 + printk(KERN_INFO "%s %s: placing both ports into native PCI " 47 + "mode\n", name, pci_name(dev)); 47 48 (void) pci_write_config_byte(dev, PCI_CLASS_PROG, progif|5); 48 49 if (pci_read_config_byte(dev, PCI_CLASS_PROG, &progif) || 49 50 (progif & 5) != 5) { 50 - printk(KERN_ERR "%s: rewrite of PROGIF failed, wanted " 51 - "0x%04x, got 0x%04x\n", 52 - name, progif|5, progif); 51 + printk(KERN_ERR "%s %s: rewrite of PROGIF failed, " 52 + "wanted 0x%04x, got 0x%04x\n", 53 + name, pci_name(dev), progif | 5, progif); 53 54 return -EOPNOTSUPP; 54 55 } 55 56 } ··· 58 57 } 59 58 60 59 #ifdef CONFIG_BLK_DEV_IDEDMA_PCI 61 - static void ide_pci_clear_simplex(unsigned long dma_base, const char *name) 60 + static int ide_pci_clear_simplex(unsigned long dma_base, const char *name) 62 61 { 63 62 u8 dma_stat = inb(dma_base + 2); 64 63 65 64 outb(dma_stat & 0x60, dma_base + 2); 66 65 dma_stat = inb(dma_base + 2); 67 - if (dma_stat & 0x80) 68 - printk(KERN_INFO "%s: simplex device: DMA forced\n", name); 66 + 67 + return (dma_stat & 0x80) ? 1 : 0; 69 68 } 70 69 71 70 /** ··· 92 91 dma_base = pci_resource_start(dev, baridx); 93 92 94 93 if (dma_base == 0) { 95 - printk(KERN_ERR "%s: DMA base is invalid\n", d->name); 94 + printk(KERN_ERR "%s %s: DMA base is invalid\n", 95 + d->name, pci_name(dev)); 96 96 return 0; 97 97 } 98 98 } ··· 107 105 108 106 int ide_pci_check_simplex(ide_hwif_t *hwif, const struct ide_port_info *d) 109 107 { 108 + struct pci_dev *dev = to_pci_dev(hwif->dev); 110 109 u8 dma_stat; 111 110 112 111 if (d->host_flags & (IDE_HFLAG_MMIO | IDE_HFLAG_CS5520)) 113 112 goto out; 114 113 115 114 if (d->host_flags & IDE_HFLAG_CLEAR_SIMPLEX) { 116 - ide_pci_clear_simplex(hwif->dma_base, d->name); 115 + if (ide_pci_clear_simplex(hwif->dma_base, d->name)) 116 + printk(KERN_INFO "%s %s: simplex device: DMA forced\n", 117 + d->name, pci_name(dev)); 117 118 goto out; 118 119 } 119 120 ··· 132 127 */ 133 128 dma_stat = hwif->tp_ops->read_sff_dma_status(hwif); 134 129 if ((dma_stat & 0x80) && hwif->mate && hwif->mate->dma_base) { 135 - printk(KERN_INFO "%s: simplex device: DMA disabled\n", d->name); 130 + printk(KERN_INFO "%s %s: simplex device: DMA disabled\n", 131 + d->name, pci_name(dev)); 136 132 return -1; 137 133 } 138 134 out: ··· 155 149 156 150 if (pci_read_config_word(dev, PCI_COMMAND, &pcicmd) || 157 151 (pcicmd & PCI_COMMAND_MASTER) == 0) { 158 - printk(KERN_ERR "%s: error updating PCICMD on %s\n", 159 - name, pci_name(dev)); 152 + printk(KERN_ERR "%s %s: error updating PCICMD\n", 153 + name, pci_name(dev)); 160 154 return -EIO; 161 155 } 162 156 } ··· 168 162 169 163 void ide_setup_pci_noise(struct pci_dev *dev, const struct ide_port_info *d) 170 164 { 171 - printk(KERN_INFO "%s: IDE controller (0x%04x:0x%04x rev 0x%02x) at " 172 - " PCI slot %s\n", d->name, dev->vendor, dev->device, 173 - dev->revision, pci_name(dev)); 165 + printk(KERN_INFO "%s %s: IDE controller (0x%04x:0x%04x rev 0x%02x)\n", 166 + d->name, pci_name(dev), 167 + dev->vendor, dev->device, dev->revision); 174 168 } 175 169 EXPORT_SYMBOL_GPL(ide_setup_pci_noise); 176 170 ··· 195 189 if (pci_enable_device(dev)) { 196 190 ret = pci_enable_device_io(dev); 197 191 if (ret < 0) { 198 - printk(KERN_WARNING "%s: (ide_setup_pci_device:) " 199 - "Could not enable device.\n", d->name); 192 + printk(KERN_WARNING "%s %s: couldn't enable device\n", 193 + d->name, pci_name(dev)); 200 194 goto out; 201 195 } 202 - printk(KERN_WARNING "%s: BIOS configuration fixed.\n", d->name); 196 + printk(KERN_WARNING "%s %s: BIOS configuration fixed\n", 197 + d->name, pci_name(dev)); 203 198 } 204 199 205 200 /* ··· 210 203 */ 211 204 ret = pci_set_dma_mask(dev, DMA_32BIT_MASK); 212 205 if (ret < 0) { 213 - printk(KERN_ERR "%s: can't set dma mask\n", d->name); 206 + printk(KERN_ERR "%s %s: can't set DMA mask\n", 207 + d->name, pci_name(dev)); 214 208 goto out; 215 209 } 216 210 ··· 229 221 230 222 ret = pci_request_selected_regions(dev, bars, d->name); 231 223 if (ret < 0) 232 - printk(KERN_ERR "%s: can't reserve resources\n", d->name); 224 + printk(KERN_ERR "%s %s: can't reserve resources\n", 225 + d->name, pci_name(dev)); 233 226 out: 234 227 return ret; 235 228 } ··· 256 247 */ 257 248 if (ide_setup_pci_baseregs(dev, d->name) || 258 249 pci_write_config_word(dev, PCI_COMMAND, pcicmd | PCI_COMMAND_IO)) { 259 - printk(KERN_INFO "%s: device disabled (BIOS)\n", d->name); 250 + printk(KERN_INFO "%s %s: device disabled (BIOS)\n", 251 + d->name, pci_name(dev)); 260 252 return -ENODEV; 261 253 } 262 254 if (pci_read_config_word(dev, PCI_COMMAND, &pcicmd)) { 263 - printk(KERN_ERR "%s: error accessing PCI regs\n", d->name); 255 + printk(KERN_ERR "%s %s: error accessing PCI regs\n", 256 + d->name, pci_name(dev)); 264 257 return -EIO; 265 258 } 266 259 if (!(pcicmd & PCI_COMMAND_IO)) { 267 - printk(KERN_ERR "%s: unable to enable IDE controller\n", d->name); 260 + printk(KERN_ERR "%s %s: unable to enable IDE controller\n", 261 + d->name, pci_name(dev)); 268 262 return -ENXIO; 269 263 } 270 264 return 0; ··· 323 311 if ((d->host_flags & IDE_HFLAG_ISA_PORTS) == 0) { 324 312 if (ide_pci_check_iomem(dev, d, 2 * port) || 325 313 ide_pci_check_iomem(dev, d, 2 * port + 1)) { 326 - printk(KERN_ERR "%s: I/O baseregs (BIOS) are reported " 327 - "as MEM for port %d!\n", d->name, port); 314 + printk(KERN_ERR "%s %s: I/O baseregs (BIOS) are " 315 + "reported as MEM for port %d!\n", 316 + d->name, pci_name(dev), port); 328 317 return -EINVAL; 329 318 } 330 319 ··· 338 325 } 339 326 340 327 if (!base || !ctl) { 341 - printk(KERN_ERR "%s: bad PCI BARs for port %d, skipping\n", 342 - d->name, port); 328 + printk(KERN_ERR "%s %s: bad PCI BARs for port %d, skipping\n", 329 + d->name, pci_name(dev), port); 343 330 return -EINVAL; 344 331 } 345 332 ··· 406 393 * @dev: PCI device 407 394 * @d: IDE port info 408 395 * @noisy: verbose flag 409 - * @config: returned as 1 if we configured the hardware 410 396 * 411 397 * Set up the PCI and controller side of the IDE interface. This brings 412 398 * up the PCI side of the device, checks that the device is enabled 413 399 * and enables it if need be 414 400 */ 415 401 416 - static int ide_setup_pci_controller(struct pci_dev *dev, const struct ide_port_info *d, int noisy, int *config) 402 + static int ide_setup_pci_controller(struct pci_dev *dev, 403 + const struct ide_port_info *d, int noisy) 417 404 { 418 405 int ret; 419 406 u16 pcicmd; ··· 427 414 428 415 ret = pci_read_config_word(dev, PCI_COMMAND, &pcicmd); 429 416 if (ret < 0) { 430 - printk(KERN_ERR "%s: error accessing PCI regs\n", d->name); 417 + printk(KERN_ERR "%s %s: error accessing PCI regs\n", 418 + d->name, pci_name(dev)); 431 419 goto out; 432 420 } 433 421 if (!(pcicmd & PCI_COMMAND_IO)) { /* is device disabled? */ 434 422 ret = ide_pci_configure(dev, d); 435 423 if (ret < 0) 436 424 goto out; 437 - *config = 1; 438 - printk(KERN_INFO "%s: device enabled (Linux)\n", d->name); 425 + printk(KERN_INFO "%s %s: device enabled (Linux)\n", 426 + d->name, pci_name(dev)); 439 427 } 440 428 441 429 out: ··· 475 461 476 462 if (e->reg && (pci_read_config_byte(dev, e->reg, &tmp) || 477 463 (tmp & e->mask) != e->val)) { 478 - printk(KERN_INFO "%s: IDE port disabled\n", d->name); 464 + printk(KERN_INFO "%s %s: IDE port disabled\n", 465 + d->name, pci_name(dev)); 479 466 continue; /* port not enabled */ 480 467 } 481 468 ··· 502 487 const struct ide_port_info *d, 503 488 u8 noisy) 504 489 { 505 - int tried_config = 0; 506 490 int pciirq, ret; 507 - 508 - ret = ide_setup_pci_controller(dev, d, noisy, &tried_config); 509 - if (ret < 0) 510 - goto out; 511 491 512 492 /* 513 493 * Can we trust the reported IRQ? 514 494 */ 515 495 pciirq = dev->irq; 516 496 497 + /* 498 + * This allows offboard ide-pci cards the enable a BIOS, 499 + * verify interrupt settings of split-mirror pci-config 500 + * space, place chipset into init-mode, and/or preserve 501 + * an interrupt if the card is not native ide support. 502 + */ 503 + ret = d->init_chipset ? d->init_chipset(dev) : 0; 504 + if (ret < 0) 505 + goto out; 506 + 517 507 /* Is it an "IDE storage" device in non-PCI mode? */ 518 508 if ((dev->class >> 8) == PCI_CLASS_STORAGE_IDE && (dev->class & 5) != 5) { 519 509 if (noisy) 520 - printk(KERN_INFO "%s: not 100%% native mode: " 521 - "will probe irqs later\n", d->name); 522 - /* 523 - * This allows offboard ide-pci cards the enable a BIOS, 524 - * verify interrupt settings of split-mirror pci-config 525 - * space, place chipset into init-mode, and/or preserve 526 - * an interrupt if the card is not native ide support. 527 - */ 528 - ret = d->init_chipset ? d->init_chipset(dev, d->name) : 0; 529 - if (ret < 0) 530 - goto out; 510 + printk(KERN_INFO "%s %s: not 100%% native mode: will " 511 + "probe irqs later\n", d->name, pci_name(dev)); 531 512 pciirq = ret; 532 - } else if (tried_config) { 533 - if (noisy) 534 - printk(KERN_INFO "%s: will probe irqs later\n", d->name); 535 - pciirq = 0; 536 - } else if (!pciirq) { 537 - if (noisy) 538 - printk(KERN_WARNING "%s: bad irq (%d): will probe later\n", 539 - d->name, pciirq); 540 - pciirq = 0; 541 - } else { 542 - if (d->init_chipset) { 543 - ret = d->init_chipset(dev, d->name); 544 - if (ret < 0) 545 - goto out; 546 - } 547 - if (noisy) 548 - printk(KERN_INFO "%s: 100%% native mode on irq %d\n", 549 - d->name, pciirq); 513 + } else if (!pciirq && noisy) { 514 + printk(KERN_WARNING "%s %s: bad irq (%d): will probe later\n", 515 + d->name, pci_name(dev), pciirq); 516 + } else if (noisy) { 517 + printk(KERN_INFO "%s %s: 100%% native mode on irq %d\n", 518 + d->name, pci_name(dev), pciirq); 550 519 } 551 520 552 521 ret = pciirq; ··· 538 539 return ret; 539 540 } 540 541 541 - int ide_setup_pci_device(struct pci_dev *dev, const struct ide_port_info *d) 542 + int ide_pci_init_one(struct pci_dev *dev, const struct ide_port_info *d, 543 + void *priv) 542 544 { 545 + struct ide_host *host; 543 546 hw_regs_t hw[4], *hws[] = { NULL, NULL, NULL, NULL }; 544 547 int ret; 545 548 546 - ret = do_ide_setup_pci_device(dev, d, 1); 549 + ret = ide_setup_pci_controller(dev, d, 1); 550 + if (ret < 0) 551 + goto out; 547 552 548 - if (ret >= 0) { 549 - /* FIXME: silent failure can happen */ 550 - ide_pci_setup_ports(dev, d, ret, &hw[0], &hws[0]); 553 + ide_pci_setup_ports(dev, d, 0, &hw[0], &hws[0]); 551 554 552 - ret = ide_host_add(d, hws, NULL); 555 + host = ide_host_alloc(d, hws); 556 + if (host == NULL) { 557 + ret = -ENOMEM; 558 + goto out; 553 559 } 554 560 561 + host->dev[0] = &dev->dev; 562 + 563 + host->host_priv = priv; 564 + 565 + pci_set_drvdata(dev, host); 566 + 567 + ret = do_ide_setup_pci_device(dev, d, 1); 568 + if (ret < 0) 569 + goto out; 570 + 571 + /* fixup IRQ */ 572 + hw[1].irq = hw[0].irq = ret; 573 + 574 + ret = ide_host_register(host, d, hws); 575 + if (ret) 576 + ide_host_free(host); 577 + out: 555 578 return ret; 556 579 } 557 - EXPORT_SYMBOL_GPL(ide_setup_pci_device); 580 + EXPORT_SYMBOL_GPL(ide_pci_init_one); 558 581 559 - int ide_setup_pci_devices(struct pci_dev *dev1, struct pci_dev *dev2, 560 - const struct ide_port_info *d) 582 + int ide_pci_init_two(struct pci_dev *dev1, struct pci_dev *dev2, 583 + const struct ide_port_info *d, void *priv) 561 584 { 562 585 struct pci_dev *pdev[] = { dev1, dev2 }; 586 + struct ide_host *host; 563 587 int ret, i; 564 588 hw_regs_t hw[4], *hws[] = { NULL, NULL, NULL, NULL }; 589 + 590 + for (i = 0; i < 2; i++) { 591 + ret = ide_setup_pci_controller(pdev[i], d, !i); 592 + if (ret < 0) 593 + goto out; 594 + 595 + ide_pci_setup_ports(pdev[i], d, 0, &hw[i*2], &hws[i*2]); 596 + } 597 + 598 + host = ide_host_alloc(d, hws); 599 + if (host == NULL) { 600 + ret = -ENOMEM; 601 + goto out; 602 + } 603 + 604 + host->dev[0] = &dev1->dev; 605 + host->dev[1] = &dev2->dev; 606 + 607 + host->host_priv = priv; 608 + 609 + pci_set_drvdata(pdev[0], host); 610 + pci_set_drvdata(pdev[1], host); 565 611 566 612 for (i = 0; i < 2; i++) { 567 613 ret = do_ide_setup_pci_device(pdev[i], d, !i); ··· 618 574 if (ret < 0) 619 575 goto out; 620 576 621 - /* FIXME: silent failure can happen */ 622 - ide_pci_setup_ports(pdev[i], d, ret, &hw[i*2], &hws[i*2]); 577 + /* fixup IRQ */ 578 + hw[i*2 + 1].irq = hw[i*2].irq = ret; 623 579 } 624 580 625 - ret = ide_host_add(d, hws, NULL); 581 + ret = ide_host_register(host, d, hws); 582 + if (ret) 583 + ide_host_free(host); 626 584 out: 627 585 return ret; 628 586 } 629 - EXPORT_SYMBOL_GPL(ide_setup_pci_devices); 587 + EXPORT_SYMBOL_GPL(ide_pci_init_two); 588 + 589 + void ide_pci_remove(struct pci_dev *dev) 590 + { 591 + struct ide_host *host = pci_get_drvdata(dev); 592 + struct pci_dev *dev2 = host->dev[1] ? to_pci_dev(host->dev[1]) : NULL; 593 + int bars; 594 + 595 + if (host->host_flags & IDE_HFLAG_SINGLE) 596 + bars = (1 << 2) - 1; 597 + else 598 + bars = (1 << 4) - 1; 599 + 600 + if ((host->host_flags & IDE_HFLAG_NO_DMA) == 0) { 601 + if (host->host_flags & IDE_HFLAG_CS5520) 602 + bars |= (1 << 2); 603 + else 604 + bars |= (1 << 4); 605 + } 606 + 607 + ide_host_remove(host); 608 + 609 + if (dev2) 610 + pci_release_selected_regions(dev2, bars); 611 + pci_release_selected_regions(dev, bars); 612 + 613 + if (dev2) 614 + pci_disable_device(dev2); 615 + pci_disable_device(dev); 616 + } 617 + EXPORT_SYMBOL_GPL(ide_pci_remove);
+22 -11
drivers/scsi/ide-scsi.c
··· 101 101 102 102 mutex_lock(&idescsi_ref_mutex); 103 103 scsi = ide_scsi_g(disk); 104 - if (scsi) 104 + if (scsi) { 105 105 scsi_host_get(scsi->host); 106 + if (ide_device_get(scsi->drive)) { 107 + scsi_host_put(scsi->host); 108 + scsi = NULL; 109 + } 110 + } 106 111 mutex_unlock(&idescsi_ref_mutex); 107 112 return scsi; 108 113 } ··· 115 110 static void ide_scsi_put(struct ide_scsi_obj *scsi) 116 111 { 117 112 mutex_lock(&idescsi_ref_mutex); 113 + ide_device_put(scsi->drive); 118 114 scsi_host_put(scsi->host); 119 115 mutex_unlock(&idescsi_ref_mutex); 120 116 } ··· 207 201 208 202 /* stuff a sense request in front of our current request */ 209 203 pc = kzalloc(sizeof(struct ide_atapi_pc), GFP_ATOMIC); 210 - rq = kmalloc(sizeof(struct request), GFP_ATOMIC); 204 + rq = blk_get_request(drive->queue, READ, GFP_ATOMIC); 211 205 buf = kzalloc(SCSI_SENSE_BUFFERSIZE, GFP_ATOMIC); 212 206 if (!pc || !rq || !buf) { 213 207 kfree(buf); 214 - kfree(rq); 208 + if (rq) 209 + blk_put_request(rq); 215 210 kfree(pc); 216 211 return -ENOMEM; 217 212 } 218 - blk_rq_init(NULL, rq); 219 213 rq->special = (char *) pc; 220 214 pc->rq = rq; 221 215 pc->buf = buf; ··· 232 226 ide_scsi_hex_dump(pc->c, 6); 233 227 } 234 228 rq->rq_disk = scsi->disk; 229 + rq->ref_count++; 235 230 memcpy(rq->cmd, pc->c, 12); 236 231 ide_do_drive_cmd(drive, rq); 237 232 return 0; ··· 279 272 SCSI_SENSE_BUFFERSIZE); 280 273 kfree(pc->buf); 281 274 kfree(pc); 282 - kfree(rq); 275 + blk_put_request(rq); 283 276 pc = opc; 284 277 rq = pc->rq; 285 278 pc->scsi_cmd->result = (CHECK_CONDITION << 1) | ··· 310 303 pc->done(pc->scsi_cmd); 311 304 spin_unlock_irqrestore(host->host_lock, flags); 312 305 kfree(pc); 313 - kfree(rq); 306 + blk_put_request(rq); 314 307 scsi->pc = NULL; 315 308 return 0; 316 309 } ··· 584 577 ide_drive_t *drive = scsi->drive; 585 578 struct request *rq = NULL; 586 579 struct ide_atapi_pc *pc = NULL; 580 + int write = cmd->sc_data_direction == DMA_TO_DEVICE; 587 581 588 582 if (!drive) { 589 583 scmd_printk (KERN_ERR, cmd, "drive not present\n"); ··· 592 584 } 593 585 scsi = drive_to_idescsi(drive); 594 586 pc = kmalloc(sizeof(struct ide_atapi_pc), GFP_ATOMIC); 595 - rq = kmalloc(sizeof(struct request), GFP_ATOMIC); 587 + rq = blk_get_request(drive->queue, write, GFP_ATOMIC); 596 588 if (rq == NULL || pc == NULL) { 597 589 printk (KERN_ERR "ide-scsi: %s: out of memory\n", drive->name); 598 590 goto abort; ··· 622 614 } 623 615 } 624 616 625 - blk_rq_init(NULL, rq); 626 617 rq->special = (char *) pc; 627 618 rq->cmd_type = REQ_TYPE_SPECIAL; 628 619 spin_unlock_irq(host->host_lock); 620 + rq->ref_count++; 629 621 memcpy(rq->cmd, pc->c, 12); 630 622 blk_execute_rq_nowait(drive->queue, scsi->disk, rq, 0, NULL); 631 623 spin_lock_irq(host->host_lock); 632 624 return 0; 633 625 abort: 634 626 kfree (pc); 635 - kfree (rq); 627 + if (rq) 628 + blk_put_request(rq); 636 629 cmd->result = DID_ERROR << 16; 637 630 done(cmd); 638 631 return 0; ··· 681 672 682 673 if (blk_sense_request(scsi->pc->rq)) 683 674 kfree(scsi->pc->buf); 684 - kfree(scsi->pc->rq); 675 + /* we need to call blk_put_request twice. */ 676 + blk_put_request(scsi->pc->rq); 677 + blk_put_request(scsi->pc->rq); 685 678 kfree(scsi->pc); 686 679 scsi->pc = NULL; 687 680 ··· 735 724 kfree(scsi->pc->buf); 736 725 kfree(scsi->pc); 737 726 scsi->pc = NULL; 738 - kfree(req); 727 + blk_put_request(req); 739 728 740 729 /* now nuke the drive queue */ 741 730 while ((req = elv_next_request(drive->queue))) {
-44
include/asm-alpha/ide.h
··· 1 - /* 2 - * linux/include/asm-alpha/ide.h 3 - * 4 - * Copyright (C) 1994-1996 Linus Torvalds & authors 5 - */ 6 - 7 - /* 8 - * This file contains the alpha architecture specific IDE code. 9 - */ 10 - 11 - #ifndef __ASMalpha_IDE_H 12 - #define __ASMalpha_IDE_H 13 - 14 - #ifdef __KERNEL__ 15 - 16 - static inline int ide_default_irq(unsigned long base) 17 - { 18 - switch (base) { 19 - case 0x1f0: return 14; 20 - case 0x170: return 15; 21 - case 0x1e8: return 11; 22 - case 0x168: return 10; 23 - default: 24 - return 0; 25 - } 26 - } 27 - 28 - static inline unsigned long ide_default_io_base(int index) 29 - { 30 - switch (index) { 31 - case 0: return 0x1f0; 32 - case 1: return 0x170; 33 - case 2: return 0x1e8; 34 - case 3: return 0x168; 35 - default: 36 - return 0; 37 - } 38 - } 39 - 40 - #include <asm-generic/ide_iops.h> 41 - 42 - #endif /* __KERNEL__ */ 43 - 44 - #endif /* __ASMalpha_IDE_H */
-4
include/asm-arm/ide.h
··· 13 13 14 14 #ifdef __KERNEL__ 15 15 16 - #ifndef MAX_HWIFS 17 - #define MAX_HWIFS 4 18 - #endif 19 - 20 16 #define __ide_mm_insw(port,addr,len) readsw(port,addr,len) 21 17 #define __ide_mm_insl(port,addr,len) readsl(port,addr,len) 22 18 #define __ide_mm_outsw(port,addr,len) writesw(port,addr,len)
-27
include/asm-blackfin/ide.h
··· 1 - /****************************************************************************/ 2 - 3 - /* 4 - * linux/include/asm-blackfin/ide.h 5 - * 6 - * Copyright (C) 1994-1996 Linus Torvalds & authors 7 - * Copyright (C) 2001 Lineo Inc., davidm@snapgear.com 8 - * Copyright (C) 2002 Greg Ungerer (gerg@snapgear.com) 9 - * Copyright (C) 2002 Yoshinori Sato (ysato@users.sourceforge.jp) 10 - * Copyright (C) 2005 Hennerich Michael (hennerich@blackfin.uclinux.org) 11 - */ 12 - 13 - /****************************************************************************/ 14 - #ifndef _BLACKFIN_IDE_H 15 - #define _BLACKFIN_IDE_H 16 - /****************************************************************************/ 17 - #ifdef __KERNEL__ 18 - /****************************************************************************/ 19 - 20 - #define MAX_HWIFS 1 21 - 22 - #include <asm-generic/ide_iops.h> 23 - 24 - /****************************************************************************/ 25 - #endif /* __KERNEL__ */ 26 - #endif /* _BLACKFIN_IDE_H */ 27 - /****************************************************************************/
-91
include/asm-cris/arch-v10/ide.h
··· 1 - /* 2 - * linux/include/asm-cris/ide.h 3 - * 4 - * Copyright (C) 2000, 2001, 2002 Axis Communications AB 5 - * 6 - * Authors: Bjorn Wesen 7 - * 8 - */ 9 - 10 - /* 11 - * This file contains the ETRAX 100LX specific IDE code. 12 - */ 13 - 14 - #ifndef __ASMCRIS_IDE_H 15 - #define __ASMCRIS_IDE_H 16 - 17 - #ifdef __KERNEL__ 18 - 19 - #include <asm/arch/svinto.h> 20 - #include <asm/io.h> 21 - #include <asm-generic/ide_iops.h> 22 - 23 - 24 - /* ETRAX 100 can support 4 IDE busses on the same pins (serialized) */ 25 - 26 - #define MAX_HWIFS 4 27 - 28 - static inline int ide_default_irq(unsigned long base) 29 - { 30 - /* all IDE busses share the same IRQ, number 4. 31 - * this has the side-effect that ide-probe.c will cluster our 4 interfaces 32 - * together in a hwgroup, and will serialize accesses. this is good, because 33 - * we can't access more than one interface at the same time on ETRAX100. 34 - */ 35 - return 4; 36 - } 37 - 38 - static inline unsigned long ide_default_io_base(int index) 39 - { 40 - /* we have no real I/O base address per interface, since all go through the 41 - * same register. but in a bitfield in that register, we have the i/f number. 42 - * so we can use the io_base to remember that bitfield. 43 - */ 44 - static const unsigned long io_bases[MAX_HWIFS] = { 45 - IO_FIELD(R_ATA_CTRL_DATA, sel, 0), 46 - IO_FIELD(R_ATA_CTRL_DATA, sel, 1), 47 - IO_FIELD(R_ATA_CTRL_DATA, sel, 2), 48 - IO_FIELD(R_ATA_CTRL_DATA, sel, 3) 49 - }; 50 - return io_bases[index]; 51 - } 52 - 53 - /* this is called once for each interface, to setup the port addresses. data_port is the result 54 - * of the ide_default_io_base call above. ctrl_port will be 0, but that is don't care for us. 55 - */ 56 - 57 - static inline void ide_init_hwif_ports(hw_regs_t *hw, unsigned long data_port, unsigned long ctrl_port, int *irq) 58 - { 59 - int i; 60 - 61 - /* fill in ports for ATA addresses 0 to 7 */ 62 - for (i = 0; i <= 7; i++) { 63 - hw->io_ports_array[i] = data_port | 64 - IO_FIELD(R_ATA_CTRL_DATA, addr, i) | 65 - IO_STATE(R_ATA_CTRL_DATA, cs0, active); 66 - } 67 - 68 - /* the IDE control register is at ATA address 6, with CS1 active instead of CS0 */ 69 - hw->io_ports.ctl_addr = data_port | 70 - IO_FIELD(R_ATA_CTRL_DATA, addr, 6) | 71 - IO_STATE(R_ATA_CTRL_DATA, cs1, active); 72 - 73 - /* whats this for ? */ 74 - hw->io_ports.irq_addr = 0; 75 - } 76 - 77 - static inline void ide_init_default_hwifs(void) 78 - { 79 - hw_regs_t hw; 80 - int index; 81 - 82 - for(index = 0; index < MAX_HWIFS; index++) { 83 - ide_init_hwif_ports(&hw, ide_default_io_base(index), 0, NULL); 84 - hw.irq = ide_default_irq(ide_default_io_base(index)); 85 - ide_register_hw(&hw, NULL); 86 - } 87 - } 88 - 89 - #endif /* __KERNEL__ */ 90 - 91 - #endif /* __ASMCRIS_IDE_H */
-56
include/asm-cris/arch-v32/ide.h
··· 1 - /* 2 - * linux/include/asm-cris/ide.h 3 - * 4 - * Copyright (C) 2000-2004 Axis Communications AB 5 - * 6 - * Authors: Bjorn Wesen, Mikael Starvik 7 - * 8 - */ 9 - 10 - /* 11 - * This file contains the ETRAX FS specific IDE code. 12 - */ 13 - 14 - #ifndef __ASMCRIS_IDE_H 15 - #define __ASMCRIS_IDE_H 16 - 17 - #ifdef __KERNEL__ 18 - 19 - #include <asm/arch/hwregs/intr_vect.h> 20 - #include <asm/arch/hwregs/ata_defs.h> 21 - #include <asm/io.h> 22 - #include <asm-generic/ide_iops.h> 23 - 24 - 25 - /* ETRAX FS can support 4 IDE busses on the same pins (serialized) */ 26 - 27 - #define MAX_HWIFS 4 28 - 29 - static inline int ide_default_irq(unsigned long base) 30 - { 31 - /* all IDE busses share the same IRQ, 32 - * this has the side-effect that ide-probe.c will cluster our 4 interfaces 33 - * together in a hwgroup, and will serialize accesses. this is good, because 34 - * we can't access more than one interface at the same time on ETRAX100. 35 - */ 36 - return ATA_INTR_VECT; 37 - } 38 - 39 - static inline unsigned long ide_default_io_base(int index) 40 - { 41 - reg_ata_rw_ctrl2 ctrl2 = {.sel = index}; 42 - /* we have no real I/O base address per interface, since all go through the 43 - * same register. but in a bitfield in that register, we have the i/f number. 44 - * so we can use the io_base to remember that bitfield. 45 - */ 46 - ctrl2.sel = index; 47 - 48 - return REG_TYPE_CONV(unsigned long, reg_ata_rw_ctrl2, ctrl2); 49 - } 50 - 51 - #define IDE_ARCH_ACK_INTR 52 - #define ide_ack_intr(hwif) ((hwif)->ack_intr(hwif)) 53 - 54 - #endif /* __KERNEL__ */ 55 - 56 - #endif /* __ASMCRIS_IDE_H */
-1
include/asm-cris/ide.h
··· 1 - #include <asm/arch/ide.h>
-4
include/asm-frv/ide.h
··· 18 18 #include <asm/io.h> 19 19 #include <asm/irq.h> 20 20 21 - #ifndef MAX_HWIFS 22 - #define MAX_HWIFS 8 23 - #endif 24 - 25 21 /****************************************************************************/ 26 22 /* 27 23 * some bits needed for parts of the IDE subsystem to compile
-26
include/asm-h8300/ide.h
··· 1 - /****************************************************************************/ 2 - 3 - /* 4 - * linux/include/asm-h8300/ide.h 5 - * 6 - * Copyright (C) 1994-1996 Linus Torvalds & authors 7 - * Copyright (C) 2001 Lineo Inc., davidm@snapgear.com 8 - * Copyright (C) 2002 Greg Ungerer (gerg@snapgear.com) 9 - * Copyright (C) 2002 Yoshinori Sato (ysato@users.sourceforge.jp) 10 - */ 11 - 12 - /****************************************************************************/ 13 - #ifndef _H8300_IDE_H 14 - #define _H8300_IDE_H 15 - /****************************************************************************/ 16 - #ifdef __KERNEL__ 17 - /****************************************************************************/ 18 - 19 - #define MAX_HWIFS 1 20 - 21 - #include <asm-generic/ide_iops.h> 22 - 23 - /****************************************************************************/ 24 - #endif /* __KERNEL__ */ 25 - #endif /* _H8300_IDE_H */ 26 - /****************************************************************************/
-51
include/asm-ia64/ide.h
··· 1 - /* 2 - * linux/include/asm-ia64/ide.h 3 - * 4 - * Copyright (C) 1994-1996 Linus Torvalds & authors 5 - */ 6 - 7 - /* 8 - * This file contains the ia64 architecture specific IDE code. 9 - */ 10 - 11 - #ifndef __ASM_IA64_IDE_H 12 - #define __ASM_IA64_IDE_H 13 - 14 - #ifdef __KERNEL__ 15 - 16 - 17 - #include <linux/irq.h> 18 - 19 - static inline int ide_default_irq(unsigned long base) 20 - { 21 - switch (base) { 22 - case 0x1f0: return isa_irq_to_vector(14); 23 - case 0x170: return isa_irq_to_vector(15); 24 - case 0x1e8: return isa_irq_to_vector(11); 25 - case 0x168: return isa_irq_to_vector(10); 26 - case 0x1e0: return isa_irq_to_vector(8); 27 - case 0x160: return isa_irq_to_vector(12); 28 - default: 29 - return 0; 30 - } 31 - } 32 - 33 - static inline unsigned long ide_default_io_base(int index) 34 - { 35 - switch (index) { 36 - case 0: return 0x1f0; 37 - case 1: return 0x170; 38 - case 2: return 0x1e8; 39 - case 3: return 0x168; 40 - case 4: return 0x1e0; 41 - case 5: return 0x160; 42 - default: 43 - return 0; 44 - } 45 - } 46 - 47 - #include <asm-generic/ide_iops.h> 48 - 49 - #endif /* __KERNEL__ */ 50 - 51 - #endif /* __ASM_IA64_IDE_H */
-70
include/asm-m32r/ide.h
··· 1 - #ifndef _ASM_M32R_IDE_H 2 - #define _ASM_M32R_IDE_H 3 - 4 - /* 5 - * linux/include/asm-m32r/ide.h 6 - * 7 - * Copyright (C) 1994-1996 Linus Torvalds & authors 8 - */ 9 - 10 - /* 11 - * This file contains the i386 architecture specific IDE code. 12 - */ 13 - 14 - #ifdef __KERNEL__ 15 - 16 - #include <asm/m32r.h> 17 - 18 - #ifndef MAX_HWIFS 19 - # ifdef CONFIG_BLK_DEV_IDEPCI 20 - #define MAX_HWIFS 10 21 - # else 22 - #define MAX_HWIFS 2 23 - # endif 24 - #endif 25 - 26 - static __inline__ int ide_default_irq(unsigned long base) 27 - { 28 - switch (base) { 29 - #if defined(CONFIG_PLAT_M32700UT) || defined(CONFIG_PLAT_MAPPI2) \ 30 - || defined(CONFIG_PLAT_OPSPUT) 31 - case 0x1f0: return PLD_IRQ_CFIREQ; 32 - default: 33 - return 0; 34 - #elif defined(CONFIG_PLAT_MAPPI3) 35 - case 0x1f0: return PLD_IRQ_CFIREQ; 36 - case 0x170: return PLD_IRQ_IDEIREQ; 37 - default: 38 - return 0; 39 - #else 40 - case 0x1f0: return 14; 41 - case 0x170: return 15; 42 - case 0x1e8: return 11; 43 - case 0x168: return 10; 44 - case 0x1e0: return 8; 45 - case 0x160: return 12; 46 - default: 47 - return 0; 48 - #endif 49 - } 50 - } 51 - 52 - static __inline__ unsigned long ide_default_io_base(int index) 53 - { 54 - switch (index) { 55 - case 0: return 0x1f0; 56 - case 1: return 0x170; 57 - case 2: return 0x1e8; 58 - case 3: return 0x168; 59 - case 4: return 0x1e0; 60 - case 5: return 0x160; 61 - default: 62 - return 0; 63 - } 64 - } 65 - 66 - #include <asm-generic/ide_iops.h> 67 - 68 - #endif /* __KERNEL__ */ 69 - 70 - #endif /* _ASM_M32R_IDE_H */
-4
include/asm-m68k/ide.h
··· 45 45 #include <asm/macints.h> 46 46 #endif 47 47 48 - #ifndef MAX_HWIFS 49 - #define MAX_HWIFS 4 /* same as the other archs */ 50 - #endif 51 - 52 48 /* 53 49 * Get rid of defs from io.h - ide has its private and conflicting versions 54 50 * Since so far no single m68k platform uses ISA/PCI I/O space for IDE, we
-48
include/asm-mips/mach-generic/ide.h
··· 19 19 #include <linux/stddef.h> 20 20 #include <asm/processor.h> 21 21 22 - #ifndef MAX_HWIFS 23 - # ifdef CONFIG_BLK_DEV_IDEPCI 24 - #define MAX_HWIFS 10 25 - # else 26 - #define MAX_HWIFS 6 27 - # endif 28 - #endif 29 - 30 22 static __inline__ int ide_probe_legacy(void) 31 23 { 32 24 #ifdef CONFIG_PCI ··· 46 54 #else 47 55 return 0; 48 56 #endif 49 - } 50 - 51 - static __inline__ int ide_default_irq(unsigned long base) 52 - { 53 - switch (base) { 54 - case 0x1f0: return 14; 55 - case 0x170: return 15; 56 - case 0x1e8: return 11; 57 - case 0x168: return 10; 58 - case 0x1e0: return 8; 59 - case 0x160: return 12; 60 - default: 61 - return 0; 62 - } 63 - } 64 - 65 - static __inline__ unsigned long ide_default_io_base(int index) 66 - { 67 - if (!ide_probe_legacy()) 68 - return 0; 69 - /* 70 - * If PCI is present then it is not safe to poke around 71 - * the other legacy IDE ports. Only 0x1f0 and 0x170 are 72 - * defined compatibility mode ports for PCI. A user can 73 - * override this using ide= but we must default safe. 74 - */ 75 - if (no_pci_devices()) { 76 - switch (index) { 77 - case 2: return 0x1e8; 78 - case 3: return 0x168; 79 - case 4: return 0x1e0; 80 - case 5: return 0x160; 81 - } 82 - } 83 - switch (index) { 84 - case 0: return 0x1f0; 85 - case 1: return 0x170; 86 - default: 87 - return 0; 88 - } 89 57 } 90 58 91 59 /* MIPS port and memory-mapped I/O string operations. */
-4
include/asm-mn10300/ide.h
··· 23 23 #undef SUPPORT_VLB_SYNC 24 24 #define SUPPORT_VLB_SYNC 0 25 25 26 - #ifndef MAX_HWIFS 27 - #define MAX_HWIFS 8 28 - #endif 29 - 30 26 /* 31 27 * some bits needed for parts of the IDE subsystem to compile 32 28 */
-4
include/asm-parisc/ide.h
··· 13 13 14 14 #ifdef __KERNEL__ 15 15 16 - #ifndef MAX_HWIFS 17 - #define MAX_HWIFS 2 18 - #endif 19 - 20 16 #define ide_request_irq(irq,hand,flg,dev,id) request_irq((irq),(hand),(flg),(dev),(id)) 21 17 #define ide_free_irq(irq,dev_id) free_irq((irq), (dev_id)) 22 18 #define ide_request_region(from,extent,name) request_region((from), (extent), (name))
-26
include/asm-powerpc/ide.h
··· 14 14 #endif 15 15 #include <asm/io.h> 16 16 17 - #ifndef MAX_HWIFS 18 - #ifdef __powerpc64__ 19 - #define MAX_HWIFS 10 20 - #else 21 - #define MAX_HWIFS 8 22 - #endif 23 - #endif 24 - 25 17 #define __ide_mm_insw(p, a, c) readsw((void __iomem *)(p), (a), (c)) 26 18 #define __ide_mm_insl(p, a, c) readsl((void __iomem *)(p), (a), (c)) 27 19 #define __ide_mm_outsw(p, a, c) writesw((void __iomem *)(p), (a), (c)) ··· 32 40 case 0x170: return 15; 33 41 } 34 42 #endif 35 - #ifdef CONFIG_PPC_PREP 36 - switch (base) { 37 - case 0x1f0: return 13; 38 - case 0x170: return 13; 39 - case 0x1e8: return 11; 40 - case 0x168: return 10; 41 - case 0xfff0: return 14; /* MCP(N)750 ide0 */ 42 - case 0xffe0: return 15; /* MCP(N)750 ide1 */ 43 - } 44 - #endif 45 43 return 0; 46 44 } 47 45 ··· 42 60 switch (index) { 43 61 case 0: return 0x1f0; 44 62 case 1: return 0x170; 45 - } 46 - #endif 47 - #ifdef CONFIG_PPC_PREP 48 - switch (index) { 49 - case 0: return 0x1f0; 50 - case 1: return 0x170; 51 - case 2: return 0x1e8; 52 - case 3: return 0x168; 53 63 } 54 64 #endif 55 65 return 0;
-21
include/asm-sh/ide.h
··· 1 - /* 2 - * linux/include/asm-sh/ide.h 3 - * 4 - * Copyright (C) 1994-1996 Linus Torvalds & authors 5 - */ 6 - 7 - /* 8 - * This file contains the i386 architecture specific IDE code. 9 - * In future, SuperH code. 10 - */ 11 - 12 - #ifndef __ASM_SH_IDE_H 13 - #define __ASM_SH_IDE_H 14 - 15 - #ifdef __KERNEL__ 16 - 17 - #include <asm-generic/ide_iops.h> 18 - 19 - #endif /* __KERNEL__ */ 20 - 21 - #endif /* __ASM_SH_IDE_H */
-3
include/asm-sparc/ide.h
··· 21 21 #include <asm/psr.h> 22 22 #endif 23 23 24 - #undef MAX_HWIFS 25 - #define MAX_HWIFS 2 26 - 27 24 #define __ide_insl(data_reg, buffer, wcount) \ 28 25 __ide_insw(data_reg, buffer, (wcount)<<1) 29 26 #define __ide_outsl(data_reg, buffer, wcount) \
-65
include/asm-x86/ide.h
··· 1 - /* 2 - * Copyright (C) 1994-1996 Linus Torvalds & authors 3 - */ 4 - 5 - /* 6 - * This file contains the i386 architecture specific IDE code. 7 - */ 8 - 9 - #ifndef __ASMi386_IDE_H 10 - #define __ASMi386_IDE_H 11 - 12 - #ifdef __KERNEL__ 13 - 14 - 15 - #ifndef MAX_HWIFS 16 - # ifdef CONFIG_BLK_DEV_IDEPCI 17 - #define MAX_HWIFS 10 18 - # else 19 - #define MAX_HWIFS 6 20 - # endif 21 - #endif 22 - 23 - static __inline__ int ide_default_irq(unsigned long base) 24 - { 25 - switch (base) { 26 - case 0x1f0: return 14; 27 - case 0x170: return 15; 28 - case 0x1e8: return 11; 29 - case 0x168: return 10; 30 - case 0x1e0: return 8; 31 - case 0x160: return 12; 32 - default: 33 - return 0; 34 - } 35 - } 36 - 37 - static __inline__ unsigned long ide_default_io_base(int index) 38 - { 39 - /* 40 - * If PCI is present then it is not safe to poke around 41 - * the other legacy IDE ports. Only 0x1f0 and 0x170 are 42 - * defined compatibility mode ports for PCI. A user can 43 - * override this using ide= but we must default safe. 44 - */ 45 - if (no_pci_devices()) { 46 - switch(index) { 47 - case 2: return 0x1e8; 48 - case 3: return 0x168; 49 - case 4: return 0x1e0; 50 - case 5: return 0x160; 51 - } 52 - } 53 - switch (index) { 54 - case 0: return 0x1f0; 55 - case 1: return 0x170; 56 - default: 57 - return 0; 58 - } 59 - } 60 - 61 - #include <asm-generic/ide_iops.h> 62 - 63 - #endif /* __KERNEL__ */ 64 - 65 - #endif /* __ASMi386_IDE_H */
-35
include/asm-xtensa/ide.h
··· 1 - /* 2 - * include/asm-xtensa/ide.h 3 - * 4 - * This file is subject to the terms and conditions of the GNU General Public 5 - * License. See the file "COPYING" in the main directory of this archive 6 - * for more details. 7 - * 8 - * Copyright (C) 1994 - 1996 Linus Torvalds & authors 9 - * Copyright (C) 2001 - 2005 Tensilica Inc. 10 - */ 11 - 12 - #ifndef _XTENSA_IDE_H 13 - #define _XTENSA_IDE_H 14 - 15 - #ifdef __KERNEL__ 16 - 17 - 18 - #ifndef MAX_HWIFS 19 - # define MAX_HWIFS 1 20 - #endif 21 - 22 - static __inline__ int ide_default_irq(unsigned long base) 23 - { 24 - /* Unsupported! */ 25 - return 0; 26 - } 27 - 28 - static __inline__ unsigned long ide_default_io_base(int index) 29 - { 30 - /* Unsupported! */ 31 - return 0; 32 - } 33 - 34 - #endif /* __KERNEL__ */ 35 - #endif /* _XTENSA_IDE_H */
+29 -3
include/linux/ide.h
··· 211 211 return 0; 212 212 } 213 213 214 + #if defined(CONFIG_ARM) || defined(CONFIG_FRV) || defined(CONFIG_M68K) || \ 215 + defined(CONFIG_MIPS) || defined(CONFIG_MN10300) || defined(CONFIG_PARISC) \ 216 + || defined(CONFIG_PPC) || defined(CONFIG_SPARC) || defined(CONFIG_SPARC64) 214 217 #include <asm/ide.h> 218 + #else 219 + #include <asm-generic/ide_iops.h> 220 + #endif 221 + 222 + #ifndef MAX_HWIFS 223 + #if defined(CONFIG_BLACKFIN) || defined(CONFIG_H8300) || defined(CONFIG_XTENSA) 224 + # define MAX_HWIFS 1 225 + #else 226 + # define MAX_HWIFS 10 227 + #endif 228 + #endif 215 229 216 230 #if !defined(MAX_HWIFS) || defined(CONFIG_EMBEDDED) 217 231 #undef MAX_HWIFS ··· 546 532 void (*dma_timeout)(struct ide_drive_s *); 547 533 }; 548 534 535 + struct ide_host; 536 + 549 537 typedef struct hwif_s { 550 538 struct hwif_s *next; /* for linked-list in ide_hwgroup_t */ 551 539 struct hwif_s *mate; /* other hwif from same PCI chip */ 552 540 struct hwgroup_s *hwgroup; /* actually (ide_hwgroup_t *) */ 553 541 struct proc_dir_entry *proc; /* /proc/ide/ directory entry */ 542 + 543 + struct ide_host *host; 554 544 555 545 char name[6]; /* name of interface, eg. "ide0" */ 556 546 ··· 644 626 struct ide_host { 645 627 ide_hwif_t *ports[MAX_HWIFS]; 646 628 unsigned int n_ports; 629 + struct device *dev[2]; 630 + unsigned long host_flags; 631 + void *host_priv; 647 632 }; 648 633 649 634 /* ··· 894 873 }; 895 874 896 875 #define to_ide_driver(drv) container_of(drv, ide_driver_t, gen_driver) 876 + 877 + int ide_device_get(ide_drive_t *); 878 + void ide_device_put(ide_drive_t *); 897 879 898 880 int generic_ide_ioctl(ide_drive_t *, struct file *, struct block_device *, unsigned, unsigned long); 899 881 ··· 1206 1182 1207 1183 struct ide_port_info { 1208 1184 char *name; 1209 - unsigned int (*init_chipset)(struct pci_dev *, const char *); 1185 + unsigned int (*init_chipset)(struct pci_dev *); 1210 1186 void (*init_iops)(ide_hwif_t *); 1211 1187 void (*init_hwif)(ide_hwif_t *); 1212 1188 int (*init_dma)(ide_hwif_t *, ··· 1225 1201 u8 udma_mask; 1226 1202 }; 1227 1203 1228 - int ide_setup_pci_device(struct pci_dev *, const struct ide_port_info *); 1229 - int ide_setup_pci_devices(struct pci_dev *, struct pci_dev *, const struct ide_port_info *); 1204 + int ide_pci_init_one(struct pci_dev *, const struct ide_port_info *, void *); 1205 + int ide_pci_init_two(struct pci_dev *, struct pci_dev *, 1206 + const struct ide_port_info *, void *); 1207 + void ide_pci_remove(struct pci_dev *); 1230 1208 1231 1209 void ide_map_sg(ide_drive_t *, struct request *); 1232 1210 void ide_init_sg_cmd(ide_drive_t *, struct request *);