aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide
diff options
context:
space:
mode:
authorJeff Garzik <jeff@garzik.org>2006-03-29 19:58:22 -0500
committerJeff Garzik <jeff@garzik.org>2006-03-29 19:58:22 -0500
commit79072f38909e3d9883317238887460c39ddcc4cb (patch)
tree28369f5a844535ff836565eefd62695b0e890fa3 /drivers/ide
parent200d5a7684cc49ef4be40e832daf3f217e70dfbb (diff)
parent55d8ca4f8094246da6e71889a4e04bfafaa78b10 (diff)
Merge branch 'upstream'
Diffstat (limited to 'drivers/ide')
-rw-r--r--drivers/ide/ide-cd.c111
-rw-r--r--drivers/ide/ide-disk.c13
-rw-r--r--drivers/ide/ide-dma.c2
-rw-r--r--drivers/ide/ide-floppy.c11
-rw-r--r--drivers/ide/ide-probe.c9
-rw-r--r--drivers/ide/ide-tape.c24
-rw-r--r--drivers/ide/ide.c2
-rw-r--r--drivers/ide/pci/amd74xx.c8
-rw-r--r--drivers/ide/pci/generic.c3
-rw-r--r--drivers/ide/pci/sis5513.c2
-rw-r--r--drivers/ide/pci/via82cxxx.c2
-rw-r--r--drivers/ide/ppc/pmac.c2
12 files changed, 101 insertions, 88 deletions
diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c
index 3325660f7248..b4a41d6d0714 100644
--- a/drivers/ide/ide-cd.c
+++ b/drivers/ide/ide-cd.c
@@ -313,6 +313,7 @@
313#include <linux/cdrom.h> 313#include <linux/cdrom.h>
314#include <linux/ide.h> 314#include <linux/ide.h>
315#include <linux/completion.h> 315#include <linux/completion.h>
316#include <linux/mutex.h>
316 317
317#include <scsi/scsi.h> /* For SCSI -> ATAPI command conversion */ 318#include <scsi/scsi.h> /* For SCSI -> ATAPI command conversion */
318 319
@@ -324,7 +325,7 @@
324 325
325#include "ide-cd.h" 326#include "ide-cd.h"
326 327
327static DECLARE_MUTEX(idecd_ref_sem); 328static DEFINE_MUTEX(idecd_ref_mutex);
328 329
329#define to_ide_cd(obj) container_of(obj, struct cdrom_info, kref) 330#define to_ide_cd(obj) container_of(obj, struct cdrom_info, kref)
330 331
@@ -335,11 +336,11 @@ static struct cdrom_info *ide_cd_get(struct gendisk *disk)
335{ 336{
336 struct cdrom_info *cd = NULL; 337 struct cdrom_info *cd = NULL;
337 338
338 down(&idecd_ref_sem); 339 mutex_lock(&idecd_ref_mutex);
339 cd = ide_cd_g(disk); 340 cd = ide_cd_g(disk);
340 if (cd) 341 if (cd)
341 kref_get(&cd->kref); 342 kref_get(&cd->kref);
342 up(&idecd_ref_sem); 343 mutex_unlock(&idecd_ref_mutex);
343 return cd; 344 return cd;
344} 345}
345 346
@@ -347,9 +348,9 @@ static void ide_cd_release(struct kref *);
347 348
348static void ide_cd_put(struct cdrom_info *cd) 349static void ide_cd_put(struct cdrom_info *cd)
349{ 350{
350 down(&idecd_ref_sem); 351 mutex_lock(&idecd_ref_mutex);
351 kref_put(&cd->kref, ide_cd_release); 352 kref_put(&cd->kref, ide_cd_release);
352 up(&idecd_ref_sem); 353 mutex_unlock(&idecd_ref_mutex);
353} 354}
354 355
355/**************************************************************************** 356/****************************************************************************
@@ -2142,6 +2143,7 @@ static int cdrom_read_capacity(ide_drive_t *drive, unsigned long *capacity,
2142 req.cmd[0] = GPCMD_READ_CDVD_CAPACITY; 2143 req.cmd[0] = GPCMD_READ_CDVD_CAPACITY;
2143 req.data = (char *)&capbuf; 2144 req.data = (char *)&capbuf;
2144 req.data_len = sizeof(capbuf); 2145 req.data_len = sizeof(capbuf);
2146 req.flags |= REQ_QUIET;
2145 2147
2146 stat = cdrom_queue_packet_command(drive, &req); 2148 stat = cdrom_queue_packet_command(drive, &req);
2147 if (stat == 0) { 2149 if (stat == 0) {
@@ -2471,52 +2473,6 @@ static int ide_cdrom_packet(struct cdrom_device_info *cdi,
2471} 2473}
2472 2474
2473static 2475static
2474int ide_cdrom_dev_ioctl (struct cdrom_device_info *cdi,
2475 unsigned int cmd, unsigned long arg)
2476{
2477 struct packet_command cgc;
2478 char buffer[16];
2479 int stat;
2480
2481 init_cdrom_command(&cgc, buffer, sizeof(buffer), CGC_DATA_UNKNOWN);
2482
2483 /* These will be moved into the Uniform layer shortly... */
2484 switch (cmd) {
2485 case CDROMSETSPINDOWN: {
2486 char spindown;
2487
2488 if (copy_from_user(&spindown, (void __user *) arg, sizeof(char)))
2489 return -EFAULT;
2490
2491 if ((stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CDROM_PAGE, 0)))
2492 return stat;
2493
2494 buffer[11] = (buffer[11] & 0xf0) | (spindown & 0x0f);
2495
2496 return cdrom_mode_select(cdi, &cgc);
2497 }
2498
2499 case CDROMGETSPINDOWN: {
2500 char spindown;
2501
2502 if ((stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CDROM_PAGE, 0)))
2503 return stat;
2504
2505 spindown = buffer[11] & 0x0f;
2506
2507 if (copy_to_user((void __user *) arg, &spindown, sizeof (char)))
2508 return -EFAULT;
2509
2510 return 0;
2511 }
2512
2513 default:
2514 return -EINVAL;
2515 }
2516
2517}
2518
2519static
2520int ide_cdrom_audio_ioctl (struct cdrom_device_info *cdi, 2476int ide_cdrom_audio_ioctl (struct cdrom_device_info *cdi,
2521 unsigned int cmd, void *arg) 2477 unsigned int cmd, void *arg)
2522 2478
@@ -2852,12 +2808,11 @@ static struct cdrom_device_ops ide_cdrom_dops = {
2852 .get_mcn = ide_cdrom_get_mcn, 2808 .get_mcn = ide_cdrom_get_mcn,
2853 .reset = ide_cdrom_reset, 2809 .reset = ide_cdrom_reset,
2854 .audio_ioctl = ide_cdrom_audio_ioctl, 2810 .audio_ioctl = ide_cdrom_audio_ioctl,
2855 .dev_ioctl = ide_cdrom_dev_ioctl,
2856 .capability = CDC_CLOSE_TRAY | CDC_OPEN_TRAY | CDC_LOCK | 2811 .capability = CDC_CLOSE_TRAY | CDC_OPEN_TRAY | CDC_LOCK |
2857 CDC_SELECT_SPEED | CDC_SELECT_DISC | 2812 CDC_SELECT_SPEED | CDC_SELECT_DISC |
2858 CDC_MULTI_SESSION | CDC_MCN | 2813 CDC_MULTI_SESSION | CDC_MCN |
2859 CDC_MEDIA_CHANGED | CDC_PLAY_AUDIO | CDC_RESET | 2814 CDC_MEDIA_CHANGED | CDC_PLAY_AUDIO | CDC_RESET |
2860 CDC_IOCTLS | CDC_DRIVE_STATUS | CDC_CD_R | 2815 CDC_DRIVE_STATUS | CDC_CD_R |
2861 CDC_CD_RW | CDC_DVD | CDC_DVD_R| CDC_DVD_RAM | 2816 CDC_CD_RW | CDC_DVD | CDC_DVD_R| CDC_DVD_RAM |
2862 CDC_GENERIC_PACKET | CDC_MO_DRIVE | CDC_MRW | 2817 CDC_GENERIC_PACKET | CDC_MO_DRIVE | CDC_MRW |
2863 CDC_MRW_W | CDC_RAM, 2818 CDC_MRW_W | CDC_RAM,
@@ -3367,6 +3322,45 @@ static int idecd_release(struct inode * inode, struct file * file)
3367 return 0; 3322 return 0;
3368} 3323}
3369 3324
3325static int idecd_set_spindown(struct cdrom_device_info *cdi, unsigned long arg)
3326{
3327 struct packet_command cgc;
3328 char buffer[16];
3329 int stat;
3330 char spindown;
3331
3332 if (copy_from_user(&spindown, (void __user *)arg, sizeof(char)))
3333 return -EFAULT;
3334
3335 init_cdrom_command(&cgc, buffer, sizeof(buffer), CGC_DATA_UNKNOWN);
3336
3337 stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CDROM_PAGE, 0);
3338 if (stat)
3339 return stat;
3340
3341 buffer[11] = (buffer[11] & 0xf0) | (spindown & 0x0f);
3342 return cdrom_mode_select(cdi, &cgc);
3343}
3344
3345static int idecd_get_spindown(struct cdrom_device_info *cdi, unsigned long arg)
3346{
3347 struct packet_command cgc;
3348 char buffer[16];
3349 int stat;
3350 char spindown;
3351
3352 init_cdrom_command(&cgc, buffer, sizeof(buffer), CGC_DATA_UNKNOWN);
3353
3354 stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CDROM_PAGE, 0);
3355 if (stat)
3356 return stat;
3357
3358 spindown = buffer[11] & 0x0f;
3359 if (copy_to_user((void __user *)arg, &spindown, sizeof (char)))
3360 return -EFAULT;
3361 return 0;
3362}
3363
3370static int idecd_ioctl (struct inode *inode, struct file *file, 3364static int idecd_ioctl (struct inode *inode, struct file *file,
3371 unsigned int cmd, unsigned long arg) 3365 unsigned int cmd, unsigned long arg)
3372{ 3366{
@@ -3374,7 +3368,16 @@ static int idecd_ioctl (struct inode *inode, struct file *file,
3374 struct cdrom_info *info = ide_cd_g(bdev->bd_disk); 3368 struct cdrom_info *info = ide_cd_g(bdev->bd_disk);
3375 int err; 3369 int err;
3376 3370
3377 err = generic_ide_ioctl(info->drive, file, bdev, cmd, arg); 3371 switch (cmd) {
3372 case CDROMSETSPINDOWN:
3373 return idecd_set_spindown(&info->devinfo, arg);
3374 case CDROMGETSPINDOWN:
3375 return idecd_get_spindown(&info->devinfo, arg);
3376 default:
3377 break;
3378 }
3379
3380 err = generic_ide_ioctl(info->drive, file, bdev, cmd, arg);
3378 if (err == -EINVAL) 3381 if (err == -EINVAL)
3379 err = cdrom_ioctl(file, &info->devinfo, inode, cmd, arg); 3382 err = cdrom_ioctl(file, &info->devinfo, inode, cmd, arg);
3380 3383
diff --git a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c
index 09086b8b6486..ccf528d733bf 100644
--- a/drivers/ide/ide-disk.c
+++ b/drivers/ide/ide-disk.c
@@ -60,6 +60,7 @@
60#include <linux/genhd.h> 60#include <linux/genhd.h>
61#include <linux/slab.h> 61#include <linux/slab.h>
62#include <linux/delay.h> 62#include <linux/delay.h>
63#include <linux/mutex.h>
63 64
64#define _IDE_DISK 65#define _IDE_DISK
65 66
@@ -78,7 +79,7 @@ struct ide_disk_obj {
78 struct kref kref; 79 struct kref kref;
79}; 80};
80 81
81static DECLARE_MUTEX(idedisk_ref_sem); 82static DEFINE_MUTEX(idedisk_ref_mutex);
82 83
83#define to_ide_disk(obj) container_of(obj, struct ide_disk_obj, kref) 84#define to_ide_disk(obj) container_of(obj, struct ide_disk_obj, kref)
84 85
@@ -89,11 +90,11 @@ static struct ide_disk_obj *ide_disk_get(struct gendisk *disk)
89{ 90{
90 struct ide_disk_obj *idkp = NULL; 91 struct ide_disk_obj *idkp = NULL;
91 92
92 down(&idedisk_ref_sem); 93 mutex_lock(&idedisk_ref_mutex);
93 idkp = ide_disk_g(disk); 94 idkp = ide_disk_g(disk);
94 if (idkp) 95 if (idkp)
95 kref_get(&idkp->kref); 96 kref_get(&idkp->kref);
96 up(&idedisk_ref_sem); 97 mutex_unlock(&idedisk_ref_mutex);
97 return idkp; 98 return idkp;
98} 99}
99 100
@@ -101,9 +102,9 @@ static void ide_disk_release(struct kref *);
101 102
102static void ide_disk_put(struct ide_disk_obj *idkp) 103static void ide_disk_put(struct ide_disk_obj *idkp)
103{ 104{
104 down(&idedisk_ref_sem); 105 mutex_lock(&idedisk_ref_mutex);
105 kref_put(&idkp->kref, ide_disk_release); 106 kref_put(&idkp->kref, ide_disk_release);
106 up(&idedisk_ref_sem); 107 mutex_unlock(&idedisk_ref_mutex);
107} 108}
108 109
109/* 110/*
@@ -977,8 +978,6 @@ static void idedisk_setup (ide_drive_t *drive)
977 ide_dma_verbose(drive); 978 ide_dma_verbose(drive);
978 printk("\n"); 979 printk("\n");
979 980
980 drive->no_io_32bit = id->dword_io ? 1 : 0;
981
982 /* write cache enabled? */ 981 /* write cache enabled? */
983 if ((id->csfo & 1) || (id->cfs_enable_1 & (1 << 5))) 982 if ((id->csfo & 1) || (id->cfs_enable_1 & (1 << 5)))
984 drive->wcache = 1; 983 drive->wcache = 1;
diff --git a/drivers/ide/ide-dma.c b/drivers/ide/ide-dma.c
index 0523da77425a..c481be8b807f 100644
--- a/drivers/ide/ide-dma.c
+++ b/drivers/ide/ide-dma.c
@@ -175,7 +175,7 @@ ide_startstop_t ide_dma_intr (ide_drive_t *drive)
175 if (rq->rq_disk) { 175 if (rq->rq_disk) {
176 ide_driver_t *drv; 176 ide_driver_t *drv;
177 177
178 drv = *(ide_driver_t **)rq->rq_disk->private_data;; 178 drv = *(ide_driver_t **)rq->rq_disk->private_data;
179 drv->end_request(drive, 1, rq->nr_sectors); 179 drv->end_request(drive, 1, rq->nr_sectors);
180 } else 180 } else
181 ide_end_request(drive, 1, rq->nr_sectors); 181 ide_end_request(drive, 1, rq->nr_sectors);
diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
index 1f8db9ac05d1..a53e3ce4a142 100644
--- a/drivers/ide/ide-floppy.c
+++ b/drivers/ide/ide-floppy.c
@@ -98,6 +98,7 @@
98#include <linux/cdrom.h> 98#include <linux/cdrom.h>
99#include <linux/ide.h> 99#include <linux/ide.h>
100#include <linux/bitops.h> 100#include <linux/bitops.h>
101#include <linux/mutex.h>
101 102
102#include <asm/byteorder.h> 103#include <asm/byteorder.h>
103#include <asm/irq.h> 104#include <asm/irq.h>
@@ -517,7 +518,7 @@ typedef struct {
517 u8 reserved[4]; 518 u8 reserved[4];
518} idefloppy_mode_parameter_header_t; 519} idefloppy_mode_parameter_header_t;
519 520
520static DECLARE_MUTEX(idefloppy_ref_sem); 521static DEFINE_MUTEX(idefloppy_ref_mutex);
521 522
522#define to_ide_floppy(obj) container_of(obj, struct ide_floppy_obj, kref) 523#define to_ide_floppy(obj) container_of(obj, struct ide_floppy_obj, kref)
523 524
@@ -528,11 +529,11 @@ static struct ide_floppy_obj *ide_floppy_get(struct gendisk *disk)
528{ 529{
529 struct ide_floppy_obj *floppy = NULL; 530 struct ide_floppy_obj *floppy = NULL;
530 531
531 down(&idefloppy_ref_sem); 532 mutex_lock(&idefloppy_ref_mutex);
532 floppy = ide_floppy_g(disk); 533 floppy = ide_floppy_g(disk);
533 if (floppy) 534 if (floppy)
534 kref_get(&floppy->kref); 535 kref_get(&floppy->kref);
535 up(&idefloppy_ref_sem); 536 mutex_unlock(&idefloppy_ref_mutex);
536 return floppy; 537 return floppy;
537} 538}
538 539
@@ -540,9 +541,9 @@ static void ide_floppy_release(struct kref *);
540 541
541static void ide_floppy_put(struct ide_floppy_obj *floppy) 542static void ide_floppy_put(struct ide_floppy_obj *floppy)
542{ 543{
543 down(&idefloppy_ref_sem); 544 mutex_lock(&idefloppy_ref_mutex);
544 kref_put(&floppy->kref, ide_floppy_release); 545 kref_put(&floppy->kref, ide_floppy_release);
545 up(&idefloppy_ref_sem); 546 mutex_unlock(&idefloppy_ref_mutex);
546} 547}
547 548
548/* 549/*
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c
index 427d1c204174..1b7b4c531bc2 100644
--- a/drivers/ide/ide-probe.c
+++ b/drivers/ide/ide-probe.c
@@ -858,6 +858,15 @@ static void probe_hwif(ide_hwif_t *hwif)
858 } 858 }
859 } 859 }
860 } 860 }
861
862 for (unit = 0; unit < MAX_DRIVES; ++unit) {
863 ide_drive_t *drive = &hwif->drives[unit];
864
865 if (hwif->no_io_32bit)
866 drive->no_io_32bit = 1;
867 else
868 drive->no_io_32bit = drive->id->dword_io ? 1 : 0;
869 }
861} 870}
862 871
863static int hwif_init(ide_hwif_t *hwif); 872static int hwif_init(ide_hwif_t *hwif);
diff --git a/drivers/ide/ide-tape.c b/drivers/ide/ide-tape.c
index 0101d0def7c5..f04791a58df0 100644
--- a/drivers/ide/ide-tape.c
+++ b/drivers/ide/ide-tape.c
@@ -433,6 +433,7 @@
433#include <linux/timer.h> 433#include <linux/timer.h>
434#include <linux/mm.h> 434#include <linux/mm.h>
435#include <linux/interrupt.h> 435#include <linux/interrupt.h>
436#include <linux/jiffies.h>
436#include <linux/major.h> 437#include <linux/major.h>
437#include <linux/devfs_fs_kernel.h> 438#include <linux/devfs_fs_kernel.h>
438#include <linux/errno.h> 439#include <linux/errno.h>
@@ -443,6 +444,7 @@
443#include <linux/smp_lock.h> 444#include <linux/smp_lock.h>
444#include <linux/completion.h> 445#include <linux/completion.h>
445#include <linux/bitops.h> 446#include <linux/bitops.h>
447#include <linux/mutex.h>
446 448
447#include <asm/byteorder.h> 449#include <asm/byteorder.h>
448#include <asm/irq.h> 450#include <asm/irq.h>
@@ -1011,7 +1013,7 @@ typedef struct ide_tape_obj {
1011 int debug_level; 1013 int debug_level;
1012} idetape_tape_t; 1014} idetape_tape_t;
1013 1015
1014static DECLARE_MUTEX(idetape_ref_sem); 1016static DEFINE_MUTEX(idetape_ref_mutex);
1015 1017
1016static struct class *idetape_sysfs_class; 1018static struct class *idetape_sysfs_class;
1017 1019
@@ -1024,11 +1026,11 @@ static struct ide_tape_obj *ide_tape_get(struct gendisk *disk)
1024{ 1026{
1025 struct ide_tape_obj *tape = NULL; 1027 struct ide_tape_obj *tape = NULL;
1026 1028
1027 down(&idetape_ref_sem); 1029 mutex_lock(&idetape_ref_mutex);
1028 tape = ide_tape_g(disk); 1030 tape = ide_tape_g(disk);
1029 if (tape) 1031 if (tape)
1030 kref_get(&tape->kref); 1032 kref_get(&tape->kref);
1031 up(&idetape_ref_sem); 1033 mutex_unlock(&idetape_ref_mutex);
1032 return tape; 1034 return tape;
1033} 1035}
1034 1036
@@ -1036,9 +1038,9 @@ static void ide_tape_release(struct kref *);
1036 1038
1037static void ide_tape_put(struct ide_tape_obj *tape) 1039static void ide_tape_put(struct ide_tape_obj *tape)
1038{ 1040{
1039 down(&idetape_ref_sem); 1041 mutex_lock(&idetape_ref_mutex);
1040 kref_put(&tape->kref, ide_tape_release); 1042 kref_put(&tape->kref, ide_tape_release);
1041 up(&idetape_ref_sem); 1043 mutex_unlock(&idetape_ref_mutex);
1042} 1044}
1043 1045
1044/* 1046/*
@@ -1290,11 +1292,11 @@ static struct ide_tape_obj *ide_tape_chrdev_get(unsigned int i)
1290{ 1292{
1291 struct ide_tape_obj *tape = NULL; 1293 struct ide_tape_obj *tape = NULL;
1292 1294
1293 down(&idetape_ref_sem); 1295 mutex_lock(&idetape_ref_mutex);
1294 tape = idetape_devs[i]; 1296 tape = idetape_devs[i];
1295 if (tape) 1297 if (tape)
1296 kref_get(&tape->kref); 1298 kref_get(&tape->kref);
1297 up(&idetape_ref_sem); 1299 mutex_unlock(&idetape_ref_mutex);
1298 return tape; 1300 return tape;
1299} 1301}
1300 1302
@@ -2335,7 +2337,7 @@ static ide_startstop_t idetape_rw_callback (ide_drive_t *drive)
2335 } 2337 }
2336 if (time_after(jiffies, tape->insert_time)) 2338 if (time_after(jiffies, tape->insert_time))
2337 tape->insert_speed = tape->insert_size / 1024 * HZ / (jiffies - tape->insert_time); 2339 tape->insert_speed = tape->insert_size / 1024 * HZ / (jiffies - tape->insert_time);
2338 if (jiffies - tape->avg_time >= HZ) { 2340 if (time_after_eq(jiffies, tape->avg_time + HZ)) {
2339 tape->avg_speed = tape->avg_size * HZ / (jiffies - tape->avg_time) / 1024; 2341 tape->avg_speed = tape->avg_size * HZ / (jiffies - tape->avg_time) / 1024;
2340 tape->avg_size = 0; 2342 tape->avg_size = 0;
2341 tape->avg_time = jiffies; 2343 tape->avg_time = jiffies;
@@ -2496,7 +2498,7 @@ static ide_startstop_t idetape_do_request(ide_drive_t *drive,
2496 } else { 2498 } else {
2497 return ide_do_reset(drive); 2499 return ide_do_reset(drive);
2498 } 2500 }
2499 } else if (jiffies - tape->dsc_polling_start > IDETAPE_DSC_MA_THRESHOLD) 2501 } else if (time_after(jiffies, tape->dsc_polling_start + IDETAPE_DSC_MA_THRESHOLD))
2500 tape->dsc_polling_frequency = IDETAPE_DSC_MA_SLOW; 2502 tape->dsc_polling_frequency = IDETAPE_DSC_MA_SLOW;
2501 idetape_postpone_request(drive); 2503 idetape_postpone_request(drive);
2502 return ide_stopped; 2504 return ide_stopped;
@@ -4870,11 +4872,11 @@ static int ide_tape_probe(ide_drive_t *drive)
4870 4872
4871 drive->driver_data = tape; 4873 drive->driver_data = tape;
4872 4874
4873 down(&idetape_ref_sem); 4875 mutex_lock(&idetape_ref_mutex);
4874 for (minor = 0; idetape_devs[minor]; minor++) 4876 for (minor = 0; idetape_devs[minor]; minor++)
4875 ; 4877 ;
4876 idetape_devs[minor] = tape; 4878 idetape_devs[minor] = tape;
4877 up(&idetape_ref_sem); 4879 mutex_unlock(&idetape_ref_mutex);
4878 4880
4879 idetape_setup(drive, tape, minor); 4881 idetape_setup(drive, tape, minor);
4880 4882
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c
index b2cc43702f65..3fdab563fec2 100644
--- a/drivers/ide/ide.c
+++ b/drivers/ide/ide.c
@@ -2058,7 +2058,7 @@ static void __init parse_options (char *line)
2058 } 2058 }
2059} 2059}
2060 2060
2061int init_module (void) 2061int __init init_module (void)
2062{ 2062{
2063 parse_options(options); 2063 parse_options(options);
2064 return ide_init(); 2064 return ide_init();
diff --git a/drivers/ide/pci/amd74xx.c b/drivers/ide/pci/amd74xx.c
index 21965e5ef25e..b22ee5462318 100644
--- a/drivers/ide/pci/amd74xx.c
+++ b/drivers/ide/pci/amd74xx.c
@@ -347,10 +347,8 @@ static unsigned int __devinit init_chipset_amd74xx(struct pci_dev *dev, const ch
347 break; 347 break;
348 348
349 case AMD_UDMA_66: 349 case AMD_UDMA_66:
350 pci_read_config_dword(dev, AMD_UDMA_TIMING, &u); 350 /* no host side cable detection */
351 for (i = 24; i >= 0; i -= 8) 351 amd_80w = 0x03;
352 if ((u >> i) & 4)
353 amd_80w |= (1 << (1 - (i >> 4)));
354 break; 352 break;
355 } 353 }
356 354
@@ -386,8 +384,6 @@ static unsigned int __devinit init_chipset_amd74xx(struct pci_dev *dev, const ch
386 if (amd_clock < 20000 || amd_clock > 50000) { 384 if (amd_clock < 20000 || amd_clock > 50000) {
387 printk(KERN_WARNING "%s: User given PCI clock speed impossible (%d), using 33 MHz instead.\n", 385 printk(KERN_WARNING "%s: User given PCI clock speed impossible (%d), using 33 MHz instead.\n",
388 amd_chipset->name, amd_clock); 386 amd_chipset->name, amd_clock);
389 printk(KERN_WARNING "%s: Use ide0=ata66 if you want to assume 80-wire cable\n",
390 amd_chipset->name);
391 amd_clock = 33333; 387 amd_clock = 33333;
392 } 388 }
393 389
diff --git a/drivers/ide/pci/generic.c b/drivers/ide/pci/generic.c
index 6e3ab0c38c4d..f82e82109728 100644
--- a/drivers/ide/pci/generic.c
+++ b/drivers/ide/pci/generic.c
@@ -41,14 +41,15 @@
41 41
42static int ide_generic_all; /* Set to claim all devices */ 42static int ide_generic_all; /* Set to claim all devices */
43 43
44#ifndef MODULE
44static int __init ide_generic_all_on(char *unused) 45static int __init ide_generic_all_on(char *unused)
45{ 46{
46 ide_generic_all = 1; 47 ide_generic_all = 1;
47 printk(KERN_INFO "IDE generic will claim all unknown PCI IDE storage controllers.\n"); 48 printk(KERN_INFO "IDE generic will claim all unknown PCI IDE storage controllers.\n");
48 return 1; 49 return 1;
49} 50}
50
51__setup("all-generic-ide", ide_generic_all_on); 51__setup("all-generic-ide", ide_generic_all_on);
52#endif
52 53
53static void __devinit init_hwif_generic (ide_hwif_t *hwif) 54static void __devinit init_hwif_generic (ide_hwif_t *hwif)
54{ 55{
diff --git a/drivers/ide/pci/sis5513.c b/drivers/ide/pci/sis5513.c
index 75a2253a3e68..8e9d87701ce2 100644
--- a/drivers/ide/pci/sis5513.c
+++ b/drivers/ide/pci/sis5513.c
@@ -112,6 +112,7 @@ static const struct {
112 112
113 { "SiS5596", PCI_DEVICE_ID_SI_5596, ATA_16 }, 113 { "SiS5596", PCI_DEVICE_ID_SI_5596, ATA_16 },
114 { "SiS5571", PCI_DEVICE_ID_SI_5571, ATA_16 }, 114 { "SiS5571", PCI_DEVICE_ID_SI_5571, ATA_16 },
115 { "SiS5517", PCI_DEVICE_ID_SI_5517, ATA_16 },
115 { "SiS551x", PCI_DEVICE_ID_SI_5511, ATA_16 }, 116 { "SiS551x", PCI_DEVICE_ID_SI_5511, ATA_16 },
116}; 117};
117 118
@@ -524,6 +525,7 @@ static void config_art_rwp_pio (ide_drive_t *drive, u8 pio)
524 case 3: test1 = 0x30|0x03; break; 525 case 3: test1 = 0x30|0x03; break;
525 case 2: test1 = 0x40|0x04; break; 526 case 2: test1 = 0x40|0x04; break;
526 case 1: test1 = 0x60|0x07; break; 527 case 1: test1 = 0x60|0x07; break;
528 case 0: test1 = 0x00; break;
527 default: break; 529 default: break;
528 } 530 }
529 pci_write_config_byte(dev, drive_pci, test1); 531 pci_write_config_byte(dev, drive_pci, test1);
diff --git a/drivers/ide/pci/via82cxxx.c b/drivers/ide/pci/via82cxxx.c
index c85b87cb59d1..3e677c4f8c28 100644
--- a/drivers/ide/pci/via82cxxx.c
+++ b/drivers/ide/pci/via82cxxx.c
@@ -440,7 +440,7 @@ static void __devinit init_hwif_via82cxxx(ide_hwif_t *hwif)
440 440
441 441
442#if defined(CONFIG_PPC_CHRP) && defined(CONFIG_PPC32) 442#if defined(CONFIG_PPC_CHRP) && defined(CONFIG_PPC32)
443 if(_machine == _MACH_chrp && _chrp_type == _CHRP_Pegasos) { 443 if(machine_is(chrp) && _chrp_type == _CHRP_Pegasos) {
444 hwif->irq = hwif->channel ? 15 : 14; 444 hwif->irq = hwif->channel ? 15 : 14;
445 } 445 }
446#endif 446#endif
diff --git a/drivers/ide/ppc/pmac.c b/drivers/ide/ppc/pmac.c
index 5013b1285e22..78e30f803671 100644
--- a/drivers/ide/ppc/pmac.c
+++ b/drivers/ide/ppc/pmac.c
@@ -1677,7 +1677,7 @@ MODULE_DEVICE_TABLE(pci, pmac_ide_pci_match);
1677void __init 1677void __init
1678pmac_ide_probe(void) 1678pmac_ide_probe(void)
1679{ 1679{
1680 if (_machine != _MACH_Pmac) 1680 if (!machine_is(powermac))
1681 return; 1681 return;
1682 1682
1683#ifdef CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST 1683#ifdef CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST