1/* 2 * Copyright 2007-2018, Haiku, Inc. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef _FBSD_COMPAT_SYS_KERNEL_H_ 6#define _FBSD_COMPAT_SYS_KERNEL_H_ 7 8 9#include <stddef.h> 10 11#include <sys/haiku-module.h> 12 13#include <sys/linker_set.h> 14#include <sys/queue.h> 15 16 17/* The rate at which FreeBSD can generate callouts (kind of timeout mechanism). 18 * For FreeBSD 8 this is typically 1000 times per second (100 for ARM). 19 * This value is defined in a file called subr_param.c 20 * 21 * While Haiku can have a much higher granularity, it is not a good idea to have 22 * this since FreeBSD tries to do certain tasks based on ticks, for instance 23 * autonegotiation and wlan scanning. 24 * Suffixing LL prevents integer overflows during calculations. 25 * as it defines a long long constant. */ 26#define hz 1000LL 27 28int32_t _get_ticks(); 29#define ticks (_get_ticks()) 30 31 32/* sysinit */ 33enum sysinit_elem_order { 34 SI_ORDER_FIRST = 0x0000000, 35 SI_ORDER_SECOND = 0x0000001, 36 SI_ORDER_THIRD = 0x0000002, 37 SI_ORDER_FOURTH = 0x0000003, 38 SI_ORDER_MIDDLE = 0x1000000, 39 SI_ORDER_ANY = 0xfffffff /* last */ 40}; 41 42typedef void (*system_init_func_t)(void *); 43 44struct sysinit { 45 const char* name; 46 enum sysinit_elem_order order; 47 system_init_func_t func; 48 const void* arg; 49}; 50 51#define SYSINIT(uniquifier, subsystem, _order, _func, ident) \ 52static struct sysinit sysinit_##uniquifier = { \ 53 .name = #uniquifier, \ 54 .order = _order, \ 55 .func = _func, \ 56 .arg = ident, \ 57}; \ 58DATA_SET(__freebsd_sysinit, sysinit_##uniquifier) 59 60#define SYSUNINIT(uniquifier, subsystem, _order, _func, ident) \ 61static struct sysinit sysuninit_##uniquifier = { \ 62 .name = #uniquifier, \ 63 .order = _order, \ 64 .func = _func, \ 65 .arg = ident, \ 66}; \ 67DATA_SET(__freebsd_sysuninit, sysuninit_##uniquifier) 68 69 70/* confighooks */ 71typedef void (*ich_func_t)(void *_arg); 72 73struct intr_config_hook { 74 TAILQ_ENTRY(intr_config_hook) ich_links; 75 ich_func_t ich_func; 76 void *ich_arg; 77}; 78 79int config_intrhook_establish(struct intr_config_hook *hook); 80void config_intrhook_disestablish(struct intr_config_hook *hook); 81 82 83/* misc. */ 84#define TUNABLE_INT(path, var) 85#define TUNABLE_INT_FETCH(path, var) 86 87 88#endif // _FBSD_COMPAT_SYS_KERNEL_H_ 89