From e2abcdca396661cbe0ae2ddb13d5c2b85682c13a Mon Sep 17 00:00:00 2001 From: Cem Keylan Date: Fri, 16 Oct 2020 17:41:25 +0300 Subject: initial commit --- sys/sys/extent.h | 130 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 sys/sys/extent.h (limited to 'sys/sys/extent.h') diff --git a/sys/sys/extent.h b/sys/sys/extent.h new file mode 100644 index 0000000..21be296 --- /dev/null +++ b/sys/sys/extent.h @@ -0,0 +1,130 @@ +/* $OpenBSD: extent.h,v 1.14 2014/02/08 20:29:01 kettenis Exp $ */ +/* $NetBSD: extent.h,v 1.6 1997/10/09 07:43:05 jtc Exp $ */ + +/*- + * Copyright (c) 1996 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _SYS_EXTENT_H_ +#define _SYS_EXTENT_H_ + +#include + +struct extent_region { + LIST_ENTRY(extent_region) er_link; /* link in region list */ + u_long er_start; /* start of region */ + u_long er_end; /* end of region */ + int er_flags; /* misc. flags */ +}; + +/* er_flags */ +#define ER_ALLOC 0x01 /* region descriptor dynamically allocated */ +#define ER_DISCARD 0x02 /* discard region descriptor after use */ + +struct extent { + char *ex_name; /* name of extent */ + /* allocated regions in extent */ + LIST_HEAD(, extent_region) ex_regions; + u_long ex_start; /* start of extent */ + u_long ex_end; /* end of extent */ + int ex_mtype; /* memory type */ + int ex_flags; /* misc. information */ + + LIST_ENTRY(extent) ex_link; +}; + +struct extent_fixed { + struct extent fex_extent; /* MUST BE FIRST */ + /* freelist of region descriptors */ + LIST_HEAD(, extent_region) fex_freelist; + caddr_t fex_storage; /* storage space for descriptors */ + size_t fex_storagesize; /* size of storage space */ +}; + +/* ex_flags; for internal use only */ +#define EXF_FIXED 0x01 /* extent uses fixed storage */ +#define EXF_NOCOALESCE 0x02 /* coalescing of regions not allowed */ +#define EXF_WANTED 0x04 /* someone asleep on extent */ +#define EXF_FLWANTED 0x08 /* someone asleep on freelist */ + +#define EXF_BITS "\20\4FLWANTED\3WANTED\2NOCOALESCE\1FIXED" + +/* misc. flags passed to extent functions */ +#define EX_NOWAIT 0x0000 /* not safe to sleep */ +#define EX_WAITOK 0x0001 /* safe to sleep */ +#define EX_FAST 0x0002 /* take first fit in extent_alloc() */ +#define EX_CATCH 0x0004 /* catch signals while sleeping */ +#define EX_NOCOALESCE 0x0008 /* create a non-coalescing extent */ +#define EX_MALLOCOK 0x0010 /* safe to call malloc() */ +#define EX_WAITSPACE 0x0020 /* wait for space to become free */ +#define EX_BOUNDZERO 0x0040 /* boundary lines start at 0 */ +#define EX_CONFLICTOK 0x0080 /* allow conflicts */ +#define EX_FILLED 0x0100 /* create a filled extent */ + +/* + * Special place holders for "alignment" and "boundary" arguments, + * in the event the caller doesn't wish to use those features. + */ +#define EX_NOALIGN 1 /* don't do alignment */ +#define EX_NOBOUNDARY 0 /* don't do boundary checking */ + +#if defined(_KERNEL) || defined(_EXTENT_TESTING) +#define EXTENT_FIXED_STORAGE_SIZE(_nregions) \ + (ALIGN(sizeof(struct extent_fixed)) + \ + ((ALIGN(sizeof(struct extent_region))) * \ + (_nregions))) + +void extent_print_all(void); + +struct extent *extent_create(char *, u_long, u_long, int, + caddr_t, size_t, int); +void extent_destroy(struct extent *); +int extent_alloc_subregion(struct extent *, u_long, u_long, + u_long, u_long, u_long, u_long, int, u_long *); +int extent_alloc_subregion_with_descr(struct extent *, u_long, u_long, + u_long, u_long, u_long, u_long, int, struct extent_region *, + u_long *); +int extent_alloc_region(struct extent *, u_long, u_long, int); +int extent_free(struct extent *, u_long, u_long, int); +void extent_print(struct extent *); + +/* Simple case of extent_alloc_subregion() */ +#define extent_alloc(_ex, _size, _alignment, _skew, _boundary, \ + _flags, _result) \ + extent_alloc_subregion((_ex), (_ex)->ex_start, (_ex)->ex_end, \ + (_size), (_alignment), (_skew), (_boundary), (_flags), (_result)) + +/* Simple case of extent_alloc_subregion_with_descr() */ +#define extent_alloc_with_descr(_ex, _size, _alignment, _skew, _boundary, \ + _flags, _region, _result) \ + extent_alloc_subregion_with_descr((_ex), (_ex)->ex_start, \ + (_ex)->ex_end, (_size), (_alignment), (_skew), (_boundary), \ + (_flags), (_region), (_result)) +#endif /* _KERNEL || _EXTENT_TESTING */ + +#endif /* ! _SYS_EXTENT_H_ */ -- cgit v1.2.3