1da673940SJordan Gordeev /* 2da673940SJordan Gordeev * Copyright (c) 2008 The DragonFly Project. All rights reserved. 3da673940SJordan Gordeev * 4da673940SJordan Gordeev * This code is derived from software contributed to The DragonFly Project 5da673940SJordan Gordeev * by Matthew Dillon <dillon@backplane.com> 6da673940SJordan Gordeev * 7da673940SJordan Gordeev * Redistribution and use in source and binary forms, with or without 8da673940SJordan Gordeev * modification, are permitted provided that the following conditions 9da673940SJordan Gordeev * are met: 10da673940SJordan Gordeev * 11da673940SJordan Gordeev * 1. Redistributions of source code must retain the above copyright 12da673940SJordan Gordeev * notice, this list of conditions and the following disclaimer. 13da673940SJordan Gordeev * 2. Redistributions in binary form must reproduce the above copyright 14da673940SJordan Gordeev * notice, this list of conditions and the following disclaimer in 15da673940SJordan Gordeev * the documentation and/or other materials provided with the 16da673940SJordan Gordeev * distribution. 17da673940SJordan Gordeev * 3. Neither the name of The DragonFly Project nor the names of its 18da673940SJordan Gordeev * contributors may be used to endorse or promote products derived 19da673940SJordan Gordeev * from this software without specific, prior written permission. 20da673940SJordan Gordeev * 21da673940SJordan Gordeev * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22da673940SJordan Gordeev * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23da673940SJordan Gordeev * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 24da673940SJordan Gordeev * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 25da673940SJordan Gordeev * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 26da673940SJordan Gordeev * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 27da673940SJordan Gordeev * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 28da673940SJordan Gordeev * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 29da673940SJordan Gordeev * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 30da673940SJordan Gordeev * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 31da673940SJordan Gordeev * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32da673940SJordan Gordeev * SUCH DAMAGE. 33da673940SJordan Gordeev * 34da673940SJordan Gordeev * $DragonFly: src/sys/platform/vkernel/include/cothread.h,v 1.2 2008/03/27 04:28:07 dillon Exp $ 35da673940SJordan Gordeev */ 36da673940SJordan Gordeev 37da673940SJordan Gordeev #ifndef _MACHINE_COTHREAD_H_ 38da673940SJordan Gordeev #define _MACHINE_COTHREAD_H_ 39da673940SJordan Gordeev 40da673940SJordan Gordeev #include <pthread.h> 41da673940SJordan Gordeev 42da673940SJordan Gordeev struct cothread { 43da673940SJordan Gordeev pthread_t pthr; 44da673940SJordan Gordeev pthread_t pintr; 45da673940SJordan Gordeev void *arg; 46da673940SJordan Gordeev void (*thr_func)(struct cothread *); 47da673940SJordan Gordeev void (*thr_intr)(struct cothread *); 48da673940SJordan Gordeev void *intr_id; 49da673940SJordan Gordeev pthread_mutex_t mutex; 50da673940SJordan Gordeev pthread_cond_t cond; 51da673940SJordan Gordeev }; 52da673940SJordan Gordeev 53da673940SJordan Gordeev typedef struct cothread *cothread_t; 54da673940SJordan Gordeev 55da673940SJordan Gordeev cothread_t cothread_create(void (*thr_func)(cothread_t cotd), 56da673940SJordan Gordeev void (*thr_intr)(cothread_t cotd), 57da673940SJordan Gordeev void *arg, const char *name); 58da673940SJordan Gordeev void cothread_delete(cothread_t *cotdp); 59da673940SJordan Gordeev void cothread_intr(cothread_t cotd); 60da673940SJordan Gordeev void cothread_signal(cothread_t cotd); 61da673940SJordan Gordeev void cothread_wait(cothread_t cotd); 62da673940SJordan Gordeev void cothread_lock(cothread_t cotd, int is_cotd); 63da673940SJordan Gordeev void cothread_unlock(cothread_t cotd, int is_cotd); 64da673940SJordan Gordeev 65*c91894e0SMatthew Dillon void cothread_sleep(cothread_t cotd, struct timespec *ts); 66*c91894e0SMatthew Dillon void cothread_wakeup(cothread_t cotd, struct timespec *ts); 67*c91894e0SMatthew Dillon 68da673940SJordan Gordeev #endif 69