it8213: fix return value in it8213_init_one()
A message that is not in the archive (sent off-list or not yet received): 20080706172010.559358957@[email protected]
PATCH 1/50 it8213: fix return value in it8213_init_one()
--- drivers/ide/pci/it8213.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/ide/pci/it8213.c +1 -2
@@ -184,8 +184,7 @@ static const struct ide_port_info it8213static int __devinit it8213_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -ide_setup_pci_device (dev, &it8213_chipsets[id->driver_data]); -return 0 ; +return ide_setup_pci_device (dev, &it8213_chipsets[id->driver_data]); }static const struct pci_device_id it8213_pci_tbl[] = {
PATCH 2/50 ide: always call ->init_chipset method in do_ide_setup_pci_device()
In reply to a message not in the archiveCall ->init_chipset method also for 'tried_config' / '!pciirq' conditions.
--- drivers/ide/setup-pci.c | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-)
drivers/ide/setup-pci.c +10 -14
@@ -498,20 +498,21 @@ static int do_ide_setup_pci_device(struc*/ pciirq = dev->irq; +/* +* This allows offboard ide-pci cards the enable a BIOS, +* verify interrupt settings of split-mirror pci-config +* space, place chipset into init-mode, and/or preserve +* an interrupt if the card is not native ide support. +*/ + ret = d->init_chipset ? d->init_chipset (dev, d->name) :0 ; +if (ret <0 ) + goto out; +/* Is it an "IDE storage" device in non-PCI mode? */ if ((dev->class >>8 ) ==PCI_CLASS_STORAGE_IDE && (dev->class &5 ) !=5 ) {if (noisy)printk (KERN_INFO "%s: not 100%% native mode: " "will probe irqs later\n" , d->name); -/* -* This allows offboard ide-pci cards the enable a BIOS, -* verify interrupt settings of split-mirror pci-config -* space, place chipset into init-mode, and/or preserve -* an interrupt if the card is not native ide support. -*/ - ret = d->init_chipset ? d->init_chipset (dev, d->name) :0 ; -if (ret <0 ) - goto out; pciirq = ret; }else if (tried_config) {if (noisy)
@@ -523,11 +524,6 @@ static int do_ide_setup_pci_device(struc d->name, pciirq); pciirq =0 ; }else { -if (d->init_chipset) { - ret = d->init_chipset (dev, d->name); -if (ret <0 ) - goto out; - }if (noisy)printk (KERN_INFO "%s: 100%% native mode on irq %d\n" , d->name, pciirq);
PATCH 3/50 ide: respect dev->irq in do_ide_setup_pci_device() also if tried_config
In reply to a message not in the archive* If device is in the PCI native mode respect dev->irq regardless of 'tried_config' in do_ide_setup_pci_device().
* Drop no longer needed 'config' argument from ide_setup_pci_controller().
--- drivers/ide/setup-pci.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-)
drivers/ide/setup-pci.c +3 -9
@@ -392,14 +392,14 @@ int ide_hwif_setup_dma(ide_hwif_t *hwif,* @dev: PCI device * @d: IDE port info * @noisy: verbose flag -* @config: returned as 1 if we configured the hardware * * Set up the PCI and controller side of the IDE interface. This brings * up the PCI side of the device, checks that the device is enabled * and enables it if need be */ -static int ide_setup_pci_controller (struct pci_dev *dev,const struct ide_port_info *d,int noisy,int *config) +static int ide_setup_pci_controller (struct pci_dev *dev, +const struct ide_port_info *d,int noisy) {int ret;u16 pcicmd;
@@ -420,7 +420,6 @@ static int ide_setup_pci_controller(stru ret =ide_pci_configure (dev, d);if (ret <0 ) goto out; - *config =1 ;printk (KERN_INFO "%s: device enabled (Linux)\n" , d->name); }
@@ -486,10 +485,9 @@ static int do_ide_setup_pci_device(strucconst struct ide_port_info *d, u8 noisy) { - int tried_config = 0; int pciirq, ret; - ret =ide_setup_pci_controller (dev, d, noisy, &tried_config); + ret =ide_setup_pci_controller (dev, d, noisy);if (ret <0 ) goto out;
@@ -514,10 +512,6 @@ static int do_ide_setup_pci_device(strucprintk (KERN_INFO "%s: not 100%% native mode: " "will probe irqs later\n" , d->name); pciirq = ret; - }else if (tried_config) { -if (noisy) -printk (KERN_INFO "%s: will probe irqs later\n" , d->name); - pciirq =0 ; }else if (!pciirq) {if (noisy) printk(KERN_WARNING "%s: bad irq (%d): will probe later\n",
PATCH 4/50 ide: move ide_setup_pci_controller() call to ide_setup_pci_device()
In reply to a message not in the archiveThere should be no functional changes caused by this patch.
--- drivers/ide/setup-pci.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-)
drivers/ide/setup-pci.c +9 -5
@@ -487,10 +487,6 @@ static int do_ide_setup_pci_device(struc {int pciirq, ret; - ret =ide_setup_pci_controller (dev, d, noisy); -if (ret <0 ) - goto out; -/* * Can we trust the reported IRQ? */
@@ -533,6 +529,10 @@ int ide_setup_pci_device(struct pci_devhw_regs_t hw[4 ], *hws[] = {NULL ,NULL ,NULL ,NULL };int ret; + ret =ide_setup_pci_controller (dev, d,1 ); +if (ret <0 ) + goto out; + ret =do_ide_setup_pci_device (dev, d,1 );if (ret >=0 ) {
@@ -541,7 +541,7 @@ int ide_setup_pci_device(struct pci_dev ret =ide_host_add (d, hws,NULL ); } - +out:return ret; }EXPORT_SYMBOL_GPL (ide_setup_pci_device);
@@ -554,6 +554,10 @@ int ide_setup_pci_devices(struct pci_devhw_regs_t hw[4 ], *hws[] = {NULL ,NULL ,NULL ,NULL };for (i =0 ; i <2 ; i++) { + ret =ide_setup_pci_controller (pdev[i], d, !i); +if (ret <0 ) + goto out; + ret =do_ide_setup_pci_device (pdev[i], d, !i);/*
PATCH 5/50 ide: call ide_pci_setup_ports() before do_ide_setup_pci_device()
In reply to a message not in the archive* Call ide_pci_setup_ports() before do_ide_setup_pci_device() in ide_setup_pci_device[s]().
While at it:
* Remove stale FIXMEs.
--- drivers/ide/setup-pci.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-)
drivers/ide/setup-pci.c +11 -7
@@ -533,14 +533,16 @@ int ide_setup_pci_device(struct pci_devif (ret <0 ) goto out; +ide_pci_setup_ports (dev, d,0 , &hw[0 ], &hws[0 ]); + ret =do_ide_setup_pci_device (dev, d,1 ); +if (ret <0 ) + goto out; -if (ret >=0 ) { -/* FIXME: silent failure can happen */ -ide_pci_setup_ports (dev, d, ret, &hw[0 ], &hws[0 ]); +/* fixup IRQ */ + hw[1 ].irq = hw[0 ].irq = ret; - ret =ide_host_add (d, hws,NULL ); - } + ret =ide_host_add (d, hws,NULL ); out:return ret; }
@@ -558,6 +560,8 @@ int ide_setup_pci_devices(struct pci_devif (ret <0 ) goto out; +ide_pci_setup_ports (pdev[i], d,0 , &hw[i*2 ], &hws[i*2 ]); + ret =do_ide_setup_pci_device (pdev[i], d, !i);/*
@@ -567,8 +571,8 @@ int ide_setup_pci_devices(struct pci_devif (ret <0 ) goto out; -/* FIXME: silent failure can happen */ -ide_pci_setup_ports (pdev[i], d, ret, &hw[i*2 ], &hws[i*2 ]); +/* fixup IRQ */ + hw[i*2 +1 ].irq = hw[i*2 ].irq = ret; } ret =ide_host_add (d, hws,NULL );
PATCH 6/50 ide: add ->dev and ->host_priv fields to struct ide_host
In reply to a message not in the archive* Add 'struct device *dev[2]' and 'void *host_priv' fields to struct ide_host.
* Set ->dev[] in ide_host_alloc_all()/ide_setup_pci_device[s]().
* Pass 'void *priv' argument to ide_setup_pci_device[s]() and use it to set ->host_priv.
* Set PCI dev's ->driver_data to point to the struct ide_host instance if PCI host driver wants to use ->host_priv.
* Rename ide_setup_pci_device[s]() to ide_pci_init_{one,two}().
--- drivers/ide/ide-probe.c | 3 ++ drivers/ide/pci/aec62xx.c | 2 - drivers/ide/pci/alim15x3.c | 2 - drivers/ide/pci/amd74xx.c | 2 - drivers/ide/pci/atiixp.c | 2 - drivers/ide/pci/cmd64x.c | 2 - drivers/ide/pci/cs5530.c | 2 - drivers/ide/pci/cs5535.c | 2 - drivers/ide/pci/cy82c693.c | 2 - drivers/ide/pci/generic.c | 2 - drivers/ide/pci/hpt34x.c | 2 - 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 | 2 - drivers/ide/pci/pdc202xx_new.c | 4 +-- drivers/ide/pci/pdc202xx_old.c | 2 - drivers/ide/pci/piix.c | 2 - drivers/ide/pci/rz1000.c | 2 - drivers/ide/pci/sc1200.c | 2 - drivers/ide/pci/serverworks.c | 2 - drivers/ide/pci/siimage.c | 2 - drivers/ide/pci/sis5513.c | 2 - drivers/ide/pci/sl82c105.c | 2 - drivers/ide/pci/slc90e66.c | 2 - drivers/ide/pci/tc86c001.c | 2 - drivers/ide/pci/triflex.c | 2 - drivers/ide/pci/trm290.c | 2 - drivers/ide/pci/via82cxxx.c | 2 - drivers/ide/setup-pci.c | 52 +++++++++++++++++++++++++++++++++++------ include/linux/ide.h | 7 +++-- 33 files changed, 85 insertions(+), 41 deletions(-)
drivers/ide/ide-probe.c +3 -0
@@ -1608,6 +1608,9 @@ struct ide_host *ide_host_alloc_all(consreturn NULL ; } +if (hws[0 ]) + host->dev[0 ] = hws[0 ]->dev; +return host; }EXPORT_SYMBOL_GPL (ide_host_alloc_all);
drivers/ide/pci/aec62xx.c +1 -1
@@ -273,7 +273,7 @@ static int __devinit aec62xx_init_one(st } } - err =ide_setup_pci_device (dev, &d); + err =ide_pci_init_one (dev, &d,NULL );if (err)pci_disable_device (dev);
drivers/ide/pci/alim15x3.c +1 -1
@@ -565,7 +565,7 @@ static int __devinit alim15x3_init_one(sif (idx ==0 ) d.host_flags |=IDE_HFLAG_CLEAR_SIMPLEX ; -return ide_setup_pci_device (dev, &d); +return ide_pci_init_one (dev, &d,NULL ); }
drivers/ide/pci/amd74xx.c +1 -1
@@ -302,7 +302,7 @@ static int __devinit amd74xx_probe(struc d.name,pci_name (dev), dev->revision, amd_dma[fls(d.udma_mask) - 1]); -return ide_setup_pci_device (dev, &d); +return ide_pci_init_one (dev, &d,NULL ); }static const struct pci_device_id amd74xx_pci_tbl[] = {
drivers/ide/pci/atiixp.c +1 -1
@@ -167,7 +167,7 @@ static const struct ide_port_info atiixpstatic int __devinit atiixp_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -return ide_setup_pci_device (dev, &atiixp_pci_info[id->driver_data]); +return ide_pci_init_one (dev, &atiixp_pci_info[id->driver_data],NULL ); }static const struct pci_device_id atiixp_pci_tbl[] = {
drivers/ide/pci/cmd64x.c +1 -1
@@ -507,7 +507,7 @@ static int __devinit cmd64x_init_one(str } } -return ide_setup_pci_device (dev, &d); +return ide_pci_init_one (dev, &d,NULL ); }static const struct pci_device_id cmd64x_pci_tbl[] = {
drivers/ide/pci/cs5530.c +1 -1
@@ -256,7 +256,7 @@ static const struct ide_port_info cs5530static int __devinit cs5530_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -return ide_setup_pci_device (dev, &cs5530_chipset); +return ide_pci_init_one (dev, &cs5530_chipset,NULL ); }static const struct pci_device_id cs5530_pci_tbl[] = {
drivers/ide/pci/cs5535.c +1 -1
@@ -180,7 +180,7 @@ static const struct ide_port_info cs5535static int __devinit cs5535_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -return ide_setup_pci_device (dev, &cs5535_chipset); +return ide_pci_init_one (dev, &cs5535_chipset,NULL ); }static const struct pci_device_id cs5535_pci_tbl[] = {
drivers/ide/pci/cy82c693.c +1 -1
@@ -419,7 +419,7 @@ static int __devinit cy82c693_init_one(sif ((dev->class >>8 ) ==PCI_CLASS_STORAGE_IDE &&PCI_FUNC (dev->devfn) ==1 ) { dev2 =pci_get_slot (dev->bus, dev->devfn +1 ); - ret =ide_setup_pci_devices (dev, dev2, &cy82c693_chipset); + ret =ide_pci_init_two (dev, dev2, &cy82c693_chipset,NULL );/* We leak pci refs here but thats ok - we can't be unloaded */ }return ret;
drivers/ide/pci/generic.c +1 -1
@@ -139,7 +139,7 @@ static int __devinit generic_init_one(st goto out; } } - ret =ide_setup_pci_device (dev, d); + ret =ide_pci_init_one (dev, d,NULL ); out:return ret; }
drivers/ide/pci/hpt34x.c +1 -1
@@ -156,7 +156,7 @@ static int __devinit hpt34x_init_one(str d = &hpt34x_chipsets[(pcicmd &PCI_COMMAND_MEMORY ) ?1 :0 ]; -return ide_setup_pci_device (dev, d); +return ide_pci_init_one (dev, d,NULL ); }static const struct pci_device_id hpt34x_pci_tbl[] = {
drivers/ide/pci/hpt366.c +2 -2
@@ -1608,13 +1608,13 @@ static int __devinit hpt366_init_one(str d.host_flags &= ~IDE_HFLAG_NON_BOOTABLE ; } - ret =ide_setup_pci_devices (dev, dev2, &d); + ret =ide_pci_init_two (dev, dev2, &d,NULL );if (ret <0 )pci_dev_put (dev2);return ret; } -return ide_setup_pci_device (dev, &d); +return ide_pci_init_one (dev, &d,NULL ); }static const struct pci_device_id hpt366_pci_tbl[]__devinitconst = {
drivers/ide/pci/it8213.c +1 -1
@@ -184,7 +184,7 @@ static const struct ide_port_info it8213static int __devinit it8213_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -return ide_setup_pci_device (dev, &it8213_chipsets[id->driver_data]); +return ide_pci_init_one (dev, &it8213_chipsets[id->driver_data],NULL ); }static const struct pci_device_id it8213_pci_tbl[] = {
drivers/ide/pci/it821x.c +1 -1
@@ -658,7 +658,7 @@ static int __devinit it821x_init_one(strpci_set_drvdata (dev, itdevs); -return ide_setup_pci_device (dev, &it821x_chipsets[id->driver_data]); +return ide_pci_init_one (dev, &it821x_chipsets[id->driver_data],NULL ); }static const struct pci_device_id it821x_pci_tbl[] = {
drivers/ide/pci/jmicron.c +1 -1
@@ -121,7 +121,7 @@ static const struct ide_port_info jmicrostatic int __devinit jmicron_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -return ide_setup_pci_device (dev, &jmicron_chipset); +return ide_pci_init_one (dev, &jmicron_chipset,NULL ); }/* All JMB PATA controllers have and will continue to have the same
drivers/ide/pci/ns87415.c +1 -1
@@ -328,7 +328,7 @@ static int __devinit ns87415_init_one(st d.tp_ops = &superio_tp_ops; }#endif -return ide_setup_pci_device (dev, &d); +return ide_pci_init_one (dev, &d,NULL ); } static const struct pci_device_id ns87415_pci_tbl[] = {
drivers/ide/pci/opti621.c +1 -1
@@ -209,7 +209,7 @@ static const struct ide_port_info opti62static int __devinit opti621_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -return ide_setup_pci_device (dev, &opti621_chipset); +return ide_pci_init_one (dev, &opti621_chipset,NULL ); }static const struct pci_device_id opti621_pci_tbl[] = {
drivers/ide/pci/pdc202xx_new.c +2 -2
@@ -524,7 +524,7 @@ static int __devinit pdc202new_init_one( dev2 =pdc20270_get_dev2 (dev);if (dev2) { -int ret =ide_setup_pci_devices (dev, dev2, d); +int ret =ide_pci_init_two (dev, dev2, d,NULL );if (ret <0 )pci_dev_put (dev2);return ret;
@@ -540,7 +540,7 @@ static int __devinit pdc202new_init_one(return -ENODEV ; } -return ide_setup_pci_device (dev, d); +return ide_pci_init_one (dev, d,NULL ); }static const struct pci_device_id pdc202new_pci_tbl[] = {
drivers/ide/pci/pdc202xx_old.c +1 -1
@@ -412,7 +412,7 @@ static int __devinit pdc202xx_init_one(s } } -return ide_setup_pci_device (dev, d); +return ide_pci_init_one (dev, d,NULL ); }static const struct pci_device_id pdc202xx_pci_tbl[] = {
drivers/ide/pci/piix.c +1 -1
@@ -394,7 +394,7 @@ static const struct ide_port_info piix_pstatic int __devinit piix_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -return ide_setup_pci_device (dev, &piix_pci_info[id->driver_data]); +return ide_pci_init_one (dev, &piix_pci_info[id->driver_data],NULL ); }/**
drivers/ide/pci/rz1000.c +1 -1
@@ -48,7 +48,7 @@ static const struct ide_port_info rz1000static int __devinit rz1000_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -return ide_setup_pci_device (dev, &rz1000_chipset); +return ide_pci_init_one (dev, &rz1000_chipset,NULL ); }static const struct pci_device_id rz1000_pci_tbl[] = {
drivers/ide/pci/sc1200.c +1 -1
@@ -317,7 +317,7 @@ static const struct ide_port_info sc1200static int __devinit sc1200_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -return ide_setup_pci_device (dev, &sc1200_chipset); +return ide_pci_init_one (dev, &sc1200_chipset,NULL ); }static const struct pci_device_id sc1200_pci_tbl[] = {
drivers/ide/pci/serverworks.c +1 -1
@@ -422,7 +422,7 @@ static int __devinit svwks_init_one(stru d.host_flags &= ~IDE_HFLAG_SINGLE ; } -return ide_setup_pci_device (dev, &d); +return ide_pci_init_one (dev, &d,NULL ); }static const struct pci_device_id svwks_pci_tbl[] = {
drivers/ide/pci/siimage.c +1 -1
@@ -795,7 +795,7 @@ static int __devinit siimage_init_one(st d.host_flags |=IDE_HFLAG_NO_ATAPI_DMA ; } -return ide_setup_pci_device (dev, &d); +return ide_pci_init_one (dev, &d,NULL ); }static const struct pci_device_id siimage_pci_tbl[] = {
drivers/ide/pci/sis5513.c +1 -1
@@ -583,7 +583,7 @@ static int __devinit sis5513_init_one(st d.udma_mask = udma_rates[chipset_family]; -return ide_setup_pci_device (dev, &d); +return ide_pci_init_one (dev, &d,NULL ); }static const struct pci_device_id sis5513_pci_tbl[] = {
drivers/ide/pci/sl82c105.c +1 -1
@@ -335,7 +335,7 @@ static int __devinit sl82c105_init_one(s d.host_flags &= ~IDE_HFLAG_SERIALIZE_DMA ; } -return ide_setup_pci_device (dev, &d); +return ide_pci_init_one (dev, &d,NULL ); }static const struct pci_device_id sl82c105_pci_tbl[] = {
drivers/ide/pci/slc90e66.c +1 -1
@@ -144,7 +144,7 @@ static const struct ide_port_info slc90estatic int __devinit slc90e66_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -return ide_setup_pci_device (dev, &slc90e66_chipset); +return ide_pci_init_one (dev, &slc90e66_chipset,NULL ); }static const struct pci_device_id slc90e66_pci_tbl[] = {
drivers/ide/pci/tc86c001.c +1 -1
@@ -215,7 +215,7 @@ static const struct ide_port_info tc86c0static int __devinit tc86c001_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -return ide_setup_pci_device (dev, &tc86c001_chipset); +return ide_pci_init_one (dev, &tc86c001_chipset,NULL ); }static const struct pci_device_id tc86c001_pci_tbl[] = {
drivers/ide/pci/triflex.c +1 -1
@@ -104,7 +104,7 @@ static const struct ide_port_info triflestatic int __devinit triflex_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -return ide_setup_pci_device (dev, &triflex_device); +return ide_pci_init_one (dev, &triflex_device,NULL ); }static const struct pci_device_id triflex_pci_tbl[] = {
drivers/ide/pci/trm290.c +1 -1
@@ -340,7 +340,7 @@ static const struct ide_port_info trm290static int __devinit trm290_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -return ide_setup_pci_device (dev, &trm290_chipset); +return ide_pci_init_one (dev, &trm290_chipset,NULL ); }static const struct pci_device_id trm290_pci_tbl[] = {
drivers/ide/pci/via82cxxx.c +1 -1
@@ -466,7 +466,7 @@ static int __devinit via_init_one(struct d.udma_mask = via_config->udma_mask; -return ide_setup_pci_device (dev, &d); +return ide_pci_init_one (dev, &d,NULL ); }static const struct pci_device_id via_pci_tbl[] = {
drivers/ide/setup-pci.c +45 -7
90 lines not on this page · raw message
include/linux/ide.h +5 -2
@@ -611,6 +611,8 @@ typedef struct hwif_s {struct ide_host {ide_hwif_t *ports[MAX_HWIFS ];unsigned int n_ports; +struct device *dev[2 ]; +void *host_priv; };/*
@@ -1186,8 +1188,9 @@ struct ide_port_info {u8 udma_mask; }; -int ide_setup_pci_device (struct pci_dev *,const struct ide_port_info *); -int ide_setup_pci_devices (struct pci_dev *,struct pci_dev *,const struct ide_port_info *); +int ide_pci_init_one (struct pci_dev *,const struct ide_port_info *,void *); +int ide_pci_init_two (struct pci_dev *,struct pci_dev *, +const struct ide_port_info *,void *);void ide_map_sg (ide_drive_t *,struct request *);void ide_init_sg_cmd (ide_drive_t *,struct request *);
PATCH 7/50 ide: add ide_device_{get,put}() helpers
In reply to a message not in the archive* Add 'struct ide_host *host' field to ide_hwif_t and set it in ide_host_alloc_all().
* Add ide_device_{get,put}() helpers loosely based on SCSI's scsi_device_{get,put}() ones.
* Convert IDE device drivers to use ide_device_{get,put}().
--- drivers/ide/ide-cd.c | 12 +++++++++--- drivers/ide/ide-disk.c | 12 +++++++++--- drivers/ide/ide-floppy.c | 12 +++++++++--- drivers/ide/ide-probe.c | 2 ++ drivers/ide/ide-tape.c | 12 +++++++++--- drivers/ide/ide.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ drivers/scsi/ide-scsi.c | 8 +++++++- include/linux/ide.h | 7 +++++++ 8 files changed, 99 insertions(+), 13 deletions(-)
drivers/ide/ide-cd.c +9 -3
@@ -57,23 +57,29 @@ static DEFINE_MUTEX(idecd_ref_mutex);#define ide_cd_g (disk) \ container_of((disk)->private_data, struct cdrom_info, driver) +static void ide_cd_release (struct kref *); +static struct cdrom_info *ide_cd_get (struct gendisk *disk) {struct cdrom_info *cd =NULL ;mutex_lock (&idecd_ref_mutex); cd =ide_cd_g (disk); -if (cd) +if (cd) {kref_get (&cd->kref); +if (ide_device_get (cd->drive)) { +kref_put (&cd->kref, ide_cd_release); + cd =NULL ; + } + }mutex_unlock (&idecd_ref_mutex);return cd; } -static void ide_cd_release (struct kref *); -static void ide_cd_put (struct cdrom_info *cd) {mutex_lock (&idecd_ref_mutex); +ide_device_put (cd->drive);kref_put (&cd->kref, ide_cd_release);mutex_unlock (&idecd_ref_mutex); }
drivers/ide/ide-disk.c +9 -3
@@ -56,23 +56,29 @@ static DEFINE_MUTEX(idedisk_ref_mutex);#define ide_disk_g (disk) \ container_of((disk)->private_data, struct ide_disk_obj, driver) +static void ide_disk_release (struct kref *); +static struct ide_disk_obj *ide_disk_get (struct gendisk *disk) {struct ide_disk_obj *idkp =NULL ;mutex_lock (&idedisk_ref_mutex); idkp =ide_disk_g (disk); -if (idkp) +if (idkp) {kref_get (&idkp->kref); +if (ide_device_get (idkp->drive)) { +kref_put (&idkp->kref, ide_disk_release); + idkp =NULL ; + } + }mutex_unlock (&idedisk_ref_mutex);return idkp; } -static void ide_disk_release (struct kref *); -static void ide_disk_put (struct ide_disk_obj *idkp) {mutex_lock (&idedisk_ref_mutex); +ide_device_put (idkp->drive);kref_put (&idkp->kref, ide_disk_release);mutex_unlock (&idedisk_ref_mutex); }
drivers/ide/ide-floppy.c +9 -3
@@ -158,23 +158,29 @@ static DEFINE_MUTEX(idefloppy_ref_mutex)#define ide_floppy_g (disk) \ container_of((disk)->private_data, struct ide_floppy_obj, driver) +static void idefloppy_cleanup_obj (struct kref *); +static struct ide_floppy_obj *ide_floppy_get (struct gendisk *disk) {struct ide_floppy_obj *floppy =NULL ;mutex_lock (&idefloppy_ref_mutex); floppy =ide_floppy_g (disk); -if (floppy) +if (floppy) {kref_get (&floppy->kref); +if (ide_device_get (floppy->drive)) { +kref_put (&floppy->kref, idefloppy_cleanup_obj); + floppy =NULL ; + } + }mutex_unlock (&idefloppy_ref_mutex);return floppy; } -static void idefloppy_cleanup_obj (struct kref *); -static void ide_floppy_put (struct ide_floppy_obj *floppy) {mutex_lock (&idefloppy_ref_mutex); +ide_device_put (floppy->drive);kref_put (&floppy->kref, idefloppy_cleanup_obj);mutex_unlock (&idefloppy_ref_mutex); }
drivers/ide/ide-probe.c +2 -0
@@ -1599,6 +1599,8 @@ struct ide_host *ide_host_alloc_all(conside_init_port_data (hwif, idx); + hwif->host = host; + host->ports[i] = hwif; host->n_ports++; }
drivers/ide/ide-tape.c +9 -3
@@ -322,23 +322,29 @@ static struct class *idetape_sysfs_class#define ide_tape_g (disk) \ container_of((disk)->private_data, struct ide_tape_obj, driver) +static void ide_tape_release (struct kref *); +static struct ide_tape_obj *ide_tape_get (struct gendisk *disk) {struct ide_tape_obj *tape =NULL ;mutex_lock (&idetape_ref_mutex); tape =ide_tape_g (disk); -if (tape) +if (tape) {kref_get (&tape->kref); +if (ide_device_get (tape->drive)) { +kref_put (&tape->kref, ide_tape_release); + tape =NULL ; + } + }mutex_unlock (&idetape_ref_mutex);return tape; } -static void ide_tape_release (struct kref *); -static void ide_tape_put (struct ide_tape_obj *tape) {mutex_lock (&idetape_ref_mutex); +ide_device_put (tape->drive);kref_put (&tape->kref, ide_tape_release);mutex_unlock (&idetape_ref_mutex); }
drivers/ide/ide.c +47 -0
53 lines not on this page · raw message
drivers/scsi/ide-scsi.c +7 -1
@@ -101,8 +101,13 @@ static struct ide_scsi_obj *ide_scsi_getmutex_lock (&idescsi_ref_mutex); scsi =ide_scsi_g (disk); -if (scsi) +if (scsi) {scsi_host_get (scsi->host); +if (ide_device_get (scsi->drive)) { +scsi_host_put (scsi->host); + scsi =NULL ; + } + }mutex_unlock (&idescsi_ref_mutex);return scsi; }
@@ -110,6 +115,7 @@ static struct ide_scsi_obj *ide_scsi_getstatic void ide_scsi_put (struct ide_scsi_obj *scsi) {mutex_lock (&idescsi_ref_mutex); +ide_device_put (scsi->drive);scsi_host_put (scsi->host);mutex_unlock (&idescsi_ref_mutex); }
include/linux/ide.h +7 -0
@@ -517,12 +517,16 @@ struct ide_dma_ops {void (*dma_timeout)(struct ide_drive_s *); }; +struct ide_host ; + typedef struct hwif_s { struct hwif_s *next; /* for linked-list in ide_hwgroup_t */ struct hwif_s *mate; /* other hwif from same PCI chip */ struct hwgroup_s *hwgroup; /* actually (ide_hwgroup_t *) */ struct proc_dir_entry *proc; /* /proc/ide/ directory entry */ + struct ide_host *host; + char name[6]; /* name of interface, eg. "ide0" */ struct ide_io_ports io_ports;
@@ -861,6 +865,9 @@ struct ide_driver_s {#define to_ide_driver (drv) container_of(drv, ide_driver_t, gen_driver) +int ide_device_get (ide_drive_t *); +void ide_device_put (ide_drive_t *); +int generic_ide_ioctl (ide_drive_t *,struct file *,struct block_device *,unsigned ,unsigned long );extern int ide_vlb_clk;
PATCH 8/50 aec62xx: convert to use ->host_priv
In reply to a message not in the archive--- drivers/ide/pci/aec62xx.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-)
drivers/ide/pci/aec62xx.c +16 -16
@@ -59,10 +59,6 @@ static const struct chipset_bus_clock_li { 0, 0x00, 0x00 } }; -#define BUSCLOCK (D ) \ - ((struct chipset_bus_clock_list_entry *) pci_get_drvdata((D))) - -/* * TO DO: active tuning and correction of cards without a bios. */
@@ -88,6 +84,8 @@ static void aec6210_set_mode(ide_drive_t {ide_hwif_t *hwif =HWIF (drive);struct pci_dev *dev =to_pci_dev (hwif->dev); +struct ide_host *host =pci_get_drvdata (dev); +struct chipset_bus_clock_list_entry *bus_clock = host->host_priv;u16 d_conf =0 ;u8 ultra =0 , ultra_conf =0 ;u8 tmp0 =0 , tmp1 =0 , tmp2 =0 ;
@@ -96,7 +94,7 @@ static void aec6210_set_mode(ide_drive_tlocal_irq_save (flags);/* 0x40|(2*drive->dn): Active, 0x41|(2*drive->dn): Recovery */ pci_read_config_word (dev,0x40 |(2 *drive->dn), &d_conf); - tmp0 =pci_bus_clock_list (speed,BUSCLOCK (dev)); + tmp0 =pci_bus_clock_list (speed, bus_clock); d_conf = ((tmp0 &0xf0 ) <<4 ) | (tmp0 &0xf );pci_write_config_word (dev,0x40 |(2 *drive->dn), d_conf);
@@ -104,7 +102,7 @@ static void aec6210_set_mode(ide_drive_t tmp2 =0x00 ;pci_read_config_byte (dev,0x54 , &ultra); tmp1 = ((0x00 << (2 *drive->dn)) | (ultra & ~(3 << (2 *drive->dn)))); - ultra_conf =pci_bus_clock_list_ultra (speed,BUSCLOCK (dev)); + ultra_conf =pci_bus_clock_list_ultra (speed, bus_clock); tmp2 = ((ultra_conf << (2 *drive->dn)) | (tmp1 & ~(3 << (2 *drive->dn))));pci_write_config_byte (dev,0x54 , tmp2);local_irq_restore (flags);
@@ -114,6 +112,8 @@ static void aec6260_set_mode(ide_drive_t {ide_hwif_t *hwif =HWIF (drive);struct pci_dev *dev =to_pci_dev (hwif->dev); +struct ide_host *host =pci_get_drvdata (dev); +struct chipset_bus_clock_list_entry *bus_clock = host->host_priv;u8 unit = (drive->select.b.unit &0x01 );u8 tmp1 =0 , tmp2 =0 ;u8 ultra =0 , drive_conf =0 , ultra_conf =0 ;
@@ -122,12 +122,12 @@ static void aec6260_set_mode(ide_drive_tlocal_irq_save (flags);/* high 4-bits: Active, low 4-bits: Recovery */ pci_read_config_byte (dev,0x40 |drive->dn, &drive_conf); - drive_conf =pci_bus_clock_list (speed,BUSCLOCK (dev)); + drive_conf =pci_bus_clock_list (speed, bus_clock);pci_write_config_byte (dev,0x40 |drive->dn, drive_conf);pci_read_config_byte (dev, (0x44 |hwif->channel), &ultra); tmp1 = ((0x00 << (4 *unit)) | (ultra & ~(7 << (4 *unit)))); - ultra_conf =pci_bus_clock_list_ultra (speed,BUSCLOCK (dev)); + ultra_conf =pci_bus_clock_list_ultra (speed, bus_clock); tmp2 = ((ultra_conf << (4 *unit)) | (tmp1 & ~(7 << (4 *unit))));pci_write_config_byte (dev, (0x44 |hwif->channel), tmp2);local_irq_restore (flags);
@@ -140,13 +140,6 @@ static void aec_set_pio_mode(ide_drive_tstatic unsigned int __devinit init_chipset_aec62xx (struct pci_dev *dev,const char *name) { -int bus_speed = ide_pci_clk ? ide_pci_clk :33 ; - -if (bus_speed <=33 ) -pci_set_drvdata (dev, (void *) aec6xxx_33_base); -else -pci_set_drvdata (dev, (void *) aec6xxx_34_base); -/* These are necessary to get AEC6280 Macintosh cards to work */ if ((dev->device ==PCI_DEVICE_ID_ARTOP_ATP865 ) || (dev->device ==PCI_DEVICE_ID_ARTOP_ATP865R )) {
@@ -254,10 +247,17 @@ static const struct ide_port_info aec62xstatic int __devinit aec62xx_init_one (struct pci_dev *dev,const struct pci_device_id *id) { +const struct chipset_bus_clock_list_entry *bus_clock;struct ide_port_info d;u8 idx = id->driver_data; +int bus_speed = ide_pci_clk ? ide_pci_clk :33 ;int err; +if (bus_speed <=33 ) + bus_clock = aec6xxx_33_base; +else + bus_clock = aec6xxx_34_base; + err =pci_enable_device (dev);if (err)return err;
@@ -273,7 +273,7 @@ static int __devinit aec62xx_init_one(st } } - err =ide_pci_init_one (dev, &d,NULL ); + err =ide_pci_init_one (dev, &d, (void *)bus_clock);if (err)pci_disable_device (dev);
PATCH 9/50 hpt366: convert to use ->host_priv
In reply to a message not in the archiveWhile at it:
* Allocate both struct hpt_info instances at once.
---
Sergei: we may also consider using only one struct hpt_info instance for both PCI devices on HPT366 with split PCI config space and HPT374 but I'm leaving this to your judgement.
drivers/ide/pci/hpt366.c | 72 ++++++++++++++++++++++++++--------------------- 1 file changed, 41 insertions(+), 31 deletions(-)
drivers/ide/pci/hpt366.c +41 -31
@@ -620,7 +620,8 @@ static u8 hpt3xx_udma_filter(ide_drive_t {ide_hwif_t *hwif =HWIF (drive);struct pci_dev *dev =to_pci_dev (hwif->dev); -struct hpt_info *info =pci_get_drvdata (dev); +struct ide_host *host =pci_get_drvdata (dev); +struct hpt_info *info = host->host_priv + (hwif->dev == host->dev[1 ]);u8 mask = hwif->ultra_mask;switch (info->chip_type) {
@@ -660,7 +661,8 @@ static u8 hpt3xx_mdma_filter(ide_drive_t {ide_hwif_t *hwif =HWIF (drive);struct pci_dev *dev =to_pci_dev (hwif->dev); -struct hpt_info *info =pci_get_drvdata (dev); +struct ide_host *host =pci_get_drvdata (dev); +struct hpt_info *info = host->host_priv + (hwif->dev == host->dev[1 ]);switch (info->chip_type) {case HPT372 :
@@ -694,8 +696,10 @@ static u32 get_speed_setting(u8 speed, sstatic void hpt3xx_set_mode (ide_drive_t *drive,const u8 speed) { -struct pci_dev *dev =to_pci_dev (drive->hwif->dev); -struct hpt_info *info =pci_get_drvdata (dev); +ide_hwif_t *hwif = drive->hwif; +struct pci_dev *dev =to_pci_dev (hwif->dev); +struct ide_host *host =pci_get_drvdata (dev); +struct hpt_info *info = host->host_priv + (hwif->dev == host->dev[1 ]);struct hpt_timings *t = info->timings;u8 itr_addr =0x40 + (drive->dn *4 );u32 old_itr =0 ;
@@ -738,7 +742,8 @@ static void hpt3xx_maskproc(ide_drive_t {ide_hwif_t *hwif =HWIF (drive);struct pci_dev *dev =to_pci_dev (hwif->dev); -struct hpt_info *info =pci_get_drvdata (dev); +struct ide_host *host =pci_get_drvdata (dev); +struct hpt_info *info = host->host_priv + (hwif->dev == host->dev[1 ]);if (drive->quirk_list) {if (info->chip_type >=HPT370 ) {
@@ -965,22 +970,13 @@ static int __devinit hpt37x_calibrate_dpstatic unsigned int __devinit init_chipset_hpt366 (struct pci_dev *dev,const char *name) { -struct hpt_info *info =kmalloc (sizeof (struct hpt_info ),GFP_KERNEL );unsigned long io_base =pci_resource_start (dev,4 ); +struct ide_host *host =pci_get_drvdata (dev); +struct hpt_info *info = host->host_priv + (&dev->dev == host->dev[1 ]);u8 pci_clk, dpll_clk =0 ;/* PCI and DPLL clock in MHz */ u8 chip_type;enum ata_clock clock; -if (info ==NULL ) { -printk (KERN_ERR "%s: out of memory!\n" , name); -return -ENOMEM ; - } - -/* -* Copy everything from a static "template" structure -* to just allocated per-chip hpt_info structure. -*/ -memcpy (info,pci_get_drvdata (dev),sizeof (struct hpt_info )); chip_type = info->chip_type;pci_write_config_byte (dev,PCI_CACHE_LINE_SIZE , (L1_CACHE_BYTES /4 ));
@@ -1142,7 +1138,6 @@ static unsigned int __devinit init_chipsif (info->timings->clock_table[clock] ==NULL ) {printk (KERN_ERR "%s: unknown bus timing!\n" , name); -kfree (info);return -EIO ; }
@@ -1169,7 +1164,6 @@ static unsigned int __devinit init_chips }if (adjust ==8 ) {printk (KERN_ERR "%s: DPLL did not stabilize!\n" , name); -kfree (info);return -EIO ; }
@@ -1186,9 +1180,6 @@ static unsigned int __devinit init_chips info->pci_clk = pci_clk; info->clock = clock; -/* Point to this chip's own instance of the hpt_info structure. */ -pci_set_drvdata (dev, info); -if (chip_type >=HPT370 ) {u8 mcr1, mcr4;
@@ -1218,7 +1209,8 @@ static unsigned int __devinit init_chipsstatic u8 __devinit hpt3xx_cable_detect (ide_hwif_t *hwif) {struct pci_dev *dev =to_pci_dev (hwif->dev); -struct hpt_info *info =pci_get_drvdata (dev); +struct ide_host *host =pci_get_drvdata (dev); +struct hpt_info *info = host->host_priv + (hwif->dev == host->dev[1 ]);u8 chip_type = info->chip_type;u8 scr1 =0 , ata66 = hwif->channel ?0x01 :0x02 ;
@@ -1262,7 +1254,8 @@ static u8 __devinit hpt3xx_cable_detect(static void __devinit init_hwif_hpt366 (ide_hwif_t *hwif) {struct pci_dev *dev =to_pci_dev (hwif->dev); -struct hpt_info *info =pci_get_drvdata (dev); +struct ide_host *host =pci_get_drvdata (dev); +struct hpt_info *info = host->host_priv + (hwif->dev == host->dev[1 ]);int serialize =HPT_SERIALIZE_IO ;u8 chip_type = info->chip_type;u8 new_mcr, old_mcr =0 ;
@@ -1542,10 +1535,12 @@ static const struct ide_port_info hpt366static int __devinit hpt366_init_one (struct pci_dev *dev,const struct pci_device_id *id) {const struct hpt_info *info =NULL ; +struct hpt_info *dyn_info;struct pci_dev *dev2 =NULL ;struct ide_port_info d;u8 idx = id->driver_data;u8 rev = dev->revision; +int ret;if ((idx ==0 || idx ==4 ) && (PCI_FUNC (dev->devfn) &1 ))return -ENODEV ;
@@ -1591,15 +1586,24 @@ static int __devinit hpt366_init_one(strif (info == &hpt370 || info == &hpt370a) d.dma_ops = &hpt370_dma_ops; -pci_set_drvdata (dev, (void *)info); -if (info == &hpt36x || info == &hpt374) dev2 =pci_get_slot (dev->bus, dev->devfn +1 ); -if (dev2) { -int ret; + dyn_info =kzalloc (sizeof (*dyn_info) * (dev2 ?2 :1 ),GFP_KERNEL ); +if (dyn_info ==NULL ) { +printk (KERN_ERR "%s: out of memory!\n" , d.name); +pci_dev_put (dev2); +return -ENOMEM ; + } + +/* +* Copy everything from a static "template" structure +* to just allocated per-chip hpt_info structure. +*/ +memcpy (dyn_info, info,sizeof (*dyn_info)); -pci_set_drvdata (dev2, (void *)info); +if (dev2) { +memcpy (dyn_info +1 , info,sizeof (*dyn_info));if (info == &hpt374)hpt374_init (dev, dev2);
@@ -1608,13 +1612,19 @@ static int __devinit hpt366_init_one(str d.host_flags &= ~IDE_HFLAG_NON_BOOTABLE ; } - ret =ide_pci_init_two (dev, dev2, &d,NULL ); -if (ret <0 ) + ret =ide_pci_init_two (dev, dev2, &d, dyn_info); +if (ret <0 ) {pci_dev_put (dev2); +kfree (dyn_info); + }return ret; } -return ide_pci_init_one (dev, &d,NULL ); + ret =ide_pci_init_one (dev, &d, dyn_info); +if (ret <0 ) +kfree (dyn_info); + +return ret; }static const struct pci_device_id hpt366_pci_tbl[]__devinitconst = {
PATCH 10/50 it821x: convert to use ->host_priv
In reply to a message not in the archiveWhile at it:
* Allocate both struct it821x_dev instances at once.
* Don't leak itdevs on ide_pci_init_one() failure.
--- drivers/ide/pci/it821x.c | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-)
drivers/ide/pci/it821x.c +13 -15
@@ -528,8 +528,9 @@ static struct ide_dma_ops it821x_pass_thstatic void __devinit init_hwif_it821x (ide_hwif_t *hwif) {struct pci_dev *dev =to_pci_dev (hwif->dev); -struct it821x_dev **itdevs = (struct it821x_dev **)pci_get_drvdata (dev); -struct it821x_dev *idev = itdevs[hwif->channel]; +struct ide_host *host =pci_get_drvdata (dev); +struct it821x_dev *itdevs = host->host_priv; +struct it821x_dev *idev = itdevs + hwif->channel;u8 conf;ide_set_hwifdata (hwif, idev);
@@ -642,23 +643,20 @@ static const struct ide_port_info it821xstatic int __devinit it821x_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -struct it821x_dev *itdevs[2 ] = {NULL ,NULL } , *itdev; -unsigned int i; +struct it821x_dev *itdevs; +int rc; -for (i =0 ; i <2 ; i++) { - itdev =kzalloc (sizeof (*itdev),GFP_KERNEL ); -if (itdev ==NULL ) { -kfree (itdevs[0 ]); -printk (KERN_ERR "it821x: out of memory\n" ); -return -ENOMEM ; - } - - itdevs[i] = itdev; + itdevs =kzalloc (2 *sizeof (*itdevs),GFP_KERNEL ); +if (itdevs ==NULL ) { +printk (KERN_ERR "it821x: out of memory\n" ); +return -ENOMEM ; } -pci_set_drvdata (dev, itdevs); + rc =ide_pci_init_one (dev, &it821x_chipsets[id->driver_data], itdevs); +if (rc) +kfree (itdevs); -return ide_pci_init_one (dev, &it821x_chipsets[id->driver_data],NULL ); +return rc; }static const struct pci_device_id it821x_pci_tbl[] = {
PATCH 11/50 sc1200: convert to use ->host_priv
In reply to a message not in the archive--- drivers/ide/pci/sc1200.c | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-)
drivers/ide/pci/sc1200.c +19 -20
@@ -234,21 +234,11 @@ static int sc1200_suspend (struct pci_de* we only save state when going from full power to less */ if (state.event ==PM_EVENT_ON ) { -struct sc1200_saved_state *ss; +struct ide_host *host =pci_get_drvdata (dev); +struct sc1200_saved_state *ss = host->host_priv;unsigned int r;/* -* allocate a permanent save area, if not already allocated -*/ - ss = (struct sc1200_saved_state *)pci_get_drvdata (dev); -if (ss ==NULL ) { - ss =kmalloc (sizeof (*ss),GFP_KERNEL ); -if (ss ==NULL ) -return -ENOMEM ; -pci_set_drvdata (dev, ss); - } - -/* * save timing registers * (this may be unnecessary if BIOS also does it) */
@@ -263,7 +253,8 @@ static int sc1200_suspend (struct pci_destatic int sc1200_resume (struct pci_dev *dev) { -struct sc1200_saved_state *ss; +struct ide_host *host =pci_get_drvdata (dev); +struct sc1200_saved_state *ss = host->host_priv;unsigned int r;int i;
@@ -271,16 +262,12 @@ static int sc1200_resume (struct pci_devif (i)return i; - ss = (struct sc1200_saved_state *)pci_get_drvdata (dev); -/* * restore timing registers * (this may be unnecessary if BIOS also does it) */ -if (ss) { -for (r =0 ; r <8 ; r++) -pci_write_config_dword (dev,0x40 + r *4 , ss->regs[r]); - } +for (r =0 ; r <8 ; r++) +pci_write_config_dword (dev,0x40 + r *4 , ss->regs[r]);return 0 ; }
@@ -317,7 +304,19 @@ static const struct ide_port_info sc1200static int __devinit sc1200_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -return ide_pci_init_one (dev, &sc1200_chipset,NULL ); +struct sc1200_saved_state *ss =NULL ; +int rc; + +#ifdef CONFIG_PM + ss =kmalloc (sizeof (*ss),GFP_KERNEL ); +if (ss ==NULL ) +return -ENOMEM ; +#endif + rc =ide_pci_init_one (dev, &sc1200_chipset, ss); +if (rc) +kfree (ss); + +return rc; }static const struct pci_device_id sc1200_pci_tbl[] = {
PATCH 12/50 siimage: convert to use ->host_priv
In reply to a message not in the archiveWhile at it:
* Reserve PCI BAR 5 in siimage_init_one() and remove no longer needed setup_mmio_siimage().
--- drivers/ide/pci/siimage.c | 114 +++++++++++++++++++++++----------------------- 1 file changed, 58 insertions(+), 56 deletions(-)
drivers/ide/pci/siimage.c +58 -56
@@ -127,9 +127,10 @@ static inline unsigned long siimage_seldstatic u8 sil_ioread8 (struct pci_dev *dev,unsigned long addr) { +struct ide_host *host =pci_get_drvdata (dev);u8 tmp =0 ; -if (pci_get_drvdata (dev)) +if (host->host_priv) tmp =readb ((void __iomem *)addr);else pci_read_config_byte (dev, addr, &tmp);
@@ -139,9 +140,10 @@ static u8 sil_ioread8(struct pci_dev *destatic u16 sil_ioread16 (struct pci_dev *dev,unsigned long addr) { +struct ide_host *host =pci_get_drvdata (dev);u16 tmp =0 ; -if (pci_get_drvdata (dev)) +if (host->host_priv) tmp =readw ((void __iomem *)addr);else pci_read_config_word (dev, addr, &tmp);
@@ -151,7 +153,9 @@ static u16 sil_ioread16(struct pci_dev *static void sil_iowrite8 (struct pci_dev *dev,u8 val,unsigned long addr) { -if (pci_get_drvdata (dev)) +struct ide_host *host =pci_get_drvdata (dev); + +if (host->host_priv)writeb (val, (void __iomem *)addr);else pci_write_config_byte (dev, addr, val);
@@ -159,7 +163,9 @@ static void sil_iowrite8(struct pci_devstatic void sil_iowrite16 (struct pci_dev *dev,u16 val,unsigned long addr) { -if (pci_get_drvdata (dev)) +struct ide_host *host =pci_get_drvdata (dev); + +if (host->host_priv)writew (val, (void __iomem *)addr);else pci_write_config_word (dev, addr, val);
@@ -167,7 +173,9 @@ static void sil_iowrite16(struct pci_devstatic void sil_iowrite32 (struct pci_dev *dev,u32 val,unsigned long addr) { -if (pci_get_drvdata (dev)) +struct ide_host *host =pci_get_drvdata (dev); + +if (host->host_priv)writel (val, (void __iomem *)addr);else pci_write_config_dword (dev, addr, val);
@@ -445,44 +453,6 @@ static void sil_sata_pre_reset(ide_drive }/** -* setup_mmio_siimage - switch controller into MMIO mode -* @dev: PCI device we are configuring -* @name: device name -* -* Attempt to put the device into MMIO mode. There are some slight -* complications here with certain systems where the MMIO BAR isn't -* mapped, so we have to be sure that we can fall back to I/O. -*/ - -static unsigned int setup_mmio_siimage (struct pci_dev *dev,const char *name) -{ -resource_size_t bar5 =pci_resource_start (dev,5 ); -unsigned long barsize =pci_resource_len (dev,5 ); -void __iomem *ioaddr; - -/* -* Drop back to PIO if we can't map the MMIO. Some systems -* seem to get terminally confused in the PCI spaces. -*/ -if (!request_mem_region (bar5, barsize, name)) { -printk (KERN_WARNING "siimage: IDE controller MMIO ports not " -"available.\n" ); -return 0 ; - } - - ioaddr =ioremap (bar5, barsize); -if (ioaddr ==NULL ) { -release_mem_region (bar5, barsize); -return 0 ; - } - -pci_set_master (dev); -pci_set_drvdata (dev, (void *) ioaddr); - -return 1 ; -} - -/** * init_chipset_siimage - set up an SI device * @dev: PCI device * @name: device name
@@ -494,17 +464,15 @@ static unsigned int setup_mmio_siimage(sstatic unsigned int __devinit init_chipset_siimage (struct pci_dev *dev,const char *name) { +struct ide_host *host =pci_get_drvdata (dev); +void __iomem *ioaddr = host->host_priv;unsigned long base, scsc_addr; -void __iomem *ioaddr =NULL ; -u8 rev = dev->revision, tmp,BA5_EN ; +u8 rev = dev->revision, tmp;pci_write_config_byte (dev,PCI_CACHE_LINE_SIZE , rev ?1 :255 ); -pci_read_config_byte (dev,0x8A , &BA5_EN ); - -if ((BA5_EN &0x01 ) ||pci_resource_start (dev,5 )) -if (setup_mmio_siimage (dev, name)) - ioaddr =pci_get_drvdata (dev); +if (ioaddr) +pci_set_master (dev); base = (unsigned long )ioaddr;
@@ -592,7 +560,8 @@ static unsigned int __devinit init_chipsstatic void __devinit init_mmio_iops_siimage (ide_hwif_t *hwif) {struct pci_dev *dev =to_pci_dev (hwif->dev); -void *addr =pci_get_drvdata (dev); +struct ide_host *host =pci_get_drvdata (dev); +void *addr = host->host_priv;u8 ch = hwif->channel;struct ide_io_ports *io_ports = &hwif->io_ports;unsigned long base;
@@ -691,16 +660,15 @@ static void __devinit sil_quirkproc(ide_static void __devinit init_iops_siimage (ide_hwif_t *hwif) {struct pci_dev *dev =to_pci_dev (hwif->dev); +struct ide_host *host =pci_get_drvdata (dev); hwif->hwif_data =NULL ;/* Pessimal until we finish probing */ hwif->rqsize =15 ; -if (pci_get_drvdata (dev) ==NULL ) -return ; - -init_mmio_iops_siimage (hwif); +if (host->host_priv) +init_mmio_iops_siimage (hwif); }/**
@@ -778,8 +746,13 @@ static const struct ide_port_info siimagstatic int __devinit siimage_init_one (struct pci_dev *dev,const struct pci_device_id *id) { +void __iomem *ioaddr =NULL ; +resource_size_t bar5 =pci_resource_start (dev,5 ); +unsigned long barsize =pci_resource_len (dev,5 ); +int rc;struct ide_port_info d;u8 idx = id->driver_data; +u8 BA5_EN ; d = siimage_chipsets[idx];
@@ -795,7 +768,36 @@ static int __devinit siimage_init_one(st d.host_flags |=IDE_HFLAG_NO_ATAPI_DMA ; } -return ide_pci_init_one (dev, &d,NULL ); + rc =pci_enable_device (dev); +if (rc) +return rc; + +pci_read_config_byte (dev,0x8A , &BA5_EN ); +if ((BA5_EN &0x01 ) || bar5) { +/* +* Drop back to PIO if we can't map the MMIO. Some systems +* seem to get terminally confused in the PCI spaces. +*/ +if (!request_mem_region (bar5, barsize, d.name)) { +printk (KERN_WARNING "siimage: IDE controller MMIO " +"ports not available.\n" ); + }else { + ioaddr =ioremap (bar5, barsize); +if (ioaddr ==NULL ) +release_mem_region (bar5, barsize); + } + } + + rc =ide_pci_init_one (dev, &d, ioaddr); +if (rc) { +if (ioaddr) { +iounmap (ioaddr); +release_mem_region (bar5, barsize); + } +pci_disable_device (dev); + } + +return rc; }static const struct pci_device_id siimage_pci_tbl[] = {
PATCH 13/50 via82cxxx: convert to use ->host_priv
In reply to a message not in the archive--- drivers/ide/pci/via82cxxx.c | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-)
drivers/ide/pci/via82cxxx.c +21 -12
@@ -113,7 +113,8 @@ struct via82cxxx_devstatic void via_set_speed (ide_hwif_t *hwif,u8 dn,struct ide_timing *timing) {struct pci_dev *dev =to_pci_dev (hwif->dev); -struct via82cxxx_dev *vdev =pci_get_drvdata (dev); +struct ide_host *host =pci_get_drvdata (dev); +struct via82cxxx_dev *vdev = host->host_priv;u8 t;if (~vdev->via_config->flags &VIA_BAD_AST ) {
@@ -153,7 +154,8 @@ static void via_set_drive(ide_drive_t *dide_hwif_t *hwif = drive->hwif;ide_drive_t *peer = hwif->drives + (~drive->dn &1 );struct pci_dev *dev =to_pci_dev (hwif->dev); -struct via82cxxx_dev *vdev =pci_get_drvdata (dev); +struct ide_host *host =pci_get_drvdata (dev); +struct via82cxxx_dev *vdev = host->host_priv;struct ide_timing t, p;unsigned int T ,UT ;
@@ -266,19 +268,13 @@ static void __devinit via_cable_detect(sstatic unsigned int __devinit init_chipset_via82cxxx (struct pci_dev *dev,const char *name) { +struct ide_host *host =pci_get_drvdata (dev); +struct via82cxxx_dev *vdev = host->host_priv;struct pci_dev *isa =NULL ; -struct via82cxxx_dev *vdev;struct via_isa_bridge *via_config;u8 t, v;u32 u; - vdev =kzalloc (sizeof (*vdev),GFP_KERNEL ); -if (!vdev) { -printk (KERN_ERR "VP_IDE: out of memory :(\n" ); -return -ENOMEM ; - } -pci_set_drvdata (dev, vdev); -/* * Find the ISA bridge to see how good the IDE is. */
@@ -402,7 +398,8 @@ static int via_cable_override(struct pcistatic u8 __devinit via82cxxx_cable_detect (ide_hwif_t *hwif) {struct pci_dev *pdev =to_pci_dev (hwif->dev); -struct via82cxxx_dev *vdev =pci_get_drvdata (pdev); +struct ide_host *host =pci_get_drvdata (pdev); +struct via82cxxx_dev *vdev = host->host_priv;if (via_cable_override (pdev))return ATA_CBL_PATA40_SHORT ;
@@ -436,6 +433,8 @@ static int __devinit via_init_one(struct {struct pci_dev *isa =NULL ;struct via_isa_bridge *via_config; +struct via82cxxx_dev *vdev; +int rc;u8 idx = id->driver_data;struct ide_port_info d;
@@ -466,7 +465,17 @@ static int __devinit via_init_one(struct d.udma_mask = via_config->udma_mask; -return ide_pci_init_one (dev, &d,NULL ); + vdev =kzalloc (sizeof (*vdev),GFP_KERNEL ); +if (!vdev) { +printk (KERN_ERR "VP_IDE: out of memory :(\n" ); +return -ENOMEM ; + } + + rc =ide_pci_init_one (dev, &d, vdev); +if (rc) +kfree (vdev); + +return rc; }static const struct pci_device_id via_pci_tbl[] = {
PATCH 14/50 tc86c001: remove ->init_chipset method
In reply to a message not in the archive* Reserve PCI BAR 5 in tc86c001_init_one() and remove no longer needed init_chipset_tc86c001().
While at it:
* Add & use DRV_NAME define.
--- drivers/ide/pci/tc86c001.c | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-)
drivers/ide/pci/tc86c001.c +26 -12
@@ -11,6 +11,8 @@#include <linux/pci.h> #include <linux/ide.h> +#define DRV_NAME "TC86C001" +static void tc86c001_set_mode (ide_drive_t *drive,const u8 speed) {ide_hwif_t *hwif =HWIF (drive);
@@ -173,16 +175,6 @@ static void __devinit init_hwif_tc86c001 hwif->rqsize =0xffff ; } -static unsigned int __devinit init_chipset_tc86c001 (struct pci_dev *dev, -const char *name) -{ -int err =pci_request_region (dev,5 , name); - -if (err) -printk (KERN_ERR "%s: system control regs already in use" , name); -return err; -} -static const struct ide_port_ops tc86c001_port_ops = { .set_pio_mode = tc86c001_set_pio_mode, .set_dma_mode = tc86c001_set_mode,
@@ -202,7 +194,6 @@ static const struct ide_dma_ops tc86c001static const struct ide_port_info tc86c001_chipset__devinitdata = { .name ="TC86C001" , - .init_chipset = init_chipset_tc86c001, .init_hwif = init_hwif_tc86c001, .port_ops = &tc86c001_port_ops, .dma_ops = &tc86c001_dma_ops,
@@ -215,7 +206,30 @@ static const struct ide_port_info tc86c0static int __devinit tc86c001_init_one (struct pci_dev *dev,const struct pci_device_id *id) { -return ide_pci_init_one (dev, &tc86c001_chipset,NULL ); +int rc; + + rc =pci_enable_device (dev); +if (rc) + goto out; + + rc =pci_request_region (dev,5 ,DRV_NAME ); +if (rc) { + printk(KERN_ERR DRV_NAME ": system control regs already in use"); + goto out_disable; + } + + rc =ide_pci_init_one (dev, &tc86c001_chipset,NULL ); +if (rc) + goto out_release; + + goto out; + +out_release: +pci_release_region (dev,5 ); +out_disable: +pci_disable_device (dev); +out: +return rc; }static const struct pci_device_id tc86c001_pci_tbl[] = {
PATCH 15/50 amd74xx: cleanup ->init_chipset method
In reply to a message not in the archiveMove amd_clock setup from init_chipset_amd74xx() to amd74xx_probe().
--- drivers/ide/pci/amd74xx.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-)
drivers/ide/pci/amd74xx.c +18 -18
@@ -173,24 +173,6 @@ static unsigned int __devinit init_chips t |=0xf0 ;pci_write_config_byte (dev,AMD_IDE_CONFIG + offset, t); -/* -* Determine the system bus clock. -*/ - - amd_clock = (ide_pci_clk ? ide_pci_clk :33 ) *1000 ; - -switch (amd_clock) { -case 33000 : amd_clock =33333 ;break ; -case 37000 : amd_clock =37500 ;break ; -case 41000 : amd_clock =41666 ;break ; - } - -if (amd_clock <20000 || amd_clock >50000 ) { -printk (KERN_WARNING "%s: User given PCI clock speed impossible (%d), using 33 MHz instead.\n" , - name, amd_clock); - amd_clock =33333 ; - } -return dev->irq; }
@@ -302,6 +284,24 @@ static int __devinit amd74xx_probe(struc d.name,pci_name (dev), dev->revision, amd_dma[fls(d.udma_mask) - 1]); +/* +* Determine the system bus clock. +*/ + amd_clock = (ide_pci_clk ? ide_pci_clk :33 ) *1000 ; + +switch (amd_clock) { +case 33000 : amd_clock =33333 ;break ; +case 37000 : amd_clock =37500 ;break ; +case 41000 : amd_clock =41666 ;break ; + } + +if (amd_clock <20000 || amd_clock >50000 ) { +printk (KERN_WARNING "%s: User given PCI clock speed impossible" +" (%d), using 33 MHz instead.\n" , + d.name, amd_clock); + amd_clock =33333 ; + } +return ide_pci_init_one (dev, &d,NULL ); }
PATCH 16/50 cmd64x: cleanup ->init_chipset method
In reply to a message not in the archiveRemove verbose reporting for CMD646 (PCI device revision is always logged by IDE PCI layer).
--- drivers/ide/pci/cmd64x.c | 18 ------------------ 1 file changed, 18 deletions(-)
drivers/ide/pci/cmd64x.c +0 -18
@@ -334,24 +334,6 @@ static unsigned int __devinit init_chips {u8 mrdmode =0 ; -if (dev->device ==PCI_DEVICE_ID_CMD_646 ) { - -switch (dev->revision) { -case 0x07 : -case 0x05 : -printk ("%s: UltraDMA capable\n" , name); -break ; -case 0x03 : -default : -printk ("%s: MultiWord DMA force limited\n" , name); -break ; -case 0x01 : -printk ("%s: MultiWord DMA limited, " -"IRQ workaround enabled\n" , name); -break ; - } - } -/* Set a good latency timer and cache line size value. */ (void )pci_write_config_byte (dev,PCI_LATENCY_TIMER ,64 );/* FIXME: pci_set_master() to ensure a good latency timer value */
PATCH 17/50 via82cxxx: cleanup ->init_chipset method
In reply to a message not in the archive* Move the boot message and via_clock setup from
init_chipset_via82cxxx() to via_init_one().
* Set vdev->via_config in via_init_one() and cleanup init_chipset_via82cxxx() accordingly.
--- drivers/ide/pci/via82cxxx.c | 81 +++++++++++++++++++------------------------- 1 file changed, 35 insertions(+), 46 deletions(-)
drivers/ide/pci/via82cxxx.c +35 -46
@@ -270,22 +270,11 @@ static unsigned int __devinit init_chips {struct ide_host *host =pci_get_drvdata (dev);struct via82cxxx_dev *vdev = host->host_priv; -struct pci_dev *isa =NULL ; -struct via_isa_bridge *via_config; +struct via_isa_bridge *via_config = vdev->via_config;u8 t, v;u32 u;/* -* Find the ISA bridge to see how good the IDE is. -*/ - vdev->via_config = via_config =via_config_find (&isa); - -/* We checked this earlier so if it fails here deeep badness -is involved */ - -BUG_ON (!via_config->id); - -/* * Detect cable and configure Clk66 */ pci_read_config_dword (dev,VIA_UDMA_TIMING , &u);
@@ -330,39 +319,6 @@ static unsigned int __devinit init_chipspci_write_config_byte (dev,VIA_FIFO_CONFIG , t); -/* -* Determine system bus clock. -*/ - - via_clock = (ide_pci_clk ? ide_pci_clk :33 ) *1000 ; - -switch (via_clock) { -case 33000 : via_clock =33333 ;break ; -case 37000 : via_clock =37500 ;break ; -case 41000 : via_clock =41666 ;break ; - } - -if (via_clock <20000 || via_clock >50000 ) { -printk (KERN_WARNING "VP_IDE: User given PCI clock speed " -"impossible (%d), using 33 MHz instead.\n" , via_clock); -printk (KERN_WARNING "VP_IDE: Use ide0=ata66 if you want " -"to assume 80-wire cable.\n" ); - via_clock =33333 ; - } - -/* -* Print the boot message. -*/ - -printk (KERN_INFO "VP_IDE: VIA %s (rev %02x) IDE %sDMA%s " -"controller on pci%s\n" , - via_config->name, isa->revision, - via_config->udma_mask ?"U" :"MW" , - via_dma[via_config->udma_mask ? - (fls (via_config->udma_mask) -1 ) :0 ], -pci_name (dev)); - -pci_dev_put (isa);return 0 ; }
@@ -444,12 +400,43 @@ static int __devinit via_init_one(struct* Find the ISA bridge and check we know what it is. */ via_config =via_config_find (&isa); -pci_dev_put (isa);if (!via_config->id) {printk (KERN_WARNING "VP_IDE: Unknown VIA SouthBridge, disabling DMA.\n" );return -ENODEV ; } +/* +* Print the boot message. +*/ +printk (KERN_INFO "VP_IDE: VIA %s (rev %02x) IDE %sDMA%s " +"controller on pci%s\n" , + via_config->name, isa->revision, + via_config->udma_mask ?"U" :"MW" , + via_dma[via_config->udma_mask ? + (fls (via_config->udma_mask) -1 ) :0 ], +pci_name (dev)); + +pci_dev_put (isa); + +/* +* Determine system bus clock. +*/ + via_clock = (ide_pci_clk ? ide_pci_clk :33 ) *1000 ; + +switch (via_clock) { +case 33000 : via_clock =33333 ;break ; +case 37000 : via_clock =37500 ;break ; +case 41000 : via_clock =41666 ;break ; + } + +if (via_clock <20000 || via_clock >50000 ) { +printk (KERN_WARNING "VP_IDE: User given PCI clock speed " +"impossible (%d), using 33 MHz instead.\n" , via_clock); +printk (KERN_WARNING "VP_IDE: Use ide0=ata66 if you want " +"to assume 80-wire cable.\n" ); + via_clock =33333 ; + } +if (idx ==0 ) d.host_flags |=IDE_HFLAG_NO_AUTODMA ;else
@@ -471,6 +458,8 @@ static int __devinit via_init_one(structreturn -ENOMEM ; } + vdev->via_config = via_config; + rc =ide_pci_init_one (dev, &d, vdev);if (rc)kfree (vdev);
PATCH 18/50 ide: add ide_pci_remove() helper
In reply to a message not in the archive* Add 'unsigned long host_flags' field to struct ide_host.
* Set ->host_flags in ide_host_alloc_all().
* Always set PCI dev's ->driver_data in ide_pci_init_{one,two}().
* Add ide_pci_remove() helper (the default implementation for struct pci_driver's ->remove method).
--- drivers/ide/ide-probe.c | 3 +++ drivers/ide/setup-pci.c | 39 +++++++++++++++++++++++++++++++++------ include/linux/ide.h | 2 ++ 3 files changed, 38 insertions(+), 6 deletions(-)
drivers/ide/ide-probe.c +3 -0
@@ -1613,6 +1613,9 @@ struct ide_host *ide_host_alloc_all(consif (hws[0 ]) host->dev[0 ] = hws[0 ]->dev; +if (d) + host->host_flags = d->host_flags; +return host; }EXPORT_SYMBOL_GPL (ide_host_alloc_all);
drivers/ide/setup-pci.c +33 -6
@@ -547,8 +547,7 @@ int ide_pci_init_one(struct pci_dev *dev host->host_priv = priv; -if (priv) -pci_set_drvdata (dev, host); +pci_set_drvdata (dev, host); ret =do_ide_setup_pci_device (dev, d,1 );if (ret <0 )
@@ -592,10 +591,8 @@ int ide_pci_init_two(struct pci_dev *dev host->host_priv = priv; -if (priv) { -pci_set_drvdata (pdev[0 ], host); -pci_set_drvdata (pdev[1 ], host); - } +pci_set_drvdata (pdev[0 ], host); +pci_set_drvdata (pdev[1 ], host);for (i =0 ; i <2 ; i++) { ret =do_ide_setup_pci_device (pdev[i], d, !i);
@@ -618,3 +615,33 @@ out:return ret; }EXPORT_SYMBOL_GPL (ide_pci_init_two); + +void ide_pci_remove (struct pci_dev *dev) +{ +struct ide_host *host =pci_get_drvdata (dev); +struct pci_dev *dev2 = host->dev[1 ] ?to_pci_dev (host->dev[1 ]) :NULL ; +int bars; + +if (host->host_flags &IDE_HFLAG_SINGLE ) + bars = (1 <<2 ) -1 ; +else + bars = (1 <<4 ) -1 ; + +if ((host->host_flags &IDE_HFLAG_NO_DMA ) ==0 ) { +if (host->host_flags &IDE_HFLAG_CS5520 ) + bars |= (1 <<2 ); +else + bars |= (1 <<4 ); + } + +ide_host_remove (host); + +if (dev2) +pci_release_selected_regions (dev2, bars); +pci_release_selected_regions (dev, bars); + +if (dev2) +pci_disable_device (dev2); +pci_disable_device (dev); +} +EXPORT_SYMBOL_GPL (ide_pci_remove);
include/linux/ide.h +2 -0
@@ -616,6 +616,7 @@ struct ide_host {ide_hwif_t *ports[MAX_HWIFS ];unsigned int n_ports;struct device *dev[2 ]; +unsigned long host_flags;void *host_priv; };
@@ -1198,6 +1199,7 @@ struct ide_port_info {int ide_pci_init_one (struct pci_dev *,const struct ide_port_info *,void *);int ide_pci_init_two (struct pci_dev *,struct pci_dev *,const struct ide_port_info *,void *); +void ide_pci_remove (struct pci_dev *);void ide_map_sg (ide_drive_t *,struct request *);void ide_init_sg_cmd (ide_drive_t *,struct request *);
PATCH 19/50 aec62xx: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/aec62xx.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
drivers/ide/pci/aec62xx.c +13 -0
@@ -280,6 +280,12 @@ static int __devinit aec62xx_init_one(streturn err; } +static void __devexit aec62xx_remove(struct pci_dev *dev) +{ +ide_pci_remove (dev); +pci_disable_device (dev); +} +static const struct pci_device_id aec62xx_pci_tbl[] = { {PCI_VDEVICE (ARTOP ,PCI_DEVICE_ID_ARTOP_ATP850UF ),0 }, {PCI_VDEVICE (ARTOP ,PCI_DEVICE_ID_ARTOP_ATP860 ),1 },
@@ -294,6 +300,7 @@ static struct pci_driver driver = { .name = "AEC62xx_IDE", .id_table = aec62xx_pci_tbl, .probe = aec62xx_init_one, + .remove = aec62xx_remove, };static int __init aec62xx_ide_init (void )
@@ -301,7 +308,13 @@ static int __init aec62xx_ide_init(void)return ide_pci_register_driver (&driver); } +static void __exit aec62xx_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (aec62xx_ide_init); +module_exit (aec62xx_ide_exit);MODULE_AUTHOR ("Andre Hedrick" );MODULE_DESCRIPTION ("PCI driver module for ARTOP AEC62xx IDE" );
PATCH 20/50 alim15x3: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/alim15x3.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/ide/pci/alim15x3.c +7 -0
@@ -580,6 +580,7 @@ static struct pci_driver driver = { .name = "ALI15x3_IDE", .id_table = alim15x3_pci_tbl, .probe = alim15x3_init_one, + .remove = ide_pci_remove, };static int __init ali15x3_ide_init (void )
@@ -587,7 +588,13 @@ static int __init ali15x3_ide_init(void)return ide_pci_register_driver (&driver); } +static void __exit ali15x3_ide_exit(void) +{ +return pci_unregister_driver (&driver); +} +module_init (ali15x3_ide_init); +module_exit (ali15x3_ide_exit);MODULE_AUTHOR ("Michael Aubry, Andrzej Krzysztofowicz, CJ, Andre Hedrick, Alan Cox" );MODULE_DESCRIPTION ("PCI driver module for ALi 15x3 IDE" );
PATCH 21/50 amd74xx: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/amd74xx.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/ide/pci/amd74xx.c +7 -0
@@ -341,6 +341,7 @@ static struct pci_driver driver = { .name = "AMD_IDE", .id_table = amd74xx_pci_tbl, .probe = amd74xx_probe, + .remove = ide_pci_remove, };static int __init amd74xx_ide_init (void )
@@ -348,7 +349,13 @@ static int __init amd74xx_ide_init(void)return ide_pci_register_driver (&driver); } +static void __exit amd74xx_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (amd74xx_ide_init); +module_exit (amd74xx_ide_exit);MODULE_AUTHOR ("Vojtech Pavlik" );MODULE_DESCRIPTION ("AMD PCI IDE driver" );
PATCH 22/50 atiixp: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/atiixp.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/ide/pci/atiixp.c +7 -0
@@ -184,6 +184,7 @@ static struct pci_driver driver = { .name = "ATIIXP_IDE", .id_table = atiixp_pci_tbl, .probe = atiixp_init_one, + .remove = ide_pci_remove, };static int __init atiixp_ide_init (void )
@@ -191,7 +192,13 @@ static int __init atiixp_ide_init(void)return ide_pci_register_driver (&driver); } +static void __exit atiixp_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (atiixp_ide_init); +module_exit (atiixp_ide_exit);MODULE_AUTHOR ("HUI YU" );MODULE_DESCRIPTION ("PCI driver module for ATI IXP IDE" );
PATCH 23/50 cmd64x: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/cmd64x.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/ide/pci/cmd64x.c +7 -0
@@ -505,6 +505,7 @@ static struct pci_driver driver = { .name = "CMD64x_IDE", .id_table = cmd64x_pci_tbl, .probe = cmd64x_init_one, + .remove = ide_pci_remove, };static int __init cmd64x_ide_init (void )
@@ -512,7 +513,13 @@ static int __init cmd64x_ide_init(void)return ide_pci_register_driver (&driver); } +static void __exit cmd64x_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (cmd64x_ide_init); +module_exit (cmd64x_ide_exit);MODULE_AUTHOR ("Eddie Dost, David Miller, Andre Hedrick" );MODULE_DESCRIPTION ("PCI driver module for CMD64x IDE" );
PATCH 24/50 cs5530: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/cs5530.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/ide/pci/cs5530.c +7 -0
@@ -269,6 +269,7 @@ static struct pci_driver driver = { .name = "CS5530 IDE", .id_table = cs5530_pci_tbl, .probe = cs5530_init_one, + .remove = ide_pci_remove, };static int __init cs5530_ide_init (void )
@@ -276,7 +277,13 @@ static int __init cs5530_ide_init(void)return ide_pci_register_driver (&driver); } +static void __exit cs5530_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (cs5530_ide_init); +module_exit (cs5530_ide_exit);MODULE_AUTHOR ("Mark Lord" );MODULE_DESCRIPTION ("PCI driver module for Cyrix/NS 5530 IDE" );
PATCH 25/50 cs5535: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/cs5535.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/ide/pci/cs5535.c +7 -0
@@ -194,6 +194,7 @@ static struct pci_driver driver = { .name = "CS5535_IDE", .id_table = cs5535_pci_tbl, .probe = cs5535_init_one, + .remove = ide_pci_remove, };static int __init cs5535_ide_init (void )
@@ -201,7 +202,13 @@ static int __init cs5535_ide_init(void)return ide_pci_register_driver (&driver); } +static void __exit cs5535_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (cs5535_ide_init); +module_exit (cs5535_ide_exit);MODULE_AUTHOR ("AMD" );MODULE_DESCRIPTION ("PCI driver module for AMD/NS CS5535 IDE" );
PATCH 26/50 cy82c693: add ->remove method and module_exit()
In reply to a message not in the archiveFix the refcounting for dev2 while at it.
--- drivers/ide/pci/cy82c693.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-)
drivers/ide/pci/cy82c693.c +18 -1
@@ -420,11 +420,21 @@ static int __devinit cy82c693_init_one(s PCI_FUNC(dev->devfn) == 1) { dev2 =pci_get_slot (dev->bus, dev->devfn +1 ); ret =ide_pci_init_two (dev, dev2, &cy82c693_chipset,NULL ); -/* We leak pci refs here but thats ok - we can't be unloaded */ +if (ret) +pci_dev_put (dev2); }return ret; } +static void __devexit cy82c693_remove(struct pci_dev *dev) +{ +struct ide_host *host =pci_get_drvdata (dev); +struct pci_dev *dev2 = host->dev[1 ] ?to_pci_dev (host->dev[1 ]) :NULL ; + +ide_pci_remove (dev); +pci_dev_put (dev2); +} +static const struct pci_device_id cy82c693_pci_tbl[] = { {PCI_VDEVICE (CONTAQ ,PCI_DEVICE_ID_CONTAQ_82C693 ),0 }, {0 , },
@@ -435,6 +445,7 @@ static struct pci_driver driver = { .name = "Cypress_IDE", .id_table = cy82c693_pci_tbl, .probe = cy82c693_init_one, + .remove = cy82c693_remove, };static int __init cy82c693_ide_init (void )
@@ -442,7 +453,13 @@ static int __init cy82c693_ide_init(voidreturn ide_pci_register_driver (&driver); } +static void __exit cy82c693_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (cy82c693_ide_init); +module_exit (cy82c693_ide_exit);MODULE_AUTHOR ("Andreas Krebs, Andre Hedrick" );MODULE_DESCRIPTION ("PCI driver module for the Cypress CY82C693 IDE" );
PATCH 27/50 ide/pci/generic: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/generic.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/ide/pci/generic.c +7 -0
@@ -174,6 +174,7 @@ static struct pci_driver driver = { .name = "PCI_IDE", .id_table = generic_pci_tbl, .probe = generic_init_one, + .remove = ide_pci_remove, };static int __init generic_ide_init (void )
@@ -181,7 +182,13 @@ static int __init generic_ide_init(void)return ide_pci_register_driver (&driver); } +static void __exit generic_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (generic_ide_init); +module_exit (generic_ide_exit);MODULE_AUTHOR ("Andre Hedrick" );MODULE_DESCRIPTION ("PCI driver module for generic PCI IDE" );
PATCH 28/50 hpt34x: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/hpt34x.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/ide/pci/hpt34x.c +7 -0
@@ -169,6 +169,7 @@ static struct pci_driver driver = { .name = "HPT34x_IDE", .id_table = hpt34x_pci_tbl, .probe = hpt34x_init_one, + .remove = ide_pci_remove, };static int __init hpt34x_ide_init (void )
@@ -176,7 +177,13 @@ static int __init hpt34x_ide_init(void)return ide_pci_register_driver (&driver); } +static void __exit hpt34x_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (hpt34x_ide_init); +module_exit (hpt34x_ide_exit);MODULE_AUTHOR ("Andre Hedrick" );MODULE_DESCRIPTION ("PCI driver module for Highpoint 34x IDE" );
PATCH 29/50 hpt366: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/hpt366.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)
drivers/ide/pci/hpt366.c +18 -0
@@ -1627,6 +1627,17 @@ static int __devinit hpt366_init_one(strreturn ret; } +static void __devexit hpt366_remove(struct pci_dev *dev) +{ +struct ide_host *host =pci_get_drvdata (dev); +struct ide_info *info = host->host_priv; +struct pci_dev *dev2 = host->dev[1 ] ?to_pci_dev (host->dev[1 ]) :NULL ; + +ide_pci_remove (dev); +pci_dev_put (dev2); +kfree (info); +} +static const struct pci_device_id hpt366_pci_tbl[]__devinitconst = { {PCI_VDEVICE (TTI ,PCI_DEVICE_ID_TTI_HPT366 ),0 }, {PCI_VDEVICE (TTI ,PCI_DEVICE_ID_TTI_HPT372 ),1 },
@@ -1642,6 +1653,7 @@ static struct pci_driver driver = { .name = "HPT366_IDE", .id_table = hpt366_pci_tbl, .probe = hpt366_init_one, + .remove = hpt366_remove, };static int __init hpt366_ide_init (void )
@@ -1649,7 +1661,13 @@ static int __init hpt366_ide_init(void)return ide_pci_register_driver (&driver); } +static void __exit hpt366_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (hpt366_ide_init); +module_exit (hpt366_ide_exit);MODULE_AUTHOR ("Andre Hedrick" );MODULE_DESCRIPTION ("PCI driver module for Highpoint HPT366 IDE" );
PATCH 30/50 it8213: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/it8213.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/ide/pci/it8213.c +7 -0
@@ -198,6 +198,7 @@ static struct pci_driver driver = { .name = "ITE8213_IDE", .id_table = it8213_pci_tbl, .probe = it8213_init_one, + .remove = ide_pci_remove, };static int __init it8213_ide_init (void )
@@ -205,7 +206,13 @@ static int __init it8213_ide_init(void)return ide_pci_register_driver (&driver); } +static void __exit it8213_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (it8213_ide_init); +module_exit (it8213_ide_exit);MODULE_AUTHOR ("Jack Lee, Alan Cox" );MODULE_DESCRIPTION ("PCI driver module for the ITE 8213" );
PATCH 31/50 it821x: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/it821x.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)
drivers/ide/pci/it821x.c +16 -0
@@ -659,6 +659,15 @@ static int __devinit it821x_init_one(strreturn rc; } +static void __devexit it821x_remove(struct pci_dev *dev) +{ +struct ide_host *host =pci_get_drvdata (dev); +struct it821x_dev *itdevs = host->host_priv; + +ide_pci_remove (dev); +kfree (itdevs); +} +static const struct pci_device_id it821x_pci_tbl[] = { {PCI_VDEVICE (ITE ,PCI_DEVICE_ID_ITE_8211 ),0 }, {PCI_VDEVICE (ITE ,PCI_DEVICE_ID_ITE_8212 ),0 },
@@ -671,6 +680,7 @@ static struct pci_driver driver = { .name = "ITE821x IDE", .id_table = it821x_pci_tbl, .probe = it821x_init_one, + .remove = it821x_remove, };static int __init it821x_ide_init (void )
@@ -678,7 +688,13 @@ static int __init it821x_ide_init(void)return ide_pci_register_driver (&driver); } +static void __exit it821x_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (it821x_ide_init); +module_exit (it821x_ide_exit);module_param_named (noraid, it8212_noraid, int,S_IRUGO );MODULE_PARM_DESC (noraid,"Force card into bypass mode" );
PATCH 32/50 jmicron: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/jmicron.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/ide/pci/jmicron.c +7 -0
@@ -152,6 +152,7 @@ static struct pci_driver driver = { .name = "JMicron IDE", .id_table = jmicron_pci_tbl, .probe = jmicron_init_one, + .remove = ide_pci_remove, };static int __init jmicron_ide_init (void )
@@ -159,7 +160,13 @@ static int __init jmicron_ide_init(void)return ide_pci_register_driver (&driver); } +static void __exit jmicron_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (jmicron_ide_init); +module_exit (jmicron_ide_exit);MODULE_AUTHOR ("Alan Cox" );MODULE_DESCRIPTION ("PCI driver module for the JMicron in legacy modes" );
PATCH 33/50 ns87415: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/ns87415.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/ide/pci/ns87415.c +7 -0
@@ -341,6 +341,7 @@ static struct pci_driver driver = { .name = "NS87415_IDE", .id_table = ns87415_pci_tbl, .probe = ns87415_init_one, + .remove = ide_pci_remove, };static int __init ns87415_ide_init (void )
@@ -348,7 +349,13 @@ static int __init ns87415_ide_init(void)return ide_pci_register_driver (&driver); } +static void __exit ns87415_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (ns87415_ide_init); +module_exit (ns87415_ide_exit);MODULE_AUTHOR ("Mark Lord, Eddie Dost, Andre Hedrick" );MODULE_DESCRIPTION ("PCI driver module for NS87415 IDE" );
PATCH 34/50 opti621: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/opti621.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/ide/pci/opti621.c +7 -0
@@ -223,6 +223,7 @@ static struct pci_driver driver = { .name = "Opti621_IDE", .id_table = opti621_pci_tbl, .probe = opti621_init_one, + .remove = ide_pci_remove, };static int __init opti621_ide_init (void )
@@ -230,7 +231,13 @@ static int __init opti621_ide_init(void)return ide_pci_register_driver (&driver); } +static void __exit opti621_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (opti621_ide_init); +module_exit (opti621_ide_exit);MODULE_AUTHOR ("Jaromir Koutek, Jan Harkes, Mark Lord" );MODULE_DESCRIPTION ("PCI driver module for Opti621 IDE" );
PATCH 35/50 pdc202xx_new: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/pdc202xx_new.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)
drivers/ide/pci/pdc202xx_new.c +16 -0
@@ -543,6 +543,15 @@ static int __devinit pdc202new_init_one(return ide_pci_init_one (dev, d,NULL ); } +static void __devexit pdc202new_remove(struct pci_dev *dev) +{ +struct ide_host *host =pci_get_drvdata (dev); +struct pci_dev *dev2 = host->dev[1 ] ?to_pci_dev (host->dev[1 ]) :NULL ; + +ide_pci_remove (dev); +pci_dev_put (dev2); +} +static const struct pci_device_id pdc202new_pci_tbl[] = { {PCI_VDEVICE (PROMISE ,PCI_DEVICE_ID_PROMISE_20268 ),0 }, {PCI_VDEVICE (PROMISE ,PCI_DEVICE_ID_PROMISE_20269 ),1 },
@@ -559,6 +568,7 @@ static struct pci_driver driver = { .name = "Promise_IDE", .id_table = pdc202new_pci_tbl, .probe = pdc202new_init_one, + .remove = pdc202new_remove, };static int __init pdc202new_ide_init (void )
@@ -566,7 +576,13 @@ static int __init pdc202new_ide_init(voireturn ide_pci_register_driver (&driver); } +static void __exit pdc202new_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (pdc202new_ide_init); +module_exit (pdc202new_ide_exit);MODULE_AUTHOR ("Andre Hedrick, Frank Tiernan" );MODULE_DESCRIPTION ("PCI driver module for Promise PDC20268 and higher" );
PATCH 36/50 pdc202xx_old: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/pdc202xx_old.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/ide/pci/pdc202xx_old.c +7 -0
@@ -429,6 +429,7 @@ static struct pci_driver driver = { .name = "Promise_Old_IDE", .id_table = pdc202xx_pci_tbl, .probe = pdc202xx_init_one, + .remove = ide_pci_remove, };static int __init pdc202xx_ide_init (void )
@@ -436,7 +437,13 @@ static int __init pdc202xx_ide_init(voidreturn ide_pci_register_driver (&driver); } +static void __exit pdc202xx_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (pdc202xx_ide_init); +module_exit (pdc202xx_ide_exit);MODULE_AUTHOR ("Andre Hedrick, Frank Tiernan" );MODULE_DESCRIPTION ("PCI driver module for older Promise IDE" );
PATCH 37/50 piix: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/piix.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/ide/pci/piix.c +7 -0
@@ -462,6 +462,7 @@ static struct pci_driver driver = { .name = "PIIX_IDE", .id_table = piix_pci_tbl, .probe = piix_init_one, + .remove = ide_pci_remove, };static int __init piix_ide_init (void )
@@ -470,7 +471,13 @@ static int __init piix_ide_init(void)return ide_pci_register_driver (&driver); } +static void __exit piix_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (piix_ide_init); +module_exit (piix_ide_exit);MODULE_AUTHOR ("Andre Hedrick, Andrzej Krzysztofowicz" );MODULE_DESCRIPTION ("PCI driver module for Intel PIIX IDE" );
PATCH 38/50 rz1000: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/rz1000.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/ide/pci/rz1000.c +7 -0
@@ -62,6 +62,7 @@ static struct pci_driver driver = { .name = "RZ1000_IDE", .id_table = rz1000_pci_tbl, .probe = rz1000_init_one, + .remove = ide_pci_remove, };static int __init rz1000_ide_init (void )
@@ -69,7 +70,13 @@ static int __init rz1000_ide_init(void)return ide_pci_register_driver (&driver); } +static void __exit rz1000_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (rz1000_ide_init); +module_exit (rz1000_ide_exit);MODULE_AUTHOR ("Andre Hedrick" );MODULE_DESCRIPTION ("PCI driver module for RZ1000 IDE" );
PATCH 39/50 sc1200: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/sc1200.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/ide/pci/sc1200.c +7 -0
@@ -329,6 +329,7 @@ static struct pci_driver driver = { .name = "SC1200_IDE", .id_table = sc1200_pci_tbl, .probe = sc1200_init_one, + .remove = ide_pci_remove, #ifdef CONFIG_PM .suspend = sc1200_suspend, .resume = sc1200_resume,
@@ -340,7 +341,13 @@ static int __init sc1200_ide_init(void)return ide_pci_register_driver (&driver); } +static void __exit sc1200_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (sc1200_ide_init); +module_exit (sc1200_ide_exit);MODULE_AUTHOR ("Mark Lord" );MODULE_DESCRIPTION ("PCI driver module for NS SC1200 IDE" );
PATCH 40/50 serverworks: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/serverworks.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/ide/pci/serverworks.c +7 -0
@@ -439,6 +439,7 @@ static struct pci_driver driver = { .name = "Serverworks_IDE", .id_table = svwks_pci_tbl, .probe = svwks_init_one, + .remove = ide_pci_remove, };static int __init svwks_ide_init (void )
@@ -446,7 +447,13 @@ static int __init svwks_ide_init(void)return ide_pci_register_driver (&driver); } +static void __exit svwks_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (svwks_ide_init); +module_exit (svwks_ide_exit);MODULE_AUTHOR ("Michael Aubry. Andrzej Krzysztofowicz, Andre Hedrick" );MODULE_DESCRIPTION ("PCI driver module for Serverworks OSB4/CSB5/CSB6 IDE" );
PATCH 41/50 siimage: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/siimage.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+)
drivers/ide/pci/siimage.c +25 -0
@@ -800,6 +800,24 @@ static int __devinit siimage_init_one(streturn rc; } +static void __devexit siimage_remove(struct pci_dev *dev) +{ +struct ide_host *host =pci_get_drvdata (dev); +void __iomem *ioaddr = host->host_priv; + +ide_pci_remove (dev); + +if (ioaddr) { +resource_size_t bar5 =pci_resource_start (dev,5 ); +unsigned long barsize =pci_resource_len (dev,5 ); + +iounmap (ioaddr); +release_mem_region (bar5, barsize); + } + +pci_disable_device (dev); +} +static const struct pci_device_id siimage_pci_tbl[] = { {PCI_VDEVICE (CMD ,PCI_DEVICE_ID_SII_680 ),0 }, #ifdef CONFIG_BLK_DEV_IDE_SATA
@@ -814,6 +832,7 @@ static struct pci_driver driver = { .name = "SiI_IDE", .id_table = siimage_pci_tbl, .probe = siimage_init_one, + .remove = siimage_remove, };static int __init siimage_ide_init (void )
@@ -821,7 +840,13 @@ static int __init siimage_ide_init(void)return ide_pci_register_driver (&driver); } +static void __exit siimage_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (siimage_ide_init); +module_exit (siimage_ide_exit);MODULE_AUTHOR ("Andre Hedrick, Alan Cox" );MODULE_DESCRIPTION ("PCI driver module for SiI IDE" );
PATCH 42/50 sis5513: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/sis5513.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
drivers/ide/pci/sis5513.c +13 -0
@@ -586,6 +586,12 @@ static int __devinit sis5513_init_one(streturn ide_pci_init_one (dev, &d,NULL ); } +static void __devexit sis5513_remove(struct pci_dev *dev) +{ +ide_pci_remove (dev); +pci_disable_device (dev); +} +static const struct pci_device_id sis5513_pci_tbl[] = { {PCI_VDEVICE (SI ,PCI_DEVICE_ID_SI_5513 ),0 }, {PCI_VDEVICE (SI ,PCI_DEVICE_ID_SI_5518 ),0 },
@@ -598,6 +604,7 @@ static struct pci_driver driver = { .name = "SIS_IDE", .id_table = sis5513_pci_tbl, .probe = sis5513_init_one, + .remove = sis5513_remove, };static int __init sis5513_ide_init (void )
@@ -605,7 +612,13 @@ static int __init sis5513_ide_init(void)return ide_pci_register_driver (&driver); } +static void __exit sis5513_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (sis5513_ide_init); +module_exit (sis5513_ide_exit);MODULE_AUTHOR ("Lionel Bouton, L C Chang, Andre Hedrick, Vojtech Pavlik" );MODULE_DESCRIPTION ("PCI driver module for SIS IDE" );
PATCH 43/50 sl82c105: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/sl82c105.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/ide/pci/sl82c105.c +7 -0
@@ -348,6 +348,7 @@ static struct pci_driver driver = { .name = "W82C105_IDE", .id_table = sl82c105_pci_tbl, .probe = sl82c105_init_one, + .remove = ide_pci_remove, };static int __init sl82c105_ide_init (void )
@@ -355,7 +356,13 @@ static int __init sl82c105_ide_init(voidreturn ide_pci_register_driver (&driver); } +static void __exit sl82c105_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (sl82c105_ide_init); +module_exit (sl82c105_ide_exit);MODULE_DESCRIPTION ("PCI driver module for W82C105 IDE" );MODULE_LICENSE ("GPL" );
PATCH 44/50 slc90e66: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/slc90e66.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/ide/pci/slc90e66.c +7 -0
@@ -157,6 +157,7 @@ static struct pci_driver driver = { .name = "SLC90e66_IDE", .id_table = slc90e66_pci_tbl, .probe = slc90e66_init_one, + .remove = ide_pci_remove, };static int __init slc90e66_ide_init (void )
@@ -164,7 +165,13 @@ static int __init slc90e66_ide_init(voidreturn ide_pci_register_driver (&driver); } +static void __exit slc90e66_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (slc90e66_ide_init); +module_exit (slc90e66_ide_exit);MODULE_AUTHOR ("Andre Hedrick" );MODULE_DESCRIPTION ("PCI driver module for SLC90E66 IDE" );
PATCH 45/50 tc86c001: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/tc86c001.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-)
drivers/ide/pci/tc86c001.c +16 -1
@@ -232,6 +232,13 @@ out:return rc; } +static void __devexit tc86c001_remove(struct pci_dev *dev) +{ +ide_pci_remove (dev); +pci_release_region (dev,5 ); +pci_disable_device (dev); +} +static const struct pci_device_id tc86c001_pci_tbl[] = { {PCI_VDEVICE (TOSHIBA_2 ,PCI_DEVICE_ID_TOSHIBA_TC86C001_IDE ),0 }, {0 , }
@@ -241,14 +248,22 @@ MODULE_DEVICE_TABLE(pci, tc86c001_pci_tbstatic struct pci_driver driver = { .name ="TC86C001" , .id_table = tc86c001_pci_tbl, - .probe = tc86c001_init_one + .probe = tc86c001_init_one, + .remove = tc86c001_remove, };static int __init tc86c001_ide_init (void ) {return ide_pci_register_driver (&driver); } + +static void __exit tc86c001_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (tc86c001_ide_init); +module_exit (tc86c001_ide_exit);MODULE_AUTHOR ("MontaVista Software, Inc. <[email protected]>" );MODULE_DESCRIPTION ("PCI driver module for TC86C001 IDE" );
PATCH 46/50 triflex: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/triflex.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/ide/pci/triflex.c +7 -0
@@ -117,6 +117,7 @@ static struct pci_driver driver = { .name = "TRIFLEX_IDE", .id_table = triflex_pci_tbl, .probe = triflex_init_one, + .remove = ide_pci_remove, };static int __init triflex_ide_init (void )
@@ -124,7 +125,13 @@ static int __init triflex_ide_init(void)return ide_pci_register_driver (&driver); } +static void __exit triflex_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (triflex_ide_init); +module_exit (triflex_ide_exit);MODULE_AUTHOR ("Torben Mathiasen" );MODULE_DESCRIPTION ("PCI driver module for Compaq Triflex IDE" );
PATCH 47/50 trm290: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/trm290.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/ide/pci/trm290.c +7 -0
@@ -353,6 +353,7 @@ static struct pci_driver driver = { .name = "TRM290_IDE", .id_table = trm290_pci_tbl, .probe = trm290_init_one, + .remove = ide_pci_remove, };static int __init trm290_ide_init (void )
@@ -360,7 +361,13 @@ static int __init trm290_ide_init(void)return ide_pci_register_driver (&driver); } +static void __exit trm290_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (trm290_ide_init); +module_exit (trm290_ide_exit);MODULE_AUTHOR ("Mark Lord" );MODULE_DESCRIPTION ("PCI driver module for Tekram TRM290 IDE" );
PATCH 48/50 via82cxxx: add ->remove method and module_exit()
In reply to a message not in the archive--- drivers/ide/pci/via82cxxx.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)
drivers/ide/pci/via82cxxx.c +16 -0
@@ -467,6 +467,15 @@ static int __devinit via_init_one(structreturn rc; } +static void __devexit via_remove(struct pci_dev *dev) +{ +struct ide_host *host =pci_get_drvdata (dev); +struct via82cxxx_dev *vdev = host->host_priv; + +ide_pci_remove (dev); +kfree (vdev); +} +static const struct pci_device_id via_pci_tbl[] = { {PCI_VDEVICE (VIA ,PCI_DEVICE_ID_VIA_82C576_1 ),0 }, {PCI_VDEVICE (VIA ,PCI_DEVICE_ID_VIA_82C586_1 ),0 },
@@ -481,6 +490,7 @@ static struct pci_driver driver = { .name = "VIA_IDE", .id_table = via_pci_tbl, .probe = via_init_one, + .remove = via_remove, };static int __init via_ide_init (void )
@@ -488,7 +498,13 @@ static int __init via_ide_init(void)return ide_pci_register_driver (&driver); } +static void __exit via_ide_exit(void) +{ +pci_unregister_driver (&driver); +} +module_init (via_ide_init); +module_exit (via_ide_exit);MODULE_AUTHOR ("Vojtech Pavlik, Michel Aubry, Jeff Garzik, Andre Hedrick" );MODULE_DESCRIPTION ("PCI driver module for VIA IDE" );
PATCH 49/50 icside: add module_exit()
In reply to a message not in the archive--- drivers/ide/arm/icside.c | 6 ++++++ 1 file changed, 6 insertions(+)
drivers/ide/arm/icside.c +6 -0
@@ -710,8 +710,14 @@ static int __init icside_init(void)return ecard_register_driver (&icside_driver); } +static void __exit icside_exit(void); +{ +ecard_unregister_driver (&icside_driver); +} +MODULE_AUTHOR ("Russell King <[email protected]>" );MODULE_LICENSE ("GPL" );MODULE_DESCRIPTION ("ICS IDE driver" );module_init (icside_init); +module_exit (icside_exit);
PATCH 50/50 rapide: add module_exit()
In reply to a message not in the archive--- drivers/ide/arm/rapide.c | 6 ++++++ 1 file changed, 6 insertions(+)
drivers/ide/arm/rapide.c +6 -0
@@ -95,7 +95,13 @@ static int __init rapide_init(void)return ecard_register_driver (&rapide_driver); } +static void __exit rapide_exit(void) +{ +ecard_unregister_driver (&rapide_driver); +} +MODULE_LICENSE ("GPL" );MODULE_DESCRIPTION ("Yellowstone RAPIDE driver" );module_init (rapide_init); +module_exit (rapide_exit);