xref: /illumos-gate/usr/src/lib/mergeq/workq.h (revision bc1f688b)
1*bc1f688bSRobert Mustacchi /*
2*bc1f688bSRobert Mustacchi  * This file and its contents are supplied under the terms of the
3*bc1f688bSRobert Mustacchi  * Common Development and Distribution License ("CDDL"), version 1.0.
4*bc1f688bSRobert Mustacchi  * You may only use this file in accordance with the terms of version
5*bc1f688bSRobert Mustacchi  * 1.0 of the CDDL.
6*bc1f688bSRobert Mustacchi  *
7*bc1f688bSRobert Mustacchi  * A full copy of the text of the CDDL should have accompanied this
8*bc1f688bSRobert Mustacchi  * source.  A copy of the CDDL is also available via the Internet at
9*bc1f688bSRobert Mustacchi  * http://www.illumos.org/license/CDDL.
10*bc1f688bSRobert Mustacchi  */
11*bc1f688bSRobert Mustacchi 
12*bc1f688bSRobert Mustacchi /*
13*bc1f688bSRobert Mustacchi  * Copyright 2015 Joyent, Inc.
14*bc1f688bSRobert Mustacchi  */
15*bc1f688bSRobert Mustacchi 
16*bc1f688bSRobert Mustacchi #ifndef _WORKQ_H
17*bc1f688bSRobert Mustacchi #define	_WORKQ_H
18*bc1f688bSRobert Mustacchi 
19*bc1f688bSRobert Mustacchi /*
20*bc1f688bSRobert Mustacchi  * workq library routines
21*bc1f688bSRobert Mustacchi  */
22*bc1f688bSRobert Mustacchi 
23*bc1f688bSRobert Mustacchi #include <sys/types.h>
24*bc1f688bSRobert Mustacchi #include <stdint.h>
25*bc1f688bSRobert Mustacchi 
26*bc1f688bSRobert Mustacchi #ifdef __cplusplus
27*bc1f688bSRobert Mustacchi extern "C" {
28*bc1f688bSRobert Mustacchi #endif
29*bc1f688bSRobert Mustacchi 
30*bc1f688bSRobert Mustacchi typedef struct workq workq_t;
31*bc1f688bSRobert Mustacchi typedef int (workq_proc_f)(void *, void *);
32*bc1f688bSRobert Mustacchi 
33*bc1f688bSRobert Mustacchi extern int workq_init(workq_t **, uint_t);
34*bc1f688bSRobert Mustacchi extern void workq_fini(workq_t *);
35*bc1f688bSRobert Mustacchi 
36*bc1f688bSRobert Mustacchi extern int workq_add(workq_t *, void *);
37*bc1f688bSRobert Mustacchi 
38*bc1f688bSRobert Mustacchi #define	WORKQ_ERROR	(-1)
39*bc1f688bSRobert Mustacchi #define	WORKQ_UERROR	(-2)
40*bc1f688bSRobert Mustacchi extern int workq_work(workq_t *, workq_proc_f *, void *, int *);
41*bc1f688bSRobert Mustacchi 
42*bc1f688bSRobert Mustacchi /*
43*bc1f688bSRobert Mustacchi  * Routines consumers need to implement
44*bc1f688bSRobert Mustacchi  */
45*bc1f688bSRobert Mustacchi extern void *workq_alloc(size_t);
46*bc1f688bSRobert Mustacchi extern void workq_free(void *, size_t);
47*bc1f688bSRobert Mustacchi 
48*bc1f688bSRobert Mustacchi #ifdef __cplusplus
49*bc1f688bSRobert Mustacchi }
50*bc1f688bSRobert Mustacchi #endif
51*bc1f688bSRobert Mustacchi 
52*bc1f688bSRobert Mustacchi #endif /* _WORKQ_H */
53