From: Adam Belay <ambx1@neo.rr.com>
To: greg@kroah.com
Cc: linux-kernel@vger.kernel.org, Andre Hedrick <andre@linux-ide.org>,
Jaroslav Kysela <perex@perex.cz>
Subject: [PATCH] Update PnP IDE (2/6)
Date: Sat, 25 Jan 2003 20:15:16 +0000 [thread overview]
Message-ID: <20030125201516.GA12794@neo.rr.com> (raw)
This patch converts the ide driver to the latest pnp changes. I do not have this
hardware so this patch was only tested for compilation.
Please note: I added ide_unregister to ide.h becuase I needed it for the driver
conversion. Please let me know if this is not the proper unregister api for ide
devices.
-Adam
diff -ur a/drivers/ide/Kconfig b/drivers/ide/Kconfig
--- a/drivers/ide/Kconfig Tue Jan 14 05:58:40 2003
+++ b/drivers/ide/Kconfig Thu Jan 16 13:32:21 2003
@@ -232,14 +232,13 @@
and your BIOS does not already do this for you, then say Y here.
Otherwise say N.
-config BLK_DEV_ISAPNP
- bool "ISA-PNP EIDE support"
- depends on BLK_DEV_IDE && ISAPNP
+config BLK_DEV_IDEPNP
+ bool "PNP EIDE support"
+ depends on BLK_DEV_IDE && PNP
help
- If you have an ISA EIDE card that is PnP (Plug and Play) and
- requires setup first before scanning for devices, say Y here.
-
- If unsure, say N.
+ If you have a PnP (Plug and Play) compatible EIDE card and
+ would like the kernel to automatically detect and activate
+ it, say Y here.
config BLK_DEV_IDEPCI
bool "PCI IDE chipset support" if PCI
diff -ur a/drivers/ide/Makefile b/drivers/ide/Makefile
--- a/drivers/ide/Makefile Tue Jan 14 05:58:42 2003
+++ b/drivers/ide/Makefile Thu Jan 16 13:31:55 2003
@@ -23,7 +23,7 @@
obj-$(CONFIG_BLK_DEV_IDEPCI) += setup-pci.o
obj-$(CONFIG_BLK_DEV_IDEDMA_PCI) += ide-dma.o
obj-$(CONFIG_BLK_DEV_IDE_TCQ) += ide-tcq.o
-obj-$(CONFIG_BLK_DEV_ISAPNP) += ide-pnp.o
+obj-$(CONFIG_BLK_DEV_IDEPNP) += ide-pnp.o
ifeq ($(CONFIG_BLK_DEV_IDE),y)
obj-$(CONFIG_PROC_FS) += ide-proc.o
diff -ur a/drivers/ide/ide-pnp.c b/drivers/ide/ide-pnp.c
--- a/drivers/ide/ide-pnp.c Tue Jan 14 05:58:59 2003
+++ b/drivers/ide/ide-pnp.c Thu Jan 16 15:32:36 2003
@@ -19,9 +19,7 @@
#include <linux/ide.h>
#include <linux/init.h>
-#include <linux/isapnp.h>
-
-#define DEV_NAME(dev) (dev->name)
+#include <linux/pnp.h>
#define GENERIC_HD_DATA 0
#define GENERIC_HD_ERROR 1
@@ -32,31 +30,27 @@
#define GENERIC_HD_SELECT 6
#define GENERIC_HD_STATUS 7
-static int generic_ide_offsets[IDE_NR_PORTS] __initdata = {
+static int generic_ide_offsets[IDE_NR_PORTS] = {
GENERIC_HD_DATA, GENERIC_HD_ERROR, GENERIC_HD_NSECTOR,
GENERIC_HD_SECTOR, GENERIC_HD_LCYL, GENERIC_HD_HCYL,
GENERIC_HD_SELECT, GENERIC_HD_STATUS, -1, -1
};
-/* ISA PnP device table entry */
-struct pnp_dev_t {
- unsigned short card_vendor, card_device, vendor, device;
- int (*init_fn)(struct pnp_dev *dev, int enable);
+/* Add your devices here :)) */
+struct pnp_device_id idepnp_devices[] = {
+ /* Generic ESDI/IDE/ATA compatible hard disk controller */
+ {.id = "PNP0600", .driver_data = 0},
+ {.id = ""}
};
-/* Generic initialisation function for ISA PnP IDE interface */
-
-static int __init pnpide_generic_init(struct pnp_dev *dev, int enable)
+static int idepnp_probe(struct pnp_dev * dev, const struct pnp_device_id *dev_id)
{
hw_regs_t hw;
ide_hwif_t *hwif;
int index;
- if (!enable)
- return 0;
-
if (!(pnp_port_valid(dev, 0) && pnp_port_valid(dev, 1) && pnp_irq_valid(dev, 0)))
- return 1;
+ return -1;
ide_setup_ports(&hw, (ide_ioreg_t) pnp_port_start(dev, 0),
generic_ide_offsets,
@@ -68,82 +62,36 @@
index = ide_register_hw(&hw, &hwif);
if (index != -1) {
- printk(KERN_INFO "ide%d: %s IDE interface\n", index, DEV_NAME(dev));
+ printk(KERN_INFO "ide%d: generic PnP IDE interface\n", index);
+ pnp_set_drvdata(dev,hwif);
hwif->pnp_dev = dev;
return 0;
}
- return 1;
+ return -1;
}
-/* Add your devices here :)) */
-struct pnp_dev_t idepnp_devices[] __initdata = {
- /* Generic ESDI/IDE/ATA compatible hard disk controller */
- { ISAPNP_ANY_ID, ISAPNP_ANY_ID,
- ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_DEVICE(0x0600),
- pnpide_generic_init },
- { 0 }
-};
+static void idepnp_remove(struct pnp_dev * dev)
+{
+ ide_hwif_t *hwif = pnp_get_drvdata(dev);
+ if (hwif) {
+ ide_unregister(hwif->index);
+ } else
+ printk(KERN_ERR "idepnp: Unable to remove device, please report.\n");
+}
-#define NR_PNP_DEVICES 8
-struct pnp_dev_inst {
- struct pnp_dev *dev;
- struct pnp_dev_t *dev_type;
+static struct pnp_driver idepnp_driver = {
+ .name = "ide",
+ .id_table = idepnp_devices,
+ .probe = idepnp_probe,
+ .remove = idepnp_remove,
};
-static struct pnp_dev_inst devices[NR_PNP_DEVICES];
-static int pnp_ide_dev_idx = 0;
-/*
- * Probe for ISA PnP IDE interfaces.
- */
-void __init pnpide_init(int enable)
+void pnpide_init(int enable)
{
- struct pnp_dev *dev = NULL;
- struct pnp_dev_t *dev_type;
-
- if (!isapnp_present())
- return;
-
- /* Module unload, deactivate all registered devices. */
- if (!enable) {
- int i;
- for (i = 0; i < pnp_ide_dev_idx; i++) {
- dev = devices[i].dev;
- devices[i].dev_type->init_fn(dev, 0);
- pnp_device_detach(dev);
- }
- return;
- }
-
- for (dev_type = idepnp_devices; dev_type->vendor; dev_type++) {
- while ((dev = pnp_find_dev(NULL, dev_type->vendor,
- dev_type->device, dev))) {
-
- if (pnp_device_attach(dev) < 0)
- continue;
-
- if (pnp_activate_dev(dev, NULL) < 0) {
- printk(KERN_ERR"ide: %s activate failed\n", DEV_NAME(dev));
- continue;
- }
-
- /* Call device initialization function */
- if (dev_type->init_fn(dev, 1)) {
- pnp_device_detach(dev);
- } else {
-#ifdef MODULE
- /*
- * Register device in the array to
- * deactivate it on a module unload.
- */
- if (pnp_ide_dev_idx >= NR_PNP_DEVICES)
- return;
- devices[pnp_ide_dev_idx].dev = dev;
- devices[pnp_ide_dev_idx].dev_type = dev_type;
- pnp_ide_dev_idx++;
-#endif
- }
- }
- }
+ if(enable)
+ pnp_register_driver(&idepnp_driver);
+ else
+ pnp_unregister_driver(&idepnp_driver);
}
diff -ur a/drivers/ide/ide.c b/drivers/ide/ide.c
--- a/drivers/ide/ide.c Tue Jan 14 05:58:26 2003
+++ b/drivers/ide/ide.c Thu Jan 16 15:08:55 2003
@@ -817,6 +817,7 @@
EXPORT_SYMBOL(ide_unregister);
+
/**
* ide_setup_ports - set up IDE interface ports
* @hw: register descriptions
@@ -2071,12 +2072,12 @@
buddha_init();
}
#endif /* CONFIG_BLK_DEV_BUDDHA */
-#if defined(CONFIG_BLK_DEV_ISAPNP) && defined(CONFIG_ISAPNP)
+#if defined(CONFIG_BLK_DEV_IDEPNP) && defined(CONFIG_PNP)
{
extern void pnpide_init(int enable);
pnpide_init(1);
}
-#endif /* CONFIG_BLK_DEV_ISAPNP */
+#endif /* CONFIG_BLK_DEV_IDEPNP */
}
void __init ide_init_builtin_drivers (void)
@@ -2247,9 +2248,9 @@
spin_unlock_irqrestore(&ide_lock, flags);
return 1;
}
-#if defined(CONFIG_BLK_DEV_ISAPNP) && defined(CONFIG_ISAPNP) && defined(MODULE)
+#if defined(CONFIG_BLK_DEV_IDEPNP) && defined(CONFIG_PNP) && defined(MODULE)
pnpide_init(0);
-#endif /* CONFIG_BLK_DEV_ISAPNP */
+#endif /* CONFIG_BLK_DEV_IDEPNP */
#ifdef CONFIG_PROC_FS
ide_remove_proc_entries(drive->proc, DRIVER(drive)->proc);
ide_remove_proc_entries(drive->proc, generic_subdriver_entries);
diff -ur a/include/linux/ide.h b/include/linux/ide.h
--- a/include/linux/ide.h Tue Jan 14 05:58:33 2003
+++ b/include/linux/ide.h Thu Jan 16 15:32:03 2003
@@ -1721,6 +1721,7 @@
#endif
extern void hwif_unregister(ide_hwif_t *);
+extern void ide_unregister (unsigned int index);
extern void export_ide_init_queue(ide_drive_t *);
extern u8 export_probe_for_drive(ide_drive_t *);
next reply other threads:[~2003-01-26 1:05 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-01-25 20:15 Adam Belay [this message]
2003-01-26 2:28 ` [PATCH] Update PnP IDE (2/6) Andre Hedrick
2003-01-27 22:12 ` Bill Davidsen
2003-01-28 6:37 ` Andre Hedrick
2003-01-28 15:27 ` Bill Davidsen
2003-01-29 22:26 ` Adam Belay
2003-01-30 11:42 ` Alan Cox
2003-01-30 22:10 ` Adam Belay
2003-01-31 10:54 ` Alan Cox
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20030125201516.GA12794@neo.rr.com \
--to=ambx1@neo.rr.com \
--cc=andre@linux-ide.org \
--cc=greg@kroah.com \
--cc=linux-kernel@vger.kernel.org \
--cc=perex@perex.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.