osd.h revision 185029
1185029Spjd/*- 2185029Spjd * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@FreeBSD.org> 3185029Spjd * All rights reserved. 4185029Spjd * 5185029Spjd * Redistribution and use in source and binary forms, with or without 6185029Spjd * modification, are permitted provided that the following conditions 7185029Spjd * are met: 8185029Spjd * 1. Redistributions of source code must retain the above copyright 9185029Spjd * notice, this list of conditions and the following disclaimer. 10185029Spjd * 2. Redistributions in binary form must reproduce the above copyright 11185029Spjd * notice, this list of conditions and the following disclaimer in the 12185029Spjd * documentation and/or other materials provided with the distribution. 13185029Spjd * 14185029Spjd * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND 15185029Spjd * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16185029Spjd * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17185029Spjd * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE 18185029Spjd * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19185029Spjd * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20185029Spjd * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21185029Spjd * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22185029Spjd * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23185029Spjd * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24185029Spjd * SUCH DAMAGE. 25185029Spjd * 26185029Spjd * $FreeBSD: head/sys/sys/osd.h 185029 2008-11-17 20:49:29Z pjd $ 27185029Spjd */ 28185029Spjd 29185029Spjd#ifndef _SYS_OSD_H_ 30185029Spjd#define _SYS_OSD_H_ 31185029Spjd 32185029Spjd#include <sys/queue.h> 33185029Spjd 34185029Spjdstruct osd { 35185029Spjd u_int osd_nslots; 36185029Spjd void **osd_slots; 37185029Spjd LIST_ENTRY(osd) osd_next; 38185029Spjd}; 39185029Spjd 40185029Spjd#ifdef _KERNEL 41185029Spjd 42185029Spjd#define OSD_THREAD 0 43185029Spjd#define OSD_JAIL 1 44185029Spjd 45185029Spjd#define OSD_FIRST OSD_THREAD 46185029Spjd#define OSD_LAST OSD_JAIL 47185029Spjd 48185029Spjdtypedef void (*osd_destructor_t)(void *value); 49185029Spjd 50185029Spjdint osd_register(u_int type, osd_destructor_t destructor); 51185029Spjdvoid osd_deregister(u_int type, u_int slot); 52185029Spjd 53185029Spjdint osd_set(u_int type, struct osd *osd, u_int slot, void *value); 54185029Spjdvoid *osd_get(u_int type, struct osd *osd, u_int slot); 55185029Spjdvoid osd_del(u_int type, struct osd *osd, u_int slot); 56185029Spjd 57185029Spjdvoid osd_exit(u_int type, struct osd *osd); 58185029Spjd 59185029Spjd#define osd_thread_register(destructor) \ 60185029Spjd osd_register(OSD_THREAD, (destructor)) 61185029Spjd#define osd_thread_deregister(slot) \ 62185029Spjd osd_deregister(OSD_THREAD, (slot)) 63185029Spjd#define osd_thread_set(td, slot, value) \ 64185029Spjd osd_set(OSD_THREAD, &(td)->td_osd, (slot), (value)) 65185029Spjd#define osd_thread_get(td, slot) \ 66185029Spjd osd_get(OSD_THREAD, &(td)->td_osd, (slot)) 67185029Spjd#define osd_thread_del(td, slot) do { \ 68185029Spjd KASSERT((td) == curthread, ("Not curthread.")); \ 69185029Spjd osd_del(OSD_THREAD, &(td)->td_osd, (slot)); \ 70185029Spjd} while (0) 71185029Spjd#define osd_thread_exit(td) \ 72185029Spjd osd_exit(OSD_THREAD, &(td)->td_osd) 73185029Spjd 74185029Spjd#define osd_jail_register(destructor) \ 75185029Spjd osd_register(OSD_JAIL, (destructor)) 76185029Spjd#define osd_jail_deregister(slot) \ 77185029Spjd osd_deregister(OSD_JAIL, (slot)) 78185029Spjd#define osd_jail_set(pr, slot, value) \ 79185029Spjd osd_set(OSD_JAIL, &(pr)->pr_osd, (slot), (value)) 80185029Spjd#define osd_jail_get(pr, slot) \ 81185029Spjd osd_get(OSD_JAIL, &(pr)->pr_osd, (slot)) 82185029Spjd#define osd_jail_del(pr, slot) \ 83185029Spjd osd_del(OSD_JAIL, &(pr)->pr_osd, (slot)) 84185029Spjd#define osd_jail_exit(pr) \ 85185029Spjd osd_exit(OSD_JAIL, &(pr)->pr_osd) 86185029Spjd 87185029Spjd#endif /* _KERNEL */ 88185029Spjd 89185029Spjd#endif /* !_SYS_OSD_H_ */ 90