IDE updates (part 5)
Subsystems (3)
PATCH 1/1 IDE updates (part 5)
Hi,
This is the final part, contains:
* important bugfix from Adrian Bunk for sis5513 host driver (for the bug introduced in one of the previous updates)
* more small fixups/cleanups
Please pull from:
master.kernel.org:/pub/scm/linux/kernel/git/bart/ide-2.6.git/
to receive the following updates:
drivers/ide/Kconfig | 3 + drivers/ide/arm/bast-ide.c | 2 +- drivers/ide/arm/icside.c | 62 +++-------- drivers/ide/arm/ide_arm.c | 2 +- drivers/ide/arm/rapide.c | 37 ++----- drivers/ide/cris/ide-cris.c | 2 +- drivers/ide/h8300/ide-h8300.c | 3 +- drivers/ide/ide-acpi.c | 2 +- drivers/ide/ide-disk.c | 24 +---- drivers/ide/ide-dma.c | 32 ++---- drivers/ide/ide-io.c | 59 ++++------ drivers/ide/ide-iops.c | 26 +---- drivers/ide/ide-pnp.c | 3 +- drivers/ide/ide-probe.c | 87 ++++++++------- drivers/ide/ide-proc.c | 2 - drivers/ide/ide-tape.c | 1 - drivers/ide/ide-taskfile.c | 37 ++----- drivers/ide/ide.c | 73 ++++++++----- drivers/ide/legacy/ali14xx.c | 13 +-- drivers/ide/legacy/buddha.c | 4 +- drivers/ide/legacy/dtc2278.c | 16 ++-- drivers/ide/legacy/falconide.c | 2 +- drivers/ide/legacy/gayle.c | 2 +- drivers/ide/legacy/ht6560b.c | 33 +++--- drivers/ide/legacy/ide-cs.c | 2 +- drivers/ide/legacy/ide_platform.c | 43 +++----- drivers/ide/legacy/macide.c | 6 +- drivers/ide/legacy/q40ide.c | 5 +- drivers/ide/legacy/qd65xx.c | 64 ++++-------- drivers/ide/legacy/umc8672.c | 9 +- drivers/ide/mips/au1xxx-ide.c | 19 ++-- drivers/ide/mips/swarm.c | 14 +-- drivers/ide/pci/aec62xx.c | 25 +---- drivers/ide/pci/alim15x3.c | 109 +++++++++---------- drivers/ide/pci/amd74xx.c | 29 ++--- drivers/ide/pci/atiixp.c | 3 +- drivers/ide/pci/cmd640.c | 42 ++++---- drivers/ide/pci/cmd64x.c | 6 +- drivers/ide/pci/cs5520.c | 26 +---- drivers/ide/pci/cs5530.c | 10 +-- drivers/ide/pci/cs5535.c | 2 +- drivers/ide/pci/cy82c693.c | 4 +- drivers/ide/pci/delkin_cb.c | 2 +- drivers/ide/pci/generic.c | 31 ++---- drivers/ide/pci/hpt34x.c | 4 +- drivers/ide/pci/hpt366.c | 4 +- drivers/ide/pci/it8213.c | 2 +- drivers/ide/pci/it821x.c | 2 +- drivers/ide/pci/jmicron.c | 2 +- drivers/ide/pci/ns87415.c | 2 +- drivers/ide/pci/opti621.c | 10 +- drivers/ide/pci/pdc202xx_new.c | 4 +- drivers/ide/pci/pdc202xx_old.c | 22 ++--- drivers/ide/pci/piix.c | 6 +- drivers/ide/pci/rz1000.c | 7 +- drivers/ide/pci/sc1200.c | 2 +- drivers/ide/pci/scc_pata.c | 11 +- drivers/ide/pci/serverworks.c | 11 +-- drivers/ide/pci/sgiioc4.c | 16 ++-- drivers/ide/pci/siimage.c | 92 ++++++++--------- drivers/ide/pci/sis5513.c | 4 +- drivers/ide/pci/sl82c105.c | 14 +-- drivers/ide/pci/slc90e66.c | 10 +- drivers/ide/pci/tc86c001.c | 2 +- drivers/ide/pci/triflex.c | 2 +- drivers/ide/pci/trm290.c | 4 +- drivers/ide/pci/via82cxxx.c | 81 ++++++-------- drivers/ide/ppc/mpc8xx.c | 4 +- drivers/ide/ppc/pmac.c | 12 ++- drivers/ide/setup-pci.c | 202 +++++++++++++++-------------------- drivers/macintosh/mediabay.c | 2 +- include/asm-alpha/ide.h | 1 - include/asm-arm/ide.h | 1 - include/asm-blackfin/ide.h | 1 - include/asm-cris/arch-v32/ide.h | 2 +- include/asm-ia64/ide.h | 1 - include/asm-m32r/ide.h | 1 - include/asm-m68k/ide.h | 2 +- include/asm-mips/mach-generic/ide.h | 1 - include/asm-parisc/ide.h | 1 - include/asm-powerpc/ide.h | 3 +- include/asm-sh64/ide.h | 1 - include/asm-sparc/ide.h | 1 - include/asm-sparc64/ide.h | 1 - include/asm-x86/ide.h | 1 - include/linux/ide.h | 109 ++++++------------- 86 files changed, 669 insertions(+), 970 deletions(-)
Adrian Bunk (1):
ide/pci/sis5513.c: add missing "else"
Alan Cox (1):
dtc2278: note on docs
Bartlomiej Zolnierkiewicz (47):
cmd64x: always set hwif->chipset for CMD646
ide: fix disabled ports reporting for PCI controllers
rz1000: set serialized flag only if mate interface exists
serverworks: remove dead code from svwks_set_dma_mode()
ide: add hwif_register_devices() helper
ide: remove unused ->next field from ide_pci_device_t
ide: add ->chipset field to ide_pci_device_t
ide: add IDE_HFLAG_FORCE_LEGACY_IRQS host flag
ide: add IDE_HFLAG_RQSIZE_256 host flag
ide: add IDE_HFLAG_{IO_32BIT,UNMASK_IRQS} host flags
alim15x3: fix CD_ROM DMA and PIO FIFO settings setup
alim15x3: use ->host_flags and ->udma_mask fields from ide_pci_device_t
aec62xx: remove aec62xx_dma_lost_irq()
siimage: separate PATA and SATA methods
ide: add ->fixup method to ide_hwif_t
ide: add ide_device_add()
ide: add ide_find_port() helper
ide: remove redundant comments from ide.h
ide: add CONFIG_IDE_ARCH_OBSOLETE_INIT
ide: fix ide_register_hw() to check hwif->io_ports[]
icside: use ec->dma directly
ide: add hwif->ack_intr hook
ide: remove write-only hwif->hw
au1xxx-ide: set ->autotune and ->no_io_32bit also for the slave device
dtc2278: set ->pio_mask also for the second port
via82cxxx: keep local ide_pci_device_t copy
ide: replace ide_pci_device_t by struct ide_port_info
ide: constify struct ide_port_info
ali14xx: fix deadlock on error handling
dtc2278: fix deadlock on error handling
qd65xx: fix deadlock on error handling
opti621: fix deadlock on error handling
slc90e66: fix deadlock on error handling
cmd640: fix deadlock on error handling
ht6560b: fix deadlock on error handling
ide: take ide_lock for prefetch disable/enable in do_special()
cs5530: remove needless ide_lock taking
ide: enhance ide_setup_pci_noise()
ide: use __ide_end_request() in ide_end_dequeued_request()
ide: remove dead code from ide_driveid_update()
ide: remove stale comments from ide-taskfile.c
ide: PCI BMDMA initialization fixes (take 2)
qd65xx: remove pointless qd_{read,write}_reg() (take 2)
ide: check ->dma_setup() return value in flagged_taskfile()
ide: check drive->using_dma in flagged_taskfile()
ide: fix ->data_phase in taskfile_load_raw()
ide-disk: add get_smart_data() helper
Robert P. J. Day (1):
ide: remove inclusion of non-existent io_trace.h
drivers/ide/Kconfig +3 -0
@@ -1056,6 +1056,9 @@ endif config BLK_DEV_IDEDMA def_bool BLK_DEV_IDEDMA_PCI || BLK_DEV_IDEDMA_PMAC || BLK_DEV_IDEDMA_ICS || BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA +config IDE_ARCH_OBSOLETE_INIT + def_bool ALPHA || (ARM && !ARCH_L7200) || BLACKFIN || X86 || IA64 || M32R || MIPS || PARISC || PPC || (SUPERH64 && BLK_DEV_IDEPCI) || SPARC + endif config BLK_DEV_HD_ONLY
drivers/ide/arm/bast-ide.c +1 -1
@@ -45,7 +45,7 @@ bastide_register(unsigned int base, unsigned int aux, int irq, hw.io_ports[IDE_CONTROL_OFFSET ] = aux + (6 *0x20 ); hw.irq = irq; -ide_register_hw (&hw,0 , hwif); +ide_register_hw (&hw,NULL ,0 , hwif);return 0 ; }
drivers/ide/arm/icside.c +18 -44
165 lines not on this page · raw message
drivers/ide/arm/ide_arm.c +1 -1
@@ -31,5 +31,5 @@ void __init ide_arm_init(void)memset (&hw,0 ,sizeof (hw));ide_std_init_ports (&hw,IDE_ARM_IO ,IDE_ARM_IO +0x206 ); hw.irq =IDE_ARM_IRQ ; -ide_register_hw (&hw,1 ,NULL ); +ide_register_hw (&hw,NULL ,1 ,NULL ); }
drivers/ide/arm/rapide.c +12 -25
@@ -13,42 +13,25 @@#include <asm/ecard.h> -/* -* Something like this really should be in generic code, but isn't. -*/ static ide_hwif_t *rapide_locate_hwif (void __iomem *base,void __iomem *ctrl,unsigned int sz,int irq) {unsigned long port = (unsigned long )base; -ide_hwif_t *hwif; -int index, i; - -for (index =0 ; index <MAX_HWIFS ; ++index) { - hwif = ide_hwifs + index; -if (hwif->io_ports[IDE_DATA_OFFSET ] == port) - goto found; - } - -for (index =0 ; index <MAX_HWIFS ; ++index) { - hwif = ide_hwifs + index; -if (hwif->io_ports[IDE_DATA_OFFSET ] ==0 ) - goto found; - } +ide_hwif_t *hwif =ide_find_port (port); +int i; -return NULL ; +if (hwif ==NULL ) + goto out; - found:for (i =IDE_DATA_OFFSET ; i <=IDE_STATUS_OFFSET ; i++) { - hwif->hw.io_ports[i] = port; hwif->io_ports[i] = port; port += sz; } - hwif->hw.io_ports[IDE_CONTROL_OFFSET ] = (unsigned long )ctrl; hwif->io_ports[IDE_CONTROL_OFFSET ] = (unsigned long )ctrl; - hwif->hw.irq = hwif->irq = irq; + hwif->irq = irq; hwif->mmio =1 ;default_hwif_mmiops (hwif); - +out:return hwif; }
@@ -58,6 +41,7 @@ rapide_probe(struct expansion_card *ec, const struct ecard_id *id)ide_hwif_t *hwif;void __iomem *base;int ret; +u8 idx[4 ] = {0xff ,0xff ,0xff ,0xff }; ret =ecard_request_resources (ec);if (ret)
@@ -74,8 +58,11 @@ rapide_probe(struct expansion_card *ec, const struct ecard_id *id) hwif->hwif_data = base; hwif->gendev.parent = &ec->dev; hwif->noprobe =0 ; -probe_hwif_init (hwif); -ide_proc_register_port (hwif); + + idx[0 ] = hwif->index; + +ide_device_add (idx); +ecard_set_drvdata (ec, hwif); goto out; }
drivers/ide/cris/ide-cris.c +1 -1
@@ -782,7 +782,7 @@ init_e100_ide (void) ide_offsets,0 ,0 , cris_ide_ack_intr, ide_default_irq(0)); -ide_register_hw (&hw,1 , &hwif); +ide_register_hw (&hw,NULL ,1 , &hwif); hwif->mmio =1 ; hwif->chipset = ide_etrax100; hwif->set_pio_mode = &cris_set_pio_mode;
drivers/ide/h8300/ide-h8300.c +1 -2
@@ -68,7 +68,6 @@ static inline void hw_setup(hw_regs_t *hw) hw->io_ports[i] =CONFIG_H8300_IDE_BASE +H8300_IDE_GAP *i; hw->io_ports[IDE_CONTROL_OFFSET ] =CONFIG_H8300_IDE_ALT ; hw->irq =EXT_IRQ0 +CONFIG_H8300_IDE_IRQ ; - hw->dma =NO_DMA ; hw->chipset = ide_generic; }
@@ -101,7 +100,7 @@ void __init h8300_ide_init(void)hw_setup (&hw);/* register if */ - idx =ide_register_hw (&hw,1 , &hwif); + idx =ide_register_hw (&hw,NULL ,1 , &hwif);if (idx ==-1 ) {printk (KERN_ERR "ide-h8300: IDE I/F register failed\n" );return ;
drivers/ide/ide-acpi.c +1 -1
@@ -350,7 +350,7 @@ static int taskfile_load_raw(ide_drive_t *drive,memset (&args,0 ,sizeof (ide_task_t)); args.command_type =IDE_DRIVE_TASK_NO_DATA ; - args.data_phase =TASKFILE_IN ; + args.data_phase =TASKFILE_NO_DATA ; args.handler = &task_no_data_intr;/* convert gtf to IDE Taskfile */
drivers/ide/ide-disk.c +4 -20
@@ -593,28 +593,12 @@ static int smart_enable(ide_drive_t *drive)return ide_raw_taskfile (drive, &args,NULL ); } -static int get_smart_values (ide_drive_t *drive,u8 *buf) +static int get_smart_data (ide_drive_t *drive,u8 *buf,u8 sub_cmd) {ide_task_t args;memset (&args,0 ,sizeof (ide_task_t)); - args.tfRegister[IDE_FEATURE_OFFSET ] =SMART_READ_VALUES ; - args.tfRegister[IDE_NSECTOR_OFFSET ] =0x01 ; - args.tfRegister[IDE_LCYL_OFFSET ] =SMART_LCYL_PASS ; - args.tfRegister[IDE_HCYL_OFFSET ] =SMART_HCYL_PASS ; - args.tfRegister[IDE_COMMAND_OFFSET ] =WIN_SMART ; - args.command_type =IDE_DRIVE_TASK_IN ; - args.data_phase =TASKFILE_IN ; - args.handler = &task_in_intr; - (void )smart_enable (drive); -return ide_raw_taskfile (drive, &args, buf); -} - -static int get_smart_thresholds (ide_drive_t *drive,u8 *buf) -{ -ide_task_t args; -memset (&args,0 ,sizeof (ide_task_t)); - args.tfRegister[IDE_FEATURE_OFFSET ] =SMART_READ_THRESHOLDS ; + args.tfRegister[IDE_FEATURE_OFFSET ] = sub_cmd; args.tfRegister[IDE_NSECTOR_OFFSET ] =0x01 ; args.tfRegister[IDE_LCYL_OFFSET ] =SMART_LCYL_PASS ; args.tfRegister[IDE_HCYL_OFFSET ] =SMART_HCYL_PASS ;
@@ -656,7 +640,7 @@ static int proc_idedisk_read_smart_thresholdside_drive_t *drive = (ide_drive_t *)data;int len =0 , i =0 ; -if (!get_smart_thresholds (drive, page)) { +if (get_smart_data (drive, page,SMART_READ_THRESHOLDS ) ==0 ) {unsigned short *val = (unsigned short *) page;char *out = ((char *)val) + (SECTOR_WORDS *4 ); page = out;
@@ -675,7 +659,7 @@ static int proc_idedisk_read_smart_valueside_drive_t *drive = (ide_drive_t *)data;int len =0 , i =0 ; -if (!get_smart_values (drive, page)) { +if (get_smart_data (drive, page,SMART_READ_VALUES ) ==0 ) {unsigned short *val = (unsigned short *) page;char *out = ((char *)val) + (SECTOR_WORDS *4 ); page = out;
drivers/ide/ide-dma.c +10 -22
@@ -901,10 +901,7 @@ void ide_dma_timeout (ide_drive_t *drive)EXPORT_SYMBOL (ide_dma_timeout); -/* -* Needed for allowing full modular support of ide-driver -*/ -static int ide_release_dma_engine (ide_hwif_t *hwif) +static void ide_release_dma_engine (ide_hwif_t *hwif) {if (hwif->dmatable_cpu) { pci_free_consistent(hwif->pci_dev,
@@ -913,7 +910,6 @@ static int ide_release_dma_engine(ide_hwif_t *hwif) hwif->dmatable_dma); hwif->dmatable_cpu =NULL ; } -return 1 ; }static int ide_release_iomio_dma (ide_hwif_t *hwif)
@@ -956,12 +952,6 @@ static int ide_mapped_mmio_dma(ide_hwif_t *hwif, unsigned long base, unsigned in {printk (KERN_INFO " %s: MMIO-DMA " , hwif->name); - hwif->dma_base = base; - -if (hwif->mate) - hwif->dma_master = (hwif->channel) ? hwif->mate->dma_base : base; -else - hwif->dma_master = base;return 0 ; }
@@ -975,8 +965,6 @@ static int ide_iomio_dma(ide_hwif_t *hwif, unsigned long base, unsigned int portreturn 1 ; } - hwif->dma_base = base; -if (hwif->cds->extra) { hwif->extra_base = base + (hwif->channel ?8 :16 );
@@ -991,10 +979,6 @@ static int ide_iomio_dma(ide_hwif_t *hwif, unsigned long base, unsigned int port } } -if (hwif->mate) - hwif->dma_master = (hwif->channel) ? hwif->mate->dma_base:base; -else - hwif->dma_master = base;return 0 ; }
@@ -1006,12 +990,9 @@ static int ide_dma_iobase(ide_hwif_t *hwif, unsigned long base, unsigned int porreturn ide_iomio_dma (hwif, base, ports); } -/* -* This can be called for a dynamically installed interface. Don't __init it -*/ -void ide_setup_dma (ide_hwif_t *hwif,unsigned long dma_base,unsigned int num_ports) +void ide_setup_dma (ide_hwif_t *hwif,unsigned long base,unsigned num_ports) { -if (ide_dma_iobase (hwif, dma_base, num_ports)) +if (ide_dma_iobase (hwif, base, num_ports))return ;if (ide_allocate_dma_engine (hwif)) {
@@ -1019,6 +1000,13 @@ void ide_setup_dma (ide_hwif_t *hwif, unsigned long dma_base, unsigned int num_preturn ; } + hwif->dma_base = base; + +if (hwif->mate) + hwif->dma_master = hwif->channel ? hwif->mate->dma_base : base; +else + hwif->dma_master = base; +if (!(hwif->dma_command)) hwif->dma_command = hwif->dma_base;if (!(hwif->dma_vendor1))
drivers/ide/ide-io.c +24 -35
93 lines not on this page · raw message
drivers/ide/ide-iops.c +3 -23
@@ -693,35 +693,16 @@ static u8 ide_auto_reduce_xfer (ide_drive_t *drive) }#endif /* CONFIG_BLK_DEV_IDEDMA */ -/* -* Update the -*/ -int ide_driveid_update (ide_drive_t *drive) +int ide_driveid_update (ide_drive_t *drive) { -ide_hwif_t *hwif =HWIF (drive); +ide_hwif_t *hwif = drive->hwif;struct hd_driveid *id; -#if 0 - id =kmalloc (SECTOR_WORDS *4 ,GFP_ATOMIC ); -if (!id) -return 0 ; - -taskfile_lib_get_identify (drive, (char *)&id); +unsigned long timeout, flags; -ide_fix_driveid (id); -if (id) { - drive->id->dma_ultra = id->dma_ultra; - drive->id->dma_mword = id->dma_mword; - drive->id->dma_1word = id->dma_1word; -/* anything more ? */ -kfree (id); - } -return 1 ; -#else /* * Re-read drive->id for possible DMA mode * change (copied from ide-probe.c) */ -unsigned long timeout, flags;SELECT_MASK (drive,1 );if (IDE_CONTROL_REG )
@@ -763,7 +744,6 @@ int ide_driveid_update (ide_drive_t *drive) }return 1 ; -#endif }int ide_config_drive_speed (ide_drive_t *drive,u8 speed)
drivers/ide/ide-pnp.c +1 -2
@@ -40,9 +40,8 @@ static int idepnp_probe(struct pnp_dev * dev, const struct pnp_device_id *dev_idide_std_init_ports (&hw,pnp_port_start (dev,0 ),pnp_port_start (dev,1 )); hw.irq =pnp_irq (dev,0 ); - hw.dma =NO_DMA ; - index =ide_register_hw (&hw,1 , &hwif); + index =ide_register_hw (&hw,NULL ,1 , &hwif);if (index !=-1 ) {printk (KERN_INFO "ide%d: generic PnP IDE interface\n" , index);
drivers/ide/ide-probe.c +47 -40
142 lines not on this page · raw message
drivers/ide/ide-proc.c +0 -2
@@ -804,8 +804,6 @@ void ide_proc_register_port(ide_hwif_t *hwif)create_proc_ide_drives (hwif); } -EXPORT_SYMBOL_GPL (ide_proc_register_port); -#ifdef CONFIG_BLK_DEV_IDEPCI void ide_pci_create_host_proc (const char *name,get_info_t *get_info) {
drivers/ide/ide-tape.c +0 -1
@@ -621,7 +621,6 @@ typedef struct os_dat_s {*/ #define USE_IOTRACE 0#if USE_IOTRACE -#include <linux/io_trace.h> #define IO_IDETAPE_FIFO 500#endif
drivers/ide/ide-taskfile.c +10 -27
@@ -8,23 +8,6 @@* Copyright (C) 2003-2004 Bartlomiej Zolnierkiewicz * * The big the bad and the ugly. -* -* Problems to be fixed because of BH interface or the lack therefore. -* -* Fill me in stupid !!! -* -* HOST: -* General refers to the Controller and Driver "pair". -* DATA HANDLER: -* Under the context of Linux it generally refers to an interrupt handler. -* However, it correctly describes the 'HOST' -* DATA BLOCK: -* The amount of data needed to be transfered as predefined in the -* setup of the device. -* STORAGE ATOMIC: -* The 'DATA BLOCK' associated to the 'DATA HANDLER', and can be as -* small as a single sector or as large as the entire command block -* request. */ #include <linux/module.h>
@@ -695,9 +678,6 @@ int ide_wait_cmd (ide_drive_t *drive, u8 cmd, u8 nsect, u8 feature, u8 sectors,return ide_do_drive_cmd (drive, &rq, ide_wait); } -/* -* FIXME : this needs to map into at taskfile. <[email protected]> -*/ int ide_cmd_ioctl (ide_drive_t *drive,unsigned int cmd,unsigned long arg) {int err =0 ;
@@ -761,9 +741,6 @@ static int ide_wait_cmd_task(ide_drive_t *drive, u8 *buf)return ide_do_drive_cmd (drive, &rq, ide_wait); } -/* -* FIXME : this needs to map into at taskfile. <[email protected]> -*/ int ide_task_ioctl (ide_drive_t *drive,unsigned int cmd,unsigned long arg) {void __user *p = (void __user *)arg;
@@ -860,9 +837,14 @@ ide_startstop_t flagged_taskfile (ide_drive_t *drive, ide_task_t *task)case TASKFILE_OUT_DMA :case TASKFILE_IN_DMAQ :case TASKFILE_IN_DMA : - hwif->dma_setup (drive); - hwif->dma_exec_cmd (drive, taskfile->command); - hwif->dma_start (drive); +if (!drive->using_dma) +break ; + +if (!hwif->dma_setup (drive)) { + hwif->dma_exec_cmd (drive, taskfile->command); + hwif->dma_start (drive); +return ide_started; + }break ;default :
@@ -876,7 +858,8 @@ ide_startstop_t flagged_taskfile (ide_drive_t *drive, ide_task_t *task)return task->prehandler (drive, task->rq); }ide_execute_command (drive, taskfile->command, task->handler,WAIT_WORSTCASE ,NULL ); +return ide_started; } -return ide_started; +return ide_stopped; }
drivers/ide/ide.c +47 -26
165 lines not on this page · raw message
drivers/ide/legacy/ali14xx.c +6 -7
@@ -102,6 +102,8 @@ static void outReg (u8 data, u8 reg)outb_p (data, dataPort); } +static DEFINE_SPINLOCK (ali14xx_lock); +/* * Set PIO mode for the specified drive. * This function computes timing parameters
@@ -129,14 +131,14 @@ static void ali14xx_set_pio_mode(ide_drive_t *drive, const u8 pio)/* stuff timing parameters into controller registers */ driveNum = (HWIF (drive)->index <<1 ) + drive->select.b.unit; -spin_lock_irqsave (&ide_lock, flags); +spin_lock_irqsave (&ali14xx_lock, flags);outb_p (regOn, basePort);outReg (param1, regTab[driveNum].reg1);outReg (param2, regTab[driveNum].reg2);outReg (param3, regTab[driveNum].reg3);outReg (param4, regTab[driveNum].reg4);outb_p (regOff, basePort); -spin_unlock_irqrestore (&ide_lock, flags); +spin_unlock_irqrestore (&ali14xx_lock, flags); }/*
@@ -193,6 +195,7 @@ static int __init initRegisters (void) {static int __init ali14xx_probe (void ) {ide_hwif_t *hwif, *mate; +static u8 idx[4 ] = {0 ,1 ,0xff ,0xff };printk (KERN_DEBUG "ali14xx: base=0x%03x, regOn=0x%02x.\n" , basePort, regOn);
@@ -217,11 +220,7 @@ static int __init ali14xx_probe(void) mate->mate = hwif; mate->channel =1 ; -probe_hwif_init (hwif); -probe_hwif_init (mate); - -ide_proc_register_port (hwif); -ide_proc_register_port (mate); +ide_device_add (idx);return 0 ; }
drivers/ide/legacy/buddha.c +2 -2
@@ -212,8 +212,8 @@ fail_base2:// xsurf_iops, IRQ_AMIGA_PORTS); } - - index =ide_register_hw (&hw,1 , &hwif); + + index =ide_register_hw (&hw,NULL ,1 , &hwif);if (index !=-1 ) { hwif->mmio =1 ;printk ("ide%d: " , index);
drivers/ide/legacy/dtc2278.c +9 -7
@@ -67,20 +67,24 @@ static void sub22 (char b, char c) } } +static DEFINE_SPINLOCK (dtc2278_lock); +static void dtc2278_set_pio_mode (ide_drive_t *drive,const u8 pio) {unsigned long flags;if (pio >=3 ) { -spin_lock_irqsave (&ide_lock, flags); +spin_lock_irqsave (&dtc2278_lock, flags);/* * This enables PIO mode4 (3?) on the first interface */ sub22 (1 ,0xc3 );sub22 (0 ,0xa0 ); -spin_unlock_irqrestore (&ide_lock, flags); +spin_unlock_irqrestore (&dtc2278_lock, flags); }else {/* we don't know how to set it back again.. */ +/* Actually we do - there is a data sheet available for the +Winbond but does anyone actually care */ }/*
@@ -94,6 +98,7 @@ static int __init dtc2278_probe(void) {unsigned long flags;ide_hwif_t *hwif, *mate; +static u8 idx[4 ] = {0 ,1 ,0xff ,0xff }; hwif = &ide_hwifs[0 ]; mate = &ide_hwifs[1 ];
@@ -129,16 +134,13 @@ static int __init dtc2278_probe(void) mate->serialized =1 ; mate->chipset = ide_dtc2278; + mate->pio_mask =ATA_PIO4 ; mate->drives[0 ].no_unmask =1 ; mate->drives[1 ].no_unmask =1 ; mate->mate = hwif; mate->channel =1 ; -probe_hwif_init (hwif); -probe_hwif_init (mate); - -ide_proc_register_port (hwif); -ide_proc_register_port (mate); +ide_device_add (idx);return 0 ; }
drivers/ide/legacy/falconide.c +1 -1
@@ -72,7 +72,7 @@ void __init falconide_init(void)0 ,0 ,NULL ,// falconide_iops, IRQ_MFP_IDE); - index =ide_register_hw (&hw,1 ,NULL ); + index =ide_register_hw (&hw,NULL ,1 ,NULL );if (index !=-1 )printk ("ide%d: Falcon IDE interface\n" , index);
drivers/ide/legacy/gayle.c +1 -1
@@ -165,7 +165,7 @@ found:// &gayle_iops, IRQ_AMIGA_PORTS); - index =ide_register_hw (&hw,1 , &hwif); + index =ide_register_hw (&hw,NULL ,1 , &hwif);if (index !=-1 ) { hwif->mmio =1 ;switch (i) {
drivers/ide/legacy/ht6560b.c +15 -18
@@ -247,6 +247,8 @@ static u8 ht_pio2timings(ide_drive_t *drive, const u8 pio) } } +static DEFINE_SPINLOCK (ht6560b_lock); +/* * Enable/Disable so called prefetch mode */
@@ -254,9 +256,9 @@ static void ht_set_prefetch(ide_drive_t *drive, u8 state) {unsigned long flags;int t =HT_PREFETCH_MODE <<8 ; - -spin_lock_irqsave (&ide_lock, flags); - + +spin_lock_irqsave (&ht6560b_lock, flags); +/* * Prefetch mode and unmask irq seems to conflict */
@@ -268,9 +270,9 @@ static void ht_set_prefetch(ide_drive_t *drive, u8 state) drive->drive_data &= ~t;/* disable prefetch mode */ drive->no_unmask =0 ; } - -spin_unlock_irqrestore (&ide_lock, flags); - + +spin_unlock_irqrestore (&ht6560b_lock, flags); +#ifdef DEBUG printk ("ht6560b: drive %s prefetch mode %sabled\n" , drive->name, (state ?"en" :"dis" ));#endif
@@ -287,16 +289,14 @@ static void ht6560b_set_pio_mode(ide_drive_t *drive, const u8 pio)ht_set_prefetch (drive, pio &1 );return ; } - + timing =ht_pio2timings (drive, pio); - -spin_lock_irqsave (&ide_lock, flags); - + +spin_lock_irqsave (&ht6560b_lock, flags); drive->drive_data &=0xff00 ; drive->drive_data |= timing; - -spin_unlock_irqrestore (&ide_lock, flags); - +spin_unlock_irqrestore (&ht6560b_lock, flags); +#ifdef DEBUG printk ("ht6560b: drive %s tuned to pio mode %#x timing=%#x\n" , drive->name, pio, timing);#endif
@@ -311,6 +311,7 @@ MODULE_PARM_DESC(probe, "probe for HT6560B chipset");int __init ht6560b_init (void ) {ide_hwif_t *hwif, *mate; +static u8 idx[4 ] = {0 ,1 ,0xff ,0xff };int t;if (probe_ht6560b ==0 )
@@ -359,11 +360,7 @@ int __init ht6560b_init(void) mate->drives[0 ].drive_data = t; mate->drives[1 ].drive_data = t; -probe_hwif_init (hwif); -probe_hwif_init (mate); - -ide_proc_register_port (hwif); -ide_proc_register_port (mate); +ide_device_add (idx);return 0 ;
drivers/ide/legacy/ide-cs.c +1 -1
@@ -153,7 +153,7 @@ static int idecs_register(unsigned long io, unsigned long ctl, unsigned long irq hw.irq = irq; hw.chipset = ide_pci; hw.dev = &handle->dev; -return ide_register_hw_with_fixup (&hw,0 ,NULL , ide_undecoded_slave); +return ide_register_hw (&hw, &ide_undecoded_slave,0 ,NULL ); }/*======================================================================
drivers/ide/legacy/ide_platform.c +15 -28
78 lines not on this page · raw message
drivers/ide/legacy/macide.c +3 -3
@@ -93,21 +93,21 @@ void macide_init(void)0 ,0 , macide_ack_intr,// quadra_ide_iops, IRQ_NUBUS_F); - index =ide_register_hw (&hw,1 , &hwif); + index =ide_register_hw (&hw,NULL ,1 , &hwif);break ;case MAC_IDE_PB :ide_setup_ports (&hw,IDE_BASE , macide_offsets,0 ,0 , macide_ack_intr,// macide_pb_iops, IRQ_NUBUS_C ); - index =ide_register_hw (&hw,1 , &hwif); + index =ide_register_hw (&hw,NULL ,1 , &hwif);break ;case MAC_IDE_BABOON :ide_setup_ports (&hw,BABOON_BASE , macide_offsets,0 ,0 ,NULL ,// macide_baboon_iops, IRQ_BABOON_1 ); - index =ide_register_hw (&hw,1 , &hwif); + index =ide_register_hw (&hw,NULL ,1 , &hwif);if (index ==-1 )break ;if (macintosh_config->ident ==MAC_MODEL_PB190 ) {
drivers/ide/legacy/q40ide.c +2 -3
@@ -89,9 +89,8 @@ void q40_ide_setup_ports ( hw_regs_t *hw,else hw->io_ports[i] =Q40_ISA_IO_B (base + offsets[i]); } - + hw->irq = irq; - hw->dma =NO_DMA ; hw->ack_intr = ack_intr;/* * hw->iops = iops;
@@ -142,7 +141,7 @@ void q40ide_init(void)0 ,NULL ,// m68kide_iops, q40ide_default_irq(pcide_bases[i])); - index =ide_register_hw (&hw,1 , &hwif); + index =ide_register_hw (&hw,NULL ,1 , &hwif);// **FIXME** if (index !=-1 ) hwif->mmio =1 ;
drivers/ide/legacy/qd65xx.c +21 -43
146 lines not on this page · raw message
drivers/ide/legacy/umc8672.c +3 -6
@@ -124,8 +124,9 @@ static void umc_set_pio_mode(ide_drive_t *drive, const u8 pio)static int __init umc8672_probe (void ) { -unsigned long flags;ide_hwif_t *hwif, *mate; +unsigned long flags; +static u8 idx[4 ] = {0 ,1 ,0xff ,0xff };if (!request_region (0x108 ,2 ,"umc8672" )) {printk (KERN_ERR "umc8672: ports 0x108-0x109 already in use.\n" );
@@ -158,11 +159,7 @@ static int __init umc8672_probe(void) mate->mate = hwif; mate->channel =1 ; -probe_hwif_init (hwif); -probe_hwif_init (mate); - -ide_proc_register_port (hwif); -ide_proc_register_port (mate); +ide_device_add (idx);return 0 ; }
drivers/ide/mips/au1xxx-ide.c +11 -8
@@ -601,8 +601,9 @@ static int au_ide_probe(struct device *dev)_auide_hwif *ahwif = &auide_hwif;ide_hwif_t *hwif;struct resource *res; -hw_regs_t *hw;int ret =0 ; +u8 idx[4 ] = {0xff ,0xff ,0xff ,0xff }; +hw_regs_t hw;#if defined(CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA )char *mode ="MWDMA2" ;
@@ -644,12 +645,12 @@ static int au_ide_probe(struct device *dev)/* FIXME: This might possibly break PCMCIA IDE devices */ hwif = &ide_hwifs[pdev->id]; - hw = &hwif->hw; - hwif->irq = hw->irq = ahwif->irq; + hwif->irq = ahwif->irq; hwif->chipset = ide_au1xxx; -auide_setup_ports (hw, ahwif); -memcpy (hwif->io_ports, hw->io_ports,sizeof (hwif->io_ports)); +memset (&hw,0 ,sizeof (hw)); +auide_setup_ports (&hw, ahwif); +memcpy (hwif->io_ports, hw.io_ports,sizeof (hwif->io_ports)); hwif->ultra_mask =0x0 ;/* Disable Ultra DMA */ #ifdef CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA
@@ -706,8 +707,10 @@ static int au_ide_probe(struct device *dev) hwif->config_data =0 ;/* no chipset-specific code */ hwif->drives[0 ].autotune =1 ;/* 1=autotune, 2=noautotune, 0=default */ + hwif->drives[1 ].autotune =1 ;#endif - hwif->drives[0 ].no_io_32bit =1 ; + hwif->drives[0 ].no_io_32bit =1 ; + hwif->drives[1 ].no_io_32bit =1 ; auide_hwif.hwif = hwif; hwif->hwif_data = &auide_hwif;
@@ -717,9 +720,9 @@ static int au_ide_probe(struct device *dev) dbdma_init_done =1 ;#endif -probe_hwif_init (hwif); + idx[0 ] = hwif->index; -ide_proc_register_port (hwif); +ide_device_add (idx);dev_set_drvdata (dev, hwif);
drivers/ide/mips/swarm.c +6 -8
@@ -71,6 +71,7 @@ static int __devinit swarm_ide_probe(struct device *dev)u8 __iomem *base;phys_t offset, size;int i; +u8 idx[4 ] = {0xff ,0xff ,0xff ,0xff };if (!SIBYTE_HAVE_IDE )return -ENODEV ;
@@ -119,18 +120,15 @@ static int __devinit swarm_ide_probe(struct device *dev) hwif->noprobe =0 ;for (i =IDE_DATA_OFFSET ; i <=IDE_STATUS_OFFSET ; i++) - hwif->hw.io_ports[i] = + hwif->io_ports[i] = (unsigned long )(base + ((0x1f0 + i) <<5 )); - hwif->hw.io_ports[IDE_CONTROL_OFFSET ] = + hwif->io_ports[IDE_CONTROL_OFFSET ] = (unsigned long )(base + (0x3f6 <<5 )); - hwif->hw.irq =K_INT_GB_IDE ; + hwif->irq =K_INT_GB_IDE ; -memcpy (hwif->io_ports, hwif->hw.io_ports,sizeof (hwif->io_ports)); - hwif->irq = hwif->hw.irq; + idx[0 ] = hwif->index; -probe_hwif_init (hwif); - -ide_proc_register_port (hwif); +ide_device_add (idx);dev_set_drvdata (dev, hwif);
drivers/ide/pci/aec62xx.c +5 -20
@@ -1,5 +1,5 @@/* -* linux/drivers/ide/pci/aec62xx.c Version 0.26 Sep 1, 2007 +* linux/drivers/ide/pci/aec62xx.c Version 0.27 Sep 16, 2007 * * Copyright (C) 1999-2002 Andre Hedrick <[email protected]> * Copyright (C) 2007 MontaVista Software, Inc. <[email protected]>
@@ -141,19 +141,6 @@ static void aec_set_pio_mode(ide_drive_t *drive, const u8 pio) drive->hwif->set_dma_mode (drive, pio +XFER_PIO_0 ); } -static void aec62xx_dma_lost_irq (ide_drive_t *drive) -{ -switch (HWIF (drive)->pci_dev->device) { -case PCI_DEVICE_ID_ARTOP_ATP860 : -case PCI_DEVICE_ID_ARTOP_ATP860R : -case PCI_DEVICE_ID_ARTOP_ATP865 : -case PCI_DEVICE_ID_ARTOP_ATP865R : -printk (" AEC62XX time out " ); -default : -break ; - } -} -static unsigned int __devinit init_chipset_aec62xx (struct pci_dev *dev,const char *name) {int bus_speed =system_bus_clock ();
@@ -195,8 +182,6 @@ static void __devinit init_hwif_aec62xx(ide_hwif_t *hwif)if (hwif->dma_base ==0 )return ; - hwif->dma_lost_irq = &aec62xx_dma_lost_irq; -if (dev->device ==PCI_DEVICE_ID_ARTOP_ATP850UF )return ;
@@ -209,7 +194,7 @@ static void __devinit init_hwif_aec62xx(ide_hwif_t *hwif) } } -static ide_pci_device_t aec62xx_chipsets[]__devinitdata = { +static const struct ide_port_info aec62xx_chipsets[]__devinitdata = { {/* 0 */ .name ="AEC6210" , .init_chipset = init_chipset_aec62xx,
@@ -268,12 +253,12 @@ static ide_pci_device_t aec62xx_chipsets[] __devinitdata = {* finds a device matching our IDE device tables. * * NOTE: since we're going to modify the 'name' field for AEC-6[26]80[R] -* chips, pass a local copy of 'struct pci_device_id' down the call chain. +* chips, pass a local copy of 'struct ide_port_info' down the call chain. */ - +static int __devinit aec62xx_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -ide_pci_device_t d; +struct ide_port_info d;u8 idx = id->driver_data; d = aec62xx_chipsets[idx];
drivers/ide/pci/alim15x3.c +54 -55
161 lines not on this page · raw message
drivers/ide/pci/amd74xx.c +12 -17
@@ -77,7 +77,7 @@ static struct amd_ide_chip { };static struct amd_ide_chip *amd_config; -static ide_pci_device_t *amd_chipset; +static const struct ide_port_info *amd_chipset;static unsigned int amd_80w;static unsigned int amd_clock;
@@ -242,19 +242,12 @@ static unsigned int __devinit init_chipset_amd74xx(struct pci_dev *dev, const chstatic void __devinit init_hwif_amd74xx (ide_hwif_t *hwif) { -int i; -if (hwif->irq ==0 )/* 0 is bogus but will do for now */ hwif->irq =pci_get_legacy_ide_irq (hwif->pci_dev, hwif->channel); hwif->set_pio_mode = &amd_set_pio_mode; hwif->set_dma_mode = &amd_set_drive; -for (i =0 ; i <2 ; i++) { - hwif->drives[i].io_32bit =1 ; - hwif->drives[i].unmask =1 ; - } -if (!hwif->dma_base)return ;
@@ -270,16 +263,21 @@ static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif) } } +#define IDE_HFLAGS_AMD \ + (IDE_HFLAG_PIO_NO_BLACKLIST | \ + IDE_HFLAG_PIO_NO_DOWNGRADE | \ + IDE_HFLAG_POST_SET_MODE | \ + IDE_HFLAG_IO_32BIT | \ + IDE_HFLAG_UNMASK_IRQS | \ + IDE_HFLAG_BOOTABLE) +#define DECLARE_AMD_DEV (name_str) \ { \ .name = name_str, \ .init_chipset = init_chipset_amd74xx, \ .init_hwif = init_hwif_amd74xx, \ .enablebits = {{0x40,0x02,0x02}, {0x40,0x01,0x01}}, \ - .host_flags = IDE_HFLAG_PIO_NO_BLACKLIST | \ - IDE_HFLAG_PIO_NO_DOWNGRADE | \ - IDE_HFLAG_POST_SET_MODE | \ - IDE_HFLAG_BOOTABLE, \ + .host_flags = IDE_HFLAGS_AMD, \ .pio_mask = ATA_PIO5, \ .swdma_mask = ATA_SWDMA2, \ .mwdma_mask = ATA_MWDMA2, \
@@ -291,16 +289,13 @@ static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif) .init_chipset = init_chipset_amd74xx, \ .init_hwif = init_hwif_amd74xx, \ .enablebits = {{0x50,0x02,0x02}, {0x50,0x01,0x01}}, \ - .host_flags = IDE_HFLAG_PIO_NO_BLACKLIST | \ - IDE_HFLAG_PIO_NO_DOWNGRADE | \ - IDE_HFLAG_POST_SET_MODE | \ - IDE_HFLAG_BOOTABLE, \ + .host_flags = IDE_HFLAGS_AMD, \ .pio_mask = ATA_PIO5, \ .swdma_mask = ATA_SWDMA2, \ .mwdma_mask = ATA_MWDMA2, \ } -static ide_pci_device_t amd74xx_chipsets[]__devinitdata = { +static const struct ide_port_info amd74xx_chipsets[]__devinitdata = {/* 0 */ DECLARE_AMD_DEV ("AMD7401" ),/* 1 */ DECLARE_AMD_DEV ("AMD7409" ),/* 2 */ DECLARE_AMD_DEV ("AMD7411" ),
drivers/ide/pci/atiixp.c +1 -2
@@ -189,8 +189,7 @@ static void __devinit init_hwif_atiixp(ide_hwif_t *hwif) hwif->dma_host_off = &atiixp_dma_host_off; } - -static ide_pci_device_t atiixp_pci_info[]__devinitdata = { +static const struct ide_port_info atiixp_pci_info[]__devinitdata = { {/* 0 */ .name ="ATIIXP" , .init_hwif = init_hwif_atiixp,
drivers/ide/pci/cmd640.c +22 -20
134 lines not on this page · raw message
drivers/ide/pci/cmd64x.c +3 -3
@@ -535,7 +535,6 @@ static void __devinit init_hwif_cmd64x(ide_hwif_t *hwif) hwif->ide_dma_test_irq = &cmd648_ide_dma_test_irq;break ;case PCI_DEVICE_ID_CMD_646 : - hwif->chipset = ide_cmd646;if (dev->revision ==0x01 ) { hwif->ide_dma_end = &cmd646_1_ide_dma_end;break ;
@@ -549,7 +548,7 @@ static void __devinit init_hwif_cmd64x(ide_hwif_t *hwif) } } -static ide_pci_device_t cmd64x_chipsets[]__devinitdata = { +static const struct ide_port_info cmd64x_chipsets[]__devinitdata = { {/* 0 */ .name ="CMD643" , .init_chipset = init_chipset_cmd64x,
@@ -573,6 +572,7 @@ static ide_pci_device_t cmd64x_chipsets[] __devinitdata = { .init_chipset = init_chipset_cmd64x, .init_hwif = init_hwif_cmd64x, .enablebits = {{0x51,0x04,0x04}, {0x51,0x08,0x08}}, + .chipset = ide_cmd646, .host_flags = IDE_HFLAG_ABUSE_PREFETCH | IDE_HFLAG_BOOTABLE, .pio_mask = ATA_PIO5, .mwdma_mask = ATA_MWDMA2,
@@ -591,7 +591,7 @@ static ide_pci_device_t cmd64x_chipsets[] __devinitdata = {static int __devinit cmd64x_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -ide_pci_device_t d; +struct ide_port_info d;u8 idx = id->driver_data; d = cmd64x_chipsets[idx];
drivers/ide/pci/cs5520.c +5 -21
@@ -141,7 +141,7 @@ static void __devinit init_hwif_cs5520(ide_hwif_t *hwif) .pio_mask = ATA_PIO4, \ } -static ide_pci_device_t cyrix_chipsets[]__devinitdata = { +static const struct ide_port_info cyrix_chipsets[]__devinitdata = {/* 0 */ DECLARE_CS_DEV ("Cyrix 5510" ),/* 1 */ DECLARE_CS_DEV ("Cyrix 5520" ) };
@@ -154,9 +154,8 @@ static ide_pci_device_t cyrix_chipsets[] __devinitdata = {static int __devinit cs5520_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -ide_hwif_t *hwif =NULL , *mate =NULL ; -ata_index_t index; -ide_pci_device_t *d = &cyrix_chipsets[id->driver_data]; +const struct ide_port_info *d = &cyrix_chipsets[id->driver_data]; +u8 idx[4 ] = {0xff ,0xff ,0xff ,0xff };ide_setup_pci_noise (dev, d);
@@ -172,29 +171,14 @@ static int __devinit cs5520_init_one(struct pci_dev *dev, const struct pci_devicreturn -ENODEV ; } - index.all =0xf0f0 ; -/* * Now the chipset is configured we can let the core * do all the device setup for us */ -ide_pci_setup_ports (dev, d,14 , &index); - -if ((index.b.low &0xf0 ) !=0xf0 ) - hwif = &ide_hwifs[index.b.low]; -if ((index.b.high &0xf0 ) !=0xf0 ) - mate = &ide_hwifs[index.b.high]; - -if (hwif) -probe_hwif_init (hwif); -if (mate) -probe_hwif_init (mate); +ide_pci_setup_ports (dev, d,14 , &idx[0 ]); -if (hwif) -ide_proc_register_port (hwif); -if (mate) -ide_proc_register_port (mate); +ide_device_add (idx);return 0 ; }
drivers/ide/pci/cs5530.c +2 -8
@@ -1,5 +1,5 @@/* -* linux/drivers/ide/pci/cs5530.c Version 0.76 Aug 3 2007 +* linux/drivers/ide/pci/cs5530.c Version 0.77 Sep 24 2007 * * Copyright (C) 2000 Andre Hedrick <[email protected]> * Copyright (C) 2000 Mark Lord <[email protected]>
@@ -146,7 +146,6 @@ static void cs5530_set_dma_mode(ide_drive_t *drive, const u8 mode)static unsigned int __devinit init_chipset_cs5530 (struct pci_dev *dev,const char *name) {struct pci_dev *master_0 =NULL , *cs5530_0 =NULL ; -unsigned long flags;if (pci_resource_start (dev,4 ) ==0 )return -EFAULT ;
@@ -171,9 +170,6 @@ static unsigned int __devinit init_chipset_cs5530 (struct pci_dev *dev, const ch goto out; } -spin_lock_irqsave (&ide_lock, flags); -/* all CPUs (there should only be one CPU with this chipset) */ -/* * Enable BusMaster and MemoryWriteAndInvalidate for the cs5530: * --> OR 0x14 into 16-bit PCI COMMAND reg of function 0 of the cs5530
@@ -224,8 +220,6 @@ static unsigned int __devinit init_chipset_cs5530 (struct pci_dev *dev, const chpci_write_config_byte (master_0,0x42 ,0x00 );pci_write_config_byte (master_0,0x43 ,0xc1 ); -spin_unlock_irqrestore (&ide_lock, flags); - out:pci_dev_put (master_0);pci_dev_put (cs5530_0);
@@ -261,7 +255,7 @@ static void __devinit init_hwif_cs5530 (ide_hwif_t *hwif) hwif->udma_filter = cs5530_udma_filter; } -static ide_pci_device_t cs5530_chipset__devinitdata = { +static const struct ide_port_info cs5530_chipset__devinitdata = { .name ="CS5530" , .init_chipset = init_chipset_cs5530, .init_hwif = init_hwif_cs5530,
drivers/ide/pci/cs5535.c +1 -1
@@ -186,7 +186,7 @@ static void __devinit init_hwif_cs5535(ide_hwif_t *hwif) hwif->cbl =cs5535_cable_detect (hwif->pci_dev); } -static ide_pci_device_t cs5535_chipset__devinitdata = { +static const struct ide_port_info cs5535_chipset__devinitdata = { .name ="CS5535" , .init_hwif = init_hwif_cs5535, .host_flags = IDE_HFLAG_SINGLE | IDE_HFLAG_POST_SET_MODE |
drivers/ide/pci/cy82c693.c +2 -2
@@ -428,7 +428,6 @@ static unsigned int __devinit init_chipset_cy82c693(struct pci_dev *dev, const c*/ static void __devinit init_hwif_cy82c693 (ide_hwif_t *hwif) { - hwif->chipset = ide_cy82c693; hwif->set_pio_mode = &cy82c693_set_pio_mode;if (hwif->dma_base ==0 )
@@ -449,11 +448,12 @@ static void __devinit init_iops_cy82c693(ide_hwif_t *hwif) } } -static ide_pci_device_t cy82c693_chipset__devinitdata = { +static const struct ide_port_info cy82c693_chipset__devinitdata = { .name ="CY82C693" , .init_chipset = init_chipset_cy82c693, .init_iops = init_iops_cy82c693, .init_hwif = init_hwif_cy82c693, + .chipset = ide_cy82c693, .host_flags =IDE_HFLAG_SINGLE |IDE_HFLAG_TRUST_BIOS_FOR_DMA |IDE_HFLAG_BOOTABLE , .pio_mask =ATA_PIO4 ,
drivers/ide/pci/delkin_cb.c +1 -1
@@ -80,7 +80,7 @@ delkin_cb_probe (struct pci_dev *dev, const struct pci_device_id *id) hw.irq = dev->irq; hw.chipset = ide_pci;/* this enables IRQ sharing */ - rc =ide_register_hw_with_fixup (&hw,0 , &hwif, ide_undecoded_slave); + rc =ide_register_hw (&hw, &ide_undecoded_slave,0 , &hwif);if (rc <0 ) {printk (KERN_ERR "delkin_cb: ide_register_hw failed (%d)\n" , rc);pci_disable_device (dev);
drivers/ide/pci/generic.c +8 -23
@@ -54,37 +54,24 @@ __setup("all-generic-ide", ide_generic_all_on);module_param_named (all_generic_ide, ide_generic_all, bool,0444 );MODULE_PARM_DESC (all_generic_ide,"IDE generic will claim all unknown PCI IDE storage controllers." ); -static void __devinit init_hwif_generic (ide_hwif_t *hwif) -{ -switch (hwif->pci_dev->device) { -case PCI_DEVICE_ID_UMC_UM8673F : -case PCI_DEVICE_ID_UMC_UM8886A : -case PCI_DEVICE_ID_UMC_UM8886BF : - hwif->irq = hwif->channel ?15 :14 ; -break ; -default : -break ; - } -} +#define IDE_HFLAGS_UMC (IDE_HFLAG_NO_DMA | IDE_HFLAG_FORCE_LEGACY_IRQS) -#define DECLARE_GENERIC_PCI_DEV (name_str, dma_setting) \ +#define DECLARE_GENERIC_PCI_DEV (name_str, extra_flags) \ { \ .name = name_str, \ - .init_hwif = init_hwif_generic, \ .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA | \ - dma_setting | \ + extra_flags | \ IDE_HFLAG_BOOTABLE, \ .swdma_mask = ATA_SWDMA2, \ .mwdma_mask = ATA_MWDMA2, \ .udma_mask = ATA_UDMA6, \ } -static ide_pci_device_t generic_chipsets[]__devinitdata = { +static const struct ide_port_info generic_chipsets[]__devinitdata = {/* 0 */ DECLARE_GENERIC_PCI_DEV ("Unknown" ,0 ), {/* 1 */ .name ="NS87410" , - .init_hwif = init_hwif_generic, .enablebits = {{0x43 ,0x08 ,0x08 }, {0x47 ,0x08 ,0x08 }}, .host_flags =IDE_HFLAG_TRUST_BIOS_FOR_DMA |IDE_HFLAG_BOOTABLE ,
@@ -95,16 +82,15 @@ static ide_pci_device_t generic_chipsets[] __devinitdata = {/* 2 */ DECLARE_GENERIC_PCI_DEV ("SAMURAI" ,0 ),/* 3 */ DECLARE_GENERIC_PCI_DEV ("HT6565" ,0 ), -/* 4 */ DECLARE_GENERIC_PCI_DEV ("UM8673F" ,IDE_HFLAG_NO_DMA ), -/* 5 */ DECLARE_GENERIC_PCI_DEV ("UM8886A" ,IDE_HFLAG_NO_DMA ), -/* 6 */ DECLARE_GENERIC_PCI_DEV ("UM8886BF" ,IDE_HFLAG_NO_DMA ), +/* 4 */ DECLARE_GENERIC_PCI_DEV ("UM8673F" ,IDE_HFLAGS_UMC ), +/* 5 */ DECLARE_GENERIC_PCI_DEV ("UM8886A" ,IDE_HFLAGS_UMC ), +/* 6 */ DECLARE_GENERIC_PCI_DEV ("UM8886BF" ,IDE_HFLAGS_UMC ),/* 7 */ DECLARE_GENERIC_PCI_DEV ("HINT_IDE" ,0 ),/* 8 */ DECLARE_GENERIC_PCI_DEV ("VIA_IDE" ,IDE_HFLAG_NO_AUTODMA ),/* 9 */ DECLARE_GENERIC_PCI_DEV ("OPTI621V" ,IDE_HFLAG_NO_AUTODMA ), { /* 10 */ .name = "VIA8237SATA", - .init_hwif = init_hwif_generic, .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA |IDE_HFLAG_OFF_BOARD , .swdma_mask = ATA_SWDMA2,
@@ -118,7 +104,6 @@ static ide_pci_device_t generic_chipsets[] __devinitdata = { {/* 14 */ .name = "Revolution", - .init_hwif = init_hwif_generic, .host_flags = IDE_HFLAG_TRUST_BIOS_FOR_DMA | IDE_HFLAG_OFF_BOARD, .swdma_mask = ATA_SWDMA2,
@@ -138,7 +123,7 @@ static ide_pci_device_t generic_chipsets[] __devinitdata = {static int __devinit generic_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -ide_pci_device_t *d = &generic_chipsets[id->driver_data]; +const struct ide_port_info *d = &generic_chipsets[id->driver_data];int ret = -ENODEV ;/* Don't use the generic entry unless instructed to do so */
drivers/ide/pci/hpt34x.c +2 -2
@@ -129,7 +129,7 @@ static void __devinit init_hwif_hpt34x(ide_hwif_t *hwif) hwif->set_dma_mode = &hpt34x_set_mode; } -static ide_pci_device_t hpt34x_chipsets[]__devinitdata = { +static const struct ide_port_info hpt34x_chipsets[]__devinitdata = { {/* 0 */ .name ="HPT343" , .init_chipset = init_chipset_hpt34x,
@@ -158,7 +158,7 @@ static ide_pci_device_t hpt34x_chipsets[] __devinitdata = {static int __devinit hpt34x_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -ide_pci_device_t *d; +const struct ide_port_info *d;u16 pcicmd =0 ;pci_read_config_word (dev,PCI_COMMAND , &pcicmd);
drivers/ide/pci/hpt366.c +2 -2
@@ -1425,7 +1425,7 @@ static int __devinit hpt36x_init(struct pci_dev *dev, struct pci_dev *dev2)return 0 ; } -static ide_pci_device_t hpt366_chipsets[]__devinitdata = { +static const struct ide_port_info hpt366_chipsets[]__devinitdata = { {/* 0 */ .name ="HPT36x" , .init_chipset = init_chipset_hpt366,
@@ -1510,7 +1510,7 @@ static int __devinit hpt366_init_one(struct pci_dev *dev, const struct pci_devic {struct hpt_info *info =NULL ;struct pci_dev *dev2 =NULL ; -ide_pci_device_t d; +struct ide_port_info d;u8 idx = id->driver_data;u8 rev = dev->revision;
drivers/ide/pci/it8213.c +1 -1
@@ -193,7 +193,7 @@ static void __devinit init_hwif_it8213(ide_hwif_t *hwif) .udma_mask = ATA_UDMA6, \ } -static ide_pci_device_t it8213_chipsets[]__devinitdata = { +static const struct ide_port_info it8213_chipsets[]__devinitdata = {/* 0 */ DECLARE_ITE_DEV ("IT8213" ), };
drivers/ide/pci/it821x.c +1 -1
@@ -638,7 +638,7 @@ static unsigned int __devinit init_chipset_it821x(struct pci_dev *dev, const cha .pio_mask = ATA_PIO4, \ } -static ide_pci_device_t it821x_chipsets[]__devinitdata = { +static const struct ide_port_info it821x_chipsets[]__devinitdata = {/* 0 */ DECLARE_ITE_DEV ("IT8212" ), };
drivers/ide/pci/jmicron.c +1 -1
@@ -118,7 +118,7 @@ static void __devinit init_hwif_jmicron(ide_hwif_t *hwif) hwif->cbl =ata66_jmicron (hwif); } -static ide_pci_device_t jmicron_chipset__devinitdata = { +static const struct ide_port_info jmicron_chipset__devinitdata = { .name ="JMB" , .init_hwif = init_hwif_jmicron, .host_flags =IDE_HFLAG_BOOTABLE ,
drivers/ide/pci/ns87415.c +1 -1
@@ -260,7 +260,7 @@ static void __devinit init_hwif_ns87415 (ide_hwif_t *hwif) hwif->ide_dma_end = &ns87415_ide_dma_end; } -static ide_pci_device_t ns87415_chipset__devinitdata = { +static const struct ide_port_info ns87415_chipset__devinitdata = { .name ="NS87415" , #ifdef CONFIG_SUPERIO .init_iops = init_iops_ns87415,
drivers/ide/pci/opti621.c +6 -4
@@ -1,5 +1,5 @@/* -* linux/drivers/ide/pci/opti621.c Version 0.8 Aug 27, 2007 +* linux/drivers/ide/pci/opti621.c Version 0.9 Sep 24, 2007 * * Copyright (C) 1996-1998 Linus Torvalds & authors (see below) */
@@ -133,6 +133,8 @@ static int reg_base;#define PIO_NOT_EXIST 254#define PIO_DONT_KNOW 255 +static DEFINE_SPINLOCK (opti621_lock); +/* there are stored pio numbers from other calls of opti621_set_pio_mode */ static void compute_pios (ide_drive_t *drive,const u8 pio)/* Store values into drive->drive_data
@@ -278,7 +280,7 @@ static void opti621_set_pio_mode(ide_drive_t *drive, const u8 pio) second.recovery_time, drdy);#endif -spin_lock_irqsave (&ide_lock, flags); +spin_lock_irqsave (&opti621_lock, flags); reg_base = hwif->io_ports[IDE_DATA_OFFSET ];
@@ -317,7 +319,7 @@ static void opti621_set_pio_mode(ide_drive_t *drive, const u8 pio)/* and read prefetch for both drives */ write_reg (misc,MISC_REG ); -spin_unlock_irqrestore (&ide_lock, flags); +spin_unlock_irqrestore (&opti621_lock, flags); }/*
@@ -331,7 +333,7 @@ static void __devinit init_hwif_opti621 (ide_hwif_t *hwif) hwif->set_pio_mode = &opti621_set_pio_mode; } -static ide_pci_device_t opti621_chipsets[]__devinitdata = { +static const struct ide_port_info opti621_chipsets[]__devinitdata = { {/* 0 */ .name ="OPTI621" , .init_hwif = init_hwif_opti621,
drivers/ide/pci/pdc202xx_new.c +2 -2
@@ -513,7 +513,7 @@ static struct pci_dev * __devinit pdc20270_get_dev2(struct pci_dev *dev) .udma_mask = udma, \ } -static ide_pci_device_t pdcnew_chipsets[]__devinitdata = { +static const struct ide_port_info pdcnew_chipsets[]__devinitdata = {/* 0 */ DECLARE_PDCNEW_DEV ("PDC20268" ,ATA_UDMA5 ),/* 1 */ DECLARE_PDCNEW_DEV ("PDC20269" ,ATA_UDMA6 ),/* 2 */ DECLARE_PDCNEW_DEV ("PDC20270" ,ATA_UDMA5 ),
@@ -534,7 +534,7 @@ static ide_pci_device_t pdcnew_chipsets[] __devinitdata = {static int __devinit pdc202new_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -ide_pci_device_t *d; +const struct ide_port_info *d;struct pci_dev *bridge = dev->bus->self;u8 idx = id->driver_data;
drivers/ide/pci/pdc202xx_old.c +8 -14
@@ -302,13 +302,6 @@ static unsigned int __devinit init_chipset_pdc202xx(struct pci_dev *dev,static void __devinit init_hwif_pdc202xx (ide_hwif_t *hwif) { -struct pci_dev *dev = hwif->pci_dev; - -/* PDC20265 has problems with large LBA48 requests */ -if ((dev->device ==PCI_DEVICE_ID_PROMISE_20267 ) || - (dev->device ==PCI_DEVICE_ID_PROMISE_20265 )) - hwif->rqsize =256 ; - hwif->set_pio_mode = &pdc202xx_set_pio_mode; hwif->set_dma_mode = &pdc202xx_set_mode;
@@ -382,7 +375,7 @@ static void __devinit pdc202ata4_fixup_irq(struct pci_dev *dev, } } -#define DECLARE_PDC2026X_DEV (name_str, udma) \ +#define DECLARE_PDC2026X_DEV (name_str, udma, extra_flags) \ { \ .name = name_str, \ .init_chipset = init_chipset_pdc202xx, \
@@ -390,13 +383,14 @@ static void __devinit pdc202ata4_fixup_irq(struct pci_dev *dev, .init_dma = init_dma_pdc202xx, \ .extra = 48, \ .host_flags = IDE_HFLAG_ERROR_STOPS_FIFO | \ + extra_flags | \ IDE_HFLAG_OFF_BOARD, \ .pio_mask = ATA_PIO4, \ .mwdma_mask = ATA_MWDMA2, \ .udma_mask = udma, \ } -static ide_pci_device_t pdc202xx_chipsets[]__devinitdata = { +static const struct ide_port_info pdc202xx_chipsets[]__devinitdata = { {/* 0 */ .name ="PDC20246" , .init_chipset = init_chipset_pdc202xx,
@@ -410,10 +404,10 @@ static ide_pci_device_t pdc202xx_chipsets[] __devinitdata = { .udma_mask = ATA_UDMA2, }, - /* 1 */ DECLARE_PDC2026X_DEV("PDC20262", ATA_UDMA4), - /* 2 */ DECLARE_PDC2026X_DEV("PDC20263", ATA_UDMA4), - /* 3 */ DECLARE_PDC2026X_DEV("PDC20265", ATA_UDMA5), - /* 4 */ DECLARE_PDC2026X_DEV("PDC20267", ATA_UDMA5), + /* 1 */ DECLARE_PDC2026X_DEV("PDC20262", ATA_UDMA4, 0), + /* 2 */ DECLARE_PDC2026X_DEV("PDC20263", ATA_UDMA4, 0), + /* 3 */ DECLARE_PDC2026X_DEV("PDC20265", ATA_UDMA5, IDE_HFLAG_RQSIZE_256), + /* 4 */ DECLARE_PDC2026X_DEV("PDC20267", ATA_UDMA5, IDE_HFLAG_RQSIZE_256), };/**
@@ -427,7 +421,7 @@ static ide_pci_device_t pdc202xx_chipsets[] __devinitdata = {static int __devinit pdc202xx_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -ide_pci_device_t *d; +const struct ide_port_info *d;u8 idx = id->driver_data; d = &pdc202xx_chipsets[idx];
drivers/ide/pci/piix.c +2 -4
@@ -396,7 +396,7 @@ static void __devinit init_hwif_ich(ide_hwif_t *hwif) .udma_mask = udma, \ } -static ide_pci_device_t piix_pci_info[]__devinitdata = { +static const struct ide_port_info piix_pci_info[]__devinitdata = {/* 0 */ DECLARE_PIIX_DEV ("PIIXa" ,0x00 ),/* no udma */ /* 1 */ DECLARE_PIIX_DEV ("PIIXb" ,0x00 ),/* no udma */
@@ -449,9 +449,7 @@ static ide_pci_device_t piix_pci_info[] __devinitdata = {static int __devinit piix_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -ide_pci_device_t *d = &piix_pci_info[id->driver_data]; - -return ide_setup_pci_device (dev, d); +return ide_setup_pci_device (dev, &piix_pci_info[id->driver_data]); }/**
drivers/ide/pci/rz1000.c +4 -3
@@ -35,13 +35,13 @@ static void __devinit init_hwif_rz1000 (ide_hwif_t *hwif)u16 reg;struct pci_dev *dev = hwif->pci_dev; - hwif->chipset = ide_rz1000;if (!pci_read_config_word (dev,0x40 , ®) && !pci_write_config_word (dev,0x40 , reg &0xdfff )) {printk (KERN_INFO "%s: disabled chipset read-ahead " "(buggy RZ1000/RZ1001)\n" , hwif->name); }else { - hwif->serialized =1 ; +if (hwif->mate) + hwif->mate->serialized = hwif->serialized =1 ; hwif->drives[0 ].no_unmask =1 ; hwif->drives[1 ].no_unmask =1 ; printk(KERN_INFO "%s: serialized, disabled unmasking "
@@ -49,9 +49,10 @@ static void __devinit init_hwif_rz1000 (ide_hwif_t *hwif) } } -static ide_pci_device_t rz1000_chipset__devinitdata = { +static const struct ide_port_info rz1000_chipset__devinitdata = { .name ="RZ100x" , .init_hwif = init_hwif_rz1000, + .chipset = ide_rz1000, .host_flags =IDE_HFLAG_NO_DMA |IDE_HFLAG_BOOTABLE , };
drivers/ide/pci/sc1200.c +1 -1
@@ -372,7 +372,7 @@ static void __devinit init_hwif_sc1200 (ide_hwif_t *hwif) hwif->ide_dma_end = &sc1200_ide_dma_end; } -static ide_pci_device_t sc1200_chipset__devinitdata = { +static const struct ide_port_info sc1200_chipset__devinitdata = { .name ="SC1200" , .init_hwif = init_hwif_sc1200, .host_flags = IDE_HFLAG_SERIALIZE |
drivers/ide/pci/scc_pata.c +5 -6
@@ -538,12 +538,13 @@ static int setup_mmio_scc (struct pci_dev *dev, const char *name)/** * init_setup_scc - set up an SCC PATA Controller * @dev: PCI device -* @d: IDE PCI device +* @d: IDE port info * * Perform the initial set up for this device. */ -static int __devinit init_setup_scc (struct pci_dev *dev,ide_pci_device_t *d) +static int __devinit init_setup_scc (struct pci_dev *dev, +const struct ide_port_info *d) {unsigned long ctl_base;unsigned long dma_base;
@@ -702,7 +703,7 @@ static void __devinit init_hwif_scc(ide_hwif_t *hwif) .pio_mask = ATA_PIO4, \ } -static ide_pci_device_t scc_chipsets[]__devinitdata = { +static const struct ide_port_info scc_chipsets[]__devinitdata = {/* 0 */ DECLARE_SCC_DEV ("sccIDE" ), };
@@ -717,9 +718,7 @@ static ide_pci_device_t scc_chipsets[] __devinitdata = {static int __devinit scc_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -ide_pci_device_t *d = &scc_chipsets[id->driver_data]; - -return init_setup_scc (dev, d); +return init_setup_scc (dev, &scc_chipsets[id->driver_data]); }/**
drivers/ide/pci/serverworks.c +2 -9
@@ -158,13 +158,6 @@ static void svwks_set_dma_mode(ide_drive_t *drive, const u8 speed)u8 ultra_enable =0 , ultra_timing =0 , dma_timing =0 ; -/* If we are about to put a disk into UDMA mode we screwed up. -Our code assumes we never _ever_ do this on an OSB4 */ - -if (dev->device ==PCI_DEVICE_ID_SERVERWORKS_OSB4 && - drive->media == ide_disk && speed >=XFER_UDMA_0 ) -BUG (); -pci_read_config_byte (dev, (0x56 |hwif->channel), &ultra_timing);pci_read_config_byte (dev,0x54 , &ultra_enable);
@@ -373,7 +366,7 @@ static void __devinit init_hwif_svwks (ide_hwif_t *hwif) } } -static ide_pci_device_t serverworks_chipsets[]__devinitdata = { +static const struct ide_port_info serverworks_chipsets[]__devinitdata = { {/* 0 */ .name ="SvrWks OSB4" , .init_chipset = init_chipset_svwks,
@@ -430,7 +423,7 @@ static ide_pci_device_t serverworks_chipsets[] __devinitdata = {static int __devinit svwks_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -ide_pci_device_t d; +struct ide_port_info d;u8 idx = id->driver_data; d = serverworks_chipsets[idx];
drivers/ide/pci/sgiioc4.c +9 -7
@@ -614,6 +614,7 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev)void __iomem *virt_base;ide_hwif_t *hwif;int h; +u8 idx[4 ] = {0xff ,0xff ,0xff ,0xff };/* * Find an empty HWIF; if none available, return -ENOMEM.
@@ -654,10 +655,12 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev) }if (hwif->io_ports[IDE_DATA_OFFSET ] != cmd_base) { +hw_regs_t hw; +/* Initialize the IO registers */ -sgiioc4_init_hwif_ports (&hwif->hw, cmd_base, ctl, irqport); -memcpy (hwif->io_ports, hwif->hw.io_ports, -sizeof (hwif->io_ports)); +memset (&hw,0 ,sizeof (hw)); +sgiioc4_init_hwif_ports (&hw, cmd_base, ctl, irqport); +memcpy (hwif->io_ports, hw.io_ports,sizeof (hwif->io_ports)); hwif->noprobe = !hwif->io_ports[IDE_DATA_OFFSET ]; }
@@ -679,11 +682,10 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev)ide_init_sgiioc4 (hwif); -if (probe_hwif_init (hwif)) -return -EIO ; + idx[0 ] = hwif->index; -/* Create /proc/ide entries */ -ide_proc_register_port (hwif); +if (ide_device_add (idx)) +return -EIO ;return 0 ; }
drivers/ide/pci/siimage.c +43 -49
219 lines not on this page · raw message
drivers/ide/pci/sis5513.c +2 -2
@@ -264,7 +264,7 @@ static void sis_ata133_program_timings(ide_drive_t *drive, const u8 mode)if (mode >=XFER_MW_DMA_0 ) { t1 &= ~0x04 ;/* disable UDMA */ idx = mode -XFER_MW_DMA_0 +5 ; - } + }else idx = mode -XFER_PIO_0 ; t1 |= ini_time_value[clk][idx] <<12 ; t1 |= act_time_value[clk][idx] <<16 ;
@@ -579,7 +579,7 @@ static void __devinit init_hwif_sis5513 (ide_hwif_t *hwif) hwif->cbl =ata66_sis5513 (hwif); } -static ide_pci_device_t sis5513_chipset__devinitdata = { +static const struct ide_port_info sis5513_chipset__devinitdata = { .name ="SIS5513" , .init_chipset = init_chipset_sis5513, .init_hwif = init_hwif_sis5513,
drivers/ide/pci/sl82c105.c +5 -9
@@ -361,13 +361,6 @@ static void __devinit init_hwif_sl82c105(ide_hwif_t *hwif) hwif->selectproc = &sl82c105_selectproc; hwif->resetproc = &sl82c105_resetproc; -/* -* We support 32-bit I/O on this interface, and -* it doesn't have problems with interrupts. -*/ - hwif->drives[0 ].io_32bit = hwif->drives[1 ].io_32bit =1 ; - hwif->drives[0 ].unmask = hwif->drives[1 ].unmask =1 ; -if (!hwif->dma_base)return ;
@@ -394,12 +387,15 @@ static void __devinit init_hwif_sl82c105(ide_hwif_t *hwif) hwif->serialized = hwif->mate->serialized =1 ; } -static ide_pci_device_t sl82c105_chipset__devinitdata = { +static const struct ide_port_info sl82c105_chipset__devinitdata = { .name ="W82C105" , .init_chipset = init_chipset_sl82c105, .init_hwif = init_hwif_sl82c105, .enablebits = {{0x40 ,0x01 ,0x01 }, {0x40 ,0x10 ,0x10 }}, - .host_flags =IDE_HFLAG_NO_AUTODMA |IDE_HFLAG_BOOTABLE , + .host_flags =IDE_HFLAG_IO_32BIT | +IDE_HFLAG_UNMASK_IRQS | +IDE_HFLAG_NO_AUTODMA | +IDE_HFLAG_BOOTABLE , .pio_mask =ATA_PIO5 , };
drivers/ide/pci/slc90e66.c +6 -4
@@ -1,5 +1,5 @@/* -* linux/drivers/ide/pci/slc90e66.c Version 0.18 Aug 9, 2007 +* linux/drivers/ide/pci/slc90e66.c Version 0.19 Sep 24, 2007 * * Copyright (C) 2000-2002 Andre Hedrick <[email protected]> * Copyright (C) 2006-2007 MontaVista Software, Inc. <[email protected]>
@@ -21,6 +21,8 @@#include <asm/io.h> +static DEFINE_SPINLOCK (slc90e66_lock); +static void slc90e66_set_pio_mode (ide_drive_t *drive,const u8 pio) {ide_hwif_t *hwif =HWIF (drive);
@@ -40,7 +42,7 @@ static void slc90e66_set_pio_mode(ide_drive_t *drive, const u8 pio) { 2, 1 }, { 2, 3 }, }; -spin_lock_irqsave (&ide_lock, flags); +spin_lock_irqsave (&slc90e66_lock, flags);pci_read_config_word (dev, master_port, &master_data);if (pio >1 )
@@ -71,7 +73,7 @@ static void slc90e66_set_pio_mode(ide_drive_t *drive, const u8 pio)pci_write_config_word (dev, master_port, master_data);if (is_slave)pci_write_config_byte (dev, slave_port, slave_data); -spin_unlock_irqrestore (&ide_lock, flags); +spin_unlock_irqrestore (&slc90e66_lock, flags); }static void slc90e66_set_dma_mode (ide_drive_t *drive,const u8 speed)
@@ -146,7 +148,7 @@ static void __devinit init_hwif_slc90e66 (ide_hwif_t *hwif) hwif->cbl = (reg47 & mask) ?ATA_CBL_PATA40 :ATA_CBL_PATA80 ; } -static ide_pci_device_t slc90e66_chipset__devinitdata = { +static const struct ide_port_info slc90e66_chipset__devinitdata = { .name ="SLC90E66" , .init_hwif = init_hwif_slc90e66, .enablebits = {{0x41 ,0x80 ,0x80 }, {0x43 ,0x80 ,0x80 }},
drivers/ide/pci/tc86c001.c +1 -1
@@ -218,7 +218,7 @@ static unsigned int __devinit init_chipset_tc86c001(struct pci_dev *dev,return err; } -static ide_pci_device_t tc86c001_chipset__devinitdata = { +static const struct ide_port_info tc86c001_chipset__devinitdata = { .name ="TC86C001" , .init_chipset = init_chipset_tc86c001, .init_hwif = init_hwif_tc86c001,
drivers/ide/pci/triflex.c +1 -1
@@ -102,7 +102,7 @@ static void __devinit init_hwif_triflex(ide_hwif_t *hwif) hwif->set_dma_mode = &triflex_set_mode; } -static ide_pci_device_t triflex_device__devinitdata = { +static const struct ide_port_info triflex_device__devinitdata = { .name ="TRIFLEX" , .init_hwif = init_hwif_triflex, .enablebits = {{0x80 ,0x01 ,0x01 }, {0x80 ,0x02 ,0x02 }},
drivers/ide/pci/trm290.c +2 -2
@@ -250,7 +250,6 @@ static void __devinit init_hwif_trm290(ide_hwif_t *hwif)u8 reg =0 ;struct pci_dev *dev = hwif->pci_dev; - hwif->chipset = ide_trm290; cfgbase =pci_resource_start (dev,4 );if ((dev->class &5 ) && cfgbase) { hwif->config_data = cfgbase;
@@ -320,9 +319,10 @@ static void __devinit init_hwif_trm290(ide_hwif_t *hwif)#endif } -static ide_pci_device_t trm290_chipset__devinitdata = { +static const struct ide_port_info trm290_chipset__devinitdata = { .name ="TRM290" , .init_hwif = init_hwif_trm290, + .chipset = ide_trm290, .host_flags =IDE_HFLAG_NO_ATAPI_DMA | #if 0 /* play it safe for now */ IDE_HFLAG_TRUST_BIOS_FOR_DMA |
drivers/ide/pci/via82cxxx.c +36 -45
114 lines not on this page · raw message
drivers/ide/ppc/mpc8xx.c +2 -2
@@ -316,8 +316,8 @@ m8xx_ide_init_hwif_ports(hw_regs_t *hw, unsigned long data_port, ide_hwifs[data_port].pio_mask =ATA_PIO4 ; ide_hwifs[data_port].set_pio_mode = m8xx_ide_set_pio_mode; + ide_hwifs[data_port].ack_intr = (ide_ack_intr_t *)ide_interrupt_ack; - hw->ack_intr = (ide_ack_intr_t *) ide_interrupt_ack;/* Enable Harddisk Interrupt, * and make it edge sensitive */
@@ -402,8 +402,8 @@ void m8xx_ide_init_hwif_ports (hw_regs_t *hw, ide_hwifs[data_port].pio_mask =ATA_PIO4 ; ide_hwifs[data_port].set_pio_mode = m8xx_ide_set_pio_mode; + ide_hwifs[data_port].ack_intr = (ide_ack_intr_t *)ide_interrupt_ack; - hw->ack_intr = (ide_ack_intr_t *) ide_interrupt_ack;/* Enable Harddisk Interrupt, * and make it edge sensitive */
drivers/ide/ppc/pmac.c +7 -5
@@ -1039,6 +1039,8 @@ pmac_ide_setup_device(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif) {struct device_node *np = pmif->node;const int *bidp; +u8 idx[4 ] = {0xff ,0xff ,0xff ,0xff }; +hw_regs_t hw; pmif->cable_80 =0 ; pmif->broken_dma = pmif->broken_dma_warn =0 ;
@@ -1124,8 +1126,9 @@ pmac_ide_setup_device(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif)/* Tell common code _not_ to mess with resources */ hwif->mmio =1 ; hwif->hwif_data = pmif; -pmac_ide_init_hwif_ports (&hwif->hw, pmif->regbase,0 , &hwif->irq); -memcpy (hwif->io_ports, hwif->hw.io_ports,sizeof (hwif->io_ports)); +memset (&hw,0 ,sizeof (hw)); +pmac_ide_init_hwif_ports (&hw, pmif->regbase,0 , &hwif->irq); +memcpy (hwif->io_ports, hw.io_ports,sizeof (hwif->io_ports)); hwif->chipset = ide_pmac; hwif->noprobe = !hwif->io_ports[IDE_DATA_OFFSET ] || pmif->mediabay; hwif->hold = pmif->mediabay;
@@ -1163,10 +1166,9 @@ pmac_ide_setup_device(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif)pmac_ide_setup_dma (pmif, hwif);#endif /* CONFIG_BLK_DEV_IDEDMA_PMAC */ -/* We probe the hwif now */ -probe_hwif_init (hwif); + idx[0 ] = hwif->index; -ide_proc_register_port (hwif); +ide_device_add (idx);return 0 ; }
drivers/ide/setup-pci.c +84 -118
4 lines not on this page · raw message
include/linux/ide.h +33 -76
109 lines not on this page · 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.