Linux-2.5.14..
Subsystems (2)
PATCH 1/1 2.5.15 IDE 62a
In reply to Linus TorvaldsMon May 13 15:20:18 CEST 2002 ide-clean-62a
62 was crap. This applies on top of 61.
- Streamline device detection reporting to always use ->slot_name.
- Apply 64 bit sector size fixes to the overall code.
- Push ->handler down to the struct ata_channel.
- Introduce channel group based locking instead of a single global lock for all operations. There are still some places where we have preserved the ide_lock. We can't lock for queues during device probe and we protect global data structures during device registration and unregistration in ide.c with it.
- Start replacement of serialized access to the registers of channels which share them with proper host chip driver specific locking. This affects the following host chip drivers:
cmd640.c, rz1000, ... ?
Seems some are setting the serialize flag just in case. So better let's do it gradually over time.
Well, I still have to think whatever we really need to put channels sharing an IRQ line in the same locking group.
From now on the sick concept of a hw group is gone now. We have full blown per channel request queues! Hopefully I will be able soon to get my hands on a dual Athlon machine to check how this all behaves on a multi SMP machine.
- Move the whole SUPPORT_VLB_SYNC stuff to the only place where it is used: the pdc4030 host chip driver. Eliminate it from the global driver part.
- Eliminate pseudo portability macros from pdc4030. This is a host chip firmly based on VLB.
drivers/ide/cmd640.c +64 -49
@@ -155,7 +155,7 @@#define CMDTIM 0x52#define ARTTIM0 0x53#define DRWTIM0 0x54 -#define ARTTIM1 0x55 +#define ARTTIM1 0x55#define DRWTIM1 0x56#define ARTTIM23 0x57#define ARTTIM23_DIS_RA2 0x04
@@ -166,36 +166,42 @@/* * Registers and masks for easy access by drive index: */ -static byte prefetch_regs[4 ] = {CNTRL ,CNTRL ,ARTTIM23 ,ARTTIM23 }; -static byte prefetch_masks[4 ] = {CNTRL_DIS_RA0 ,CNTRL_DIS_RA1 ,ARTTIM23_DIS_RA2 ,ARTTIM23_DIS_RA3 }; +static u8 prefetch_regs[4 ] = {CNTRL ,CNTRL ,ARTTIM23 ,ARTTIM23 }; +static u8 prefetch_masks[4 ] = {CNTRL_DIS_RA0 ,CNTRL_DIS_RA1 ,ARTTIM23_DIS_RA2 ,ARTTIM23_DIS_RA3 };#ifdef CONFIG_BLK_DEV_CMD640_ENHANCED -static byte arttim_regs[4 ] = {ARTTIM0 ,ARTTIM1 ,ARTTIM23 ,ARTTIM23 }; -static byte drwtim_regs[4 ] = {DRWTIM0 ,DRWTIM1 ,DRWTIM23 ,DRWTIM23 }; +/* +* Protects register file access from overlapping on primary and secondary +* channel, since those share hardware resources. +*/ +static spinlock_t cmd640_lock __cacheline_aligned = SPIN_LOCK_UNLOCKED; + +static u8 arttim_regs[4 ] = {ARTTIM0 ,ARTTIM1 ,ARTTIM23 ,ARTTIM23 }; +static u8 drwtim_regs[4 ] = {DRWTIM0 ,DRWTIM1 ,DRWTIM23 ,DRWTIM23 };/* * Current cmd640 timing values for each drive. * The defaults for each are the slowest possible timings. */ -static byte setup_counts[4 ] = {4 ,4 ,4 ,4 };/* Address setup count (in clocks) */ -static byte active_counts[4 ] = {16 ,16 ,16 ,16 };/* Active count (encoded) */ -static byte recovery_counts[4 ] = {16 ,16 ,16 ,16 };/* Recovery count (encoded) */ +static u8 setup_counts[4 ] = {4 ,4 ,4 ,4 };/* Address setup count (in clocks) */ +static u8 active_counts[4 ] = {16 ,16 ,16 ,16 };/* Active count (encoded) */ +static u8 recovery_counts[4 ] = {16 ,16 ,16 ,16 };/* Recovery count (encoded) */ -#endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */ +#endif /* * These are initialized to point at the devices we control */ static struct ata_channel *cmd_hwif0, *cmd_hwif1; -static ide_drive_t *cmd_drives[4 ]; +static struct ata_device *cmd_drives[4 ];/* * Interface to access cmd640x registers */ static unsigned int cmd640_key;static void (*put_cmd640_reg)(unsigned short reg,byte val); -static byte (*get_cmd640_reg)(unsigned short reg); +static u8 (*get_cmd640_reg)(unsigned short reg);/* * This is read from the CFR reg, and is used in several places.
@@ -221,9 +227,9 @@restore_flags (flags); } -static byte get_cmd640_reg_pci1 (unsigned short reg) +static u8 get_cmd640_reg_pci1 (unsigned short reg) { -byte b; +u8 b;unsigned long flags;save_flags (flags);
@@ -236,7 +242,7 @@/* PCI method 2 access (from CMD datasheet) */ -static void put_cmd640_reg_pci2 (unsigned short reg,byte val) +static void put_cmd640_reg_pci2 (unsigned short reg,u8 val) {unsigned long flags;
@@ -248,9 +254,9 @@restore_flags (flags); } -static byte get_cmd640_reg_pci2 (unsigned short reg) +static u8 get_cmd640_reg_pci2 (unsigned short reg) { -byte b; +u8 b;unsigned long flags;save_flags (flags);
@@ -264,7 +270,7 @@/* VLB access */ -static void put_cmd640_reg_vlb (unsigned short reg,byte val) +static void put_cmd640_reg_vlb (unsigned short reg,u8 val) {unsigned long flags;
@@ -275,9 +281,9 @@restore_flags (flags); } -static byte get_cmd640_reg_vlb (unsigned short reg) +static u8 get_cmd640_reg_vlb (unsigned short reg) { -byte b; +u8 b;unsigned long flags;save_flags (flags);
@@ -290,7 +296,7 @@static int __init match_pci_cmd640_device (void ) { -const byte ven_dev[4 ] = {0x95 ,0x10 ,0x40 ,0x06 }; +const u8 ven_dev[4 ] = {0x95 ,0x10 ,0x40 ,0x06 };unsigned int i;for (i =0 ; i <4 ; i++) {if (get_cmd640_reg (i) != ven_dev[i])
@@ -338,7 +344,7 @@*/ static int __init probe_for_cmd640_vlb (void ) { -byte b; +u8 b; get_cmd640_reg = get_cmd640_reg_vlb; put_cmd640_reg = put_cmd640_reg_vlb;
@@ -404,7 +410,7 @@static void __init check_prefetch (unsigned int index) {struct ata_device *drive = cmd_drives[index]; -byte b =get_cmd640_reg (prefetch_regs[index]); +u8 b =get_cmd640_reg (prefetch_regs[index]);if (b & prefetch_masks[index]) {/* is prefetch off? */ drive->channel->no_unmask =0 ;
@@ -450,19 +456,19 @@*/ static void set_prefetch_mode (unsigned int index,int mode) { -ide_drive_t *drive = cmd_drives[index]; +struct ata_device *drive = cmd_drives[index];int reg = prefetch_regs[index]; -byte b; +u8 b;unsigned long flags;save_flags (flags);cli (); b =get_cmd640_reg (reg);if (mode) {/* want prefetch on? */ -#if CMD640_PREFETCH_MASKS +# if CMD640_PREFETCH_MASKS drive->channel->no_unmask =1 ; drive->channel->unmask =0 ; -#endif +# endif drive->channel->no_io_32bit =0 ; b &= ~prefetch_masks[index];/* enable prefetch */ }else {
@@ -480,7 +486,7 @@*/ static void display_clocks (unsigned int index) { -byte active_count, recovery_count; +u8 active_count, recovery_count; active_count = active_counts[index];if (active_count ==1 )
@@ -497,7 +503,7 @@* Pack active and recovery counts into single byte representation * used by controller */ -inline static byte pack_nibbles (byte upper,byte lower) +static inline u8 pack_nibbles (u8 upper,u8 lower) {return ((upper &0x0f ) <<4 ) | (lower &0x0f ); }
@@ -507,7 +513,7 @@*/ static void __init retrieve_drive_counts (unsigned int index) { -byte b; +u8 b;/* * Get the internal setup timing, and convert to clock count
@@ -537,9 +543,9 @@static void program_drive_counts (unsigned int index) {unsigned long flags; -byte setup_count = setup_counts[index]; -byte active_count = active_counts[index]; -byte recovery_count = recovery_counts[index]; +u8 setup_count = setup_counts[index]; +u8 active_count = active_counts[index]; +u8 recovery_count = recovery_counts[index];/* * Set up address setup count and drive read/write timing registers.
@@ -589,10 +595,12 @@/* * Set a specific pio_mode for a drive */ -static void cmd640_set_mode (unsigned int index,byte pio_mode,unsigned int cycle_time,unsigned int active_time,unsigned int setup_time) +static void cmd640_set_mode (unsigned int index,u8 pio_mode,unsigned int cycle_time,unsigned int active_time,unsigned int setup_time) {int recovery_time, clock_time; -byte setup_count, active_count, recovery_count, recovery_count2, cycle_count; +u8 setup_count, active_count; +u8 recovery_count, recovery_count2; +u8 cycle_count; recovery_time = cycle_time - (setup_time + active_time); clock_time =1000 / system_bus_speed;
@@ -639,16 +647,19 @@/* * Drive PIO mode selection: */ -static void cmd640_tune_drive (ide_drive_t *drive,byte mode_wanted) +static void cmd640_tune_drive (struct ata_device *drive,byte mode_wanted) { -byte b; +u8 b;struct ata_timing *t;unsigned int index =0 ; +unsigned long flags; + +spin_lock_irqsave (&cmd640_lock, flags);while (drive != cmd_drives[index]) {if (++index >3 ) { -printk ("%s: bad news in cmd640_tune_drive\n" , drive->name); -return ; +printk (KERN_ERR "%s: bad news in cmd640_tune_drive\n" , drive->name); + goto out_lock; } }switch (mode_wanted) {
@@ -659,21 +670,21 @@if (mode_wanted) b |=0x27 ;put_cmd640_reg (CNTRL , b); -printk ("%s: %sabled cmd640 fast host timing (devsel)\n" , drive->name, mode_wanted ?"en" :"dis" ); -return ; +printk (KERN_INFO "%s: %sabled cmd640 fast host timing (devsel)\n" , drive->name, mode_wanted ?"en" :"dis" ); + goto out_lock;case 8 :/* set prefetch off */ case 9 :/* set prefetch on */ mode_wanted &=1 ;set_prefetch_mode (index, mode_wanted);printk ("%s: %sabled cmd640 prefetch\n" , drive->name, mode_wanted ?"en" :"dis" ); -return ; + goto out_lock; }if (mode_wanted ==255 ) t =ata_timing_data (ata_timing_mode (drive,XFER_PIO |XFER_EPIO ));else - t =ata_timing_data (XFER_PIO_0 +min_t (byte, mode_wanted,4 )); + t =ata_timing_data (XFER_PIO_0 +min_t (u8, mode_wanted,4 ));cmd640_set_mode (index, t->mode -XFER_PIO_0 , t->cycle, t->active, t->setup);
@@ -681,10 +692,14 @@ drive->name, t->mode, t->cycle);display_clocks (index); + +out_lock: +spin_unlock_irqrestore (&cmd640_lock, flags); + return; } -#endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */ +#endif /* * Probe for a cmd640 chipset, and initialize it if found. Called from ide.c
@@ -697,7 +712,7 @@int second_port_cmd640 =0 ;const char *bus_type, *port2;unsigned int index; -byte b, cfr; +u8 b, cfr;if (cmd640_vlb &&probe_for_cmd640_vlb ()) { bus_type ="VLB" ;
@@ -743,7 +758,7 @@ cmd_hwif0->chipset = ide_cmd640;#ifdef CONFIG_BLK_DEV_CMD640_ENHANCED cmd_hwif0->tuneproc = &cmd640_tune_drive; -#endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */ +#endif /* * Ensure compatibility by always using the slowest timings
@@ -777,7 +792,7 @@ second_port_cmd640 =1 ;#ifdef CONFIG_BLK_DEV_CMD640_ENHANCED second_port_toggled =1 ; -#endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */ +#endif port2 ="enabled" ; }else {put_cmd640_reg (CNTRL , b);/* restore original setting */
@@ -796,7 +811,7 @@ cmd_hwif1->unit =ATA_SECONDARY ;#ifdef CONFIG_BLK_DEV_CMD640_ENHANCED cmd_hwif1->tuneproc = &cmd640_tune_drive; -#endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */ +#endif }printk ("%s: %sserialized, secondary interface %s\n" , cmd_hwif1->name, cmd_hwif0->serialized ?"" :"not " , port2);
@@ -806,7 +821,7 @@* Do not unnecessarily disturb any prior BIOS setup of these. */ for (index =0 ; index < (2 + (second_port_cmd640 <<1 )); index++) { -ide_drive_t *drive = cmd_drives[index]; +struct ata_device *drive = cmd_drives[index];#ifdef CONFIG_BLK_DEV_CMD640_ENHANCED if (drive->autotune || ((index >1 ) && second_port_toggled)) {/*
@@ -837,7 +852,7 @@check_prefetch (index);printk ("cmd640: drive%d timings/prefetch(%s) preserved\n" , index, drive->channel->no_io_32bit ?"off" :"on" ); -#endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */ +#endif }#ifdef CMD640_DUMP_REGS
drivers/ide/ide.c +112 -139
563 lines not on this page · raw message
drivers/ide/ide-disk.c +10 -20
@@ -316,7 +316,7 @@unsigned long flags;int ret; -spin_lock_irqsave (&ide_lock, flags); +spin_lock_irqsave (drive->channel->lock, flags); ret =blk_queue_start_tag (&drive->queue, rq);
@@ -325,7 +325,7 @@if (ata_pending_commands (drive) > drive->max_last_depth) drive->max_last_depth =ata_pending_commands (drive); -spin_unlock_irqrestore (&ide_lock, flags); +spin_unlock_irqrestore (drive->channel->lock, flags);if (ret) {BUG_ON (!ata_pending_commands (drive));
@@ -438,13 +438,6 @@if (!drive->id)return -EIO ; -/* FIXME: Hmm... just bailing out my be problematic, since there *is* -* activity during boot. For now the same problem persists in -* set_pio_mode() we will have to do something about it soon. -*/ -if (HWGROUP (drive)->handler) -return -EBUSY ; -if (arg > drive->id->max_multsect) arg = drive->id->max_multsect;
@@ -466,9 +459,6 @@static int set_nowerr (struct ata_device *drive,int arg) { -if (HWGROUP (drive)->handler) -return -EBUSY ; - drive->nowerr = arg; drive->bad_wstat = arg ?BAD_R_STAT :BAD_W_STAT ;
@@ -576,8 +566,8 @@return 0 ;/* wait until all commands are finished */ -printk ("ide_disk_suspend()\n" ); -while (HWGROUP (drive)->handler) +/* FIXME: waiting for spinlocks should be done instead. */ +while (drive->channel->handler)yield ();/* set the drive to standby */
@@ -1022,7 +1012,7 @@return -EBUSY ; val =set_lba_addressing (drive, arg); -spin_unlock_irq (&ide_lock); +spin_unlock_irq (drive->channel->lock);return val; }
@@ -1048,7 +1038,7 @@return -EBUSY ; val =set_multcount (drive, arg); -spin_unlock_irq (&ide_lock); +spin_unlock_irq (drive->channel->lock);return val; }
@@ -1072,7 +1062,7 @@return -EBUSY ; val =set_nowerr (drive, arg); -spin_unlock_irq (&ide_lock); +spin_unlock_irq (drive->channel->lock);return val; }
@@ -1096,7 +1086,7 @@return -EBUSY ; val =write_cache (drive, arg); -spin_unlock_irq (&ide_lock); +spin_unlock_irq (drive->channel->lock);return val; }
@@ -1119,7 +1109,7 @@return -EBUSY ; val =set_acoustic (drive, arg); -spin_unlock_irq (&ide_lock); +spin_unlock_irq (drive->channel->lock);return val; }
@@ -1144,7 +1134,7 @@return -EBUSY ; val =set_using_tcq (drive, arg); -spin_unlock_irq (&ide_lock); +spin_unlock_irq (drive->channel->lock);return val; }
drivers/ide/ide-pci.c +16 -13
@@ -553,15 +553,14 @@ } } } - -printk ("ATA: %s: controller on PCI bus %02x dev %02x\n" , - dev->name, dev->bus->number, dev->devfn); +printk (KERN_INFO "ATA: %s: controller on PCI slot %s dev %02x\n" , + dev->name, dev->slot_name, dev->devfn);setup_pci_device (dev, d);if (!dev2)return ; d2 = d; -printk ("ATA: %s: controller on PCI bus %02x dev %02x\n" , - dev2->name, dev2->bus->number, dev2->devfn); +printk (KERN_INFO "ATA: %s: controller on PCI slot %s dev %02x\n" , + dev2->name, dev2->slot_name, dev2->devfn);setup_pci_device (dev2, d2); }
@@ -584,8 +583,8 @@ } } -printk ("%s: IDE controller on PCI bus %02x dev %02x\n" , - dev->name, dev->bus->number, dev->devfn); +printk (KERN_INFO "ATA: %s: controller on PCI slot %s dev %02x\n" , + dev->name, dev->slot_name, dev->devfn);setup_pci_device (dev, d);if (!dev2) {return ;
@@ -601,8 +600,8 @@ } } d2 = d; -printk ("%s: IDE controller on PCI bus %02x dev %02x\n" , - dev2->name, dev2->bus->number, dev2->devfn); +printk (KERN_INFO "ATA: %s: controller on PCI slot %s dev %02x\n" , + dev2->name, dev2->slot_name, dev2->devfn);setup_pci_device (dev2, d2); }
@@ -623,7 +622,7 @@switch (class_rev) {case 5 :case 4 : -case 3 :printk ("%s: IDE controller on PCI slot %s\n" , dev->name, dev->slot_name); +case 3 :printk (KERN_INFO "ATA: %s: controller on PCI slot %s\n" , dev->name, dev->slot_name);setup_pci_device (dev, d);return ;default :break ;
@@ -639,17 +638,17 @@pci_read_config_byte (dev2,PCI_INTERRUPT_PIN , &pin2);if ((pin1 != pin2) && (dev->irq == dev2->irq)) { d->bootable =ON_BOARD ; -printk ("%s: onboard version of chipset, pin1=%d pin2=%d\n" , dev->name, pin1, pin2); +printk (KERN_INFO "ATAL: %s: onboard version of chipset, pin1=%d pin2=%d\n" , dev->name, pin1, pin2); }break ; } } -printk ("%s: IDE controller on PCI slot %s\n" , dev->name, dev->slot_name); +printk (KERN_INFO "ATA: %s: controller on PCI slot %s\n" , dev->name, dev->slot_name);setup_pci_device (dev, d);if (!dev2)return ; d2 = d; -printk ("%s: IDE controller on PCI slot %s\n" , dev2->name, dev2->slot_name); +printk (KERN_INFO "ATA: %s: controller on PCI slot %s\n" , dev2->name, dev2->slot_name);setup_pci_device (dev2, d2); }
@@ -679,6 +678,10 @@ }if (!d) { +/* Only check the device calls, if it wasn't listed, since +* there are in esp. some pdc202xx chips which "work around" +* beeing grabbed by generic drivers. +*/ if ((dev->class >>8 ) ==PCI_CLASS_STORAGE_IDE ) {printk (KERN_INFO "ATA: unknown interface: %s, on PCI slot %s\n" , dev->name, dev->slot_name);
drivers/ide/ide-pmac.c +84 -82
552 lines not on this page · raw message
drivers/ide/ide-probe.c +21 -19
@@ -578,15 +578,15 @@ {unsigned long flags;int i; -ide_hwgroup_t *hwgroup; -ide_hwgroup_t *new_hwgroup; +spinlock_t *lock; +spinlock_t *new_lock;struct ata_channel *match =NULL ;/* Spare allocation before sleep. */ - new_hwgroup =kmalloc (sizeof (*hwgroup),GFP_KERNEL ); + new_lock =kmalloc (sizeof (*lock),GFP_KERNEL );spin_lock_irqsave (&ide_lock, flags); - ch->hwgroup =NULL ; + ch->lock =NULL ;#if MAX_HWIFS >1 /*
@@ -596,7 +596,7 @@struct ata_channel *h = &ide_hwifs[i];/* scan only initialized channels */ -if (!h->hwgroup) +if (!h->lock)continue ;if (ch->irq != h->irq)
@@ -606,7 +606,7 @@if (ch->chipset != ide_pci || h->chipset != ide_pci || ch->serialized || h->serialized) { -if (match && match->hwgroup && match->hwgroup != h->hwgroup) +if (match && match->lock && match->lock != h->lock)printk ("%s: potential irq problem with %s and %s\n" , ch->name, h->name, match->name);/* don't undo a prior perfect match */ if (!match || match->irq != ch->irq)
@@ -615,19 +615,20 @@ }#endif /* -* If we are still without a hwgroup, then form a new one +* If we are still without a lock group, then form a new one */ -if (match) { - hwgroup = match->hwgroup; -if (new_hwgroup) -kfree (new_hwgroup); - }else { - hwgroup = new_hwgroup; -if (!hwgroup) { +if (!match) { + lock = new_lock; +if (!lock) {spin_unlock_irqrestore (&ide_lock, flags); +return 1 ; } -memset (hwgroup,0 ,sizeof (*hwgroup)); +spin_lock_init (lock); + }else { + lock = match->lock; +if (new_lock) +kfree (new_lock); }/*
@@ -645,7 +646,8 @@if (request_irq (ch->irq, &ata_irq_request, sa, ch->name, ch)) {if (!match) -kfree (hwgroup); +kfree (lock); +spin_unlock_irqrestore (&ide_lock, flags);return 1 ;
@@ -653,9 +655,9 @@ }/* -* Everything is okay. Tag us as member of this hardware group. +* Everything is okay. Tag us as member of this lock group. */ - ch->hwgroup = hwgroup; + ch->lock = lock;init_timer (&ch->timer); ch->timer.function = &ide_timer_expiry;
@@ -678,7 +680,7 @@ q = &drive->queue; q->queuedata = drive->channel; -blk_init_queue (q, do_ide_request, &ide_lock); +blk_init_queue (q, do_ide_request, drive->channel->lock);blk_queue_segment_boundary (q,0xffff );/* ATA can do up to 128K per request, pdc4030 needs smaller limit */
drivers/ide/ide-taskfile.c +4 -50
90 lines not on this page · raw message
drivers/ide/pdc4030.c +121 -56
338 lines not on this page · raw message
drivers/ide/tcq.c +5 -8
@@ -83,7 +83,6 @@static void tcq_invalidate_queue (struct ata_device *drive) {struct ata_channel *ch = drive->channel; -ide_hwgroup_t *hwgroup = ch->hwgroup;request_queue_t *q = &drive->queue;struct ata_taskfile *args;struct request *rq;
@@ -104,7 +103,7 @@ drive->queue_depth =1 ;clear_bit (IDE_BUSY , &ch->active);clear_bit (IDE_DMA , &ch->active); - hwgroup->handler =NULL ; + ch->handler =NULL ;/* * Do some internal stuff -- we really need this command to be
@@ -153,7 +152,6 @@ {struct ata_device *drive = (struct ata_device *) data;struct ata_channel *ch = drive->channel; -ide_hwgroup_t *hwgroup =HWGROUP (drive);unsigned long flags;printk (KERN_ERR "ATA: %s: timeout waiting for interrupt...\n" , __FUNCTION__);
@@ -161,9 +159,9 @@spin_lock_irqsave (&ide_lock, flags);if (test_and_set_bit (IDE_BUSY , &ch->active)) -printk (KERN_ERR "ATA: %s: hwgroup not busy\n" , __FUNCTION__); -if (hwgroup->handler ==NULL ) -printk (KERN_ERR "ATA: %s: missing isr!\n" , __FUNCTION__); +printk (KERN_ERR "ATA: %s: IRQ handler not busy\n" , __FUNCTION__); +if (!ch->handler) +printk (KERN_ERR "ATA: %s: missing ISR!\n" , __FUNCTION__);spin_unlock_irqrestore (&ide_lock, flags);
@@ -181,7 +179,6 @@static void set_irq (struct ata_device *drive,ata_handler_t *handler) {struct ata_channel *ch = drive->channel; -ide_hwgroup_t *hwgroup =HWGROUP (drive);unsigned long flags;spin_lock_irqsave (&ide_lock, flags);
@@ -197,8 +194,8 @@ ch->timer.function = ata_tcq_irq_timeout; ch->timer.data = (unsigned long ) ch->drive;mod_timer (&ch->timer, jiffies +5 *HZ ); + ch->handler = handler; - hwgroup->handler = handler;spin_unlock_irqrestore (&ide_lock, flags); }
drivers/ide/umc8672.c +8 -15
@@ -21,7 +21,7 @@*/ /* -* VLB Controller Support from +* VLB Controller Support from * Wolfram Podien * Rohoefe 3 * D28832 Achim
@@ -34,7 +34,7 @@* #define UMC_DRIVE0 11 * in the beginning of the driver, which sets the speed of drive 0 to 11 (there * are some lines present). 0 - 11 are allowed speed values. These values are -* the results from the DOS speed test program supplied from UMC. 11 is the +* the results from the DOS speed test program supplied from UMC. 11 is the * highest speed (about PIO mode 3) */ #define REALLY_SLOW_IO /* some systems can safely undef this */
@@ -92,13 +92,11 @@out_umc (0xd7 ,(speedtab[0 ][speeds[2 ]] | (speedtab[0 ][speeds[3 ]]<<4 )));out_umc (0xd6 ,(speedtab[0 ][speeds[0 ]] | (speedtab[0 ][speeds[1 ]]<<4 ))); tmp =0 ; -for (i =3 ; i >=0 ; i--) - { +for (i =3 ; i >=0 ; i--) { tmp = (tmp <<2 ) | speedtab[1 ][speeds[i]]; }out_umc (0xdc ,tmp); -for (i =0 ;i <4 ; i++) - { +for (i =0 ;i <4 ; i++) {out_umc (0xd0 +i,speedtab[2 ][speeds[i]]);out_umc (0xd8 +i,speedtab[2 ][speeds[i]]); }
@@ -108,10 +106,9 @@ speeds[0], speeds[1], speeds[2], speeds[3]); } -static void tune_umc (ide_drive_t *drive,byte pio) +static void tune_umc (struct ata_device *drive,byte pio) {unsigned long flags; -ide_hwgroup_t *hwgroup = ide_hwifs[drive->channel->index ^1 ].hwgroup;if (pio ==255 ) pio =ata_timing_mode (drive,XFER_PIO |XFER_EPIO ) -XFER_PIO_0 ;
@@ -121,16 +118,12 @@printk ("%s: setting umc8672 to PIO mode%d (speed %d)\n" , drive->name, pio, pio_to_umc[pio]);save_flags (flags);/* all CPUs */ cli ();/* all CPUs */ -if (hwgroup && hwgroup->handler !=NULL ) { -printk ("umc8672: other interface is busy: exiting tune_umc()\n" ); - }else { - current_speeds[drive->name[2 ] -'a' ] = pio_to_umc[pio]; -umc_set_speeds (current_speeds); - } + current_speeds[drive->name[2 ] -'a' ] = pio_to_umc[pio]; +umc_set_speeds (current_speeds);restore_flags (flags);/* all CPUs */ } -void __init init_umc8672 (void )/* called from ide.c */ +void __init init_umc8672 (void )/* called from ide.c */ {unsigned long flags;
include/asm-cris/ide.h +0 -3
@@ -90,9 +90,6 @@/* some configuration options we don't need */ -#undef SUPPORT_VLB_SYNC -#define SUPPORT_VLB_SYNC 0 -#undef SUPPORT_SLOW_DATA_PORTS#define SUPPORT_SLOW_DATA_PORTS 0
include/asm-m68k/ide.h +0 -3
@@ -83,9 +83,6 @@#undef SUPPORT_SLOW_DATA_PORTS#define SUPPORT_SLOW_DATA_PORTS 0 -#undef SUPPORT_VLB_SYNC -#define SUPPORT_VLB_SYNC 0 -/* this definition is used only on startup .. */ #undef HD_DATA#define HD_DATA NULL
include/asm-mips/ide.h +0 -3
@@ -65,9 +65,6 @@#endif } -#undef SUPPORT_VLB_SYNC -#define SUPPORT_VLB_SYNC 0 -#endif /* __KERNEL__ */ #endif /* __ASM_IDE_H */
include/asm-ppc/ide.h +0 -2
@@ -43,8 +43,6 @@#undef SUPPORT_SLOW_DATA_PORTS#define SUPPORT_SLOW_DATA_PORTS 0 -#undef SUPPORT_VLB_SYNC -#define SUPPORT_VLB_SYNC 0#define ide__sti () __sti()
include/asm-sparc/ide.h +0 -3
@@ -76,9 +76,6 @@#undef SUPPORT_SLOW_DATA_PORTS#define SUPPORT_SLOW_DATA_PORTS 0 -#undef SUPPORT_VLB_SYNC -#define SUPPORT_VLB_SYNC 0 -#undef HD_DATA#define HD_DATA ((ide_ioreg_t)0)
include/asm-sparc64/ide.h +0 -3
@@ -72,9 +72,6 @@#undef SUPPORT_SLOW_DATA_PORTS#define SUPPORT_SLOW_DATA_PORTS 0 -#undef SUPPORT_VLB_SYNC -#define SUPPORT_VLB_SYNC 0 -#undef HD_DATA#define HD_DATA ((ide_ioreg_t)0)
include/linux/ide.h +7 -18
@@ -40,9 +40,6 @@/* Right now this is only needed by a promise controlled. */ -#ifndef SUPPORT_VLB_SYNC /* 1 to support weird 32-bit chips */ -# define SUPPORT_VLB_SYNC 1/* 0 to reduce kernel size */ -#endif #ifndef DISK_RECOVERY_TIME /* off=0; on=access_delay_time */ # define DISK_RECOVERY_TIME 0/* for hardware that needs it */ #endif
@@ -74,8 +71,6 @@*/ #define DMA_PIO_RETRY 1/* retrying in PIO */ -#define HWGROUP (drive) (drive->channel->hwgroup) -/* * Definitions for accessing IDE controller registers */
@@ -444,18 +439,16 @@IDE_DMA /* DMA in progress */ }; -typedef struct hwgroup_s { -/* FIXME: We should look for busy request queues instead of looking at -* the !NULL state of this field. -*/ -ide_startstop_t (*handler)(struct ata_device *,struct request *);/* irq handler, if active */ -}ide_hwgroup_t ; -struct ata_channel {struct device dev;/* device handle */ int unit;/* channel number */ -struct hwgroup_s *hwgroup;/* actually (ide_hwgroup_t *) */ +/* This lock is used to serialize requests on the same device queue or +* between differen queues sharing the same irq line. +*/ +spinlock_t *lock; + +ide_startstop_t (*handler)(struct ata_device *,struct request *);/* irq handler, if active */ struct timer_list timer;/* failsafe timer */ int (*expiry)(struct ata_device *,struct request *);/* irq handler, if active */ unsigned long poll_timeout;/* timeout value during polled operations */
@@ -777,11 +770,7 @@extern int system_bus_speed; -/* -* ide_stall_queue() can be used by a drive to give excess bandwidth back -* to the hwgroup by sleeping for timeout jiffies. -*/ -void ide_stall_queue (struct ata_device *,unsigned long ); +extern void ide_stall_queue (struct ata_device *,unsigned long );/* * CompactFlash cards and their brethern pretend to be removable hard disks,
PATCH 1/1 2.5.15 IDE 63
In reply to Linus TorvaldsTue May 14 02:36:12 CEST 2002 ide-clean-63:
- Propagate the queue handling changes to pmac as well.
- Move set_transfer to ide-taskfile.c this is the only place where it's used and it can be made static there. Same applies to ide_ata66_check().
- Move ide_auto_reduce_xfer to ide.c.
- Make ide_cmd() local to the only place where it's used. Rename it to drive_cmd(). Don't pass drive_cmd_intr() as parameter.
- Remove ide_next command completion type. Nobody is using it.
- Move ide_do_drive_cmd to ide-taskfile. It's used there and in sub-drivers. Not in ide.c. The usage inside the device type drivers is entirely bogus inconsistent and so on...
- Kill bogus IRQ masking code. The kernel is supposed to handle this properly. We should not try to work against possible bugs in the overall irq handling code. Wow this is increasing the systems overall responsibility by a significant margin.
- Remove disfunctional pdcadma code. It is only misleading to the user.
Finally I know where the locking mis matches happen: It's in the device type drivers, which entirely disobey the locking done inside the generic code and which push REQ_DRIVE_CMD type request directly down through the request queue. We will have to deal with them later, simple due to the fact that I can not do everything at once. And finally I have different plans for them :-). (Hint: Why there should be 4 different ATAPI device handling drivers instead of one?)
arch/alpha/defconfig +0 -1
@@ -266,7 +266,6 @@ # CONFIG_BLK_DEV_HPT366 is not set # CONFIG_BLK_DEV_NS87415 is not set # CONFIG_BLK_DEV_OPTI621 is not set -# CONFIG_BLK_DEV_PDC_ADMA is not set # CONFIG_BLK_DEV_PDC202XX is not set # CONFIG_PDC202XX_BURST is not set # CONFIG_PDC202XX_FORCE is not set
arch/i386/defconfig +0 -1
@@ -275,7 +275,6 @@ CONFIG_BLK_DEV_PIIX=y # CONFIG_BLK_DEV_NS87415 is not set # CONFIG_BLK_DEV_OPTI621 is not set -# CONFIG_BLK_DEV_PDC_ADMA is not set # CONFIG_BLK_DEV_PDC202XX is not set # CONFIG_PDC202XX_BURST is not set # CONFIG_PDC202XX_FORCE is not set
arch/ia64/defconfig +0 -1
@@ -247,7 +247,6 @@ # CONFIG_BLK_DEV_PIIX is not set # CONFIG_BLK_DEV_NS87415 is not set # CONFIG_BLK_DEV_OPTI621 is not set -# CONFIG_BLK_DEV_PDC_ADMA is not set # CONFIG_BLK_DEV_PDC202XX is not set # CONFIG_PDC202XX_BURST is not set # CONFIG_PDC202XX_FORCE is not set
arch/sparc64/defconfig +0 -1
@@ -310,7 +310,6 @@ # CONFIG_BLK_DEV_PIIX is not set CONFIG_BLK_DEV_NS87415=y # CONFIG_BLK_DEV_OPTI621 is not set -# CONFIG_BLK_DEV_PDC_ADMA is not set # CONFIG_BLK_DEV_PDC202XX is not set # CONFIG_PDC202XX_BURST is not set # CONFIG_PDC202XX_FORCE is not set
arch/x86_64/defconfig +0 -1
@@ -228,7 +228,6 @@ # CONFIG_BLK_DEV_PIIX is not set # CONFIG_BLK_DEV_NS87415 is not set # CONFIG_BLK_DEV_OPTI621 is not set -# CONFIG_BLK_DEV_PDC_ADMA is not set # CONFIG_BLK_DEV_PDC202XX is not set # CONFIG_PDC202XX_BURST is not set # CONFIG_PDC202XX_FORCE is not set
drivers/ide/ata-timing.c +2 -2
@@ -70,7 +70,7 @@* then to be matched agains in esp. other drives no the same channel or even * the whole particular host chip. */ -short ata_timing_mode (ide_drive_t *drive,int map) +short ata_timing_mode (struct ata_device *drive,int map) {struct hd_driveid *id = drive->id;short best =0 ;
@@ -192,7 +192,7 @@return t; } -int ata_timing_compute (ide_drive_t *drive,short speed,struct ata_timing *t, +int ata_timing_compute (struct ata_device *drive,short speed,struct ata_timing *t,int T ,int UT ) {struct hd_driveid *id = drive->id;
drivers/ide/Config.help +0 -3
@@ -294,9 +294,6 @@ It is normally safe to answer Y; however, the default is N. -CONFIG_BLK_DEV_PDC_ADMA - Please read the comments at the top of <file:drivers/ide/ide-pci.c>. - CONFIG_BLK_DEV_AEC62XX This driver adds up to 4 more EIDE devices sharing a single interrupt. This add-on card is a bootable PCI UDMA controller. In
drivers/ide/Config.in +0 -1
@@ -73,7 +73,6 @@ fi dep_bool ' NS87415 chipset support (EXPERIMENTAL)' CONFIG_BLK_DEV_NS87415 $CONFIG_BLK_DEV_IDEDMA_PCI dep_mbool ' OPTi 82C621 chipset enhanced support (EXPERIMENTAL)' CONFIG_BLK_DEV_OPTI621 $CONFIG_PCI $CONFIG_EXPERIMENTAL - dep_mbool ' Pacific Digital A-DMA support (EXPERIMENTAL)' CONFIG_BLK_DEV_PDC_ADMA $CONFIG_EXPERIMENTAL dep_bool ' PROMISE PDC202{46|62|65|67|68|69|70} support' CONFIG_BLK_DEV_PDC202XX $CONFIG_BLK_DEV_IDEDMA_PCI dep_bool ' Special UDMA Feature' CONFIG_PDC202XX_BURST $CONFIG_BLK_DEV_PDC202XX dep_bool ' Special FastTrak Feature' CONFIG_PDC202XX_FORCE $CONFIG_BLK_DEV_PDC202XX
drivers/ide/ide.c +58 -127
324 lines not on this page · raw message
drivers/ide/ide-features.c +10 -86
142 lines not on this page · raw message
drivers/ide/ide-floppy.c +1 -1
@@ -879,7 +879,7 @@ pc =idefloppy_next_pc_storage (drive); rq =idefloppy_next_rq_storage (drive);idefloppy_create_request_sense_cmd (pc); -idefloppy_queue_pc_head (drive, pc, rq); +idefloppy_queue_pc_head (drive, pc, rq); }/*
drivers/ide/ide-geometry.c +8 -10
@@ -1,6 +1,4 @@/* -* linux/drivers/ide/ide-geometry.c -* * Sun Feb 24 23:13:03 CET 2002: Patch by Andries Brouwer to remove the * confused CMOS probe applied. This is solving more problems than it may * (unexpectedly) introduce.
@@ -14,17 +12,17 @@#if defined(CONFIG_BLK_DEV_IDE ) || defined(CONFIG_BLK_DEV_IDE_MODULE ) -extern ide_drive_t *get_info_ptr (kdev_t ); +extern struct ata_device *get_info_ptr (kdev_t );/* * If heads is nonzero: find a translation with this many heads and S=63. * Otherwise: find out how OnTrack Disk Manager would translate the disk. */ static void -ontrack (ide_drive_t *drive,int heads,unsigned int *c,int *h,int *s) +ontrack (struct ata_device *drive,int heads,unsigned int *c,int *h,int *s) { -static const byte dm_head_vals[] = {4 ,8 ,16 ,32 ,64 ,128 ,255 ,0 }; -const byte *headp = dm_head_vals; +static const u8 dm_head_vals[] = {4 ,8 ,16 ,32 ,64 ,128 ,255 ,0 }; +const u8 *headp = dm_head_vals;unsigned long total;/*
@@ -72,13 +70,13 @@* -1 = similar to "0", plus redirect sector 0 to sector 1. * 2 = convert to a CHS geometry with "ptheads" heads. * -* Returns 0 if the translation was not possible, if the device was not +* Returns 0 if the translation was not possible, if the device was not * an IDE disk drive, or if a geometry was "forced" on the commandline. * Returns 1 if the geometry translation was successful. */ -int ide_xlate_1024 (kdev_t i_rdev,int xparm,int ptheads,const char *msg) +int ide_xlate_1024 (kdev_t i_rdev,int xparm,int ptheads,const char *msg) { -ide_drive_t *drive; +struct ata_device *drive;const char *msg1 ="" ;int heads =0 ;int c, h, s;
@@ -144,4 +142,4 @@ drive->bios_cyl, drive->bios_head, drive->bios_sect); return ret; } -#endif /* defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE) */ +#endif
drivers/ide/ide-pmac.c +3 -5
@@ -55,8 +55,6 @@#endif #include "ata-timing.h" -extern spinlock_t ide_lock; -#undef IDE_PMAC_DEBUG#define DMA_WAIT_TIMEOUT 500
@@ -1669,12 +1667,12 @@break ; } -/* We resume processing on the HW group */ -spin_lock_irq (&ide_lock); +/* We resume processing on the lock group */ +spin_lock_irq (drive->channel->lock);clear_bit (IDE_BUSY , &drive->channel->active);if (!list_empty (&drive->queue.queue_head))do_ide_request (&drive->queue); -spin_unlock_irq (&ide_lock); +spin_unlock_irq (drive->channel->lock); }/* Note: We support only master drives for now. This will have to be
drivers/ide/ide-tape.c +4 -4
@@ -1917,9 +1917,9 @@idetape_active_next_stage (drive);/* -* Insert the next request into the request queue. +* Insert the next request into the request queue. */ - (void )ide_do_drive_cmd (drive, tape->active_data_request, ide_end); +ide_do_drive_cmd (drive, tape->active_data_request, ide_end); }else if (!error) {if (!tape->onstream)idetape_increase_max_pipeline_stages (drive);
@@ -1986,7 +1986,7 @@ide_init_drive_cmd (rq); rq->buffer = (char *) pc; rq->flags =IDETAPE_PC_RQ1 ; - (void )ide_do_drive_cmd (drive, rq, ide_preempt); +ide_do_drive_cmd (drive, rq, ide_preempt); }/*
@@ -3197,7 +3197,7 @@ide_init_drive_cmd (&rq); rq.buffer = (char *) pc; rq.flags =IDETAPE_PC_RQ1 ; -return ide_do_drive_cmd (drive, &rq, ide_wait); +return ide_do_drive_cmd (drive, &rq, ide_wait); }static void idetape_create_load_unload_cmd (ide_drive_t *drive,idetape_pc_t *pc,int cmd)
drivers/ide/ide-taskfile.c +129 -6
179 lines not on this page · raw message
drivers/ide/Makefile +1 -2
@@ -54,7 +54,6 @@ ide-obj-$(CONFIG_BLK_DEV_SVWKS) += serverworks.o ide-obj-$(CONFIG_BLK_DEV_PDC202XX) += pdc202xx.o ide-obj-$(CONFIG_BLK_DEV_PDC4030) += pdc4030.o -ide-obj-$(CONFIG_BLK_DEV_PDC_ADMA) += pdcadma.o ide-obj-$(CONFIG_BLK_DEV_PIIX) += piix.o ide-obj-$(CONFIG_BLK_DEV_QD65XX) += qd65xx.o ide-obj-$(CONFIG_BLK_DEV_IDE_RAPIDE) += rapide.o
@@ -72,6 +71,6 @@ obj-$(CONFIG_BLK_DEV_ATARAID_PDC) += pdcraid.o obj-$(CONFIG_BLK_DEV_ATARAID_HPT) += hptraid.o -ide-mod-objs := ide-taskfile.o ide.o ide-probe.o ide-geometry.o ide-features.o ata-timing.o $(ide-obj-y) +ide-mod-objs := ide-taskfile.o ide.o ide-probe.o ide-geometry.o ide-features.o ata-timing.o $(ide-obj-y) include $(TOPDIR)/Rules.make
drivers/ide/pcihost.h +0 -3
@@ -72,9 +72,6 @@#ifdef CONFIG_BLK_DEV_AMD74XX extern int init_amd74xx (void );#endif -#ifdef CONFIG_BLK_DEV_PDC_ADMA -extern int init_pdcadma (void ); -#endif #ifdef CONFIG_BLK_DEV_SVWKS extern int init_svwks (void );#endif
drivers/ide/pdc4030.c +1 -2
@@ -316,8 +316,7 @@memcpy (hwif2->io_ports, hwif->hw.io_ports,sizeof (hwif2->io_ports)); hwif2->irq = hwif->irq; hwif2->hw.irq = hwif->hw.irq = hwif->irq; - hwif->io_32bit =3 ; - hwif2->io_32bit =3 ; + hwif->io_32bit = hwif2->io_32bit =1 ;for (i=0 ; i<2 ; i++) {if (!ident.current_tm[i].cyl) hwif->drives[i].noprobe =1 ;
drivers/ide/pdcadma.c +0 -128
128 lines not on this page · raw message
drivers/ide/tcq.c +6 -6
@@ -90,7 +90,7 @@printk (KERN_INFO "ATA: %s: invalidating pending queue (%d)\n" , drive->name,ata_pending_commands (drive)); -spin_lock_irqsave (&ide_lock, flags); +spin_lock_irqsave (ch->lock, flags);del_timer (&ch->timer);
@@ -144,7 +144,7 @@* start doing stuff again */ q->request_fn (q); -spin_unlock_irqrestore (&ide_lock, flags); +spin_unlock_irqrestore (ch->lock, flags);printk (KERN_DEBUG "ATA: tcq_invalidate_queue: done\n" ); }
@@ -156,14 +156,14 @@printk (KERN_ERR "ATA: %s: timeout waiting for interrupt...\n" , __FUNCTION__); -spin_lock_irqsave (&ide_lock, flags); +spin_lock_irqsave (ch->lock, flags);if (test_and_set_bit (IDE_BUSY , &ch->active))printk (KERN_ERR "ATA: %s: IRQ handler not busy\n" , __FUNCTION__);if (!ch->handler)printk (KERN_ERR "ATA: %s: missing ISR!\n" , __FUNCTION__); -spin_unlock_irqrestore (&ide_lock, flags); +spin_unlock_irqrestore (ch->lock, flags);/* * if pending commands, try service before giving up
@@ -181,7 +181,7 @@struct ata_channel *ch = drive->channel;unsigned long flags; -spin_lock_irqsave (&ide_lock, flags); +spin_lock_irqsave (ch->lock, flags);/* * always just bump the timer for now, the timeout handling will
@@ -196,7 +196,7 @@mod_timer (&ch->timer, jiffies +5 *HZ ); ch->handler = handler; -spin_unlock_irqrestore (&ide_lock, flags); +spin_unlock_irqrestore (ch->lock, flags); }/*
drivers/scsi/ide-scsi.c +0 -12
@@ -792,18 +792,6 @@*/ int idescsi_device_reset (Scsi_Cmnd *cmd) { -#if 0 -ide_drive_t *drive = idescsi_drives[cmd->target]; -struct request req; - -ide_init_drive_cmd (&req); - req.flags =REQ_SPECIAL ; - -/* FIX ME, the next executable line causes on oops in lk 2.5.10-dj1 -* [code copied from ide-cd's ide_cdrom_reset(), does it work?] -*/ -ide_do_drive_cmd (drive, &req, ide_wait); -#endif return SUCCESS ; }
include/linux/ide.h +20 -25
101 lines not on this page · raw message
PATCH 1/1 2.5.15 IDE 64
In reply to Linus TorvaldsTue May 14 13:35:04 CEST 2002 ide-clean-64:
Let's just get over with this before queue handling will be targeted again...
- Implement suggestions by Russel King for improved portability and separation between PCI and non PCI host code.
- pdc202xxx updates from Thierry Vignaud.
- Tinny PIO fix from Tomita.
drivers/ide/ide.c +1 -1
@@ -1145,7 +1145,7 @@ }/* -* Select the next device which will be serviced. This selects onlt between +* Select the next device which will be serviced. This selects only between * devices on the same channel, since everything else will be scheduled on the * queue level. */
drivers/ide/ide-dma.c +0 -866
866 lines not on this page · raw message
drivers/ide/ide-taskfile.c +1 -1
@@ -562,7 +562,7 @@if (!ide_end_request (drive, rq,1 ))return ide_stopped; -if ((rq->current_nr_sectors==1 ) ^ (stat &DRQ_STAT )) { +if ((rq->nr_sectors ==1 ) != (stat &DRQ_STAT )) { pBuf =ide_map_rq (rq, &flags);DTF ("write: %p, rq->current_nr_sectors: %d\n" , pBuf, (int ) rq->current_nr_sectors);
drivers/ide/Makefile +3 -2
@@ -10,7 +10,7 @@ O_TARGET := idedriver.o -export-objs := ide-taskfile.o ide.o ide-features.o ide-probe.o ide-dma.o ataraid.o +export-objs := ide-taskfile.o ide.o ide-features.o ide-probe.o quirks.o pcidma.o ataraid.o obj-y := obj-m :=
@@ -43,7 +43,8 @@ ide-obj-$(CONFIG_BLK_DEV_HPT366) += hpt366.o ide-obj-$(CONFIG_BLK_DEV_HT6560B) += ht6560b.o ide-obj-$(CONFIG_BLK_DEV_IDE_ICSIDE) += icside.o -ide-obj-$(CONFIG_BLK_DEV_IDEDMA_PCI) += ide-dma.o +ide-obj-$(CONFIG_BLK_DEV_IDEDMA) += quirks.o +ide-obj-$(CONFIG_BLK_DEV_IDEDMA_PCI) += pcidma.o ide-obj-$(CONFIG_BLK_DEV_IDE_TCQ) += tcq.o ide-obj-$(CONFIG_PCI) += ide-pci.o ide-obj-$(CONFIG_BLK_DEV_ISAPNP) += ide-pnp.o
drivers/ide/pcidma.c +555 -0
555 lines not on this page · raw message
drivers/ide/pcihost.h +0 -4
@@ -10,10 +10,6 @@* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. -* -* You should have received a copy of the GNU General Public License along with -* this program; if not, write to the Free Software Foundation, Inc., 59 Temple -* Place, Suite 330, Boston, MA 02111-1307 USA */ /*
drivers/ide/pdc202xx.c +85 -417
680 lines not on this page · raw message
drivers/ide/quirks.c +231 -0
231 lines not on this page · raw message
include/linux/ide.h +41 -8
63 lines not on this page · raw message
Re: [PATCH] 2.5.15 IDE 64
In reply to Linus TorvaldsQuoted 5 lines · Martin Dalecki
Tue May 14 13:35:04 CEST 2002 ide-clean-64:
Let's just get over with this before queue handling will be targeted again...
- Implement suggestions by Russel King for improved portability and separation
RusseLL please. 8)
Signature · 2 lines
Russell King ([email protected]) The developer of ARM Linux http://www.arm.linux.org.uk/personal/aboutme.html
Re: [PATCH] 2.5.15 IDE 64
In reply to Linus TorvaldsUz.ytkownik Russell King napisa?:
Quoted 10 lines · Martin Dalecki
Quoted 6 lines
Tue May 14 13:35:04 CEST 2002 ide-clean-64:
Let's just get over with this before queue handling will be targeted again...
- Implement suggestions by Russel King for improved portability and separation
RusseLL please. 8)
Please accept my in deppth thorough apologies for the spelling mistake. Would maybe just "The ARM King" suite you as well? ;-).