IDE update
PATCH 1/1 IDE update
First IDE update for 2.6.23 merge window:
* Fixups/cleanups all over the place (detailed changelog somewhere below).
Thanks to all contributors!
* Support for short 40-wire cables.
If your laptop's disk was limited to UDMA33 because of failed cable detection there is good chance that this update fixes the issue.
If it still doesn't please report it.
Linus, please pull from:
master.kernel.org:/pub/scm/linux/kernel/git/bart/ide-2.6.git/
to receive the following updates:
drivers/ide/arm/icside.c | 16 +-- drivers/ide/cris/ide-cris.c | 2 +- drivers/ide/ide-cd.c | 6 +- drivers/ide/ide-cd.h | 2 - drivers/ide/ide-disk.c | 8 +- drivers/ide/ide-dma.c | 110 ++++++++++-------- drivers/ide/ide-io.c | 4 +- drivers/ide/ide-iops.c | 8 +- drivers/ide/ide-probe.c | 10 +- drivers/ide/ide-proc.c | 34 +++--- drivers/ide/ide-timing.h | 56 +--------- drivers/ide/ide.c | 33 +++--- drivers/ide/legacy/hd.c | 2 +- drivers/ide/legacy/macide.c | 14 --- drivers/ide/mips/au1xxx-ide.c | 24 ++--- drivers/ide/pci/aec62xx.c | 119 ++++++------------- drivers/ide/pci/alim15x3.c | 78 +++++++++----- drivers/ide/pci/amd74xx.c | 127 ++++++++++----------- drivers/ide/pci/atiixp.c | 5 +- drivers/ide/pci/cmd64x.c | 130 ++++++++-------------- drivers/ide/pci/cs5535.c | 6 +- drivers/ide/pci/hpt366.c | 170 +++++++++++++++------------- drivers/ide/pci/it8213.c | 8 +- drivers/ide/pci/it821x.c | 9 +- drivers/ide/pci/jmicron.c | 20 ++-- drivers/ide/pci/pdc202xx_new.c | 9 +- drivers/ide/pci/pdc202xx_old.c | 35 ++++-- drivers/ide/pci/piix.c | 45 ++++++- drivers/ide/pci/scc_pata.c | 2 +- drivers/ide/pci/serverworks.c | 103 +++--------------- drivers/ide/pci/sgiioc4.c | 20 ++-- drivers/ide/pci/siimage.c | 18 ++-- drivers/ide/pci/sis5513.c | 34 +++++- drivers/ide/pci/sl82c105.c | 20 +-- drivers/ide/pci/slc90e66.c | 5 +- drivers/ide/pci/tc86c001.c | 4 +- drivers/ide/pci/via82cxxx.c | 175 +++++++++++++++++------------ drivers/ide/ppc/pmac.c | 42 ++----- include/asm-mips/mach-au1x00/au1xxx_ide.h | 28 +++--- include/linux/ide.h | 18 ++-- 40 files changed, 733 insertions(+), 826 deletions(-)
Adrian Bunk (1):
drivers/ide/ide-dma.c: unexport ide_set_dma
Andi Drebes (1):
drivers/ide/legacy/hd.c: Array size calculation using sizeof replaced with ARRAY_SIZE
Bartlomiej Zolnierkiewicz (8):
serverworks: always tune CSB6
ide: fix pre-EIDE SWDMA support
ide: convert ide_find_best_mode() users to use ide_max_dma_mode()
ide: add short cables support
piix: backport short cables support from ata_piix.c
alim15x3: backport short cables support from pata_ali.c
sis5513: backport short cables support from pata_sis.c
via82cxxx: backport short cables support from pata_via.c
Junio C Hamano (3):
ide_in_drive_list(): accept NULL as the wildcard for firmware revision mips au1xxx_ide.h: use NULL as firmware-revision wildcard ide_in_drive_list(): "ALL" is not a wildcard anymore
Matthias Kaehlcke (2):
ide: use mutex instead of ide_cfg_sem semaphore in IDE driver
ide: use mutex instead of ide_setting_sem semaphore in IDE driver
Robert P. J. Day (3):
ide-cd: replace C code with call to ARRAY_SIZE() macro
ide: remove references to the non-existent CONFIG_SCSI_EATA_DMA
ide: remove content related to dead CONFIG_BLK_DEV_MAC_MEDIABAY config variable
Sergei Shtylyov (7):
ide: make void and rename ide_dma_lostirq() method
ide: make void and rename ide_dma_timeout() method
hpt366: simplify UltraDMA filtering (take 4)
cmd64x: init. code cleanup
aec62xx: rework init_setup_aec6x80()
aec62xx: remove init_dma() method (take 2)
aec62xx: kill speedproc() method wrapper (take 2)
drivers/ide/arm/icside.c +7 -9
@@ -448,23 +448,21 @@ static int icside_dma_test_irq(ide_drive_t *drive) ICS_ARCIN_V6_INTRSTAT_1)) & 1; } -static int icside_dma_timeout (ide_drive_t *drive) +static void icside_dma_timeout (ide_drive_t *drive) {printk (KERN_ERR "%s: DMA timeout occurred: " , drive->name);if (icside_dma_test_irq (drive)) -return 0 ; +return ; -ide_dump_status (drive,"DMA timeout" , -HWIF (drive)->INB (IDE_STATUS_REG )); +ide_dump_status (drive,"DMA timeout" ,HWIF (drive)->INB (IDE_STATUS_REG )); -return icside_dma_end (drive); +icside_dma_end (drive); } -static int icside_dma_lostirq (ide_drive_t *drive) +static void icside_dma_lost_irq (ide_drive_t *drive) {printk (KERN_ERR "%s: IRQ lost\n" , drive->name); -return 1 ; }static void icside_dma_init (ide_hwif_t *hwif)
@@ -490,8 +488,8 @@ static void icside_dma_init(ide_hwif_t *hwif) hwif->dma_start = icside_dma_start; hwif->ide_dma_end = icside_dma_end; hwif->ide_dma_test_irq = icside_dma_test_irq; - hwif->ide_dma_timeout = icside_dma_timeout; - hwif->ide_dma_lostirq = icside_dma_lostirq; + hwif->dma_timeout = icside_dma_timeout; + hwif->dma_lost_irq = icside_dma_lost_irq; hwif->drives[0 ].autodma = hwif->autodma; hwif->drives[1 ].autodma = hwif->autodma;
drivers/ide/cris/ide-cris.c +1 -1
@@ -819,7 +819,7 @@ init_e100_ide (void) hwif->dma_host_off = &cris_dma_off; hwif->dma_host_on = &cris_dma_on; hwif->dma_off_quietly = &cris_dma_off; - hwif->udma_four =0 ; + hwif->cbl =ATA_CBL_PATA40 ; hwif->ultra_mask = cris_ultra_mask; hwif->mwdma_mask =0x07 ;/* Multiword DMA 0-2 */ hwif->autodma =1 ;
drivers/ide/ide-cd.c +3 -3
@@ -481,7 +481,7 @@ void cdrom_analyze_sense_data(ide_drive_t *drive,else printk (" Unknown Error Type: " ); -if (sense->sense_key <ARY_LEN (sense_key_texts)) +if (sense->sense_key <ARRAY_SIZE (sense_key_texts)) s = sense_key_texts[sense->sense_key];printk ("%s -- (Sense key=0x%02x)\n" , s, sense->sense_key);
@@ -491,7 +491,7 @@ void cdrom_analyze_sense_data(ide_drive_t *drive, sense->ascq); s = buf; }else { -int lo =0 , mid, hi =ARY_LEN (sense_data_texts); +int lo =0 , mid, hi =ARRAY_SIZE (sense_data_texts);unsigned long key = (sense->sense_key <<16 ); key |= (sense->asc <<8 );if (!(sense->ascq >=0x80 && sense->ascq <=0xdd ))
@@ -524,7 +524,7 @@ void cdrom_analyze_sense_data(ide_drive_t *drive,if (failed_command !=NULL ) { -int lo=0 , mid, hi=ARY_LEN (packet_command_texts); +int lo=0 , mid, hi=ARRAY_SIZE (packet_command_texts); s =NULL ;while (hi > lo) {
drivers/ide/ide-cd.h +0 -2
@@ -498,8 +498,6 @@ struct cdrom_info {* Descriptions of ATAPI error codes. */ -#define ARY_LEN (a) ((sizeof(a) / sizeof(a[0]))) -/* This stuff should be in cdrom.h, since it is now generic... */ /* ATAPI sense keys (from table 140 of ATAPI 2.6) */
drivers/ide/ide-disk.c +4 -4
@@ -1190,11 +1190,11 @@ static int idedisk_ioctl(struct inode *inode, struct file *file,return generic_ide_ioctl (drive, file, bdev, cmd, arg); read_val: -down (&ide_setting_sem); +mutex_lock (&ide_setting_mtx);spin_lock_irqsave (&ide_lock, flags); err = *val;spin_unlock_irqrestore (&ide_lock, flags); -up (&ide_setting_sem); +mutex_unlock (&ide_setting_mtx);return err >=0 ?put_user (err, (long __user *)arg) : err; set_val:
@@ -1204,9 +1204,9 @@ set_val:if (!capable (CAP_SYS_ADMIN )) err = -EACCES ;else { -down (&ide_setting_sem); +mutex_lock (&ide_setting_mtx); err =setfunc (drive, arg); -up (&ide_setting_sem); +mutex_unlock (&ide_setting_mtx); } }return err;
drivers/ide/ide-dma.c +62 -48
160 lines not on this page · raw message
drivers/ide/ide-io.c +2 -2
@@ -1350,7 +1350,7 @@ static ide_startstop_t ide_dma_timeout_retry(ide_drive_t *drive, int error) hwif->INB(IDE_STATUS_REG)); }else {printk (KERN_WARNING "%s: DMA timeout retry\n" , drive->name); - (void ) hwif->ide_dma_timeout (drive); + hwif->dma_timeout (drive); }/*
@@ -1466,7 +1466,7 @@ void ide_timer_expiry (unsigned long data) startstop =handler (drive); }else if (drive_is_ready (drive)) {if (drive->waiting_for_dma) - (void ) hwgroup->hwif->ide_dma_lostirq (drive); + hwgroup->hwif->dma_lost_irq (drive); (void )ide_ack_intr (hwif);printk (KERN_WARNING "%s: lost interrupt\n" , drive->name); startstop =handler (drive);
drivers/ide/ide-iops.c +6 -2
@@ -574,7 +574,10 @@ u8 eighty_ninty_three (ide_drive_t *drive)ide_hwif_t *hwif = drive->hwif;struct hd_driveid *id = drive->id; -if (hwif->udma_four ==0 ) +if (hwif->cbl ==ATA_CBL_PATA40_SHORT ) +return 1 ; + +if (hwif->cbl !=ATA_CBL_PATA80 ) goto no_80w;/* Check for SATA but only if we are ATA5 or higher */
@@ -600,7 +603,8 @@ no_80w:printk (KERN_WARNING "%s: %s side 80-wire cable detection failed, " "limiting max speed to UDMA33\n" , - drive->name, hwif->udma_four ?"drive" :"host" ); + drive->name, + hwif->cbl ==ATA_CBL_PATA80 ?"drive" :"host" ); drive->udma33_warned =1 ;
drivers/ide/ide-probe.c +5 -5
@@ -144,7 +144,7 @@ static inline void do_identify (ide_drive_t *drive, u8 cmd)local_irq_enable ();ide_fix_driveid (id); -#if defined (CONFIG_SCSI_EATA_DMA ) || defined (CONFIG_SCSI_EATA_PIO ) || defined (CONFIG_SCSI_EATA ) +#if defined (CONFIG_SCSI_EATA_PIO ) || defined (CONFIG_SCSI_EATA )/* * EATA SCSI controllers do a hardware ATA emulation: * Ignore them if there is a driver for them available.
@@ -154,7 +154,7 @@ static inline void do_identify (ide_drive_t *drive, u8 cmd)printk ("%s: EATA SCSI HBA %.10s\n" , drive->name, id->model); goto err_misc; } -#endif /* CONFIG_SCSI_EATA_DMA || CONFIG_SCSI_EATA_PIO */ +#endif /* CONFIG_SCSI_EATA || CONFIG_SCSI_EATA_PIO */ /* * WIN_IDENTIFY returns little-endian info,
@@ -1025,7 +1025,7 @@ static int init_irq (ide_hwif_t *hwif)BUG_ON (irqs_disabled ());BUG_ON (hwif ==NULL ); -down (&ide_cfg_sem); +mutex_lock (&ide_cfg_mtx); hwif->hwgroup =NULL ;#if MAX_HWIFS >1 /*
@@ -1154,7 +1154,7 @@ static int init_irq (ide_hwif_t *hwif)printk (" (%sed with %s)" , hwif->sharing_irq ?"shar" :"serializ" , match->name);printk ("\n" ); -up (&ide_cfg_sem); +mutex_unlock (&ide_cfg_mtx);return 0 ; out_unlink:spin_lock_irq (&ide_lock);
@@ -1177,7 +1177,7 @@ out_unlink: }spin_unlock_irq (&ide_lock); out_up: -up (&ide_cfg_sem); +mutex_unlock (&ide_cfg_mtx);return 1 ; }
drivers/ide/ide-proc.c +17 -17
@@ -156,7 +156,7 @@ static int __ide_add_setting(ide_drive_t *drive, const char *name, int rw, int d {ide_settings_t **p = (ide_settings_t **) &drive->settings, *setting =NULL ; -down (&ide_setting_sem); +mutex_lock (&ide_setting_mtx);while ((*p) &&strcmp ((*p)->name, name) <0 ) p = &((*p)->next);if ((setting =kzalloc (sizeof (*setting),GFP_KERNEL )) ==NULL )
@@ -177,10 +177,10 @@ static int __ide_add_setting(ide_drive_t *drive, const char *name, int rw, int dif (auto_remove) setting->auto_remove =1 ; *p = setting; -up (&ide_setting_sem); +mutex_unlock (&ide_setting_mtx);return 0 ; abort: -up (&ide_setting_sem); +mutex_unlock (&ide_setting_mtx);kfree (setting);return -1 ; }
@@ -224,7 +224,7 @@ static void __ide_remove_setting (ide_drive_t *drive, char *name)* * Automatically remove all the driver specific settings for this * drive. This function may not be called from IRQ context. The -* caller must hold ide_setting_sem. +* caller must hold ide_setting_mtx. */ static void auto_remove_settings (ide_drive_t *drive)
@@ -269,7 +269,7 @@ static ide_settings_t *ide_find_setting_by_name(ide_drive_t *drive, char *name)* @setting: drive setting * * Read a drive setting and return the value. The caller -* must hold the ide_setting_sem when making this call. +* must hold the ide_setting_mtx when making this call. * * BUGS: the data return and error are the same return value * so an error -EINVAL and true return of the same value cannot
@@ -306,7 +306,7 @@ static int ide_read_setting(ide_drive_t *drive, ide_settings_t *setting)* @val: value * * Write a drive setting if it is possible. The caller -* must hold the ide_setting_sem when making this call. +* must hold the ide_setting_mtx when making this call. * * BUGS: the data return and error are the same return value * so an error -EINVAL and true return of the same value cannot
@@ -367,7 +367,7 @@ static int set_xfer_rate (ide_drive_t *drive, int arg)* @drive: drive being configured * * Add the generic parts of the system settings to the /proc files. -* The caller must not be holding the ide_setting_sem. +* The caller must not be holding the ide_setting_mtx. */ void ide_add_generic_settings (ide_drive_t *drive)
@@ -408,7 +408,7 @@ static int proc_ide_read_settingsproc_ide_settings_warn (); -down (&ide_setting_sem); +mutex_lock (&ide_setting_mtx); out +=sprintf (out,"name\t\t\tvalue\t\tmin\t\tmax\t\tmode\n" ); out +=sprintf (out,"----\t\t\t-----\t\t---\t\t---\t\t----\n" );while (setting) {
@@ -428,7 +428,7 @@ static int proc_ide_read_settings setting = setting->next; } len = out - page; -up (&ide_setting_sem); +mutex_unlock (&ide_setting_mtx);PROC_IDE_READ_RETURN (page,start,off,count,eof,len); }
@@ -508,16 +508,16 @@ static int proc_ide_write_settings(struct file *file, const char __user *buffer, ++p; } -down (&ide_setting_sem); +mutex_lock (&ide_setting_mtx); setting =ide_find_setting_by_name (drive, name);if (!setting) { -up (&ide_setting_sem); +mutex_unlock (&ide_setting_mtx); goto parse_error; }if (for_real)ide_write_setting (drive, setting, val * setting->div_factor / setting->mul_factor); -up (&ide_setting_sem); +mutex_unlock (&ide_setting_mtx); } }while (!for_real++);free_page ((unsigned long )buf);
@@ -705,7 +705,7 @@ EXPORT_SYMBOL(ide_proc_register_driver);* Clean up the driver specific /proc files and IDE settings * for a given drive. * -* Takes ide_setting_sem and ide_lock. +* Takes ide_setting_mtx and ide_lock. * Caller must hold none of the locks. */
@@ -715,10 +715,10 @@ void ide_proc_unregister_driver(ide_drive_t *drive, ide_driver_t *driver)ide_remove_proc_entries (drive->proc, driver->proc); -down (&ide_setting_sem); +mutex_lock (&ide_setting_mtx);spin_lock_irqsave (&ide_lock, flags);/* -* ide_setting_sem protects the settings list +* ide_setting_mtx protects the settings list * ide_lock protects the use of settings * * so we need to hold both, ide_settings_sem because we want to
@@ -726,11 +726,11 @@ void ide_proc_unregister_driver(ide_drive_t *drive, ide_driver_t *driver)* a setting out that is being used. * * OTOH both ide_{read,write}_setting are only ever used under -* ide_setting_sem. +* ide_setting_mtx. */ auto_remove_settings (drive);spin_unlock_irqrestore (&ide_lock, flags); -up (&ide_setting_sem); +mutex_unlock (&ide_setting_mtx); }EXPORT_SYMBOL (ide_proc_unregister_driver);
drivers/ide/ide-timing.h +3 -53
76 lines not on this page · raw message
drivers/ide/ide.c +19 -14
@@ -169,7 +169,7 @@ static const u8 ide_hwif_to_major[] = { IDE0_MAJOR, IDE1_MAJOR,static int idebus_parameter;/* holds the "idebus=" parameter */ static int system_bus_speed;/* holds what we think is VESA/PCI bus speed */ -DECLARE_MUTEX (ide_cfg_sem); +DEFINE_MUTEX (ide_cfg_mtx);__cacheline_aligned_in_smp DEFINE_SPINLOCK (ide_lock );#ifdef CONFIG_IDEPCI_PCIBUS_ORDER
@@ -460,6 +460,8 @@ static void ide_hwif_restore(ide_hwif_t *hwif, ide_hwif_t *tmp_hwif) hwif->mwdma_mask = tmp_hwif->mwdma_mask; hwif->swdma_mask = tmp_hwif->swdma_mask; + hwif->cbl = tmp_hwif->cbl; + hwif->chipset = tmp_hwif->chipset; hwif->hold = tmp_hwif->hold;
@@ -496,8 +498,8 @@ static void ide_hwif_restore(ide_hwif_t *hwif, ide_hwif_t *tmp_hwif) hwif->ide_dma_clear_irq = tmp_hwif->ide_dma_clear_irq; hwif->dma_host_on = tmp_hwif->dma_host_on; hwif->dma_host_off = tmp_hwif->dma_host_off; - hwif->ide_dma_lostirq = tmp_hwif->ide_dma_lostirq; - hwif->ide_dma_timeout = tmp_hwif->ide_dma_timeout; + hwif->dma_lost_irq = tmp_hwif->dma_lost_irq; + hwif->dma_timeout = tmp_hwif->dma_timeout; hwif->OUTB = tmp_hwif->OUTB; hwif->OUTBSYNC = tmp_hwif->OUTBSYNC;
@@ -533,7 +535,6 @@ static void ide_hwif_restore(ide_hwif_t *hwif, ide_hwif_t *tmp_hwif) hwif->extra_base = tmp_hwif->extra_base; hwif->extra_ports = tmp_hwif->extra_ports; hwif->autodma = tmp_hwif->autodma; - hwif->udma_four = tmp_hwif->udma_four; hwif->hwif_data = tmp_hwif->hwif_data; }
@@ -564,7 +565,7 @@ void ide_unregister(unsigned int index) {ide_drive_t *drive;ide_hwif_t *hwif, *g; -static ide_hwif_t tmp_hwif;/* protected by ide_cfg_sem */ +static ide_hwif_t tmp_hwif;/* protected by ide_cfg_mtx */ ide_hwgroup_t *hwgroup;int irq_count =0 , unit;
@@ -572,7 +573,7 @@ void ide_unregister(unsigned int index)BUG_ON (in_interrupt ());BUG_ON (irqs_disabled ()); -down (&ide_cfg_sem); +mutex_lock (&ide_cfg_mtx);spin_lock_irq (&ide_lock); hwif = &ide_hwifs[index];if (!hwif->present)
@@ -679,7 +680,7 @@ void ide_unregister(unsigned int index) abort:spin_unlock_irq (&ide_lock); -up (&ide_cfg_sem); +mutex_unlock (&ide_cfg_mtx); }EXPORT_SYMBOL (ide_unregister);
@@ -817,9 +818,9 @@ EXPORT_SYMBOL(ide_register_hw);* Locks for IDE setting functionality */ -DECLARE_MUTEX (ide_setting_sem); +DEFINE_MUTEX (ide_setting_mtx); -EXPORT_SYMBOL_GPL (ide_setting_sem); +EXPORT_SYMBOL_GPL (ide_setting_mtx);/** * ide_spin_wait_hwgroup - wait for group
@@ -1192,11 +1193,11 @@ int generic_ide_ioctl(ide_drive_t *drive, struct file *file, struct block_device } read_val: -down (&ide_setting_sem); +mutex_lock (&ide_setting_mtx);spin_lock_irqsave (&ide_lock, flags); err = *val;spin_unlock_irqrestore (&ide_lock, flags); -up (&ide_setting_sem); +mutex_unlock (&ide_setting_mtx);return err >=0 ?put_user (err, (long __user *)arg) : err; set_val:
@@ -1206,9 +1207,9 @@ set_val:if (!capable (CAP_SYS_ADMIN )) err = -EACCES ;else { -down (&ide_setting_sem); +mutex_lock (&ide_setting_mtx); err =setfunc (drive, arg); -up (&ide_setting_sem); +mutex_unlock (&ide_setting_mtx); } }return err;
@@ -1548,7 +1549,11 @@ static int __init ide_setup(char *s) goto bad_option;case -7 :/* ata66 */ #ifdef CONFIG_BLK_DEV_IDEPCI - hwif->udma_four =1 ; +/* +* Use ATA_CBL_PATA40_SHORT so drive side +* cable detection is also overriden. +*/ + hwif->cbl =ATA_CBL_PATA40_SHORT ; goto obsolete_option;#else goto bad_hwif;
drivers/ide/legacy/hd.c +1 -1
@@ -130,7 +130,7 @@ struct hd_i_struct {#ifdef HD_TYPE static struct hd_i_struct hd_info[] = {HD_TYPE }; -static int NR_HD = ((sizeof (hd_info))/(sizeof (struct hd_i_struct ))); +static int NR_HD =ARRAY_SIZE (hd_info);#else static struct hd_i_struct hd_info[MAX_HD ];static int NR_HD ;
drivers/ide/legacy/macide.c +0 -14
@@ -77,15 +77,6 @@ int macide_ack_intr(ide_hwif_t* hwif)return 0 ; } -#ifdef CONFIG_BLK_DEV_MAC_MEDIABAY -static void macide_mediabay_interrupt (int irq,void *dev_id) -{ -int state = baboon->mb_status &0x04 ; - -printk (KERN_INFO "macide: media bay %s detected\n" , state?"removal" :"insertion" ); -} -#endif -/* * Probe for a Macintosh IDE interface */
@@ -128,11 +119,6 @@ void macide_init(void)ide_drive_t *drive = &ide_hwifs[index].drives[0 ]; drive->capacity64 = drive->cyl*drive->head*drive->sect; -#ifdef CONFIG_BLK_DEV_MAC_MEDIABAY -request_irq (IRQ_BABOON_2 , macide_mediabay_interrupt, -IRQ_FLG_FAST ,"mediabay" , - macide_mediabay_interrupt); -#endif }break ;
drivers/ide/mips/au1xxx-ide.c +9 -15
@@ -381,9 +381,7 @@ static int auide_dma_setup(ide_drive_t *drive)static int auide_dma_check (ide_drive_t *drive) { -u8 speed; - -#ifdef CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA +u8 speed =ide_max_dma_mode (drive);if ( dbdma_init_done ==0 ){ auide_hwif.white_list = ide_in_drive_list(drive->id,
@@ -394,7 +392,6 @@ static int auide_dma_check(ide_drive_t *drive)auide_ddma_init (&auide_hwif); dbdma_init_done =1 ; } -#endif /* Is the drive in our DMA black list? */
@@ -409,8 +406,6 @@ static int auide_dma_check(ide_drive_t *drive)else drive->using_dma =1 ; - speed =ide_find_best_mode (drive,XFER_PIO |XFER_MWDMA ); -if (drive->autodma && (speed &XFER_MODE ) !=XFER_PIO )return 0 ;
@@ -456,10 +451,9 @@ static void auide_dma_off_quietly(ide_drive_t *drive) drive->using_dma =0 ; } -static int auide_dma_lostirq (ide_drive_t *drive) +static void auide_dma_lost_irq (ide_drive_t *drive) {printk (KERN_ERR "%s: IRQ lost\n" , drive->name); -return 0 ; }static void auide_ddma_tx_callback (int irq,void *param)
@@ -489,16 +483,16 @@ static void auide_init_dbdma_dev(dbdev_tab_t *dev, u32 dev_id, u32 tsize, u32 de#if defined(CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA ) -static int auide_dma_timeout (ide_drive_t *drive) +static void auide_dma_timeout (ide_drive_t *drive) { -// printk("%s\n", __FUNCTION__); +ide_hwif_t *hwif =HWIF (drive);printk (KERN_ERR "%s: DMA timeout occurred: " , drive->name); -if (HWIF (drive)->ide_dma_test_irq (drive)) -return 0 ; +if (hwif->ide_dma_test_irq (drive)) +return ; -return HWIF (drive)->ide_dma_end (drive); + hwif->ide_dma_end (drive); }
@@ -721,7 +715,7 @@ static int au_ide_probe(struct device *dev)#ifdef CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA hwif->dma_off_quietly = &auide_dma_off_quietly; - hwif->ide_dma_timeout = &auide_dma_timeout; + hwif->dma_timeout = &auide_dma_timeout; hwif->ide_dma_check = &auide_dma_check; hwif->dma_exec_cmd = &auide_dma_exec_cmd;
@@ -731,7 +725,7 @@ static int au_ide_probe(struct device *dev) hwif->ide_dma_test_irq = &auide_dma_test_irq; hwif->dma_host_off = &auide_dma_host_off; hwif->dma_host_on = &auide_dma_host_on; - hwif->ide_dma_lostirq = &auide_dma_lostirq; + hwif->dma_lost_irq = &auide_dma_lost_irq; hwif->ide_dma_on = &auide_dma_on; hwif->autodma =1 ;
drivers/ide/pci/aec62xx.c +38 -81
222 lines not on this page · raw message
drivers/ide/pci/alim15x3.c +52 -26
127 lines not on this page · raw message
drivers/ide/pci/amd74xx.c +61 -66
220 lines not on this page · raw message
drivers/ide/pci/atiixp.c +3 -2
@@ -264,10 +264,11 @@ static void __devinit init_hwif_atiixp(ide_hwif_t *hwif) hwif->swdma_mask =0x04 ;pci_read_config_byte (pdev,ATIIXP_IDE_UDMA_MODE + ch, &udma_mode); +if ((udma_mode &0x07 ) >=0x04 || (udma_mode &0x70 ) >=0x40 ) - hwif->udma_four =1 ; + hwif->cbl =ATA_CBL_PATA80 ;else - hwif->udma_four =0 ; + hwif->cbl =ATA_CBL_PATA40 ; hwif->dma_host_on = &atiixp_dma_host_on; hwif->dma_host_off = &atiixp_dma_host_off;
drivers/ide/pci/cmd64x.c +47 -83
206 lines not on this page · raw message
drivers/ide/pci/cs5535.c +3 -3
@@ -187,7 +187,8 @@ static u8 __devinit cs5535_cable_detect(struct pci_dev *dev)/* if a 80 wire cable was detected */ pci_read_config_byte (dev,CS5535_CABLE_DETECT , &bit); -return (bit &1 ); + +return (bit &1 ) ?ATA_CBL_PATA80 :ATA_CBL_PATA40 ; }/****
@@ -212,8 +213,7 @@ static void __devinit init_hwif_cs5535(ide_hwif_t *hwif) hwif->ultra_mask =0x1F ; hwif->mwdma_mask =0x07 ; - - hwif->udma_four =cs5535_cable_detect (hwif->pci_dev); + hwif->cbl =cs5535_cable_detect (hwif->pci_dev);if (!noautodma) hwif->autodma =1 ;
drivers/ide/pci/hpt366.c +90 -80
377 lines not on this page · raw message
drivers/ide/pci/it8213.c +4 -4
@@ -231,7 +231,7 @@ static int it8213_config_drive_for_dma (ide_drive_t *drive)static void __devinit init_hwif_it8213 (ide_hwif_t *hwif) { -u8 reg42h =0 , ata66 =0 ; +u8 reg42h =0 ; hwif->speedproc = &it8213_tune_chipset; hwif->tuneproc = &it8213_tuneproc;
@@ -250,11 +250,11 @@ static void __devinit init_hwif_it8213(ide_hwif_t *hwif) hwif->swdma_mask =0x04 ;pci_read_config_byte (hwif->pci_dev,0x42 , ®42h); - ata66 = (reg42h &0x02 ) ?0 :1 ; hwif->ide_dma_check = &it8213_config_drive_for_dma; -if (!(hwif->udma_four)) - hwif->udma_four = ata66; + +if (hwif->cbl !=ATA_CBL_PATA40_SHORT ) + hwif->cbl = (reg42h &0x02 ) ?ATA_CBL_PATA40 :ATA_CBL_PATA80 ;/* * The BIOS often doesn't set up DMA on this controller
drivers/ide/pci/it821x.c +5 -4
@@ -491,10 +491,10 @@ static int it821x_config_drive_for_dma (ide_drive_t *drive)* the needed logic onboard. */ -static unsigned int __devinit ata66_it821x (ide_hwif_t *hwif) +static u8 __devinit ata66_it821x (ide_hwif_t *hwif) {/* The reference driver also only does disk side */ -return 1 ; +return ATA_CBL_PATA80 ; }/**
@@ -662,8 +662,9 @@ static void __devinit init_hwif_it821x(ide_hwif_t *hwif) hwif->mwdma_mask =0x07 ; hwif->ide_dma_check = &it821x_config_drive_for_dma; -if (!(hwif->udma_four)) - hwif->udma_four =ata66_it821x (hwif); + +if (hwif->cbl !=ATA_CBL_PATA40_SHORT ) + hwif->cbl =ata66_it821x (hwif);/* * The BIOS often doesn't set up DMA on this controller
drivers/ide/pci/jmicron.c +11 -9
@@ -25,10 +25,10 @@ typedef enum {* ata66_jmicron - Cable check * @hwif: IDE port * -* Return 1 if the cable is 80pin +* Returns the cable type. */ -static int __devinit ata66_jmicron (ide_hwif_t *hwif) +static u8 __devinit ata66_jmicron (ide_hwif_t *hwif) {struct pci_dev *pdev = hwif->pci_dev;
@@ -70,16 +70,17 @@ static int __devinit ata66_jmicron(ide_hwif_t *hwif) {case PORT_PATA0 :if (control & (1 <<3 ))/* 40/80 pin primary */ -return 0 ; -return 1 ; +return ATA_CBL_PATA40 ; +return ATA_CBL_PATA80 ;case PORT_PATA1 :if (control5 & (1 <<19 ))/* 40/80 pin secondary */ -return 0 ; -return 1 ; +return ATA_CBL_PATA40 ; +return ATA_CBL_PATA80 ;case PORT_SATA :break ; } -return 1 ;/* Avoid bogus "control reaches end of non-void function" */ +/* Avoid bogus "control reaches end of non-void function" */ +return ATA_CBL_PATA80 ; }static void jmicron_tuneproc (ide_drive_t *drive,byte mode_wanted)
@@ -159,8 +160,9 @@ static void __devinit init_hwif_jmicron(ide_hwif_t *hwif) hwif->mwdma_mask =0x07 ; hwif->ide_dma_check = &jmicron_config_drive_for_dma; -if (!(hwif->udma_four)) - hwif->udma_four =ata66_jmicron (hwif); + +if (hwif->cbl !=ATA_CBL_PATA40_SHORT ) + hwif->cbl =ata66_jmicron (hwif); hwif->autodma =1 ; hwif->drives[0 ].autodma = hwif->autodma;
drivers/ide/pci/pdc202xx_new.c +6 -3
@@ -225,7 +225,10 @@ static void pdcnew_tune_drive(ide_drive_t *drive, u8 pio)static u8 pdcnew_cable_detect (ide_hwif_t *hwif) { -return get_indexed_reg (hwif,0x0b ) &0x04 ; +if (get_indexed_reg (hwif,0x0b ) &0x04 ) +return ATA_CBL_PATA40 ; +else +return ATA_CBL_PATA80 ; }static int pdcnew_config_drive_xfer_rate (ide_drive_t *drive)
@@ -509,8 +512,8 @@ static void __devinit init_hwif_pdc202new(ide_hwif_t *hwif) hwif->ide_dma_check = &pdcnew_config_drive_xfer_rate; -if (!hwif->udma_four) - hwif->udma_four =pdcnew_cable_detect (hwif) ?0 :1 ; +if (hwif->cbl !=ATA_CBL_PATA40_SHORT ) + hwif->cbl =pdcnew_cable_detect (hwif);if (!noautodma) hwif->autodma =1 ;
drivers/ide/pci/pdc202xx_old.c +22 -13
@@ -152,8 +152,10 @@ static void pdc202xx_tune_drive(ide_drive_t *drive, u8 pio)static u8 pdc202xx_old_cable_detect (ide_hwif_t *hwif) {u16 CIS =0 , mask = (hwif->channel) ? (1 <<11 ) : (1 <<10 ); +pci_read_config_word (hwif->pci_dev,0x50 , &CIS ); -return (CIS & mask) ?1 :0 ; + +return (CIS & mask) ?ATA_CBL_PATA40 :ATA_CBL_PATA80 ; }/*
@@ -267,18 +269,24 @@ somebody_else:return (dma_stat &4 ) ==4 ;/* return 1 if INTR asserted */ } -static int pdc202xx_ide_dma_lostirq (ide_drive_t *drive) +static void pdc202xx_dma_lost_irq (ide_drive_t *drive) { -if (HWIF (drive)->resetproc !=NULL ) -HWIF (drive)->resetproc (drive); -return __ide_dma_lostirq (drive); +ide_hwif_t *hwif =HWIF (drive); + +if (hwif->resetproc !=NULL ) + hwif->resetproc (drive); + +ide_dma_lost_irq (drive); } -static int pdc202xx_ide_dma_timeout (ide_drive_t *drive) +static void pdc202xx_dma_timeout (ide_drive_t *drive) { -if (HWIF (drive)->resetproc !=NULL ) -HWIF (drive)->resetproc (drive); -return __ide_dma_timeout (drive); +ide_hwif_t *hwif =HWIF (drive); + +if (hwif->resetproc !=NULL ) + hwif->resetproc (drive); + +ide_dma_timeout (drive); }static void pdc202xx_reset_host (ide_hwif_t *hwif)
@@ -347,12 +355,13 @@ static void __devinit init_hwif_pdc202xx(ide_hwif_t *hwif) hwif->err_stops_fifo =1 ; hwif->ide_dma_check = &pdc202xx_config_drive_xfer_rate; - hwif->ide_dma_lostirq = &pdc202xx_ide_dma_lostirq; - hwif->ide_dma_timeout = &pdc202xx_ide_dma_timeout; + hwif->dma_lost_irq = &pdc202xx_dma_lost_irq; + hwif->dma_timeout = &pdc202xx_dma_timeout;if (hwif->pci_dev->device !=PCI_DEVICE_ID_PROMISE_20246 ) { -if (!(hwif->udma_four)) - hwif->udma_four = (pdc202xx_old_cable_detect (hwif)) ?0 :1 ; +if (hwif->cbl !=ATA_CBL_PATA40_SHORT ) + hwif->cbl =pdc202xx_old_cable_detect (hwif); + hwif->dma_start = &pdc202xx_old_ide_dma_start; hwif->ide_dma_end = &pdc202xx_old_ide_dma_end; }
drivers/ide/pci/piix.c +38 -7
65 lines not on this page · raw message
drivers/ide/pci/scc_pata.c +1 -1
@@ -716,7 +716,7 @@ static void __devinit init_hwif_scc(ide_hwif_t *hwif) hwif->atapi_dma =1 ;/* we support 80c cable only. */ - hwif->udma_four =1 ; + hwif->cbl =ATA_CBL_PATA80 ; hwif->autodma =0 ;if (!noautodma)
drivers/ide/pci/serverworks.c +15 -88
163 lines not on this page · raw message
drivers/ide/pci/sgiioc4.c +10 -10
@@ -316,14 +316,6 @@ static void sgiioc4_dma_host_off(ide_drive_t * drive)sgiioc4_clearirq (drive); } -static int -sgiioc4_ide_dma_lostirq (ide_drive_t * drive) -{ -HWIF (drive)->resetproc (drive); - -return __ide_dma_lostirq (drive); -} -static void sgiioc4_resetproc (ide_drive_t * drive) {
@@ -331,6 +323,14 @@ sgiioc4_resetproc(ide_drive_t * drive)sgiioc4_clearirq (drive); } +static void +sgiioc4_dma_lost_irq (ide_drive_t * drive) +{ +sgiioc4_resetproc (drive); + +ide_dma_lost_irq (drive); +} +static u8 sgiioc4_INB (unsigned long port) {
@@ -607,8 +607,8 @@ ide_init_sgiioc4(ide_hwif_t * hwif) hwif->ide_dma_test_irq = &sgiioc4_ide_dma_test_irq; hwif->dma_host_on = &sgiioc4_dma_host_on; hwif->dma_host_off = &sgiioc4_dma_host_off; - hwif->ide_dma_lostirq = &sgiioc4_ide_dma_lostirq; - hwif->ide_dma_timeout = &__ide_dma_timeout; + hwif->dma_lost_irq = &sgiioc4_dma_lost_irq; + hwif->dma_timeout = &ide_dma_timeout; hwif->INB = &sgiioc4_INB; }
drivers/ide/pci/siimage.c +10 -8
@@ -933,16 +933,17 @@ static void __devinit init_iops_siimage(ide_hwif_t *hwif)* interface. */ -static unsigned int __devinit ata66_siimage (ide_hwif_t *hwif) +static u8 __devinit ata66_siimage (ide_hwif_t *hwif) {unsigned long addr =siimage_selreg (hwif,0 ); -if (pci_get_drvdata (hwif->pci_dev) ==NULL ) { -u8 ata66 =0 ; +u8 ata66 =0 ; + +if (pci_get_drvdata (hwif->pci_dev) ==NULL )pci_read_config_byte (hwif->pci_dev, addr, &ata66); -return (ata66 &0x01 ) ?1 :0 ; - } +else + ata66 = hwif->INB (addr); -return (hwif->INB (addr) &0x01 ) ?1 :0 ; +return (ata66 &0x01 ) ?ATA_CBL_PATA80 :ATA_CBL_PATA40 ; }/**
@@ -988,8 +989,9 @@ static void __devinit init_hwif_siimage(ide_hwif_t *hwif) hwif->atapi_dma =1 ; hwif->ide_dma_check = &siimage_config_drive_for_dma; -if (!(hwif->udma_four)) - hwif->udma_four =ata66_siimage (hwif); + +if (hwif->cbl !=ATA_CBL_PATA40_SHORT ) + hwif->cbl =ata66_siimage (hwif);if (hwif->mmio) { hwif->ide_dma_test_irq = &siimage_mmio_ide_dma_test_irq;
drivers/ide/pci/sis5513.c +29 -5
@@ -1,5 +1,5 @@/* -* linux/drivers/ide/pci/sis5513.c Version 0.20 Mar 4, 2007 +* linux/drivers/ide/pci/sis5513.c Version 0.25 Jun 10, 2007 * * Copyright (C) 1999-2000 Andre Hedrick <[email protected]> * Copyright (C) 2002 Lionel Bouton <[email protected]>, Maintainer
@@ -796,10 +796,33 @@ static unsigned int __devinit init_chipset_sis5513 (struct pci_dev *dev, const creturn 0 ; } -static unsigned int __devinit ata66_sis5513 (ide_hwif_t *hwif) +struct sis_laptop { +u16 device; +u16 subvendor; +u16 subdevice; +}; + +static const struct sis_laptop sis_laptop[] = { +/* devid, subvendor, subdev */ + {0x5513 ,0x1043 ,0x1107 },/* ASUS A6K */ +/* end marker */ + {0 , } +}; + +static u8 __devinit ata66_sis5513 (ide_hwif_t *hwif) { +struct pci_dev *pdev = hwif->pci_dev; +const struct sis_laptop *lap = &sis_laptop[0 ];u8 ata66 =0 ; +while (lap->device) { +if (lap->device == pdev->device && + lap->subvendor == pdev->subsystem_vendor && + lap->subdevice == pdev->subsystem_device) +return ATA_CBL_PATA40_SHORT ; + lap++; + } +if (chipset_family >=ATA_133 ) {u16 regw =0 ;u16 reg_addr = hwif->channel ?0x52 :0x50 ;
@@ -811,7 +834,8 @@ static unsigned int __devinit ata66_sis5513 (ide_hwif_t *hwif)pci_read_config_byte (hwif->pci_dev,0x48 , ®48h); ata66 = (reg48h & mask) ?0 :1 ; } -return ata66; + +return ata66 ?ATA_CBL_PATA80 :ATA_CBL_PATA40 ; }static void __devinit init_hwif_sis5513 (ide_hwif_t *hwif)
@@ -841,8 +865,8 @@ static void __devinit init_hwif_sis5513 (ide_hwif_t *hwif)if (!chipset_family)return ; -if (!(hwif->udma_four)) - hwif->udma_four =ata66_sis5513 (hwif); +if (hwif->cbl !=ATA_CBL_PATA40_SHORT ) + hwif->cbl =ata66_sis5513 (hwif);if (chipset_family >ATA_16 ) { hwif->ide_dma_check = &sis5513_config_xfer_rate;
drivers/ide/pci/sl82c105.c +7 -13
@@ -195,7 +195,7 @@ static inline void sl82c105_reset_host(struct pci_dev *dev)* This function is called when the IDE timer expires, the drive * indicates that it is READY, and we were waiting for DMA to complete. */ -static int sl82c105_ide_dma_lostirq (ide_drive_t *drive) +static void sl82c105_dma_lost_irq (ide_drive_t *drive) {ide_hwif_t *hwif =HWIF (drive);struct pci_dev *dev = hwif->pci_dev;
@@ -222,9 +222,6 @@ static int sl82c105_ide_dma_lostirq(ide_drive_t *drive) }sl82c105_reset_host (dev); - -/* __ide_dma_lostirq would return 1, so we do as well */ -return 1 ; }/*
@@ -244,15 +241,12 @@ static void sl82c105_dma_start(ide_drive_t *drive)ide_dma_start (drive); } -static int sl82c105_ide_dma_timeout (ide_drive_t *drive) +static void sl82c105_dma_timeout (ide_drive_t *drive) { -ide_hwif_t *hwif =HWIF (drive); -struct pci_dev *dev = hwif->pci_dev; +DBG (("sl82c105_dma_timeout(drive:%s)\n" , drive->name)); -DBG (("sl82c105_ide_dma_timeout(drive:%s)\n" , drive->name)); - -sl82c105_reset_host (dev); -return __ide_dma_timeout (drive); +sl82c105_reset_host (HWIF (drive)->pci_dev); +ide_dma_timeout (drive); }static int sl82c105_ide_dma_on (ide_drive_t *drive)
@@ -441,9 +435,9 @@ static void __devinit init_hwif_sl82c105(ide_hwif_t *hwif) hwif->ide_dma_check = &sl82c105_ide_dma_check; hwif->ide_dma_on = &sl82c105_ide_dma_on; hwif->dma_off_quietly = &sl82c105_dma_off_quietly; - hwif->ide_dma_lostirq = &sl82c105_ide_dma_lostirq; + hwif->dma_lost_irq = &sl82c105_dma_lost_irq; hwif->dma_start = &sl82c105_dma_start; - hwif->ide_dma_timeout = &sl82c105_ide_dma_timeout; + hwif->dma_timeout = &sl82c105_dma_timeout;if (!noautodma) hwif->autodma =1 ;
drivers/ide/pci/slc90e66.c +2 -3
@@ -199,10 +199,9 @@ static void __devinit init_hwif_slc90e66 (ide_hwif_t *hwif) hwif->mwdma_mask =0x06 ; hwif->swdma_mask =0x04 ; -if (!hwif->udma_four) { +if (hwif->cbl !=ATA_CBL_PATA40_SHORT )/* bit[0(1)]: 0:80, 1:40 */ - hwif->udma_four = (reg47 & mask) ?0 :1 ; - } + hwif->cbl = (reg47 & mask) ?ATA_CBL_PATA40 :ATA_CBL_PATA80 ; hwif->ide_dma_check = &slc90e66_config_drive_xfer_rate;
drivers/ide/pci/tc86c001.c +2 -2
@@ -220,13 +220,13 @@ static void __devinit init_hwif_tc86c001(ide_hwif_t *hwif) hwif->ide_dma_check = &tc86c001_config_drive_xfer_rate; hwif->dma_start = &tc86c001_dma_start; -if (!hwif->udma_four) { +if (hwif->cbl !=ATA_CBL_PATA40_SHORT ) {/* * System Control 1 Register bit 13 (PDIAGN): * 0=80-pin cable, 1=40-pin cable */ scr1 = hwif->INW (sc_base +0x00 ); - hwif->udma_four = (scr1 &0x2000 ) ?0 :1 ; + hwif->cbl = (scr1 &0x2000 ) ?ATA_CBL_PATA40 :ATA_CBL_PATA80 ; }if (!noautodma)
drivers/ide/pci/via82cxxx.c +102 -73
287 lines not on this page · raw message
drivers/ide/ppc/pmac.c +12 -30
83 lines not on this page · raw message
include/asm-mips/mach-au1x00/au1xxx_ide.h +14 -14
@@ -88,26 +88,26 @@ static const struct drive_list_entry dma_white_list [] = {/* * Hitachi */ - { "HITACHI_DK14FA-20" , "ALL" }, - { "HTS726060M9AT00" , "ALL" }, + { "HITACHI_DK14FA-20" , NULL }, + { "HTS726060M9AT00" , NULL },/* * Maxtor */ - { "Maxtor 6E040L0" , "ALL" }, - { "Maxtor 6Y080P0" , "ALL" }, - { "Maxtor 6Y160P0" , "ALL" }, + { "Maxtor 6E040L0" , NULL }, + { "Maxtor 6Y080P0" , NULL }, + { "Maxtor 6Y160P0" , NULL },/* * Seagate */ - { "ST3120026A" , "ALL" }, - { "ST320014A" , "ALL" }, - { "ST94011A" , "ALL" }, - { "ST340016A" , "ALL" }, + { "ST3120026A" , NULL }, + { "ST320014A" , NULL }, + { "ST94011A" , NULL }, + { "ST340016A" , NULL },/* * Western Digital */ - { "WDC WD400UE-00HCT0" , "ALL" }, - { "WDC WD400JB-00JJC0" , "ALL" }, + { "WDC WD400UE-00HCT0" , NULL }, + { "WDC WD400JB-00JJC0" , NULL }, { NULL , NULL } };
@@ -116,9 +116,9 @@ static const struct drive_list_entry dma_black_list [] = { /* * Western Digital */ - { "WDC WD100EB-00CGH0" , "ALL" }, - { "WDC WD200BB-00AUA1" , "ALL" }, - { "WDC AC24300L" , "ALL" }, + { "WDC WD100EB-00CGH0" , NULL }, + { "WDC WD200BB-00AUA1" , NULL }, + { "WDC AC24300L" , NULL }, { NULL , NULL } }; #endif
include/linux/ide.h +10 -8
@@ -25,6 +25,7 @@#include <asm/system.h> #include <asm/io.h> #include <asm/semaphore.h> +#include <asm/mutex.h> /****************************************************************************** * IDE driver configuration options (play with these as desired):
@@ -685,6 +686,8 @@ typedef struct hwif_s {u8 mwdma_mask;u8 swdma_mask; +u8 cbl;/* cable type */ +hwif_chipset_t chipset;/* sub-module for tuning.. */ struct pci_dev *pci_dev;/* for pci chipsets */
@@ -735,8 +738,8 @@ typedef struct hwif_s {void (*ide_dma_clear_irq)(ide_drive_t *drive);void (*dma_host_on)(ide_drive_t *drive);void (*dma_host_off)(ide_drive_t *drive); -int (*ide_dma_lostirq)(ide_drive_t *drive); -int (*ide_dma_timeout)(ide_drive_t *drive); +void (*dma_lost_irq)(ide_drive_t *drive); +void (*dma_timeout)(ide_drive_t *drive);void (*OUTB )(u8 addr,unsigned long port);void (*OUTBSYNC )(ide_drive_t *drive,u8 addr,unsigned long port);
@@ -791,7 +794,6 @@ typedef struct hwif_s { unsigned sharing_irq: 1; /* 1 = sharing irq with another hwif */ unsigned reset : 1; /* reset after probe */ unsigned autodma : 1; /* auto-attempt using DMA at boot */ - unsigned udma_four : 1; /* 1=ATA-66 capable, 0=default */ unsigned no_lba48 : 1; /* 1 = cannot do LBA48 */ unsigned no_lba48_dma : 1; /* 1 = cannot do LBA48 DMA */ unsigned auto_poll : 1; /* supports nop auto-poll */
@@ -863,7 +865,7 @@ typedef struct hwgroup_s {typedef struct ide_driver_s ide_driver_t ; -extern struct semaphore ide_setting_sem; +extern struct mutex ide_setting_mtx;int set_io_32bit (ide_drive_t *,int );int set_pio_mode (ide_drive_t *,int );
@@ -1304,8 +1306,8 @@ extern int __ide_dma_check(ide_drive_t *);extern int ide_dma_setup (ide_drive_t *);
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.