summaryrefslogtreecommitdiffstats
path: root/sys/dev/usb
diff options
context:
space:
mode:
authoralfred <alfred@FreeBSD.org>2007-01-08 23:21:06 +0000
committeralfred <alfred@FreeBSD.org>2007-01-08 23:21:06 +0000
commitf11c252b707388cec46312e0bb40357915f70a68 (patch)
treeeed129bbc6039fa6114f81248214f3e07b79c5ba /sys/dev/usb
parentbc556da94cf284f459efee9aee092835f991554c (diff)
downloadFreeBSD-src-f11c252b707388cec46312e0bb40357915f70a68.zip
FreeBSD-src-f11c252b707388cec46312e0bb40357915f70a68.tar.gz
Add the following functions to abstract away the creation of task threads
for usb. I hope that this will eventually be used for generic devices that need full fledged blocking threads for event processing. Create a taskqueue: void usb_ether_task_init(device_t, int, struct usb_taskqueue *); Enqueue a task: void usb_ether_task_enqueue(struct usb_taskqueue *, struct task *); Wait for all tasks queued to complete: void usb_ether_task_drain(struct usb_taskqueue *, struct task *); Destroy the taskqueue: void usb_ether_task_destroy(struct usb_taskqueue *);
Diffstat (limited to 'sys/dev/usb')
-rw-r--r--sys/dev/usb/usb_ethersubr.c30
-rw-r--r--sys/dev/usb/usb_ethersubr.h9
2 files changed, 39 insertions, 0 deletions
diff --git a/sys/dev/usb/usb_ethersubr.c b/sys/dev/usb/usb_ethersubr.c
index ef43cdb..2cb5fa6 100644
--- a/sys/dev/usb/usb_ethersubr.c
+++ b/sys/dev/usb/usb_ethersubr.c
@@ -57,6 +57,7 @@ __FBSDID("$FreeBSD$");
#include <sys/mbuf.h>
#include <sys/malloc.h>
#include <sys/socket.h>
+#include <sys/taskqueue.h>
#include <net/if.h>
#include <net/if_types.h>
@@ -246,3 +247,32 @@ usb_ether_tx_list_free(struct ue_cdata *cd)
}
}
}
+
+void
+usb_ether_task_init(device_t dev, int flags, struct usb_taskqueue *tq)
+{
+
+ /* nothing for now. */
+}
+
+void
+usb_ether_task_enqueue(struct usb_taskqueue *tq, struct task *task)
+{
+
+ taskqueue_enqueue(taskqueue_thread, task);
+}
+
+void
+usb_ether_task_drain(struct usb_taskqueue *tq, struct task *task)
+{
+
+ taskqueue_drain(taskqueue_thread, task);
+}
+
+void
+usb_ether_task_destroy(struct usb_taskqueue *tq)
+{
+
+ /* nothing for now */
+
+}
diff --git a/sys/dev/usb/usb_ethersubr.h b/sys/dev/usb/usb_ethersubr.h
index cd4acc1..f3d2e34 100644
--- a/sys/dev/usb/usb_ethersubr.h
+++ b/sys/dev/usb/usb_ethersubr.h
@@ -79,4 +79,13 @@ int usb_ether_tx_list_init (void *, struct ue_cdata *,
void usb_ether_rx_list_free (struct ue_cdata *);
void usb_ether_tx_list_free (struct ue_cdata *);
+struct usb_taskqueue {
+ int dummy;
+};
+
+void usb_ether_task_init(device_t, int, struct usb_taskqueue *);
+void usb_ether_task_enqueue(struct usb_taskqueue *, struct task *);
+void usb_ether_task_drain(struct usb_taskqueue *, struct task *);
+void usb_ether_task_destroy(struct usb_taskqueue *);
+
#endif /* _USB_ETHERSUBR_H_ */
OpenPOWER on IntegriCloud