1*8329232eSGordon Ross /* 2*8329232eSGordon Ross * CDDL HEADER START 3*8329232eSGordon Ross * 4*8329232eSGordon Ross * The contents of this file are subject to the terms of the 5*8329232eSGordon Ross * Common Development and Distribution License (the "License"). 6*8329232eSGordon Ross * You may not use this file except in compliance with the License. 7*8329232eSGordon Ross * 8*8329232eSGordon Ross * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*8329232eSGordon Ross * or http://www.opensolaris.org/os/licensing. 10*8329232eSGordon Ross * See the License for the specific language governing permissions 11*8329232eSGordon Ross * and limitations under the License. 12*8329232eSGordon Ross * 13*8329232eSGordon Ross * When distributing Covered Code, include this CDDL HEADER in each 14*8329232eSGordon Ross * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*8329232eSGordon Ross * If applicable, add the following below this CDDL HEADER, with the 16*8329232eSGordon Ross * fields enclosed by brackets "[]" replaced with your own identifying 17*8329232eSGordon Ross * information: Portions Copyright [yyyy] [name of copyright owner] 18*8329232eSGordon Ross * 19*8329232eSGordon Ross * CDDL HEADER END 20*8329232eSGordon Ross */ 21*8329232eSGordon Ross /* 22*8329232eSGordon Ross * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 23*8329232eSGordon Ross * Use is subject to license terms. 24*8329232eSGordon Ross * 25*8329232eSGordon Ross * Copyright 2017 RackTop Systems. 26*8329232eSGordon Ross */ 27*8329232eSGordon Ross 28*8329232eSGordon Ross #ifndef _SYS_CYCLIC_H 29*8329232eSGordon Ross #define _SYS_CYCLIC_H 30*8329232eSGordon Ross 31*8329232eSGordon Ross #ifdef __cplusplus 32*8329232eSGordon Ross extern "C" { 33*8329232eSGordon Ross #endif 34*8329232eSGordon Ross 35*8329232eSGordon Ross #ifndef _ASM 36*8329232eSGordon Ross #include <sys/time.h> 37*8329232eSGordon Ross #endif /* !_ASM */ 38*8329232eSGordon Ross 39*8329232eSGordon Ross #define CY_LOW_LEVEL 0 40*8329232eSGordon Ross #define CY_LOCK_LEVEL 1 41*8329232eSGordon Ross #define CY_HIGH_LEVEL 2 42*8329232eSGordon Ross #define CY_SOFT_LEVELS 2 43*8329232eSGordon Ross #define CY_LEVELS 3 44*8329232eSGordon Ross 45*8329232eSGordon Ross #ifndef _ASM 46*8329232eSGordon Ross 47*8329232eSGordon Ross typedef uintptr_t cyclic_id_t; 48*8329232eSGordon Ross typedef int cyc_index_t; 49*8329232eSGordon Ross typedef int cyc_cookie_t; 50*8329232eSGordon Ross typedef uint16_t cyc_level_t; 51*8329232eSGordon Ross typedef void (*cyc_func_t)(void *); 52*8329232eSGordon Ross typedef void *cyb_arg_t; 53*8329232eSGordon Ross 54*8329232eSGordon Ross #define CYCLIC_NONE ((cyclic_id_t)0) 55*8329232eSGordon Ross 56*8329232eSGordon Ross typedef struct cyc_handler { 57*8329232eSGordon Ross cyc_func_t cyh_func; 58*8329232eSGordon Ross void *cyh_arg; 59*8329232eSGordon Ross cyc_level_t cyh_level; 60*8329232eSGordon Ross } cyc_handler_t; 61*8329232eSGordon Ross 62*8329232eSGordon Ross typedef struct cyc_time { 63*8329232eSGordon Ross hrtime_t cyt_when; 64*8329232eSGordon Ross hrtime_t cyt_interval; 65*8329232eSGordon Ross } cyc_time_t; 66*8329232eSGordon Ross 67*8329232eSGordon Ross #define CY_INFINITY INT64_MAX 68*8329232eSGordon Ross 69*8329232eSGordon Ross #if defined(_KERNEL) || defined(_FAKE_KERNEL) 70*8329232eSGordon Ross 71*8329232eSGordon Ross extern cyclic_id_t cyclic_add(cyc_handler_t *, cyc_time_t *); 72*8329232eSGordon Ross extern void cyclic_remove(cyclic_id_t); 73*8329232eSGordon Ross extern int cyclic_reprogram(cyclic_id_t, hrtime_t); 74*8329232eSGordon Ross extern hrtime_t cyclic_getres(); 75*8329232eSGordon Ross 76*8329232eSGordon Ross extern void cyclic_suspend(); 77*8329232eSGordon Ross extern void cyclic_resume(); 78*8329232eSGordon Ross 79*8329232eSGordon Ross #endif /* _KERNEL || _FAKE_KERNEL */ 80*8329232eSGordon Ross 81*8329232eSGordon Ross #endif /* !_ASM */ 82*8329232eSGordon Ross 83*8329232eSGordon Ross #ifdef __cplusplus 84*8329232eSGordon Ross } 85*8329232eSGordon Ross #endif 86*8329232eSGordon Ross 87*8329232eSGordon Ross #endif /* _SYS_CYCLIC_H */ 88