PERFORCE change 99169 for review

Paolo Pisati piso at FreeBSD.org
Tue Jun 13 21:32:33 UTC 2006


http://perforce.freebsd.org/chv.cgi?CH=99169

Change 99169 by piso at piso_newluxor on 2006/06/13 21:29:27

	Bring in some defines from jhb_intr 

Affected files ...

.. //depot/projects/soc2006/intr_filter/i386/conf/GENERIC#2 edit
.. //depot/projects/soc2006/intr_filter/sys/bus.h#2 edit

Differences ...

==== //depot/projects/soc2006/intr_filter/i386/conf/GENERIC#2 (text+ko) ====

@@ -293,3 +293,5 @@
 device		firewire	# FireWire bus code
 device		sbp		# SCSI over FireWire (Requires scbus and da)
 device		fwe		# Ethernet over FireWire (non-standard!)
+
+options 	INTR_FILTER	# use interrupt filters when available

==== //depot/projects/soc2006/intr_filter/sys/bus.h#2 (text+ko) ====

@@ -119,9 +119,48 @@
  */
 #define device_method_t		kobj_method_t
 
+#ifdef INTR_FILTER
 /**
- * @brief A driver interrupt service routine
+ * @brief Driver interrupt filter return values
+ *
+ * If a driver provides an interrupt filter routine it must return an
+ * integer consisting of oring together zero or more of the following
+ * flags:
+ *
+ *	FILTER_STRAY	- this device did not trigger the interrupt
+ *	FILTER_HANDLED	- the interrupt has been fully handled and can be EOId
+ *	FILTER_SCHEDULE_THREAD - the threaded interrupt handler should be
+ *			  scheduled to execute
+ *
+ * If the driver does not provide a filter, then the interrupt code will
+ * act is if the filter had returned FILTER_SCHEDULE_THREAD.  Note that it
+ * is illegal to specify any other flag with FILTER_STRAY and that it is
+ * illegal to not specify either of FILTER_HANDLED or FILTER_SCHEDULE_THREAD
+ * if FILTER_STRAY is not specified.
+ */
+#define	FILTER_STRAY		0x01
+#define	FILTER_HANDLED		0x02
+#define	FILTER_SCHEDULE_THREAD	0x04
+#endif
+
+/**
+ * @brief Driver interrupt service routines
+ *
+ * The filter routine is run in primary interrupt context and may not
+ * block or use regular mutexes.  It may only use spin mutexes for
+ * synchronization.  The filter may either completely handle the
+ * interrupt or it may perform some of the work and defer more
+ * expensive work to the regular interrupt handler.  If a filter
+ * routine is not registered by the driver, then the regular interrupt
+ * handler is always used to handle interrupts from this device.
+ *
+ * The regular interrupt handler executes in its own thread context
+ * and may use regular mutexes.  However, it is prohibited from
+ * sleeping on a sleep queue.
  */
+#ifdef INTR_FILTER
+typedef int driver_filter_t(void*);
+#endif
 typedef void driver_intr_t(void*);
 
 /**


More information about the p4-projects mailing list