Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/usr.sbin/bhyve/block_if.h
105655 views
1
/*-
2
* SPDX-License-Identifier: BSD-2-Clause
3
*
4
* Copyright (c) 2013 Peter Grehan <[email protected]>
5
* All rights reserved.
6
*
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
9
* are met:
10
* 1. Redistributions of source code must retain the above copyright
11
* notice, this list of conditions and the following disclaimer.
12
* 2. Redistributions in binary form must reproduce the above copyright
13
* notice, this list of conditions and the following disclaimer in the
14
* documentation and/or other materials provided with the distribution.
15
*
16
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND
17
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26
* SUCH DAMAGE.
27
*/
28
29
/*
30
* The block API to be used by bhyve block-device emulations. The routines
31
* are thread safe, with no assumptions about the context of the completion
32
* callback - it may occur in the caller's context, or asynchronously in
33
* another thread.
34
*/
35
36
#ifndef _BLOCK_IF_H_
37
#define _BLOCK_IF_H_
38
39
#include <sys/nv.h>
40
#include <sys/uio.h>
41
#include <sys/unistd.h>
42
43
struct vm_snapshot_meta;
44
45
46
/*
47
* BLOCKIF_IOV_MAX is the maximum number of scatter/gather entries in
48
* a single request. BLOCKIF_RING_MAX is the maxmimum number of
49
* pending requests that can be queued.
50
*/
51
#define BLOCKIF_IOV_MAX 128 /* not practical to be IOV_MAX */
52
#define BLOCKIF_RING_MAX 128
53
54
struct blockif_req {
55
int br_iovcnt;
56
off_t br_offset;
57
ssize_t br_resid;
58
void (*br_callback)(struct blockif_req *req, int err);
59
void *br_param;
60
struct iovec br_iov[BLOCKIF_IOV_MAX];
61
};
62
63
struct pci_devinst;
64
struct blockif_ctxt;
65
66
typedef void blockif_resize_cb(struct blockif_ctxt *, void *, size_t);
67
68
int blockif_legacy_config(nvlist_t *nvl, const char *opts);
69
int blockif_add_boot_device(struct pci_devinst *const pi, struct blockif_ctxt *const bc);
70
struct blockif_ctxt *blockif_open(nvlist_t *nvl, const char *ident);
71
int blockif_register_resize_callback(struct blockif_ctxt *bc,
72
blockif_resize_cb *cb, void *cb_arg);
73
off_t blockif_size(struct blockif_ctxt *bc);
74
void blockif_chs(struct blockif_ctxt *bc, uint16_t *c, uint8_t *h,
75
uint8_t *s);
76
int blockif_sectsz(struct blockif_ctxt *bc);
77
void blockif_psectsz(struct blockif_ctxt *bc, int *size, int *off);
78
int blockif_queuesz(struct blockif_ctxt *bc);
79
int blockif_is_ro(struct blockif_ctxt *bc);
80
int blockif_candelete(struct blockif_ctxt *bc);
81
int blockif_read(struct blockif_ctxt *bc, struct blockif_req *breq);
82
int blockif_write(struct blockif_ctxt *bc, struct blockif_req *breq);
83
int blockif_flush(struct blockif_ctxt *bc, struct blockif_req *breq);
84
int blockif_delete(struct blockif_ctxt *bc, struct blockif_req *breq);
85
int blockif_cancel(struct blockif_ctxt *bc, struct blockif_req *breq);
86
int blockif_close(struct blockif_ctxt *bc);
87
#ifdef BHYVE_SNAPSHOT
88
void blockif_pause(struct blockif_ctxt *bc);
89
void blockif_resume(struct blockif_ctxt *bc);
90
#endif
91
92
#endif /* _BLOCK_IF_H_ */
93
94