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:
parent
f8209ca81d
commit
b262697660
@ -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 */
|
||||
|
||||
}
|
||||
|
@ -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_ */
|
||||
|
Loading…
x
Reference in New Issue
Block a user