Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/hyperv/vmbus/vmbus_chan.c
Show First 20 Lines • Show All 604 Lines • ▼ Show 20 Lines | vmbus_chan_send(struct vmbus_channel *chan, uint16_t type, uint16_t flags, | ||||
int pktlen, pad_pktlen, hlen, error; | int pktlen, pad_pktlen, hlen, error; | ||||
uint64_t pad = 0; | uint64_t pad = 0; | ||||
struct iovec iov[3]; | struct iovec iov[3]; | ||||
boolean_t send_evt; | boolean_t send_evt; | ||||
hlen = sizeof(pkt); | hlen = sizeof(pkt); | ||||
pktlen = hlen + dlen; | pktlen = hlen + dlen; | ||||
pad_pktlen = VMBUS_CHANPKT_TOTLEN(pktlen); | pad_pktlen = VMBUS_CHANPKT_TOTLEN(pktlen); | ||||
KASSERT(pad_pktlen <= vmbus_txbr_maxpktsz(&chan->ch_txbr), | |||||
("invalid packet size %d", pad_pktlen)); | |||||
pkt.cp_hdr.cph_type = type; | pkt.cp_hdr.cph_type = type; | ||||
pkt.cp_hdr.cph_flags = flags; | pkt.cp_hdr.cph_flags = flags; | ||||
VMBUS_CHANPKT_SETLEN(pkt.cp_hdr.cph_hlen, hlen); | VMBUS_CHANPKT_SETLEN(pkt.cp_hdr.cph_hlen, hlen); | ||||
VMBUS_CHANPKT_SETLEN(pkt.cp_hdr.cph_tlen, pad_pktlen); | VMBUS_CHANPKT_SETLEN(pkt.cp_hdr.cph_tlen, pad_pktlen); | ||||
pkt.cp_hdr.cph_xactid = xactid; | pkt.cp_hdr.cph_xactid = xactid; | ||||
iov[0].iov_base = &pkt; | iov[0].iov_base = &pkt; | ||||
Show All 14 Lines | vmbus_chan_send_sglist(struct vmbus_channel *chan, | ||||
struct vmbus_gpa sg[], int sglen, void *data, int dlen, uint64_t xactid) | struct vmbus_gpa sg[], int sglen, void *data, int dlen, uint64_t xactid) | ||||
{ | { | ||||
struct vmbus_chanpkt_sglist pkt; | struct vmbus_chanpkt_sglist pkt; | ||||
int pktlen, pad_pktlen, hlen, error; | int pktlen, pad_pktlen, hlen, error; | ||||
struct iovec iov[4]; | struct iovec iov[4]; | ||||
boolean_t send_evt; | boolean_t send_evt; | ||||
uint64_t pad = 0; | uint64_t pad = 0; | ||||
KASSERT(sglen < VMBUS_CHAN_SGLIST_MAX, | |||||
("invalid sglist len %d", sglen)); | |||||
hlen = __offsetof(struct vmbus_chanpkt_sglist, cp_gpa[sglen]); | hlen = __offsetof(struct vmbus_chanpkt_sglist, cp_gpa[sglen]); | ||||
pktlen = hlen + dlen; | pktlen = hlen + dlen; | ||||
pad_pktlen = VMBUS_CHANPKT_TOTLEN(pktlen); | pad_pktlen = VMBUS_CHANPKT_TOTLEN(pktlen); | ||||
KASSERT(pad_pktlen <= vmbus_txbr_maxpktsz(&chan->ch_txbr), | |||||
("invalid packet size %d", pad_pktlen)); | |||||
pkt.cp_hdr.cph_type = VMBUS_CHANPKT_TYPE_GPA; | pkt.cp_hdr.cph_type = VMBUS_CHANPKT_TYPE_GPA; | ||||
pkt.cp_hdr.cph_flags = VMBUS_CHANPKT_FLAG_RC; | pkt.cp_hdr.cph_flags = VMBUS_CHANPKT_FLAG_RC; | ||||
VMBUS_CHANPKT_SETLEN(pkt.cp_hdr.cph_hlen, hlen); | VMBUS_CHANPKT_SETLEN(pkt.cp_hdr.cph_hlen, hlen); | ||||
VMBUS_CHANPKT_SETLEN(pkt.cp_hdr.cph_tlen, pad_pktlen); | VMBUS_CHANPKT_SETLEN(pkt.cp_hdr.cph_tlen, pad_pktlen); | ||||
pkt.cp_hdr.cph_xactid = xactid; | pkt.cp_hdr.cph_xactid = xactid; | ||||
pkt.cp_rsvd = 0; | pkt.cp_rsvd = 0; | ||||
pkt.cp_gpa_cnt = sglen; | pkt.cp_gpa_cnt = sglen; | ||||
Show All 19 Lines | vmbus_chan_send_prplist(struct vmbus_channel *chan, | ||||
uint64_t xactid) | uint64_t xactid) | ||||
{ | { | ||||
struct vmbus_chanpkt_prplist pkt; | struct vmbus_chanpkt_prplist pkt; | ||||
int pktlen, pad_pktlen, hlen, error; | int pktlen, pad_pktlen, hlen, error; | ||||
struct iovec iov[4]; | struct iovec iov[4]; | ||||
boolean_t send_evt; | boolean_t send_evt; | ||||
uint64_t pad = 0; | uint64_t pad = 0; | ||||
KASSERT(prp_cnt < VMBUS_CHAN_PRPLIST_MAX, | |||||
("invalid prplist entry count %d", prp_cnt)); | |||||
hlen = __offsetof(struct vmbus_chanpkt_prplist, | hlen = __offsetof(struct vmbus_chanpkt_prplist, | ||||
cp_range[0].gpa_page[prp_cnt]); | cp_range[0].gpa_page[prp_cnt]); | ||||
pktlen = hlen + dlen; | pktlen = hlen + dlen; | ||||
pad_pktlen = VMBUS_CHANPKT_TOTLEN(pktlen); | pad_pktlen = VMBUS_CHANPKT_TOTLEN(pktlen); | ||||
KASSERT(pad_pktlen <= vmbus_txbr_maxpktsz(&chan->ch_txbr), | |||||
("invalid packet size %d", pad_pktlen)); | |||||
pkt.cp_hdr.cph_type = VMBUS_CHANPKT_TYPE_GPA; | pkt.cp_hdr.cph_type = VMBUS_CHANPKT_TYPE_GPA; | ||||
pkt.cp_hdr.cph_flags = VMBUS_CHANPKT_FLAG_RC; | pkt.cp_hdr.cph_flags = VMBUS_CHANPKT_FLAG_RC; | ||||
VMBUS_CHANPKT_SETLEN(pkt.cp_hdr.cph_hlen, hlen); | VMBUS_CHANPKT_SETLEN(pkt.cp_hdr.cph_hlen, hlen); | ||||
VMBUS_CHANPKT_SETLEN(pkt.cp_hdr.cph_tlen, pad_pktlen); | VMBUS_CHANPKT_SETLEN(pkt.cp_hdr.cph_tlen, pad_pktlen); | ||||
pkt.cp_hdr.cph_xactid = xactid; | pkt.cp_hdr.cph_xactid = xactid; | ||||
pkt.cp_rsvd = 0; | pkt.cp_rsvd = 0; | ||||
pkt.cp_range_cnt = 1; | pkt.cp_range_cnt = 1; | ||||
▲ Show 20 Lines • Show All 715 Lines • Show Last 20 Lines |