diff options
author | alfred <alfred@FreeBSD.org> | 2007-01-08 23:21:06 +0000 |
---|---|---|
committer | alfred <alfred@FreeBSD.org> | 2007-01-08 23:21:06 +0000 |
commit | f11c252b707388cec46312e0bb40357915f70a68 (patch) | |
tree | eed129bbc6039fa6114f81248214f3e07b79c5ba /sys/dev/usb | |
parent | bc556da94cf284f459efee9aee092835f991554c (diff) | |
download | FreeBSD-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.c | 30 | ||||
-rw-r--r-- | sys/dev/usb/usb_ethersubr.h | 9 |
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_ */ |