1dd84a43cSPoul-Henning Kamp /*- 2*3728855aSPedro F. Giffuni * SPDX-License-Identifier: BSD-3-Clause 3*3728855aSPedro F. Giffuni * 4dd84a43cSPoul-Henning Kamp * Copyright (c) 2002 Poul-Henning Kamp 5dd84a43cSPoul-Henning Kamp * Copyright (c) 2002 Networks Associates Technology, Inc. 6dd84a43cSPoul-Henning Kamp * All rights reserved. 7dd84a43cSPoul-Henning Kamp * 8dd84a43cSPoul-Henning Kamp * This software was developed for the FreeBSD Project by Poul-Henning Kamp 9dd84a43cSPoul-Henning Kamp * and NAI Labs, the Security Research Division of Network Associates, Inc. 10dd84a43cSPoul-Henning Kamp * under DARPA/SPAWAR contract N66001-01-C-8035 ("CBOSS"), as part of the 11dd84a43cSPoul-Henning Kamp * DARPA CHATS research program. 12dd84a43cSPoul-Henning Kamp * 13dd84a43cSPoul-Henning Kamp * Redistribution and use in source and binary forms, with or without 14dd84a43cSPoul-Henning Kamp * modification, are permitted provided that the following conditions 15dd84a43cSPoul-Henning Kamp * are met: 16dd84a43cSPoul-Henning Kamp * 1. Redistributions of source code must retain the above copyright 17dd84a43cSPoul-Henning Kamp * notice, this list of conditions and the following disclaimer. 18dd84a43cSPoul-Henning Kamp * 2. Redistributions in binary form must reproduce the above copyright 19dd84a43cSPoul-Henning Kamp * notice, this list of conditions and the following disclaimer in the 20dd84a43cSPoul-Henning Kamp * documentation and/or other materials provided with the distribution. 21dd84a43cSPoul-Henning Kamp * 3. The names of the authors may not be used to endorse or promote 22dd84a43cSPoul-Henning Kamp * products derived from this software without specific prior written 23dd84a43cSPoul-Henning Kamp * permission. 24dd84a43cSPoul-Henning Kamp * 25dd84a43cSPoul-Henning Kamp * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 26dd84a43cSPoul-Henning Kamp * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 27dd84a43cSPoul-Henning Kamp * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 28dd84a43cSPoul-Henning Kamp * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 29dd84a43cSPoul-Henning Kamp * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 30dd84a43cSPoul-Henning Kamp * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 31dd84a43cSPoul-Henning Kamp * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 32dd84a43cSPoul-Henning Kamp * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 33dd84a43cSPoul-Henning Kamp * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 34dd84a43cSPoul-Henning Kamp * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 35dd84a43cSPoul-Henning Kamp * SUCH DAMAGE. 36dd84a43cSPoul-Henning Kamp */ 37dd84a43cSPoul-Henning Kamp 385a6baf54SPoul-Henning Kamp #ifndef _GEOM_GEOM_SLICE_H_ 395a6baf54SPoul-Henning Kamp #define _GEOM_GEOM_SLICE_H_ 405a6baf54SPoul-Henning Kamp 41dd84a43cSPoul-Henning Kamp struct g_slice { 42dd84a43cSPoul-Henning Kamp off_t offset; 43dd84a43cSPoul-Henning Kamp off_t length; 4448444d62SPoul-Henning Kamp u_int sectorsize; 45dd84a43cSPoul-Henning Kamp struct g_provider *provider; 46dd84a43cSPoul-Henning Kamp }; 47dd84a43cSPoul-Henning Kamp 48183a45f6SPoul-Henning Kamp struct g_slice_hot { 49183a45f6SPoul-Henning Kamp off_t offset; 50183a45f6SPoul-Henning Kamp off_t length; 517220a9e7SPoul-Henning Kamp int ract; 527220a9e7SPoul-Henning Kamp int dact; 537220a9e7SPoul-Henning Kamp int wact; 54183a45f6SPoul-Henning Kamp }; 55183a45f6SPoul-Henning Kamp 56dd84a43cSPoul-Henning Kamp typedef int g_slice_start_t (struct bio *bp); 57dd84a43cSPoul-Henning Kamp 58dd84a43cSPoul-Henning Kamp struct g_slicer { 59188321b7SPoul-Henning Kamp u_int nslice; 60188321b7SPoul-Henning Kamp u_int nprovider; 61dd84a43cSPoul-Henning Kamp struct g_slice *slices; 627220a9e7SPoul-Henning Kamp 63183a45f6SPoul-Henning Kamp u_int nhotspot; 64183a45f6SPoul-Henning Kamp struct g_slice_hot *hotspot; 657220a9e7SPoul-Henning Kamp 66dd84a43cSPoul-Henning Kamp void *softc; 67dd84a43cSPoul-Henning Kamp g_slice_start_t *start; 688cd1535aSPoul-Henning Kamp g_event_t *hot; 69dd84a43cSPoul-Henning Kamp }; 70dd84a43cSPoul-Henning Kamp 7107d77fc6SPoul-Henning Kamp g_dumpconf_t g_slice_dumpconf; 7202c62349SJaakko Heinonen int g_slice_config(struct g_geom *gp, u_int idx, int how, off_t offset, off_t length, u_int sectorsize, const char *fmt, ...) __printflike(7, 8); 7315649213SPoul-Henning Kamp void g_slice_spoiled(struct g_consumer *cp); 74bdf2e45aSPawel Jakub Dawidek void g_slice_orphan(struct g_consumer *cp); 755a6baf54SPoul-Henning Kamp #define G_SLICE_CONFIG_CHECK 0 765a6baf54SPoul-Henning Kamp #define G_SLICE_CONFIG_SET 1 775a6baf54SPoul-Henning Kamp #define G_SLICE_CONFIG_FORCE 2 78188321b7SPoul-Henning Kamp struct g_geom * g_slice_new(struct g_class *mp, u_int slices, struct g_provider *pp, struct g_consumer **cpp, void *extrap, int extra, g_slice_start_t *start); 79188321b7SPoul-Henning Kamp 807220a9e7SPoul-Henning Kamp int g_slice_conf_hot(struct g_geom *gp, u_int idx, off_t offset, off_t length, int ract, int dact, int wact); 817220a9e7SPoul-Henning Kamp #define G_SLICE_HOT_ALLOW 1 827220a9e7SPoul-Henning Kamp #define G_SLICE_HOT_DENY 2 837220a9e7SPoul-Henning Kamp #define G_SLICE_HOT_START 4 847220a9e7SPoul-Henning Kamp #define G_SLICE_HOT_CALL 8 857220a9e7SPoul-Henning Kamp 86ce67c955SPoul-Henning Kamp int g_slice_destroy_geom(struct gctl_req *req, struct g_class *mp, struct g_geom *gp); 87ce67c955SPoul-Henning Kamp 88188321b7SPoul-Henning Kamp void g_slice_finish_hot(struct bio *bp); 89dd84a43cSPoul-Henning Kamp 905a6baf54SPoul-Henning Kamp #endif /* _GEOM_GEOM_SLICE_H_ */ 91