From 889e9311e5c900ce24eecf00fcb5b8b9d51bb020 Mon Sep 17 00:00:00 2001 From: paul Date: Mon, 14 Nov 2005 14:46:35 +0000 Subject: [workqueue] Update workqueue users callbacks to additional arguments 2005-11-14 Paul Jakma * (general) pass struct work-queue to callback functions. * workqueue.h: (struct work_queue) move the state flag variables to end. Add an opaque pointer to spec, for user-data global to the queue. Pass reference to work_queue to all callbacks. * workqueue.c: (work_queue_item_remove) pass ref to workqueue to user callbacks. (work_queue_run) ditto. --- lib/workqueue.h | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'lib/workqueue.h') diff --git a/lib/workqueue.h b/lib/workqueue.h index 15c72f62..0a398ded 100644 --- a/lib/workqueue.h +++ b/lib/workqueue.h @@ -57,26 +57,31 @@ enum work_queue_flags struct work_queue { - /* Everything but the specification struct is private */ + /* Everything but the specification struct is private + * the following may be read + */ struct thread_master *master; /* thread master */ struct thread *thread; /* thread, if one is active */ char *name; /* work queue name */ - char status; /* status */ -#define WQ_STATE_FLOODED (1 << 0) - enum work_queue_flags flags; /* flags */ /* Specification for this work queue. * Public, must be set before use by caller. May be modified at will. */ struct { - /* work function to process items with */ - wq_item_status (*workfunc) (void *); + /* optional opaque user data, global to the queue. */ + void *data; + + /* work function to process items with: + * First argument is the workqueue queue. + * Second argument is the item data + */ + wq_item_status (*workfunc) (struct work_queue *, void *); /* error handling function, optional */ void (*errorfunc) (struct work_queue *, struct work_queue_item *); /* callback to delete user specific item data */ - void (*del_item_data) (void *); + void (*del_item_data) (struct work_queue *, void *); /* completion callback, called when queue is emptied, optional */ void (*completion_func) (struct work_queue *); @@ -110,6 +115,12 @@ struct work_queue unsigned int granularity; unsigned long total; } cycles; /* cycle counts */ + + /* private state */ + enum work_queue_flags flags; /* user set flag */ + char status; /* internal status */ +#define WQ_STATE_FLOODED (1 << 0) + }; /* User API */ -- cgit v1.2.1