summaryrefslogtreecommitdiffstats
path: root/sys/dev/fdc
diff options
context:
space:
mode:
authorpiso <piso@FreeBSD.org>2007-02-23 12:19:07 +0000
committerpiso <piso@FreeBSD.org>2007-02-23 12:19:07 +0000
commit6a2ffa86e5b748ba71e36d37462a936eb9101be7 (patch)
tree10833d4edb6c0d0a5efcf7762d842a4c378404b0 /sys/dev/fdc
parent7b48c9d78377cdb9fc6e8bcc5406e28819aef6e3 (diff)
downloadFreeBSD-src-6a2ffa86e5b748ba71e36d37462a936eb9101be7.zip
FreeBSD-src-6a2ffa86e5b748ba71e36d37462a936eb9101be7.tar.gz
o break newbus api: add a new argument of type driver_filter_t to
bus_setup_intr() o add an int return code to all fast handlers o retire INTR_FAST/IH_FAST For more info: http://docs.freebsd.org/cgi/getmsg.cgi?fetch=465712+0+current/freebsd-current Reviewed by: many Approved by: re@
Diffstat (limited to 'sys/dev/fdc')
-rw-r--r--sys/dev/fdc/fdc.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/sys/dev/fdc/fdc.c b/sys/dev/fdc/fdc.c
index 4f48ead..c936951 100644
--- a/sys/dev/fdc/fdc.c
+++ b/sys/dev/fdc/fdc.c
@@ -261,6 +261,7 @@ struct fd_data {
#define FD_NOT_VALID -2
static driver_intr_t fdc_intr;
+static driver_filter_t fdc_intr_fast;
static void fdc_reset(struct fdc_data *);
SYSCTL_NODE(_debug, OID_AUTO, fdc, CTLFLAG_RW, 0, "fdc driver");
@@ -686,6 +687,14 @@ fdc_intr(void *arg)
wakeup(arg);
}
+static int
+fdc_intr_fast(void *arg)
+{
+
+ wakeup(arg);
+ return(FILTER_HANDLED);
+}
+
/*
* fdc_pio(): perform programmed IO read/write for YE PCMCIA floppy.
*/
@@ -1758,9 +1767,11 @@ fdc_attach(device_t dev)
return (error);
}
error = bus_setup_intr(dev, fdc->res_irq,
- INTR_TYPE_BIO | INTR_ENTROPY | INTR_MPSAFE |
- ((fdc->flags & FDC_NOFAST) ? 0 : INTR_FAST),
- fdc_intr, fdc, &fdc->fdc_intr);
+ INTR_TYPE_BIO | INTR_ENTROPY |
+ ((fdc->flags & FDC_NOFAST) ? INTR_MPSAFE : 0),
+ ((fdc->flags & FDC_NOFAST) ? NULL : fdc_intr_fast),
+ ((fdc->flags & FDC_NOFAST) ? fdc_intr : NULL),
+ fdc, &fdc->fdc_intr);
if (error) {
device_printf(dev, "cannot setup interrupt\n");
return (error);
OpenPOWER on IntegriCloud