diff options
Diffstat (limited to 'drivers/ide/pci/serverworks.c')
-rw-r--r-- | drivers/ide/pci/serverworks.c | 40 |
1 files changed, 27 insertions, 13 deletions
diff --git a/drivers/ide/pci/serverworks.c b/drivers/ide/pci/serverworks.c index 127ccb45e261..d173f2937722 100644 --- a/drivers/ide/pci/serverworks.c +++ b/drivers/ide/pci/serverworks.c | |||
@@ -38,6 +38,8 @@ | |||
38 | 38 | ||
39 | #include <asm/io.h> | 39 | #include <asm/io.h> |
40 | 40 | ||
41 | #define DRV_NAME "serverworks" | ||
42 | |||
41 | #define SVWKS_CSB5_REVISION_NEW 0x92 /* min PCI_REVISION_ID for UDMA5 (A2.0) */ | 43 | #define SVWKS_CSB5_REVISION_NEW 0x92 /* min PCI_REVISION_ID for UDMA5 (A2.0) */ |
42 | #define SVWKS_CSB6_REVISION 0xa0 /* min PCI_REVISION_ID for UDMA4 (A1.0) */ | 44 | #define SVWKS_CSB6_REVISION 0xa0 /* min PCI_REVISION_ID for UDMA4 (A1.0) */ |
43 | 45 | ||
@@ -172,7 +174,7 @@ static void svwks_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
172 | pci_write_config_byte(dev, 0x54, ultra_enable); | 174 | pci_write_config_byte(dev, 0x54, ultra_enable); |
173 | } | 175 | } |
174 | 176 | ||
175 | static unsigned int __devinit init_chipset_svwks (struct pci_dev *dev, const char *name) | 177 | static unsigned int __devinit init_chipset_svwks(struct pci_dev *dev) |
176 | { | 178 | { |
177 | unsigned int reg; | 179 | unsigned int reg; |
178 | u8 btr; | 180 | u8 btr; |
@@ -188,7 +190,8 @@ static unsigned int __devinit init_chipset_svwks (struct pci_dev *dev, const cha | |||
188 | pci_read_config_dword(isa_dev, 0x64, ®); | 190 | pci_read_config_dword(isa_dev, 0x64, ®); |
189 | reg &= ~0x00002000; /* disable 600ns interrupt mask */ | 191 | reg &= ~0x00002000; /* disable 600ns interrupt mask */ |
190 | if(!(reg & 0x00004000)) | 192 | if(!(reg & 0x00004000)) |
191 | printk(KERN_DEBUG "%s: UDMA not BIOS enabled.\n", name); | 193 | printk(KERN_DEBUG DRV_NAME " %s: UDMA not BIOS " |
194 | "enabled.\n", pci_name(dev)); | ||
192 | reg |= 0x00004000; /* enable UDMA/33 support */ | 195 | reg |= 0x00004000; /* enable UDMA/33 support */ |
193 | pci_write_config_dword(isa_dev, 0x64, reg); | 196 | pci_write_config_dword(isa_dev, 0x64, reg); |
194 | } | 197 | } |
@@ -352,40 +355,44 @@ static const struct ide_port_ops svwks_port_ops = { | |||
352 | #define IDE_HFLAGS_SVWKS IDE_HFLAG_LEGACY_IRQS | 355 | #define IDE_HFLAGS_SVWKS IDE_HFLAG_LEGACY_IRQS |
353 | 356 | ||
354 | static const struct ide_port_info serverworks_chipsets[] __devinitdata = { | 357 | static const struct ide_port_info serverworks_chipsets[] __devinitdata = { |
355 | { /* 0 */ | 358 | { /* 0: OSB4 */ |
356 | .name = "SvrWks OSB4", | 359 | .name = DRV_NAME, |
357 | .init_chipset = init_chipset_svwks, | 360 | .init_chipset = init_chipset_svwks, |
358 | .port_ops = &osb4_port_ops, | 361 | .port_ops = &osb4_port_ops, |
359 | .host_flags = IDE_HFLAGS_SVWKS, | 362 | .host_flags = IDE_HFLAGS_SVWKS, |
360 | .pio_mask = ATA_PIO4, | 363 | .pio_mask = ATA_PIO4, |
361 | .mwdma_mask = ATA_MWDMA2, | 364 | .mwdma_mask = ATA_MWDMA2, |
362 | .udma_mask = 0x00, /* UDMA is problematic on OSB4 */ | 365 | .udma_mask = 0x00, /* UDMA is problematic on OSB4 */ |
363 | },{ /* 1 */ | 366 | }, |
364 | .name = "SvrWks CSB5", | 367 | { /* 1: CSB5 */ |
368 | .name = DRV_NAME, | ||
365 | .init_chipset = init_chipset_svwks, | 369 | .init_chipset = init_chipset_svwks, |
366 | .port_ops = &svwks_port_ops, | 370 | .port_ops = &svwks_port_ops, |
367 | .host_flags = IDE_HFLAGS_SVWKS, | 371 | .host_flags = IDE_HFLAGS_SVWKS, |
368 | .pio_mask = ATA_PIO4, | 372 | .pio_mask = ATA_PIO4, |
369 | .mwdma_mask = ATA_MWDMA2, | 373 | .mwdma_mask = ATA_MWDMA2, |
370 | .udma_mask = ATA_UDMA5, | 374 | .udma_mask = ATA_UDMA5, |
371 | },{ /* 2 */ | 375 | }, |
372 | .name = "SvrWks CSB6", | 376 | { /* 2: CSB6 */ |
377 | .name = DRV_NAME, | ||
373 | .init_chipset = init_chipset_svwks, | 378 | .init_chipset = init_chipset_svwks, |
374 | .port_ops = &svwks_port_ops, | 379 | .port_ops = &svwks_port_ops, |
375 | .host_flags = IDE_HFLAGS_SVWKS, | 380 | .host_flags = IDE_HFLAGS_SVWKS, |
376 | .pio_mask = ATA_PIO4, | 381 | .pio_mask = ATA_PIO4, |
377 | .mwdma_mask = ATA_MWDMA2, | 382 | .mwdma_mask = ATA_MWDMA2, |
378 | .udma_mask = ATA_UDMA5, | 383 | .udma_mask = ATA_UDMA5, |
379 | },{ /* 3 */ | 384 | }, |
380 | .name = "SvrWks CSB6", | 385 | { /* 3: CSB6-2 */ |
386 | .name = DRV_NAME, | ||
381 | .init_chipset = init_chipset_svwks, | 387 | .init_chipset = init_chipset_svwks, |
382 | .port_ops = &svwks_port_ops, | 388 | .port_ops = &svwks_port_ops, |
383 | .host_flags = IDE_HFLAGS_SVWKS | IDE_HFLAG_SINGLE, | 389 | .host_flags = IDE_HFLAGS_SVWKS | IDE_HFLAG_SINGLE, |
384 | .pio_mask = ATA_PIO4, | 390 | .pio_mask = ATA_PIO4, |
385 | .mwdma_mask = ATA_MWDMA2, | 391 | .mwdma_mask = ATA_MWDMA2, |
386 | .udma_mask = ATA_UDMA5, | 392 | .udma_mask = ATA_UDMA5, |
387 | },{ /* 4 */ | 393 | }, |
388 | .name = "SvrWks HT1000", | 394 | { /* 4: HT1000 */ |
395 | .name = DRV_NAME, | ||
389 | .init_chipset = init_chipset_svwks, | 396 | .init_chipset = init_chipset_svwks, |
390 | .port_ops = &svwks_port_ops, | 397 | .port_ops = &svwks_port_ops, |
391 | .host_flags = IDE_HFLAGS_SVWKS | IDE_HFLAG_SINGLE, | 398 | .host_flags = IDE_HFLAGS_SVWKS | IDE_HFLAG_SINGLE, |
@@ -422,7 +429,7 @@ static int __devinit svwks_init_one(struct pci_dev *dev, const struct pci_device | |||
422 | d.host_flags &= ~IDE_HFLAG_SINGLE; | 429 | d.host_flags &= ~IDE_HFLAG_SINGLE; |
423 | } | 430 | } |
424 | 431 | ||
425 | return ide_setup_pci_device(dev, &d); | 432 | return ide_pci_init_one(dev, &d, NULL); |
426 | } | 433 | } |
427 | 434 | ||
428 | static const struct pci_device_id svwks_pci_tbl[] = { | 435 | static const struct pci_device_id svwks_pci_tbl[] = { |
@@ -439,6 +446,7 @@ static struct pci_driver driver = { | |||
439 | .name = "Serverworks_IDE", | 446 | .name = "Serverworks_IDE", |
440 | .id_table = svwks_pci_tbl, | 447 | .id_table = svwks_pci_tbl, |
441 | .probe = svwks_init_one, | 448 | .probe = svwks_init_one, |
449 | .remove = ide_pci_remove, | ||
442 | }; | 450 | }; |
443 | 451 | ||
444 | static int __init svwks_ide_init(void) | 452 | static int __init svwks_ide_init(void) |
@@ -446,7 +454,13 @@ static int __init svwks_ide_init(void) | |||
446 | return ide_pci_register_driver(&driver); | 454 | return ide_pci_register_driver(&driver); |
447 | } | 455 | } |
448 | 456 | ||
457 | static void __exit svwks_ide_exit(void) | ||
458 | { | ||
459 | pci_unregister_driver(&driver); | ||
460 | } | ||
461 | |||
449 | module_init(svwks_ide_init); | 462 | module_init(svwks_ide_init); |
463 | module_exit(svwks_ide_exit); | ||
450 | 464 | ||
451 | MODULE_AUTHOR("Michael Aubry. Andrzej Krzysztofowicz, Andre Hedrick"); | 465 | MODULE_AUTHOR("Michael Aubry. Andrzej Krzysztofowicz, Andre Hedrick"); |
452 | MODULE_DESCRIPTION("PCI driver module for Serverworks OSB4/CSB5/CSB6 IDE"); | 466 | MODULE_DESCRIPTION("PCI driver module for Serverworks OSB4/CSB5/CSB6 IDE"); |