vmbus.h revision 307455
1302876Ssephe/*-
2302876Ssephe * Copyright (c) 2016 Microsoft Corp.
3302876Ssephe * All rights reserved.
4302876Ssephe *
5302876Ssephe * Redistribution and use in source and binary forms, with or without
6302876Ssephe * modification, are permitted provided that the following conditions
7302876Ssephe * are met:
8302876Ssephe * 1. Redistributions of source code must retain the above copyright
9302876Ssephe *    notice unmodified, this list of conditions, and the following
10302876Ssephe *    disclaimer.
11302876Ssephe * 2. Redistributions in binary form must reproduce the above copyright
12302876Ssephe *    notice, this list of conditions and the following disclaimer in the
13302876Ssephe *    documentation and/or other materials provided with the distribution.
14302876Ssephe *
15302876Ssephe * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16302876Ssephe * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17302876Ssephe * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18302876Ssephe * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19302876Ssephe * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20302876Ssephe * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21302876Ssephe * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22302876Ssephe * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23302876Ssephe * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24302876Ssephe * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25302876Ssephe *
26302876Ssephe * $FreeBSD: stable/11/sys/dev/hyperv/include/vmbus.h 307455 2016-10-17 02:30:45Z sephe $
27302876Ssephe */
28302876Ssephe
29302876Ssephe#ifndef _VMBUS_H_
30302876Ssephe#define _VMBUS_H_
31302876Ssephe
32302876Ssephe#include <sys/param.h>
33302876Ssephe
34307455Ssephe/*
35307455Ssephe * GPA stuffs.
36307455Ssephe */
37307455Ssephestruct vmbus_gpa_range {
38307455Ssephe	uint32_t	gpa_len;
39307455Ssephe	uint32_t	gpa_ofs;
40307455Ssephe	uint64_t	gpa_page[0];
41307455Ssephe} __packed;
42307455Ssephe
43302876Ssephe/* This is actually vmbus_gpa_range.gpa_page[1] */
44302876Ssephestruct vmbus_gpa {
45302876Ssephe	uint32_t	gpa_len;
46302876Ssephe	uint32_t	gpa_ofs;
47302876Ssephe	uint64_t	gpa_page;
48302876Ssephe} __packed;
49302876Ssephe
50307455Ssephe#define VMBUS_CHANPKT_TYPE_INBAND	0x0006
51307455Ssephe#define VMBUS_CHANPKT_TYPE_RXBUF	0x0007
52307455Ssephe#define VMBUS_CHANPKT_TYPE_GPA		0x0009
53307455Ssephe#define VMBUS_CHANPKT_TYPE_COMP		0x000b
54302876Ssephe
55307455Ssephe#define VMBUS_CHANPKT_FLAG_RC		0x0001	/* report completion */
56307455Ssephe
57307455Ssephe#define VMBUS_CHAN_SGLIST_MAX		32
58307455Ssephe#define VMBUS_CHAN_PRPLIST_MAX		32
59307455Ssephe
60302876Ssephestruct hv_vmbus_channel;
61302876Ssephe
62302876Ssepheint	vmbus_chan_send_sglist(struct hv_vmbus_channel *chan,
63302876Ssephe	    struct vmbus_gpa sg[], int sglen, void *data, int dlen,
64302876Ssephe	    uint64_t xactid);
65307455Ssepheint	vmbus_chan_send_prplist(struct hv_vmbus_channel *chan,
66307455Ssephe	    struct vmbus_gpa_range *prp, int prp_cnt, void *data, int dlen,
67307455Ssephe	    uint64_t xactid);
68302876Ssephe
69302876Ssephe#endif	/* !_VMBUS_H_ */
70