Add wrapper for system-wide workqueues

Signed-off-by: Takashi Iwai <tiwai@suse.de>
diff --git a/include/adriver.h b/include/adriver.h
index 75440c1..0ffb00a 100644
--- a/include/adriver.h
+++ b/include/adriver.h
@@ -1974,6 +1974,21 @@
 #define cancel_work_sync	flush_work
 #endif
 
+/* system-wide workqueues */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 36)
+#define system_wq	(struct workqueue_struct *)-1L
+#define system_long_wq	(struct workqueue_struct *)-1L
+static inline int _snd_queue_work(struct workqueue_struct *wq,
+				  struct work_struct *work)
+{
+	if (wq == system_wq || wq == system_long_wq)
+		return schedule_work(work);
+	else
+		return queue_work(wq, work);
+}
+#define queue_work(wq, work)	_snd_queue_work(wq, work)
+#endif
+
 #endif /* < 2.6.37 */
 
 /* pm_wakeup_event() wrapper */