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 *);
This commit is contained in:
Alfred Perlstein 2007-01-08 23:21:06 +00:00
parent f8209ca81d
commit b262697660
2 changed files with 39 additions and 0 deletions

View File

@ -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 */
}

View File

@ -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_ */