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