summaryrefslogtreecommitdiffstats
path: root/sys/dev/hyperv/include
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/hyperv/include')
-rw-r--r--sys/dev/hyperv/include/hyperv.h36
-rw-r--r--sys/dev/hyperv/include/vmbus.h35
2 files changed, 35 insertions, 36 deletions
diff --git a/sys/dev/hyperv/include/hyperv.h b/sys/dev/hyperv/include/hyperv.h
index 63b353d..a987b09 100644
--- a/sys/dev/hyperv/include/hyperv.h
+++ b/sys/dev/hyperv/include/hyperv.h
@@ -90,28 +90,6 @@ struct hyperv_guid {
int hyperv_guid2str(const struct hyperv_guid *, char *, size_t);
-typedef struct {
- uint16_t type;
- uint16_t data_offset8;
- uint16_t length8;
- uint16_t flags;
- uint64_t transaction_id;
-} __packed hv_vm_packet_descriptor;
-
-typedef struct {
- uint32_t byte_count;
- uint32_t byte_offset;
-} __packed hv_vm_transfer_page;
-
-typedef struct {
- hv_vm_packet_descriptor d;
- uint16_t transfer_page_set_id;
- hv_bool_uint8_t sender_owns_set;
- uint8_t reserved;
- uint32_t range_count;
- hv_vm_transfer_page ranges[1];
-} __packed hv_vm_transfer_page_packet_header;
-
#define HW_MACADDR_LEN 6
/*
@@ -298,20 +276,6 @@ hv_set_channel_read_state(hv_vmbus_channel* channel, boolean_t on)
channel->ch_flags |= VMBUS_CHAN_FLAG_BATCHREAD;
}
-int hv_vmbus_channel_recv_packet(
- hv_vmbus_channel* channel,
- void* buffer,
- uint32_t buffer_len,
- uint32_t* buffer_actual_len,
- uint64_t* request_id);
-
-int hv_vmbus_channel_recv_packet_raw(
- hv_vmbus_channel* channel,
- void* buffer,
- uint32_t buffer_len,
- uint32_t* buffer_actual_len,
- uint64_t* request_id);
-
int hv_vmbus_channel_open(
hv_vmbus_channel* channel,
uint32_t send_ring_buffer_size,
diff --git a/sys/dev/hyperv/include/vmbus.h b/sys/dev/hyperv/include/vmbus.h
index 0dbfe6b..891b12a 100644
--- a/sys/dev/hyperv/include/vmbus.h
+++ b/sys/dev/hyperv/include/vmbus.h
@@ -47,6 +47,19 @@ struct vmbus_gpa {
uint64_t gpa_page;
} __packed;
+#define VMBUS_CHANPKT_SIZE_SHIFT 3
+
+#define VMBUS_CHANPKT_GETLEN(pktlen) \
+ (((int)(pktlen)) << VMBUS_CHANPKT_SIZE_SHIFT)
+
+struct vmbus_chanpkt_hdr {
+ uint16_t cph_type; /* VMBUS_CHANPKT_TYPE_ */
+ uint16_t cph_hlen; /* header len, in 8 bytes */
+ uint16_t cph_tlen; /* total len, in 8 bytes */
+ uint16_t cph_flags; /* VMBUS_CHANPKT_FLAG_ */
+ uint64_t cph_xactid;
+} __packed;
+
#define VMBUS_CHANPKT_TYPE_INBAND 0x0006
#define VMBUS_CHANPKT_TYPE_RXBUF 0x0007
#define VMBUS_CHANPKT_TYPE_GPA 0x0009
@@ -54,11 +67,33 @@ struct vmbus_gpa {
#define VMBUS_CHANPKT_FLAG_RC 0x0001 /* report completion */
+#define VMBUS_CHANPKT_CONST_DATA(pkt) \
+ (const void *)((const uint8_t *)(pkt) + \
+ VMBUS_CHANPKT_GETLEN((pkt)->cph_hlen))
+
+struct vmbus_rxbuf_desc {
+ uint32_t rb_len;
+ uint32_t rb_ofs;
+} __packed;
+
+struct vmbus_chanpkt_rxbuf {
+ struct vmbus_chanpkt_hdr cp_hdr;
+ uint16_t cp_rxbuf_id;
+ uint16_t cp_rsvd;
+ uint32_t cp_rxbuf_cnt;
+ struct vmbus_rxbuf_desc cp_rxbuf[];
+} __packed;
+
#define VMBUS_CHAN_SGLIST_MAX 32
#define VMBUS_CHAN_PRPLIST_MAX 32
struct hv_vmbus_channel;
+int vmbus_chan_recv(struct hv_vmbus_channel *chan, void *data, int *dlen,
+ uint64_t *xactid);
+int vmbus_chan_recv_pkt(struct hv_vmbus_channel *chan,
+ struct vmbus_chanpkt_hdr *pkt, int *pktlen);
+
int vmbus_chan_send(struct hv_vmbus_channel *chan, uint16_t type,
uint16_t flags, void *data, int dlen, uint64_t xactid);
int vmbus_chan_send_sglist(struct hv_vmbus_channel *chan,
OpenPOWER on IntegriCloud