* [PATCH 01/50] it8213: fix return value in it8213_init_one()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 02/50] ide: always call ->init_chipset method in do_ide_setup_pci_device() Bartlomiej Zolnierkiewicz
` (48 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: it8213-fix-return-value-in-it8213_init_one.patch --]
[-- Type: text/plain, Size: 687 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/it8213.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
Index: b/drivers/ide/pci/it8213.c
===================================================================
--- a/drivers/ide/pci/it8213.c
+++ b/drivers/ide/pci/it8213.c
@@ -184,8 +184,7 @@ static const struct ide_port_info it8213
static 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[] = {
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 02/50] ide: always call ->init_chipset method in do_ide_setup_pci_device()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
2008-07-06 17:20 ` [PATCH 01/50] it8213: fix return value in it8213_init_one() Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 03/50] ide: respect dev->irq in do_ide_setup_pci_device() also if tried_config Bartlomiej Zolnierkiewicz
` (47 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: ide-always-call-init_chipset-method-in-do_ide_setup_pci_device.patch --]
[-- Type: text/plain, Size: 1794 bytes --]
Call ->init_chipset method also for 'tried_config' / '!pciirq' conditions.
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/setup-pci.c | 24 ++++++++++--------------
1 file changed, 10 insertions(+), 14 deletions(-)
Index: b/drivers/ide/setup-pci.c
===================================================================
--- a/drivers/ide/setup-pci.c
+++ b/drivers/ide/setup-pci.c
@@ -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);
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 03/50] ide: respect dev->irq in do_ide_setup_pci_device() also if tried_config
[not found] <20080706172010.559358957@bzolnier@gmail.com>
2008-07-06 17:20 ` [PATCH 01/50] it8213: fix return value in it8213_init_one() Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 02/50] ide: always call ->init_chipset method in do_ide_setup_pci_device() Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 04/50] ide: move ide_setup_pci_controller() call to ide_setup_pci_device() Bartlomiej Zolnierkiewicz
` (46 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: ide-respect-dev-irq-in-do_ide_setup_pci_device-also-if-tried_config.patch --]
[-- Type: text/plain, Size: 2057 bytes --]
* 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().
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/setup-pci.c | 12 +++---------
1 file changed, 3 insertions(+), 9 deletions(-)
Index: b/drivers/ide/setup-pci.c
===================================================================
--- a/drivers/ide/setup-pci.c
+++ b/drivers/ide/setup-pci.c
@@ -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(struc
const 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(struc
printk(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",
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 04/50] ide: move ide_setup_pci_controller() call to ide_setup_pci_device()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (2 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 03/50] ide: respect dev->irq in do_ide_setup_pci_device() also if tried_config Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 05/50] ide: call ide_pci_setup_ports() before do_ide_setup_pci_device() Bartlomiej Zolnierkiewicz
` (45 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: ide-move-ide_setup_pci_controller-call-to-ide_setup_pci_device-s.patch --]
[-- Type: text/plain, Size: 1333 bytes --]
There should be no functional changes caused by this patch.
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/setup-pci.c | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
Index: b/drivers/ide/setup-pci.c
===================================================================
--- a/drivers/ide/setup-pci.c
+++ b/drivers/ide/setup-pci.c
@@ -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_dev
hw_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_dev
hw_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);
/*
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 05/50] ide: call ide_pci_setup_ports() before do_ide_setup_pci_device()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (3 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 04/50] ide: move ide_setup_pci_controller() call to ide_setup_pci_device() Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 06/50] ide: add ->dev and ->host_priv fields to struct ide_host Bartlomiej Zolnierkiewicz
` (44 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: ide-call-ide_pci_setup_ports-before-do_ide_setup_pci_device.patch --]
[-- Type: text/plain, Size: 1464 bytes --]
* Call ide_pci_setup_ports() before do_ide_setup_pci_device()
in ide_setup_pci_device[s]().
While at it:
* Remove stale FIXMEs.
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/setup-pci.c | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
Index: b/drivers/ide/setup-pci.c
===================================================================
--- a/drivers/ide/setup-pci.c
+++ b/drivers/ide/setup-pci.c
@@ -533,14 +533,16 @@ int ide_setup_pci_device(struct pci_dev
if (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_dev
if (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_dev
if (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);
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 06/50] ide: add ->dev and ->host_priv fields to struct ide_host
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (4 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 05/50] ide: call ide_pci_setup_ports() before do_ide_setup_pci_device() Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 07/50] ide: add ide_device_{get,put}() helpers Bartlomiej Zolnierkiewicz
` (43 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: ide-add-dev-and-host_priv-fields-to-struct-ide_host.patch --]
[-- Type: text/plain, Size: 19635 bytes --]
* 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}().
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
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(-)
Index: b/drivers/ide/ide-probe.c
===================================================================
--- a/drivers/ide/ide-probe.c
+++ b/drivers/ide/ide-probe.c
@@ -1608,6 +1608,9 @@ struct ide_host *ide_host_alloc_all(cons
return NULL;
}
+ if (hws[0])
+ host->dev[0] = hws[0]->dev;
+
return host;
}
EXPORT_SYMBOL_GPL(ide_host_alloc_all);
Index: b/drivers/ide/pci/aec62xx.c
===================================================================
--- a/drivers/ide/pci/aec62xx.c
+++ b/drivers/ide/pci/aec62xx.c
@@ -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);
Index: b/drivers/ide/pci/alim15x3.c
===================================================================
--- a/drivers/ide/pci/alim15x3.c
+++ b/drivers/ide/pci/alim15x3.c
@@ -565,7 +565,7 @@ static int __devinit alim15x3_init_one(s
if (idx == 0)
d.host_flags |= IDE_HFLAG_CLEAR_SIMPLEX;
- return ide_setup_pci_device(dev, &d);
+ return ide_pci_init_one(dev, &d, NULL);
}
Index: b/drivers/ide/pci/amd74xx.c
===================================================================
--- a/drivers/ide/pci/amd74xx.c
+++ b/drivers/ide/pci/amd74xx.c
@@ -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[] = {
Index: b/drivers/ide/pci/atiixp.c
===================================================================
--- a/drivers/ide/pci/atiixp.c
+++ b/drivers/ide/pci/atiixp.c
@@ -167,7 +167,7 @@ static const struct ide_port_info atiixp
static 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[] = {
Index: b/drivers/ide/pci/cmd64x.c
===================================================================
--- a/drivers/ide/pci/cmd64x.c
+++ b/drivers/ide/pci/cmd64x.c
@@ -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[] = {
Index: b/drivers/ide/pci/cs5530.c
===================================================================
--- a/drivers/ide/pci/cs5530.c
+++ b/drivers/ide/pci/cs5530.c
@@ -256,7 +256,7 @@ static const struct ide_port_info cs5530
static 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[] = {
Index: b/drivers/ide/pci/cs5535.c
===================================================================
--- a/drivers/ide/pci/cs5535.c
+++ b/drivers/ide/pci/cs5535.c
@@ -180,7 +180,7 @@ static const struct ide_port_info cs5535
static 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[] = {
Index: b/drivers/ide/pci/cy82c693.c
===================================================================
--- a/drivers/ide/pci/cy82c693.c
+++ b/drivers/ide/pci/cy82c693.c
@@ -419,7 +419,7 @@ static int __devinit cy82c693_init_one(s
if ((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;
Index: b/drivers/ide/pci/generic.c
===================================================================
--- a/drivers/ide/pci/generic.c
+++ b/drivers/ide/pci/generic.c
@@ -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;
}
Index: b/drivers/ide/pci/hpt34x.c
===================================================================
--- a/drivers/ide/pci/hpt34x.c
+++ b/drivers/ide/pci/hpt34x.c
@@ -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[] = {
Index: b/drivers/ide/pci/hpt366.c
===================================================================
--- a/drivers/ide/pci/hpt366.c
+++ b/drivers/ide/pci/hpt366.c
@@ -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 = {
Index: b/drivers/ide/pci/it8213.c
===================================================================
--- a/drivers/ide/pci/it8213.c
+++ b/drivers/ide/pci/it8213.c
@@ -184,7 +184,7 @@ static const struct ide_port_info it8213
static 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[] = {
Index: b/drivers/ide/pci/it821x.c
===================================================================
--- a/drivers/ide/pci/it821x.c
+++ b/drivers/ide/pci/it821x.c
@@ -658,7 +658,7 @@ static int __devinit it821x_init_one(str
pci_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[] = {
Index: b/drivers/ide/pci/jmicron.c
===================================================================
--- a/drivers/ide/pci/jmicron.c
+++ b/drivers/ide/pci/jmicron.c
@@ -121,7 +121,7 @@ static const struct ide_port_info jmicro
static 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
Index: b/drivers/ide/pci/ns87415.c
===================================================================
--- a/drivers/ide/pci/ns87415.c
+++ b/drivers/ide/pci/ns87415.c
@@ -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[] = {
Index: b/drivers/ide/pci/opti621.c
===================================================================
--- a/drivers/ide/pci/opti621.c
+++ b/drivers/ide/pci/opti621.c
@@ -209,7 +209,7 @@ static const struct ide_port_info opti62
static 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[] = {
Index: b/drivers/ide/pci/pdc202xx_new.c
===================================================================
--- a/drivers/ide/pci/pdc202xx_new.c
+++ b/drivers/ide/pci/pdc202xx_new.c
@@ -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[] = {
Index: b/drivers/ide/pci/pdc202xx_old.c
===================================================================
--- a/drivers/ide/pci/pdc202xx_old.c
+++ b/drivers/ide/pci/pdc202xx_old.c
@@ -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[] = {
Index: b/drivers/ide/pci/piix.c
===================================================================
--- a/drivers/ide/pci/piix.c
+++ b/drivers/ide/pci/piix.c
@@ -394,7 +394,7 @@ static const struct ide_port_info piix_p
static 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);
}
/**
Index: b/drivers/ide/pci/rz1000.c
===================================================================
--- a/drivers/ide/pci/rz1000.c
+++ b/drivers/ide/pci/rz1000.c
@@ -48,7 +48,7 @@ static const struct ide_port_info rz1000
static 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[] = {
Index: b/drivers/ide/pci/sc1200.c
===================================================================
--- a/drivers/ide/pci/sc1200.c
+++ b/drivers/ide/pci/sc1200.c
@@ -317,7 +317,7 @@ static const struct ide_port_info sc1200
static 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[] = {
Index: b/drivers/ide/pci/serverworks.c
===================================================================
--- a/drivers/ide/pci/serverworks.c
+++ b/drivers/ide/pci/serverworks.c
@@ -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[] = {
Index: b/drivers/ide/pci/siimage.c
===================================================================
--- a/drivers/ide/pci/siimage.c
+++ b/drivers/ide/pci/siimage.c
@@ -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[] = {
Index: b/drivers/ide/pci/sis5513.c
===================================================================
--- a/drivers/ide/pci/sis5513.c
+++ b/drivers/ide/pci/sis5513.c
@@ -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[] = {
Index: b/drivers/ide/pci/sl82c105.c
===================================================================
--- a/drivers/ide/pci/sl82c105.c
+++ b/drivers/ide/pci/sl82c105.c
@@ -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[] = {
Index: b/drivers/ide/pci/slc90e66.c
===================================================================
--- a/drivers/ide/pci/slc90e66.c
+++ b/drivers/ide/pci/slc90e66.c
@@ -144,7 +144,7 @@ static const struct ide_port_info slc90e
static 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[] = {
Index: b/drivers/ide/pci/tc86c001.c
===================================================================
--- a/drivers/ide/pci/tc86c001.c
+++ b/drivers/ide/pci/tc86c001.c
@@ -215,7 +215,7 @@ static const struct ide_port_info tc86c0
static 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[] = {
Index: b/drivers/ide/pci/triflex.c
===================================================================
--- a/drivers/ide/pci/triflex.c
+++ b/drivers/ide/pci/triflex.c
@@ -104,7 +104,7 @@ static const struct ide_port_info trifle
static 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[] = {
Index: b/drivers/ide/pci/trm290.c
===================================================================
--- a/drivers/ide/pci/trm290.c
+++ b/drivers/ide/pci/trm290.c
@@ -340,7 +340,7 @@ static const struct ide_port_info trm290
static 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[] = {
Index: b/drivers/ide/pci/via82cxxx.c
===================================================================
--- a/drivers/ide/pci/via82cxxx.c
+++ b/drivers/ide/pci/via82cxxx.c
@@ -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[] = {
Index: b/drivers/ide/setup-pci.c
===================================================================
--- a/drivers/ide/setup-pci.c
+++ b/drivers/ide/setup-pci.c
@@ -524,8 +524,10 @@ out:
return ret;
}
-int ide_setup_pci_device(struct pci_dev *dev, const struct ide_port_info *d)
+int ide_pci_init_one(struct pci_dev *dev, const struct ide_port_info *d,
+ void *priv)
{
+ struct ide_host *host;
hw_regs_t hw[4], *hws[] = { NULL, NULL, NULL, NULL };
int ret;
@@ -535,6 +537,19 @@ int ide_setup_pci_device(struct pci_dev
ide_pci_setup_ports(dev, d, 0, &hw[0], &hws[0]);
+ host = ide_host_alloc(d, hws);
+ if (host == NULL) {
+ ret = -ENOMEM;
+ goto out;
+ }
+
+ host->dev[0] = &dev->dev;
+
+ host->host_priv = priv;
+
+ if (priv)
+ pci_set_drvdata(dev, host);
+
ret = do_ide_setup_pci_device(dev, d, 1);
if (ret < 0)
goto out;
@@ -542,16 +557,19 @@ int ide_setup_pci_device(struct pci_dev
/* fixup IRQ */
hw[1].irq = hw[0].irq = ret;
- ret = ide_host_add(d, hws, NULL);
+ ret = ide_host_register(host, d, hws);
+ if (ret)
+ ide_host_free(host);
out:
return ret;
}
-EXPORT_SYMBOL_GPL(ide_setup_pci_device);
+EXPORT_SYMBOL_GPL(ide_pci_init_one);
-int ide_setup_pci_devices(struct pci_dev *dev1, struct pci_dev *dev2,
- const struct ide_port_info *d)
+int ide_pci_init_two(struct pci_dev *dev1, struct pci_dev *dev2,
+ const struct ide_port_info *d, void *priv)
{
struct pci_dev *pdev[] = { dev1, dev2 };
+ struct ide_host *host;
int ret, i;
hw_regs_t hw[4], *hws[] = { NULL, NULL, NULL, NULL };
@@ -561,7 +579,25 @@ int ide_setup_pci_devices(struct pci_dev
goto out;
ide_pci_setup_ports(pdev[i], d, 0, &hw[i*2], &hws[i*2]);
+ }
+ host = ide_host_alloc(d, hws);
+ if (host == NULL) {
+ ret = -ENOMEM;
+ goto out;
+ }
+
+ host->dev[0] = &dev1->dev;
+ host->dev[1] = &dev2->dev;
+
+ host->host_priv = priv;
+
+ if (priv) {
+ 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);
/*
@@ -575,8 +611,10 @@ int ide_setup_pci_devices(struct pci_dev
hw[i*2 + 1].irq = hw[i*2].irq = ret;
}
- ret = ide_host_add(d, hws, NULL);
+ ret = ide_host_register(host, d, hws);
+ if (ret)
+ ide_host_free(host);
out:
return ret;
}
-EXPORT_SYMBOL_GPL(ide_setup_pci_devices);
+EXPORT_SYMBOL_GPL(ide_pci_init_two);
Index: b/include/linux/ide.h
===================================================================
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -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 *);
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 07/50] ide: add ide_device_{get,put}() helpers
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (5 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 06/50] ide: add ->dev and ->host_priv fields to struct ide_host Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 08/50] aec62xx: convert to use ->host_priv Bartlomiej Zolnierkiewicz
` (42 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: ide-add-ide_device_get-put-helpers.patch --]
[-- Type: text/plain, Size: 8269 bytes --]
* 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}().
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
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(-)
Index: b/drivers/ide/ide-cd.c
===================================================================
--- a/drivers/ide/ide-cd.c
+++ b/drivers/ide/ide-cd.c
@@ -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);
}
Index: b/drivers/ide/ide-disk.c
===================================================================
--- a/drivers/ide/ide-disk.c
+++ b/drivers/ide/ide-disk.c
@@ -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);
}
Index: b/drivers/ide/ide-floppy.c
===================================================================
--- a/drivers/ide/ide-floppy.c
+++ b/drivers/ide/ide-floppy.c
@@ -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);
}
Index: b/drivers/ide/ide-probe.c
===================================================================
--- a/drivers/ide/ide-probe.c
+++ b/drivers/ide/ide-probe.c
@@ -1599,6 +1599,8 @@ struct ide_host *ide_host_alloc_all(cons
ide_init_port_data(hwif, idx);
+ hwif->host = host;
+
host->ports[i] = hwif;
host->n_ports++;
}
Index: b/drivers/ide/ide-tape.c
===================================================================
--- a/drivers/ide/ide-tape.c
+++ b/drivers/ide/ide-tape.c
@@ -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);
}
Index: b/drivers/ide/ide.c
===================================================================
--- a/drivers/ide/ide.c
+++ b/drivers/ide/ide.c
@@ -618,6 +618,53 @@ set_val:
EXPORT_SYMBOL(generic_ide_ioctl);
+/**
+ * ide_device_get - get an additional reference to a ide_drive_t
+ * @drive: device to get a reference to
+ *
+ * Gets a reference to the ide_drive_t and increments the use count of the
+ * underlying LLDD module.
+ */
+int ide_device_get(ide_drive_t *drive)
+{
+ struct device *host_dev;
+ struct module *module;
+
+ if (!get_device(&drive->gendev))
+ return -ENXIO;
+
+ host_dev = drive->hwif->host->dev[0];
+ module = host_dev ? host_dev->driver->owner : NULL;
+
+ if (module && !try_module_get(module)) {
+ put_device(&drive->gendev);
+ return -ENXIO;
+ }
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(ide_device_get);
+
+/**
+ * ide_device_put - release a reference to a ide_drive_t
+ * @drive: device to release a reference on
+ *
+ * Release a reference to the ide_drive_t and decrements the use count of
+ * the underlying LLDD module.
+ */
+void ide_device_put(ide_drive_t *drive)
+{
+#ifdef CONFIG_MODULE_UNLOAD
+ struct device *host_dev = drive->hwif->host->dev[0];
+ struct module *module = host_dev ? host_dev->driver->owner : NULL;
+
+ if (module)
+ module_put(module);
+#endif
+ put_device(&drive->gendev);
+}
+EXPORT_SYMBOL_GPL(ide_device_put);
+
static int ide_bus_match(struct device *dev, struct device_driver *drv)
{
return 1;
Index: b/drivers/scsi/ide-scsi.c
===================================================================
--- a/drivers/scsi/ide-scsi.c
+++ b/drivers/scsi/ide-scsi.c
@@ -101,8 +101,13 @@ static struct ide_scsi_obj *ide_scsi_get
mutex_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_get
static 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);
}
Index: b/include/linux/ide.h
===================================================================
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -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;
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 08/50] aec62xx: convert to use ->host_priv
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (6 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 07/50] ide: add ide_device_{get,put}() helpers Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 09/50] hpt366: " Bartlomiej Zolnierkiewicz
` (41 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: aec62xx-convert-to-use-host_priv.patch --]
[-- Type: text/plain, Size: 4174 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/aec62xx.c | 32 ++++++++++++++++----------------
1 file changed, 16 insertions(+), 16 deletions(-)
Index: b/drivers/ide/pci/aec62xx.c
===================================================================
--- a/drivers/ide/pci/aec62xx.c
+++ b/drivers/ide/pci/aec62xx.c
@@ -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_t
local_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_t
local_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_t
static 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 aec62x
static 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);
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 09/50] hpt366: convert to use ->host_priv
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (7 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 08/50] aec62xx: convert to use ->host_priv Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 10/50] it821x: " Bartlomiej Zolnierkiewicz
` (40 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel, Sergei Shtylyov
[-- Attachment #1: hpt366-convert-to-use-host_priv.patch --]
[-- Type: text/plain, Size: 6539 bytes --]
While at it:
* Allocate both struct hpt_info instances at once.
Cc: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
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(-)
Index: b/drivers/ide/pci/hpt366.c
===================================================================
--- a/drivers/ide/pci/hpt366.c
+++ b/drivers/ide/pci/hpt366.c
@@ -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, s
static 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_dp
static 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_chips
if (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_chips
static 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 hpt366
static 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(str
if (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 = {
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 10/50] it821x: convert to use ->host_priv
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (8 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 09/50] hpt366: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 11/50] sc1200: " Bartlomiej Zolnierkiewicz
` (39 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: it821x-convert-to-use-host_priv.patch --]
[-- Type: text/plain, Size: 1882 bytes --]
While at it:
* Allocate both struct it821x_dev instances at once.
* Don't leak itdevs on ide_pci_init_one() failure.
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/it821x.c | 28 +++++++++++++---------------
1 file changed, 13 insertions(+), 15 deletions(-)
Index: b/drivers/ide/pci/it821x.c
===================================================================
--- a/drivers/ide/pci/it821x.c
+++ b/drivers/ide/pci/it821x.c
@@ -528,8 +528,9 @@ static struct ide_dma_ops it821x_pass_th
static 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 it821x
static 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[] = {
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 11/50] sc1200: convert to use ->host_priv
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (9 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 10/50] it821x: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 12/50] siimage: " Bartlomiej Zolnierkiewicz
` (38 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: sc1200-convert-to-use-host_priv.patch --]
[-- Type: text/plain, Size: 2292 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/sc1200.c | 39 +++++++++++++++++++--------------------
1 file changed, 19 insertions(+), 20 deletions(-)
Index: b/drivers/ide/pci/sc1200.c
===================================================================
--- a/drivers/ide/pci/sc1200.c
+++ b/drivers/ide/pci/sc1200.c
@@ -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_de
static 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_dev
if (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 sc1200
static 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[] = {
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 12/50] siimage: convert to use ->host_priv
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (10 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 11/50] sc1200: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 13/50] via82cxxx: " Bartlomiej Zolnierkiewicz
` (37 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: siimage-convert-to-use-host_priv.patch --]
[-- Type: text/plain, Size: 6250 bytes --]
While at it:
* Reserve PCI BAR 5 in siimage_init_one() and remove no longer needed
setup_mmio_siimage().
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/siimage.c | 114 +++++++++++++++++++++++-----------------------
1 file changed, 58 insertions(+), 56 deletions(-)
Index: b/drivers/ide/pci/siimage.c
===================================================================
--- a/drivers/ide/pci/siimage.c
+++ b/drivers/ide/pci/siimage.c
@@ -127,9 +127,10 @@ static inline unsigned long siimage_seld
static 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 *de
static 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_dev
static 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_dev
static 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(s
static 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_chips
static 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 siimag
static 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[] = {
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 13/50] via82cxxx: convert to use ->host_priv
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (11 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 12/50] siimage: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 14/50] tc86c001: remove ->init_chipset method Bartlomiej Zolnierkiewicz
` (36 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: via82cxxx-convert-to-use-host_priv.patch --]
[-- Type: text/plain, Size: 2784 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/via82cxxx.c | 33 +++++++++++++++++++++------------
1 file changed, 21 insertions(+), 12 deletions(-)
Index: b/drivers/ide/pci/via82cxxx.c
===================================================================
--- a/drivers/ide/pci/via82cxxx.c
+++ b/drivers/ide/pci/via82cxxx.c
@@ -113,7 +113,8 @@ struct via82cxxx_dev
static 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 *d
ide_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(s
static 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 pci
static 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[] = {
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 14/50] tc86c001: remove ->init_chipset method
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (12 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 13/50] via82cxxx: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 15/50] amd74xx: cleanup " Bartlomiej Zolnierkiewicz
` (35 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel, Sergei Shtylyov
[-- Attachment #1: tc86c001-remove-init_chipset-method.patch --]
[-- Type: text/plain, Size: 2253 bytes --]
* Reserve PCI BAR 5 in tc86c001_init_one() and remove no longer needed
init_chipset_tc86c001().
While at it:
* Add & use DRV_NAME define.
Cc: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/tc86c001.c | 38 ++++++++++++++++++++++++++------------
1 file changed, 26 insertions(+), 12 deletions(-)
Index: b/drivers/ide/pci/tc86c001.c
===================================================================
--- a/drivers/ide/pci/tc86c001.c
+++ b/drivers/ide/pci/tc86c001.c
@@ -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 tc86c001
static 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 tc86c0
static 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[] = {
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 15/50] amd74xx: cleanup ->init_chipset method
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (13 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 14/50] tc86c001: remove ->init_chipset method Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 16/50] cmd64x: " Bartlomiej Zolnierkiewicz
` (34 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: amd74xx-cleanup-init_chipset-method.patch --]
[-- Type: text/plain, Size: 1707 bytes --]
Move amd_clock setup from init_chipset_amd74xx() to amd74xx_probe().
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/amd74xx.c | 36 ++++++++++++++++++------------------
1 file changed, 18 insertions(+), 18 deletions(-)
Index: b/drivers/ide/pci/amd74xx.c
===================================================================
--- a/drivers/ide/pci/amd74xx.c
+++ b/drivers/ide/pci/amd74xx.c
@@ -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);
}
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 16/50] cmd64x: cleanup ->init_chipset method
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (14 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 15/50] amd74xx: cleanup " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 17/50] via82cxxx: " Bartlomiej Zolnierkiewicz
` (33 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel, Sergei Shtylyov
[-- Attachment #1: cmd64x-cleanup-init_chipset-method.patch --]
[-- Type: text/plain, Size: 1110 bytes --]
Remove verbose reporting for CMD646 (PCI device revision is always
logged by IDE PCI layer).
Cc: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/cmd64x.c | 18 ------------------
1 file changed, 18 deletions(-)
Index: b/drivers/ide/pci/cmd64x.c
===================================================================
--- a/drivers/ide/pci/cmd64x.c
+++ b/drivers/ide/pci/cmd64x.c
@@ -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 */
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 17/50] via82cxxx: cleanup ->init_chipset method
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (15 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 16/50] cmd64x: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 18/50] ide: add ide_pci_remove() helper Bartlomiej Zolnierkiewicz
` (32 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: via82cxxx-cleanup-init_chipset-method.patch --]
[-- Type: text/plain, Size: 3644 bytes --]
* 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.
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/via82cxxx.c | 81 +++++++++++++++++++-------------------------
1 file changed, 35 insertions(+), 46 deletions(-)
Index: b/drivers/ide/pci/via82cxxx.c
===================================================================
--- a/drivers/ide/pci/via82cxxx.c
+++ b/drivers/ide/pci/via82cxxx.c
@@ -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_chips
pci_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(struct
return -ENOMEM;
}
+ vdev->via_config = via_config;
+
rc = ide_pci_init_one(dev, &d, vdev);
if (rc)
kfree(vdev);
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 18/50] ide: add ide_pci_remove() helper
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (16 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 17/50] via82cxxx: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 19/50] aec62xx: add ->remove method and module_exit() Bartlomiej Zolnierkiewicz
` (31 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: ide-add-ide_pci_remove-helper.patch --]
[-- Type: text/plain, Size: 3086 bytes --]
* 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).
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/ide-probe.c | 3 +++
drivers/ide/setup-pci.c | 39 +++++++++++++++++++++++++++++++++------
include/linux/ide.h | 2 ++
3 files changed, 38 insertions(+), 6 deletions(-)
Index: b/drivers/ide/ide-probe.c
===================================================================
--- a/drivers/ide/ide-probe.c
+++ b/drivers/ide/ide-probe.c
@@ -1613,6 +1613,9 @@ struct ide_host *ide_host_alloc_all(cons
if (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);
Index: b/drivers/ide/setup-pci.c
===================================================================
--- a/drivers/ide/setup-pci.c
+++ b/drivers/ide/setup-pci.c
@@ -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);
Index: b/include/linux/ide.h
===================================================================
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -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 *);
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 19/50] aec62xx: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (17 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 18/50] ide: add ide_pci_remove() helper Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 20/50] alim15x3: " Bartlomiej Zolnierkiewicz
` (30 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: aec62xx-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 1273 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/aec62xx.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
Index: b/drivers/ide/pci/aec62xx.c
===================================================================
--- a/drivers/ide/pci/aec62xx.c
+++ b/drivers/ide/pci/aec62xx.c
@@ -280,6 +280,12 @@ static int __devinit aec62xx_init_one(st
return 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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 20/50] alim15x3: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (18 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 19/50] aec62xx: add ->remove method and module_exit() Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 21/50] amd74xx: " Bartlomiej Zolnierkiewicz
` (29 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: alim15x3-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 954 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/alim15x3.c | 7 +++++++
1 file changed, 7 insertions(+)
Index: b/drivers/ide/pci/alim15x3.c
===================================================================
--- a/drivers/ide/pci/alim15x3.c
+++ b/drivers/ide/pci/alim15x3.c
@@ -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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 21/50] amd74xx: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (19 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 20/50] alim15x3: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 22/50] atiixp: " Bartlomiej Zolnierkiewicz
` (28 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: amd74xx-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 866 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/amd74xx.c | 7 +++++++
1 file changed, 7 insertions(+)
Index: b/drivers/ide/pci/amd74xx.c
===================================================================
--- a/drivers/ide/pci/amd74xx.c
+++ b/drivers/ide/pci/amd74xx.c
@@ -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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 22/50] atiixp: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (20 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 21/50] amd74xx: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 23/50] cmd64x: " Bartlomiej Zolnierkiewicz
` (27 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: atiixp-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 868 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/atiixp.c | 7 +++++++
1 file changed, 7 insertions(+)
Index: b/drivers/ide/pci/atiixp.c
===================================================================
--- a/drivers/ide/pci/atiixp.c
+++ b/drivers/ide/pci/atiixp.c
@@ -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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 23/50] cmd64x: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (21 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 22/50] atiixp: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 24/50] cs5530: " Bartlomiej Zolnierkiewicz
` (26 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel, Sergei Shtylyov
[-- Attachment #1: cmd64x-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 946 bytes --]
Cc: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/cmd64x.c | 7 +++++++
1 file changed, 7 insertions(+)
Index: b/drivers/ide/pci/cmd64x.c
===================================================================
--- a/drivers/ide/pci/cmd64x.c
+++ b/drivers/ide/pci/cmd64x.c
@@ -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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 24/50] cs5530: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (22 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 23/50] cmd64x: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 25/50] cs5535: " Bartlomiej Zolnierkiewicz
` (25 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: cs5530-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 877 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/cs5530.c | 7 +++++++
1 file changed, 7 insertions(+)
Index: b/drivers/ide/pci/cs5530.c
===================================================================
--- a/drivers/ide/pci/cs5530.c
+++ b/drivers/ide/pci/cs5530.c
@@ -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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 25/50] cs5535: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (23 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 24/50] cs5530: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 26/50] cy82c693: " Bartlomiej Zolnierkiewicz
` (24 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: cs5535-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 885 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/cs5535.c | 7 +++++++
1 file changed, 7 insertions(+)
Index: b/drivers/ide/pci/cs5535.c
===================================================================
--- a/drivers/ide/pci/cs5535.c
+++ b/drivers/ide/pci/cs5535.c
@@ -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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 26/50] cy82c693: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (24 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 25/50] cs5535: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 27/50] ide/pci/generic: " Bartlomiej Zolnierkiewicz
` (23 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: cy82c693-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 1695 bytes --]
Fix the refcounting for dev2 while at it.
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/cy82c693.c | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
Index: b/drivers/ide/pci/cy82c693.c
===================================================================
--- a/drivers/ide/pci/cy82c693.c
+++ b/drivers/ide/pci/cy82c693.c
@@ -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(void
return 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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 27/50] ide/pci/generic: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (25 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 26/50] cy82c693: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 28/50] hpt34x: " Bartlomiej Zolnierkiewicz
` (22 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: generic-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 887 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/generic.c | 7 +++++++
1 file changed, 7 insertions(+)
Index: b/drivers/ide/pci/generic.c
===================================================================
--- a/drivers/ide/pci/generic.c
+++ b/drivers/ide/pci/generic.c
@@ -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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 28/50] hpt34x: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (26 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 27/50] ide/pci/generic: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 29/50] hpt366: " Bartlomiej Zolnierkiewicz
` (21 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: hpt34x-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 881 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/hpt34x.c | 7 +++++++
1 file changed, 7 insertions(+)
Index: b/drivers/ide/pci/hpt34x.c
===================================================================
--- a/drivers/ide/pci/hpt34x.c
+++ b/drivers/ide/pci/hpt34x.c
@@ -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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 29/50] hpt366: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (27 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 28/50] hpt34x: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 30/50] it8213: " Bartlomiej Zolnierkiewicz
` (20 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel, Sergei Shtylyov
[-- Attachment #1: hpt366-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 1498 bytes --]
Cc: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/hpt366.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
Index: b/drivers/ide/pci/hpt366.c
===================================================================
--- a/drivers/ide/pci/hpt366.c
+++ b/drivers/ide/pci/hpt366.c
@@ -1627,6 +1627,17 @@ static int __devinit hpt366_init_one(str
return 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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 30/50] it8213: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (28 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 29/50] hpt366: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 31/50] it821x: " Bartlomiej Zolnierkiewicz
` (19 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: it8213-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 882 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/it8213.c | 7 +++++++
1 file changed, 7 insertions(+)
Index: b/drivers/ide/pci/it8213.c
===================================================================
--- a/drivers/ide/pci/it8213.c
+++ b/drivers/ide/pci/it8213.c
@@ -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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 31/50] it821x: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (29 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 30/50] it8213: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 32/50] jmicron: " Bartlomiej Zolnierkiewicz
` (18 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: it821x-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 1351 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/it821x.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
Index: b/drivers/ide/pci/it821x.c
===================================================================
--- a/drivers/ide/pci/it821x.c
+++ b/drivers/ide/pci/it821x.c
@@ -659,6 +659,15 @@ static int __devinit it821x_init_one(str
return 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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 32/50] jmicron: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (30 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 31/50] it821x: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 33/50] ns87415: " Bartlomiej Zolnierkiewicz
` (17 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: jmicron-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 898 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/jmicron.c | 7 +++++++
1 file changed, 7 insertions(+)
Index: b/drivers/ide/pci/jmicron.c
===================================================================
--- a/drivers/ide/pci/jmicron.c
+++ b/drivers/ide/pci/jmicron.c
@@ -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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 33/50] ns87415: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (31 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 32/50] jmicron: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 34/50] opti621: " Bartlomiej Zolnierkiewicz
` (16 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: ns87415-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 910 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/ns87415.c | 7 +++++++
1 file changed, 7 insertions(+)
Index: b/drivers/ide/pci/ns87415.c
===================================================================
--- a/drivers/ide/pci/ns87415.c
+++ b/drivers/ide/pci/ns87415.c
@@ -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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 34/50] opti621: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (32 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 33/50] ns87415: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 35/50] pdc202xx_new: " Bartlomiej Zolnierkiewicz
` (15 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: opti621-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 911 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/opti621.c | 7 +++++++
1 file changed, 7 insertions(+)
Index: b/drivers/ide/pci/opti621.c
===================================================================
--- a/drivers/ide/pci/opti621.c
+++ b/drivers/ide/pci/opti621.c
@@ -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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 35/50] pdc202xx_new: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (33 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 34/50] opti621: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 36/50] pdc202xx_old: " Bartlomiej Zolnierkiewicz
` (14 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: pdc202xx_new-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 1485 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/pdc202xx_new.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
Index: b/drivers/ide/pci/pdc202xx_new.c
===================================================================
--- a/drivers/ide/pci/pdc202xx_new.c
+++ b/drivers/ide/pci/pdc202xx_new.c
@@ -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(voi
return 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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 36/50] pdc202xx_old: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (34 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 35/50] pdc202xx_new: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 37/50] piix: " Bartlomiej Zolnierkiewicz
` (13 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: pdc202xx_old-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 938 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/pdc202xx_old.c | 7 +++++++
1 file changed, 7 insertions(+)
Index: b/drivers/ide/pci/pdc202xx_old.c
===================================================================
--- a/drivers/ide/pci/pdc202xx_old.c
+++ b/drivers/ide/pci/pdc202xx_old.c
@@ -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(void
return 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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 37/50] piix: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (35 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 36/50] pdc202xx_old: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 38/50] rz1000: " Bartlomiej Zolnierkiewicz
` (12 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: piix-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 878 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/piix.c | 7 +++++++
1 file changed, 7 insertions(+)
Index: b/drivers/ide/pci/piix.c
===================================================================
--- a/drivers/ide/pci/piix.c
+++ b/drivers/ide/pci/piix.c
@@ -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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 38/50] rz1000: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (36 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 37/50] piix: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 39/50] sc1200: " Bartlomiej Zolnierkiewicz
` (11 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: rz1000-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 870 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/rz1000.c | 7 +++++++
1 file changed, 7 insertions(+)
Index: b/drivers/ide/pci/rz1000.c
===================================================================
--- a/drivers/ide/pci/rz1000.c
+++ b/drivers/ide/pci/rz1000.c
@@ -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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 39/50] sc1200: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (37 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 38/50] rz1000: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 40/50] serverworks: " Bartlomiej Zolnierkiewicz
` (10 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: sc1200-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 901 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/sc1200.c | 7 +++++++
1 file changed, 7 insertions(+)
Index: b/drivers/ide/pci/sc1200.c
===================================================================
--- a/drivers/ide/pci/sc1200.c
+++ b/drivers/ide/pci/sc1200.c
@@ -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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 40/50] serverworks: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (38 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 39/50] sc1200: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 41/50] siimage: " Bartlomiej Zolnierkiewicz
` (9 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: serverworks-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 951 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/serverworks.c | 7 +++++++
1 file changed, 7 insertions(+)
Index: b/drivers/ide/pci/serverworks.c
===================================================================
--- a/drivers/ide/pci/serverworks.c
+++ b/drivers/ide/pci/serverworks.c
@@ -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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 41/50] siimage: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (39 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 40/50] serverworks: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 42/50] sis5513: " Bartlomiej Zolnierkiewicz
` (8 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: siimage-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 1530 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/siimage.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
Index: b/drivers/ide/pci/siimage.c
===================================================================
--- a/drivers/ide/pci/siimage.c
+++ b/drivers/ide/pci/siimage.c
@@ -800,6 +800,24 @@ static int __devinit siimage_init_one(st
return 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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 42/50] sis5513: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (40 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 41/50] siimage: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 43/50] sl82c105: " Bartlomiej Zolnierkiewicz
` (7 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: sis5513-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 1309 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/sis5513.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
Index: b/drivers/ide/pci/sis5513.c
===================================================================
--- a/drivers/ide/pci/sis5513.c
+++ b/drivers/ide/pci/sis5513.c
@@ -586,6 +586,12 @@ static int __devinit sis5513_init_one(st
return 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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 43/50] sl82c105: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (41 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 42/50] sis5513: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 44/50] slc90e66: " Bartlomiej Zolnierkiewicz
` (6 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: sl82c105-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 888 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/sl82c105.c | 7 +++++++
1 file changed, 7 insertions(+)
Index: b/drivers/ide/pci/sl82c105.c
===================================================================
--- a/drivers/ide/pci/sl82c105.c
+++ b/drivers/ide/pci/sl82c105.c
@@ -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(void
return 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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 44/50] slc90e66: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (42 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 43/50] sl82c105: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 45/50] tc86c001: " Bartlomiej Zolnierkiewicz
` (5 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: slc90e66-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 899 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/slc90e66.c | 7 +++++++
1 file changed, 7 insertions(+)
Index: b/drivers/ide/pci/slc90e66.c
===================================================================
--- a/drivers/ide/pci/slc90e66.c
+++ b/drivers/ide/pci/slc90e66.c
@@ -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(void
return 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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 45/50] tc86c001: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (43 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 44/50] slc90e66: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 46/50] triflex: " Bartlomiej Zolnierkiewicz
` (4 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel, Sergei Shtylyov
[-- Attachment #1: tc86c001-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 1343 bytes --]
Cc: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/tc86c001.c | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
Index: b/drivers/ide/pci/tc86c001.c
===================================================================
--- a/drivers/ide/pci/tc86c001.c
+++ b/drivers/ide/pci/tc86c001.c
@@ -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_tb
static 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. <source@mvista.com>");
MODULE_DESCRIPTION("PCI driver module for TC86C001 IDE");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 46/50] triflex: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (44 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 45/50] tc86c001: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 47/50] trm290: " Bartlomiej Zolnierkiewicz
` (3 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: triflex-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 897 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/triflex.c | 7 +++++++
1 file changed, 7 insertions(+)
Index: b/drivers/ide/pci/triflex.c
===================================================================
--- a/drivers/ide/pci/triflex.c
+++ b/drivers/ide/pci/triflex.c
@@ -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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 47/50] trm290: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (45 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 46/50] triflex: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 48/50] via82cxxx: " Bartlomiej Zolnierkiewicz
` (2 subsequent siblings)
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: trm290-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 877 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/trm290.c | 7 +++++++
1 file changed, 7 insertions(+)
Index: b/drivers/ide/pci/trm290.c
===================================================================
--- a/drivers/ide/pci/trm290.c
+++ b/drivers/ide/pci/trm290.c
@@ -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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 48/50] via82cxxx: add ->remove method and module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (46 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 47/50] trm290: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 49/50] icside: add module_exit() Bartlomiej Zolnierkiewicz
2008-07-06 17:21 ` [PATCH 50/50] rapide: " Bartlomiej Zolnierkiewicz
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel
[-- Attachment #1: via82cxxx-add-remove-method-and-module_exit.patch --]
[-- Type: text/plain, Size: 1355 bytes --]
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/pci/via82cxxx.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
Index: b/drivers/ide/pci/via82cxxx.c
===================================================================
--- a/drivers/ide/pci/via82cxxx.c
+++ b/drivers/ide/pci/via82cxxx.c
@@ -467,6 +467,15 @@ static int __devinit via_init_one(struct
return 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");
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 49/50] icside: add module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (47 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 48/50] via82cxxx: " Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:20 ` Bartlomiej Zolnierkiewicz
2008-07-06 17:21 ` [PATCH 50/50] rapide: " Bartlomiej Zolnierkiewicz
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:20 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel, Russell King
[-- Attachment #1: icside-add-module_exit.patch --]
[-- Type: text/plain, Size: 724 bytes --]
Cc: Russell King <rmk@arm.linux.org.uk>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/arm/icside.c | 6 ++++++
1 file changed, 6 insertions(+)
Index: b/drivers/ide/arm/icside.c
===================================================================
--- a/drivers/ide/arm/icside.c
+++ b/drivers/ide/arm/icside.c
@@ -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 <rmk@arm.linux.org.uk>");
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("ICS IDE driver");
module_init(icside_init);
+module_exit(icside_exit);
--
^ permalink raw reply [flat|nested] 50+ messages in thread
* [PATCH 50/50] rapide: add module_exit()
[not found] <20080706172010.559358957@bzolnier@gmail.com>
` (48 preceding siblings ...)
2008-07-06 17:20 ` [PATCH 49/50] icside: add module_exit() Bartlomiej Zolnierkiewicz
@ 2008-07-06 17:21 ` Bartlomiej Zolnierkiewicz
49 siblings, 0 replies; 50+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-07-06 17:21 UTC (permalink / raw)
To: linux-ide; +Cc: linux-kernel, Russell King
[-- Attachment #1: rapide-add-module_exit.patch --]
[-- Type: text/plain, Size: 677 bytes --]
Cc: Russell King <rmk@arm.linux.org.uk>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/arm/rapide.c | 6 ++++++
1 file changed, 6 insertions(+)
Index: b/drivers/ide/arm/rapide.c
===================================================================
--- a/drivers/ide/arm/rapide.c
+++ b/drivers/ide/arm/rapide.c
@@ -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);
--
^ permalink raw reply [flat|nested] 50+ messages in thread
end of thread, other threads:[~2008-07-06 17:35 UTC | newest]
Thread overview: 50+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20080706172010.559358957@bzolnier@gmail.com>
2008-07-06 17:20 ` [PATCH 01/50] it8213: fix return value in it8213_init_one() Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 02/50] ide: always call ->init_chipset method in do_ide_setup_pci_device() Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 03/50] ide: respect dev->irq in do_ide_setup_pci_device() also if tried_config Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 04/50] ide: move ide_setup_pci_controller() call to ide_setup_pci_device() Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 05/50] ide: call ide_pci_setup_ports() before do_ide_setup_pci_device() Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 06/50] ide: add ->dev and ->host_priv fields to struct ide_host Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 07/50] ide: add ide_device_{get,put}() helpers Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 08/50] aec62xx: convert to use ->host_priv Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 09/50] hpt366: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 10/50] it821x: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 11/50] sc1200: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 12/50] siimage: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 13/50] via82cxxx: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 14/50] tc86c001: remove ->init_chipset method Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 15/50] amd74xx: cleanup " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 16/50] cmd64x: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 17/50] via82cxxx: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 18/50] ide: add ide_pci_remove() helper Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 19/50] aec62xx: add ->remove method and module_exit() Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 20/50] alim15x3: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 21/50] amd74xx: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 22/50] atiixp: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 23/50] cmd64x: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 24/50] cs5530: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 25/50] cs5535: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 26/50] cy82c693: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 27/50] ide/pci/generic: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 28/50] hpt34x: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 29/50] hpt366: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 30/50] it8213: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 31/50] it821x: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 32/50] jmicron: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 33/50] ns87415: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 34/50] opti621: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 35/50] pdc202xx_new: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 36/50] pdc202xx_old: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 37/50] piix: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 38/50] rz1000: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 39/50] sc1200: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 40/50] serverworks: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 41/50] siimage: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 42/50] sis5513: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 43/50] sl82c105: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 44/50] slc90e66: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 45/50] tc86c001: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 46/50] triflex: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 47/50] trm290: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 48/50] via82cxxx: " Bartlomiej Zolnierkiewicz
2008-07-06 17:20 ` [PATCH 49/50] icside: add module_exit() Bartlomiej Zolnierkiewicz
2008-07-06 17:21 ` [PATCH 50/50] rapide: " Bartlomiej Zolnierkiewicz
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).