Merge branch 'for-2.6.31' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6
[pandora-kernel.git] / drivers / ide / ht6560b.c
index 2fb0f29..aafed80 100644 (file)
  *    bit3 (0x08): "1" 3 cycle time, "0" 2 cycle time        (?)
  */
 #define HT_CONFIG_PORT   0x3e6
-#define HT_CONFIG(drivea) (u8)(((drivea)->drive_data & 0xff00) >> 8)
+
+static inline u8 HT_CONFIG(ide_drive_t *drive)
+{
+       return ((unsigned long)ide_get_drivedata(drive) & 0xff00) >> 8;
+}
+
 /*
  * FIFO + PREFETCH (both a/b-model)
  */
  * Active Time for each drive. Smaller value gives higher speed.
  * In case of failures you should probably fall back to a higher value.
  */
-#define HT_TIMING(drivea) (u8)((drivea)->drive_data & 0x00ff)
+static inline u8 HT_TIMING(ide_drive_t *drive)
+{
+       return (unsigned long)ide_get_drivedata(drive) & 0x00ff;
+}
+
 #define HT_TIMING_DEFAULT 0xff
 
 /*
@@ -242,23 +251,27 @@ static DEFINE_SPINLOCK(ht6560b_lock);
  */
 static void ht_set_prefetch(ide_drive_t *drive, u8 state)
 {
-       unsigned long flags;
+       unsigned long flags, config;
        int t = HT_PREFETCH_MODE << 8;
 
        spin_lock_irqsave(&ht6560b_lock, flags);
 
+       config = (unsigned long)ide_get_drivedata(drive);
+
        /*
         *  Prefetch mode and unmask irq seems to conflict
         */
        if (state) {
-               drive->drive_data |= t;   /* enable prefetch mode */
+               config |= t;   /* enable prefetch mode */
                drive->dev_flags |= IDE_DFLAG_NO_UNMASK;
                drive->dev_flags &= ~IDE_DFLAG_UNMASK;
        } else {
-               drive->drive_data &= ~t;  /* disable prefetch mode */
+               config &= ~t;  /* disable prefetch mode */
                drive->dev_flags &= ~IDE_DFLAG_NO_UNMASK;
        }
 
+       ide_set_drivedata(drive, (void *)config);
+
        spin_unlock_irqrestore(&ht6560b_lock, flags);
 
 #ifdef DEBUG
@@ -268,7 +281,7 @@ static void ht_set_prefetch(ide_drive_t *drive, u8 state)
 
 static void ht6560b_set_pio_mode(ide_drive_t *drive, const u8 pio)
 {
-       unsigned long flags;
+       unsigned long flags, config;
        u8 timing;
        
        switch (pio) {
@@ -281,8 +294,10 @@ static void ht6560b_set_pio_mode(ide_drive_t *drive, const u8 pio)
        timing = ht_pio2timings(drive, pio);
 
        spin_lock_irqsave(&ht6560b_lock, flags);
-       drive->drive_data &= 0xff00;
-       drive->drive_data |= timing;
+       config = (unsigned long)ide_get_drivedata(drive);
+       config &= 0xff00;
+       config |= timing;
+       ide_set_drivedata(drive, (void *)config);
        spin_unlock_irqrestore(&ht6560b_lock, flags);
 
 #ifdef DEBUG
@@ -299,7 +314,7 @@ static void __init ht6560b_init_dev(ide_drive_t *drive)
        if (hwif->channel)
                t |= (HT_SECONDARY_IF << 8);
 
-       drive->drive_data = t;
+       ide_set_drivedata(drive, (void *)t);
 }
 
 static int probe_ht6560b;