hyperv: hv_vmbus_channel -> vmbus_channel

MFC after:	1 week
Sponsored by:	Microsoft OSTC
Differential Revision:	https://reviews.freebsd.org/D7260
This commit is contained in:
Sepherosa Ziehau 2016-07-21 06:09:47 +00:00
parent 4143850b00
commit 82b8a87964
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=303131
18 changed files with 131 additions and 133 deletions

View File

@ -104,56 +104,56 @@ struct vmbus_chanpkt_rxbuf {
#define VMBUS_CHAN_SGLIST_MAX 32 #define VMBUS_CHAN_SGLIST_MAX 32
#define VMBUS_CHAN_PRPLIST_MAX 32 #define VMBUS_CHAN_PRPLIST_MAX 32
struct hv_vmbus_channel; struct vmbus_channel;
struct hyperv_guid; struct hyperv_guid;
typedef void (*vmbus_chan_callback_t)(struct hv_vmbus_channel *, void *); typedef void (*vmbus_chan_callback_t)(struct vmbus_channel *, void *);
static __inline struct hv_vmbus_channel * static __inline struct vmbus_channel *
vmbus_get_channel(device_t dev) vmbus_get_channel(device_t dev)
{ {
return device_get_ivars(dev); return device_get_ivars(dev);
} }
int vmbus_chan_open(struct hv_vmbus_channel *chan, int vmbus_chan_open(struct vmbus_channel *chan,
int txbr_size, int rxbr_size, const void *udata, int udlen, int txbr_size, int rxbr_size, const void *udata, int udlen,
vmbus_chan_callback_t cb, void *cbarg); vmbus_chan_callback_t cb, void *cbarg);
void vmbus_chan_close(struct hv_vmbus_channel *chan); void vmbus_chan_close(struct vmbus_channel *chan);
int vmbus_chan_gpadl_connect(struct hv_vmbus_channel *chan, int vmbus_chan_gpadl_connect(struct vmbus_channel *chan,
bus_addr_t paddr, int size, uint32_t *gpadl); bus_addr_t paddr, int size, uint32_t *gpadl);
int vmbus_chan_gpadl_disconnect(struct hv_vmbus_channel *chan, int vmbus_chan_gpadl_disconnect(struct vmbus_channel *chan,
uint32_t gpadl); uint32_t gpadl);
void vmbus_chan_cpu_set(struct hv_vmbus_channel *chan, int cpu); void vmbus_chan_cpu_set(struct vmbus_channel *chan, int cpu);
void vmbus_chan_cpu_rr(struct hv_vmbus_channel *chan); void vmbus_chan_cpu_rr(struct vmbus_channel *chan);
struct hv_vmbus_channel * struct vmbus_channel *
vmbus_chan_cpu2chan(struct hv_vmbus_channel *chan, int cpu); vmbus_chan_cpu2chan(struct vmbus_channel *chan, int cpu);
void vmbus_chan_set_readbatch(struct hv_vmbus_channel *chan, bool on); void vmbus_chan_set_readbatch(struct vmbus_channel *chan, bool on);
struct hv_vmbus_channel ** struct vmbus_channel **
vmbus_subchan_get(struct hv_vmbus_channel *pri_chan, int subchan_cnt); vmbus_subchan_get(struct vmbus_channel *pri_chan, int subchan_cnt);
void vmbus_subchan_rel(struct hv_vmbus_channel **subchan, int subchan_cnt); void vmbus_subchan_rel(struct vmbus_channel **subchan, int subchan_cnt);
void vmbus_subchan_drain(struct hv_vmbus_channel *pri_chan); void vmbus_subchan_drain(struct vmbus_channel *pri_chan);
int vmbus_chan_recv(struct hv_vmbus_channel *chan, void *data, int *dlen, int vmbus_chan_recv(struct vmbus_channel *chan, void *data, int *dlen,
uint64_t *xactid); uint64_t *xactid);
int vmbus_chan_recv_pkt(struct hv_vmbus_channel *chan, int vmbus_chan_recv_pkt(struct vmbus_channel *chan,
struct vmbus_chanpkt_hdr *pkt, int *pktlen); struct vmbus_chanpkt_hdr *pkt, int *pktlen);
int vmbus_chan_send(struct hv_vmbus_channel *chan, uint16_t type, int vmbus_chan_send(struct vmbus_channel *chan, uint16_t type,
uint16_t flags, void *data, int dlen, uint64_t xactid); uint16_t flags, void *data, int dlen, uint64_t xactid);
int vmbus_chan_send_sglist(struct hv_vmbus_channel *chan, int vmbus_chan_send_sglist(struct vmbus_channel *chan,
struct vmbus_gpa sg[], int sglen, void *data, int dlen, struct vmbus_gpa sg[], int sglen, void *data, int dlen,
uint64_t xactid); uint64_t xactid);
int vmbus_chan_send_prplist(struct hv_vmbus_channel *chan, int vmbus_chan_send_prplist(struct vmbus_channel *chan,
struct vmbus_gpa_range *prp, int prp_cnt, void *data, int dlen, struct vmbus_gpa_range *prp, int prp_cnt, void *data, int dlen,
uint64_t xactid); uint64_t xactid);
uint32_t vmbus_chan_id(const struct hv_vmbus_channel *chan); uint32_t vmbus_chan_id(const struct vmbus_channel *chan);
uint32_t vmbus_chan_subidx(const struct hv_vmbus_channel *chan); uint32_t vmbus_chan_subidx(const struct vmbus_channel *chan);
bool vmbus_chan_is_primary(const struct hv_vmbus_channel *chan); bool vmbus_chan_is_primary(const struct vmbus_channel *chan);
const struct hyperv_guid * const struct hyperv_guid *
vmbus_chan_guid_inst(const struct hv_vmbus_channel *chan); vmbus_chan_guid_inst(const struct vmbus_channel *chan);
#endif /* !_VMBUS_H_ */ #endif /* !_VMBUS_H_ */

View File

@ -54,7 +54,7 @@ MALLOC_DEFINE(M_NETVSC, "netvsc", "Hyper-V netvsc driver");
/* /*
* Forward declarations * Forward declarations
*/ */
static void hv_nv_on_channel_callback(struct hv_vmbus_channel *chan, static void hv_nv_on_channel_callback(struct vmbus_channel *chan,
void *xrxr); void *xrxr);
static int hv_nv_init_send_buffer_with_net_vsp(struct hn_softc *sc); static int hv_nv_init_send_buffer_with_net_vsp(struct hn_softc *sc);
static int hv_nv_init_rx_buffer_with_net_vsp(struct hn_softc *); static int hv_nv_init_rx_buffer_with_net_vsp(struct hn_softc *);
@ -62,11 +62,11 @@ static int hv_nv_destroy_send_buffer(netvsc_dev *net_dev);
static int hv_nv_destroy_rx_buffer(netvsc_dev *net_dev); static int hv_nv_destroy_rx_buffer(netvsc_dev *net_dev);
static int hv_nv_connect_to_vsp(struct hn_softc *sc); static int hv_nv_connect_to_vsp(struct hn_softc *sc);
static void hv_nv_on_send_completion(netvsc_dev *net_dev, static void hv_nv_on_send_completion(netvsc_dev *net_dev,
struct hv_vmbus_channel *, const struct vmbus_chanpkt_hdr *pkt); struct vmbus_channel *, const struct vmbus_chanpkt_hdr *pkt);
static void hv_nv_on_receive_completion(struct hv_vmbus_channel *chan, static void hv_nv_on_receive_completion(struct vmbus_channel *chan,
uint64_t tid, uint32_t status); uint64_t tid, uint32_t status);
static void hv_nv_on_receive(netvsc_dev *net_dev, static void hv_nv_on_receive(netvsc_dev *net_dev,
struct hn_rx_ring *rxr, struct hv_vmbus_channel *chan, struct hn_rx_ring *rxr, struct vmbus_channel *chan,
const struct vmbus_chanpkt_hdr *pkt); const struct vmbus_chanpkt_hdr *pkt);
/* /*
@ -639,7 +639,7 @@ hv_nv_disconnect_from_vsp(netvsc_dev *net_dev)
} }
void void
hv_nv_subchan_attach(struct hv_vmbus_channel *chan, struct hn_rx_ring *rxr) hv_nv_subchan_attach(struct vmbus_channel *chan, struct hn_rx_ring *rxr)
{ {
KASSERT(rxr->hn_rx_idx == vmbus_chan_subidx(chan), KASSERT(rxr->hn_rx_idx == vmbus_chan_subidx(chan),
("chan%u subidx %u, rxr%d mismatch", ("chan%u subidx %u, rxr%d mismatch",
@ -658,7 +658,7 @@ netvsc_dev *
hv_nv_on_device_add(struct hn_softc *sc, void *additional_info, hv_nv_on_device_add(struct hn_softc *sc, void *additional_info,
struct hn_rx_ring *rxr) struct hn_rx_ring *rxr)
{ {
struct hv_vmbus_channel *chan = sc->hn_prichan; struct vmbus_channel *chan = sc->hn_prichan;
netvsc_dev *net_dev; netvsc_dev *net_dev;
int ret = 0; int ret = 0;
@ -735,7 +735,7 @@ hv_nv_on_device_remove(struct hn_softc *sc, boolean_t destroy_channel)
* Net VSC on send completion * Net VSC on send completion
*/ */
static void static void
hv_nv_on_send_completion(netvsc_dev *net_dev, struct hv_vmbus_channel *chan, hv_nv_on_send_completion(netvsc_dev *net_dev, struct vmbus_channel *chan,
const struct vmbus_chanpkt_hdr *pkt) const struct vmbus_chanpkt_hdr *pkt)
{ {
const nvsp_msg *nvsp_msg_pkt; const nvsp_msg *nvsp_msg_pkt;
@ -799,7 +799,7 @@ hv_nv_on_send_completion(netvsc_dev *net_dev, struct hv_vmbus_channel *chan,
* Returns 0 on success, non-zero on failure. * Returns 0 on success, non-zero on failure.
*/ */
int int
hv_nv_on_send(struct hv_vmbus_channel *chan, netvsc_packet *pkt) hv_nv_on_send(struct vmbus_channel *chan, netvsc_packet *pkt)
{ {
nvsp_msg send_msg; nvsp_msg send_msg;
int ret; int ret;
@ -838,7 +838,7 @@ hv_nv_on_send(struct hv_vmbus_channel *chan, netvsc_packet *pkt)
*/ */
static void static void
hv_nv_on_receive(netvsc_dev *net_dev, struct hn_rx_ring *rxr, hv_nv_on_receive(netvsc_dev *net_dev, struct hn_rx_ring *rxr,
struct hv_vmbus_channel *chan, const struct vmbus_chanpkt_hdr *pkthdr) struct vmbus_channel *chan, const struct vmbus_chanpkt_hdr *pkthdr)
{ {
const struct vmbus_chanpkt_rxbuf *pkt; const struct vmbus_chanpkt_rxbuf *pkt;
const nvsp_msg *nvsp_msg_pkt; const nvsp_msg *nvsp_msg_pkt;
@ -894,7 +894,7 @@ hv_nv_on_receive(netvsc_dev *net_dev, struct hn_rx_ring *rxr,
* Send a receive completion packet to RNDIS device (ie NetVsp) * Send a receive completion packet to RNDIS device (ie NetVsp)
*/ */
static void static void
hv_nv_on_receive_completion(struct hv_vmbus_channel *chan, uint64_t tid, hv_nv_on_receive_completion(struct vmbus_channel *chan, uint64_t tid,
uint32_t status) uint32_t status)
{ {
nvsp_msg rx_comp_msg; nvsp_msg rx_comp_msg;
@ -969,7 +969,7 @@ hv_nv_send_table(struct hn_softc *sc, const struct vmbus_chanpkt_hdr *pkt)
* Net VSC on channel callback * Net VSC on channel callback
*/ */
static void static void
hv_nv_on_channel_callback(struct hv_vmbus_channel *chan, void *xrxr) hv_nv_on_channel_callback(struct vmbus_channel *chan, void *xrxr)
{ {
struct hn_rx_ring *rxr = xrxr; struct hn_rx_ring *rxr = xrxr;
struct hn_softc *sc = rxr->hn_ifp->if_softc; struct hn_softc *sc = rxr->hn_ifp->if_softc;

View File

@ -1082,9 +1082,9 @@ typedef struct netvsc_dev_ {
uint32_t vrss_send_table[VRSS_SEND_TABLE_SIZE]; uint32_t vrss_send_table[VRSS_SEND_TABLE_SIZE];
} netvsc_dev; } netvsc_dev;
struct hv_vmbus_channel; struct vmbus_channel;
typedef void (*pfn_on_send_rx_completion)(struct hv_vmbus_channel *, void *); typedef void (*pfn_on_send_rx_completion)(struct vmbus_channel *, void *);
#define NETVSC_DEVICE_RING_BUFFER_SIZE (128 * PAGE_SIZE) #define NETVSC_DEVICE_RING_BUFFER_SIZE (128 * PAGE_SIZE)
@ -1207,7 +1207,7 @@ struct hn_tx_ring {
struct mtx hn_tx_lock; struct mtx hn_tx_lock;
struct hn_softc *hn_sc; struct hn_softc *hn_sc;
struct hv_vmbus_channel *hn_chan; struct vmbus_channel *hn_chan;
int hn_direct_tx_size; int hn_direct_tx_size;
int hn_tx_chimney_size; int hn_tx_chimney_size;
@ -1246,7 +1246,7 @@ typedef struct hn_softc {
/* See hv_netvsc_drv_freebsd.c for rules on how to use */ /* See hv_netvsc_drv_freebsd.c for rules on how to use */
int temp_unusable; int temp_unusable;
netvsc_dev *net_dev; netvsc_dev *net_dev;
struct hv_vmbus_channel *hn_prichan; struct vmbus_channel *hn_prichan;
int hn_rx_ring_cnt; int hn_rx_ring_cnt;
int hn_rx_ring_inuse; int hn_rx_ring_inuse;
@ -1273,9 +1273,9 @@ netvsc_dev *hv_nv_on_device_add(struct hn_softc *sc,
void *additional_info, struct hn_rx_ring *rxr); void *additional_info, struct hn_rx_ring *rxr);
int hv_nv_on_device_remove(struct hn_softc *sc, int hv_nv_on_device_remove(struct hn_softc *sc,
boolean_t destroy_channel); boolean_t destroy_channel);
int hv_nv_on_send(struct hv_vmbus_channel *chan, netvsc_packet *pkt); int hv_nv_on_send(struct vmbus_channel *chan, netvsc_packet *pkt);
int hv_nv_get_next_send_section(netvsc_dev *net_dev); int hv_nv_get_next_send_section(netvsc_dev *net_dev);
void hv_nv_subchan_attach(struct hv_vmbus_channel *chan, void hv_nv_subchan_attach(struct vmbus_channel *chan,
struct hn_rx_ring *rxr); struct hn_rx_ring *rxr);
#endif /* __HV_NET_VSC_H__ */ #endif /* __HV_NET_VSC_H__ */

View File

@ -340,8 +340,8 @@ static int hn_encap(struct hn_tx_ring *, struct hn_txdesc *, struct mbuf **);
static void hn_create_rx_data(struct hn_softc *sc, int); static void hn_create_rx_data(struct hn_softc *sc, int);
static void hn_destroy_rx_data(struct hn_softc *sc); static void hn_destroy_rx_data(struct hn_softc *sc);
static void hn_set_tx_chimney_size(struct hn_softc *, int); static void hn_set_tx_chimney_size(struct hn_softc *, int);
static void hn_channel_attach(struct hn_softc *, struct hv_vmbus_channel *); static void hn_channel_attach(struct hn_softc *, struct vmbus_channel *);
static void hn_subchan_attach(struct hn_softc *, struct hv_vmbus_channel *); static void hn_subchan_attach(struct hn_softc *, struct vmbus_channel *);
static void hn_subchan_setup(struct hn_softc *); static void hn_subchan_setup(struct hn_softc *);
static int hn_transmit(struct ifnet *, struct mbuf *); static int hn_transmit(struct ifnet *, struct mbuf *);
@ -780,7 +780,7 @@ hn_txeof(struct hn_tx_ring *txr)
} }
static void static void
hn_tx_done(struct hv_vmbus_channel *chan, void *xpkt) hn_tx_done(struct vmbus_channel *chan, void *xpkt)
{ {
netvsc_packet *packet = xpkt; netvsc_packet *packet = xpkt;
struct hn_txdesc *txd; struct hn_txdesc *txd;
@ -2911,7 +2911,7 @@ hn_xmit_txeof_taskfunc(void *xtxr, int pending __unused)
} }
static void static void
hn_channel_attach(struct hn_softc *sc, struct hv_vmbus_channel *chan) hn_channel_attach(struct hn_softc *sc, struct vmbus_channel *chan)
{ {
struct hn_rx_ring *rxr; struct hn_rx_ring *rxr;
int idx; int idx;
@ -2950,7 +2950,7 @@ hn_channel_attach(struct hn_softc *sc, struct hv_vmbus_channel *chan)
} }
static void static void
hn_subchan_attach(struct hn_softc *sc, struct hv_vmbus_channel *chan) hn_subchan_attach(struct hn_softc *sc, struct vmbus_channel *chan)
{ {
KASSERT(!vmbus_chan_is_primary(chan), KASSERT(!vmbus_chan_is_primary(chan),
@ -2961,7 +2961,7 @@ hn_subchan_attach(struct hn_softc *sc, struct hv_vmbus_channel *chan)
static void static void
hn_subchan_setup(struct hn_softc *sc) hn_subchan_setup(struct hn_softc *sc)
{ {
struct hv_vmbus_channel **subchans; struct vmbus_channel **subchans;
int subchan_cnt = sc->net_dev->num_channel - 1; int subchan_cnt = sc->net_dev->num_channel - 1;
int i; int i;
@ -2970,7 +2970,7 @@ hn_subchan_setup(struct hn_softc *sc)
/* Attach the sub-channels. */ /* Attach the sub-channels. */
for (i = 0; i < subchan_cnt; ++i) { for (i = 0; i < subchan_cnt; ++i) {
struct hv_vmbus_channel *subchan = subchans[i]; struct vmbus_channel *subchan = subchans[i];
/* NOTE: Calling order is critical. */ /* NOTE: Calling order is critical. */
hn_subchan_attach(sc, subchan); hn_subchan_attach(sc, subchan);

View File

@ -1082,7 +1082,6 @@ typedef struct rndismp_rx_bufs_info_ {
/* /*
* Externs * Externs
*/ */
struct hv_vmbus_channel;
struct hn_rx_ring; struct hn_rx_ring;
struct hn_tx_ring; struct hn_tx_ring;

View File

@ -86,8 +86,8 @@ static int hv_rf_set_packet_filter(rndis_device *device, uint32_t new_filter);
static int hv_rf_init_device(rndis_device *device); static int hv_rf_init_device(rndis_device *device);
static int hv_rf_open_device(rndis_device *device); static int hv_rf_open_device(rndis_device *device);
static int hv_rf_close_device(rndis_device *device); static int hv_rf_close_device(rndis_device *device);
static void hv_rf_on_send_request_completion(struct hv_vmbus_channel *, void *context); static void hv_rf_on_send_request_completion(struct vmbus_channel *, void *context);
static void hv_rf_on_send_request_halt_completion(struct hv_vmbus_channel *, void *context); static void hv_rf_on_send_request_halt_completion(struct vmbus_channel *, void *context);
int int
hv_rf_send_offload_request(struct hn_softc *sc, hv_rf_send_offload_request(struct hn_softc *sc,
rndis_offload_params *offloads); rndis_offload_params *offloads);
@ -1243,7 +1243,7 @@ hv_rf_on_close(struct hn_softc *sc)
* RNDIS filter on send request completion callback * RNDIS filter on send request completion callback
*/ */
static void static void
hv_rf_on_send_request_completion(struct hv_vmbus_channel *chan __unused, hv_rf_on_send_request_completion(struct vmbus_channel *chan __unused,
void *context __unused) void *context __unused)
{ {
} }
@ -1252,7 +1252,7 @@ hv_rf_on_send_request_completion(struct hv_vmbus_channel *chan __unused,
* RNDIS filter on send request (halt only) completion callback * RNDIS filter on send request (halt only) completion callback
*/ */
static void static void
hv_rf_on_send_request_halt_completion(struct hv_vmbus_channel *chan __unused, hv_rf_on_send_request_halt_completion(struct vmbus_channel *chan __unused,
void *context) void *context)
{ {
rndis_request *request = context; rndis_request *request = context;

View File

@ -111,7 +111,6 @@ typedef struct rndis_device_ {
/* /*
* Externs * Externs
*/ */
struct hv_vmbus_channel;
struct hn_softc; struct hn_softc;
struct hn_rx_ring; struct hn_rx_ring;

View File

@ -132,7 +132,7 @@ struct hv_storvsc_request {
}; };
struct storvsc_softc { struct storvsc_softc {
struct hv_vmbus_channel *hs_chan; struct vmbus_channel *hs_chan;
LIST_HEAD(, hv_storvsc_request) hs_free_list; LIST_HEAD(, hv_storvsc_request) hs_free_list;
struct mtx hs_lock; struct mtx hs_lock;
struct storvsc_driver_props *hs_drv_props; struct storvsc_driver_props *hs_drv_props;
@ -148,7 +148,7 @@ struct storvsc_softc {
struct hv_storvsc_request hs_reset_req; struct hv_storvsc_request hs_reset_req;
device_t hs_dev; device_t hs_dev;
struct hv_vmbus_channel *hs_cpu2chan[MAXCPU]; struct vmbus_channel *hs_cpu2chan[MAXCPU];
}; };
@ -274,7 +274,7 @@ static int create_storvsc_request(union ccb *ccb, struct hv_storvsc_request *req
static void storvsc_free_request(struct storvsc_softc *sc, struct hv_storvsc_request *reqp); static void storvsc_free_request(struct storvsc_softc *sc, struct hv_storvsc_request *reqp);
static enum hv_storage_type storvsc_get_storage_type(device_t dev); static enum hv_storage_type storvsc_get_storage_type(device_t dev);
static void hv_storvsc_rescan_target(struct storvsc_softc *sc); static void hv_storvsc_rescan_target(struct storvsc_softc *sc);
static void hv_storvsc_on_channel_callback(struct hv_vmbus_channel *chan, void *xsc); static void hv_storvsc_on_channel_callback(struct vmbus_channel *chan, void *xsc);
static void hv_storvsc_on_iocompletion( struct storvsc_softc *sc, static void hv_storvsc_on_iocompletion( struct storvsc_softc *sc,
struct vstor_packet *vstor_packet, struct vstor_packet *vstor_packet,
struct hv_storvsc_request *request); struct hv_storvsc_request *request);
@ -309,7 +309,7 @@ MODULE_DEPEND(storvsc, vmbus, 1, 1, 1);
static void static void
storvsc_subchan_attach(struct storvsc_softc *sc, storvsc_subchan_attach(struct storvsc_softc *sc,
struct hv_vmbus_channel *new_channel) struct vmbus_channel *new_channel)
{ {
struct vmstor_chan_props props; struct vmstor_chan_props props;
int ret = 0; int ret = 0;
@ -334,7 +334,7 @@ storvsc_subchan_attach(struct storvsc_softc *sc,
static void static void
storvsc_send_multichannel_request(struct storvsc_softc *sc, int max_chans) storvsc_send_multichannel_request(struct storvsc_softc *sc, int max_chans)
{ {
struct hv_vmbus_channel **subchan; struct vmbus_channel **subchan;
struct hv_storvsc_request *request; struct hv_storvsc_request *request;
struct vstor_packet *vstor_packet; struct vstor_packet *vstor_packet;
int request_channels_cnt = 0; int request_channels_cnt = 0;
@ -648,7 +648,7 @@ hv_storvsc_io_request(struct storvsc_softc *sc,
struct hv_storvsc_request *request) struct hv_storvsc_request *request)
{ {
struct vstor_packet *vstor_packet = &request->vstor_packet; struct vstor_packet *vstor_packet = &request->vstor_packet;
struct hv_vmbus_channel* outgoing_channel = NULL; struct vmbus_channel* outgoing_channel = NULL;
int ret = 0; int ret = 0;
vstor_packet->flags |= REQUEST_COMPLETION_FLAG; vstor_packet->flags |= REQUEST_COMPLETION_FLAG;
@ -765,7 +765,7 @@ hv_storvsc_rescan_target(struct storvsc_softc *sc)
} }
static void static void
hv_storvsc_on_channel_callback(struct hv_vmbus_channel *channel, void *xsc) hv_storvsc_on_channel_callback(struct vmbus_channel *channel, void *xsc)
{ {
int ret = 0; int ret = 0;
struct storvsc_softc *sc = xsc; struct storvsc_softc *sc = xsc;

View File

@ -49,7 +49,7 @@ static const struct hyperv_guid service_guid = { .hv_guid =
* Process heartbeat message * Process heartbeat message
*/ */
static void static void
hv_heartbeat_cb(struct hv_vmbus_channel *channel, void *context) hv_heartbeat_cb(struct vmbus_channel *channel, void *context)
{ {
uint8_t* buf; uint8_t* buf;
int recvlen; int recvlen;

View File

@ -334,7 +334,7 @@ hv_kvp_convert_utf16_ipinfo_to_utf8(struct hv_kvp_ip_msg *host_ip_msg,
/* XXX access other driver's softc? are you kidding? */ /* XXX access other driver's softc? are you kidding? */
device_t dev = devs[devcnt]; device_t dev = devs[devcnt];
struct hn_softc *sc = device_get_softc(dev); struct hn_softc *sc = device_get_softc(dev);
struct hv_vmbus_channel *chan; struct vmbus_channel *chan;
char buf[HYPERV_GUID_STRLEN]; char buf[HYPERV_GUID_STRLEN];
/* /*
@ -616,7 +616,7 @@ static void
hv_kvp_process_request(void *context, int pending) hv_kvp_process_request(void *context, int pending)
{ {
uint8_t *kvp_buf; uint8_t *kvp_buf;
struct hv_vmbus_channel *channel; struct vmbus_channel *channel;
uint32_t recvlen = 0; uint32_t recvlen = 0;
uint64_t requestid; uint64_t requestid;
struct hv_vmbus_icmsg_hdr *icmsghdrp; struct hv_vmbus_icmsg_hdr *icmsghdrp;
@ -711,7 +711,7 @@ hv_kvp_process_request(void *context, int pending)
* Callback routine that gets called whenever there is a message from host * Callback routine that gets called whenever there is a message from host
*/ */
static void static void
hv_kvp_callback(struct hv_vmbus_channel *chan __unused, void *context) hv_kvp_callback(struct vmbus_channel *chan __unused, void *context)
{ {
hv_kvp_sc *sc = (hv_kvp_sc*)context; hv_kvp_sc *sc = (hv_kvp_sc*)context;
/* /*

View File

@ -53,7 +53,7 @@ static const struct hyperv_guid service_guid = { .hv_guid =
* Shutdown * Shutdown
*/ */
static void static void
hv_shutdown_cb(struct hv_vmbus_channel *channel, void *context) hv_shutdown_cb(struct vmbus_channel *channel, void *context)
{ {
uint8_t* buf; uint8_t* buf;
uint8_t execute_shutdown = 0; uint8_t execute_shutdown = 0;

View File

@ -130,7 +130,7 @@ void hv_adj_guesttime(hv_timesync_sc *sc, uint64_t hosttime, uint8_t flags)
* Time Sync Channel message handler * Time Sync Channel message handler
*/ */
static void static void
hv_timesync_cb(struct hv_vmbus_channel *channel, void *context) hv_timesync_cb(struct vmbus_channel *channel, void *context)
{ {
hv_vmbus_icmsg_hdr* icmsghdrp; hv_vmbus_icmsg_hdr* icmsghdrp;
uint32_t recvlen; uint32_t recvlen;

View File

@ -77,7 +77,7 @@ int
hv_util_attach(device_t dev) hv_util_attach(device_t dev)
{ {
struct hv_util_sc* softc; struct hv_util_sc* softc;
struct hv_vmbus_channel *chan; struct vmbus_channel *chan;
int ret; int ret;
softc = device_get_softc(dev); softc = device_get_softc(dev);

View File

@ -39,7 +39,7 @@ typedef struct hv_util_sc {
/* /*
* function to process Hyper-V messages * function to process Hyper-V messages
*/ */
void (*callback)(struct hv_vmbus_channel *, void *); void (*callback)(struct vmbus_channel *, void *);
uint8_t *receive_buffer; uint8_t *receive_buffer;
} hv_util_sc; } hv_util_sc;

View File

@ -992,7 +992,7 @@ vmbus_read_ivar(device_t dev, device_t child, int index, uintptr_t *result)
static int static int
vmbus_child_pnpinfo_str(device_t dev, device_t child, char *buf, size_t buflen) vmbus_child_pnpinfo_str(device_t dev, device_t child, char *buf, size_t buflen)
{ {
const struct hv_vmbus_channel *chan; const struct vmbus_channel *chan;
char guidbuf[HYPERV_GUID_STRLEN]; char guidbuf[HYPERV_GUID_STRLEN];
chan = vmbus_get_channel(child); chan = vmbus_get_channel(child);
@ -1013,7 +1013,7 @@ vmbus_child_pnpinfo_str(device_t dev, device_t child, char *buf, size_t buflen)
} }
int int
vmbus_add_child(struct hv_vmbus_channel *chan) vmbus_add_child(struct vmbus_channel *chan)
{ {
struct vmbus_softc *sc = chan->ch_vmbus; struct vmbus_softc *sc = chan->ch_vmbus;
device_t parent = sc->vmbus_dev; device_t parent = sc->vmbus_dev;
@ -1038,7 +1038,7 @@ vmbus_add_child(struct hv_vmbus_channel *chan)
} }
int int
vmbus_delete_child(struct hv_vmbus_channel *chan) vmbus_delete_child(struct vmbus_channel *chan)
{ {
int error; int error;
@ -1082,7 +1082,7 @@ static int
vmbus_probe_guid_method(device_t bus, device_t dev, vmbus_probe_guid_method(device_t bus, device_t dev,
const struct hyperv_guid *guid) const struct hyperv_guid *guid)
{ {
const struct hv_vmbus_channel *chan = vmbus_get_channel(dev); const struct vmbus_channel *chan = vmbus_get_channel(dev);
if (memcmp(&chan->ch_guid_type, guid, sizeof(struct hyperv_guid)) == 0) if (memcmp(&chan->ch_guid_type, guid, sizeof(struct hyperv_guid)) == 0)
return 0; return 0;
@ -1132,7 +1132,7 @@ vmbus_doattach(struct vmbus_softc *sc)
mtx_init(&sc->vmbus_prichan_lock, "vmbus prichan", NULL, MTX_DEF); mtx_init(&sc->vmbus_prichan_lock, "vmbus prichan", NULL, MTX_DEF);
TAILQ_INIT(&sc->vmbus_prichans); TAILQ_INIT(&sc->vmbus_prichans);
sc->vmbus_chmap = malloc( sc->vmbus_chmap = malloc(
sizeof(struct hv_vmbus_channel *) * VMBUS_CHAN_MAX, M_DEVBUF, sizeof(struct vmbus_channel *) * VMBUS_CHAN_MAX, M_DEVBUF,
M_WAITOK | M_ZERO); M_WAITOK | M_ZERO);
/* /*

View File

@ -52,7 +52,7 @@ __FBSDID("$FreeBSD$");
#include <dev/hyperv/vmbus/vmbus_var.h> #include <dev/hyperv/vmbus/vmbus_var.h>
static void vmbus_chan_update_evtflagcnt(struct vmbus_softc *, static void vmbus_chan_update_evtflagcnt(struct vmbus_softc *,
const struct hv_vmbus_channel *); const struct vmbus_channel *);
static void vmbus_chan_task(void *, int); static void vmbus_chan_task(void *, int);
static void vmbus_chan_task_nobatch(void *, int); static void vmbus_chan_task_nobatch(void *, int);
@ -80,7 +80,7 @@ vmbus_chan_msgprocs[VMBUS_CHANMSG_TYPE_MAX] = {
* Notify host that there are data pending on our TX bufring. * Notify host that there are data pending on our TX bufring.
*/ */
static __inline void static __inline void
vmbus_chan_signal_tx(const struct hv_vmbus_channel *chan) vmbus_chan_signal_tx(const struct vmbus_channel *chan)
{ {
atomic_set_long(chan->ch_evtflag, chan->ch_evtflag_mask); atomic_set_long(chan->ch_evtflag, chan->ch_evtflag_mask);
if (chan->ch_txflags & VMBUS_CHAN_TXF_HASMNF) if (chan->ch_txflags & VMBUS_CHAN_TXF_HASMNF)
@ -92,7 +92,7 @@ vmbus_chan_signal_tx(const struct hv_vmbus_channel *chan)
static int static int
vmbus_chan_sysctl_mnf(SYSCTL_HANDLER_ARGS) vmbus_chan_sysctl_mnf(SYSCTL_HANDLER_ARGS)
{ {
struct hv_vmbus_channel *chan = arg1; struct vmbus_channel *chan = arg1;
int mnf = 0; int mnf = 0;
if (chan->ch_txflags & VMBUS_CHAN_TXF_HASMNF) if (chan->ch_txflags & VMBUS_CHAN_TXF_HASMNF)
@ -101,7 +101,7 @@ vmbus_chan_sysctl_mnf(SYSCTL_HANDLER_ARGS)
} }
static void static void
vmbus_chan_sysctl_create(struct hv_vmbus_channel *chan) vmbus_chan_sysctl_create(struct vmbus_channel *chan)
{ {
struct sysctl_oid *ch_tree, *chid_tree, *br_tree; struct sysctl_oid *ch_tree, *chid_tree, *br_tree;
struct sysctl_ctx_list *ctx; struct sysctl_ctx_list *ctx;
@ -193,7 +193,7 @@ vmbus_chan_sysctl_create(struct hv_vmbus_channel *chan)
} }
int int
vmbus_chan_open(struct hv_vmbus_channel *chan, int txbr_size, int rxbr_size, vmbus_chan_open(struct vmbus_channel *chan, int txbr_size, int rxbr_size,
const void *udata, int udlen, vmbus_chan_callback_t cb, void *cbarg) const void *udata, int udlen, vmbus_chan_callback_t cb, void *cbarg)
{ {
struct vmbus_softc *sc = chan->ch_vmbus; struct vmbus_softc *sc = chan->ch_vmbus;
@ -325,7 +325,7 @@ vmbus_chan_open(struct hv_vmbus_channel *chan, int txbr_size, int rxbr_size,
} }
int int
vmbus_chan_gpadl_connect(struct hv_vmbus_channel *chan, bus_addr_t paddr, vmbus_chan_gpadl_connect(struct vmbus_channel *chan, bus_addr_t paddr,
int size, uint32_t *gpadl0) int size, uint32_t *gpadl0)
{ {
struct vmbus_softc *sc = chan->ch_vmbus; struct vmbus_softc *sc = chan->ch_vmbus;
@ -455,7 +455,7 @@ vmbus_chan_gpadl_connect(struct hv_vmbus_channel *chan, bus_addr_t paddr,
* Disconnect the GPA from the target channel * Disconnect the GPA from the target channel
*/ */
int int
vmbus_chan_gpadl_disconnect(struct hv_vmbus_channel *chan, uint32_t gpadl) vmbus_chan_gpadl_disconnect(struct vmbus_channel *chan, uint32_t gpadl)
{ {
struct vmbus_softc *sc = chan->ch_vmbus; struct vmbus_softc *sc = chan->ch_vmbus;
struct vmbus_msghc *mh; struct vmbus_msghc *mh;
@ -492,7 +492,7 @@ vmbus_chan_gpadl_disconnect(struct hv_vmbus_channel *chan, uint32_t gpadl)
} }
static void static void
vmbus_chan_close_internal(struct hv_vmbus_channel *chan) vmbus_chan_close_internal(struct vmbus_channel *chan)
{ {
struct vmbus_softc *sc = chan->ch_vmbus; struct vmbus_softc *sc = chan->ch_vmbus;
struct vmbus_msghc *mh; struct vmbus_msghc *mh;
@ -569,7 +569,7 @@ vmbus_chan_close_internal(struct hv_vmbus_channel *chan)
* are not being opened. * are not being opened.
*/ */
void void
vmbus_chan_close(struct hv_vmbus_channel *chan) vmbus_chan_close(struct vmbus_channel *chan)
{ {
int subchan_cnt; int subchan_cnt;
@ -586,7 +586,7 @@ vmbus_chan_close(struct hv_vmbus_channel *chan)
*/ */
subchan_cnt = chan->ch_subchan_cnt; subchan_cnt = chan->ch_subchan_cnt;
if (subchan_cnt > 0) { if (subchan_cnt > 0) {
struct hv_vmbus_channel **subchan; struct vmbus_channel **subchan;
int i; int i;
subchan = vmbus_subchan_get(chan, subchan_cnt); subchan = vmbus_subchan_get(chan, subchan_cnt);
@ -600,7 +600,7 @@ vmbus_chan_close(struct hv_vmbus_channel *chan)
} }
int int
vmbus_chan_send(struct hv_vmbus_channel *chan, uint16_t type, uint16_t flags, vmbus_chan_send(struct vmbus_channel *chan, uint16_t type, uint16_t flags,
void *data, int dlen, uint64_t xactid) void *data, int dlen, uint64_t xactid)
{ {
struct vmbus_chanpkt pkt; struct vmbus_chanpkt pkt;
@ -633,7 +633,7 @@ vmbus_chan_send(struct hv_vmbus_channel *chan, uint16_t type, uint16_t flags,
} }
int int
vmbus_chan_send_sglist(struct hv_vmbus_channel *chan, 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;
@ -673,7 +673,7 @@ vmbus_chan_send_sglist(struct hv_vmbus_channel *chan,
} }
int int
vmbus_chan_send_prplist(struct hv_vmbus_channel *chan, vmbus_chan_send_prplist(struct vmbus_channel *chan,
struct vmbus_gpa_range *prp, int prp_cnt, void *data, int dlen, struct vmbus_gpa_range *prp, int prp_cnt, void *data, int dlen,
uint64_t xactid) uint64_t xactid)
{ {
@ -715,7 +715,7 @@ vmbus_chan_send_prplist(struct hv_vmbus_channel *chan,
} }
int int
vmbus_chan_recv(struct hv_vmbus_channel *chan, void *data, int *dlen0, vmbus_chan_recv(struct vmbus_channel *chan, void *data, int *dlen0,
uint64_t *xactid) uint64_t *xactid)
{ {
struct vmbus_chanpkt_hdr pkt; struct vmbus_chanpkt_hdr pkt;
@ -745,7 +745,7 @@ vmbus_chan_recv(struct hv_vmbus_channel *chan, void *data, int *dlen0,
} }
int int
vmbus_chan_recv_pkt(struct hv_vmbus_channel *chan, vmbus_chan_recv_pkt(struct vmbus_channel *chan,
struct vmbus_chanpkt_hdr *pkt0, int *pktlen0) struct vmbus_chanpkt_hdr *pkt0, int *pktlen0)
{ {
struct vmbus_chanpkt_hdr pkt; struct vmbus_chanpkt_hdr pkt;
@ -773,7 +773,7 @@ vmbus_chan_recv_pkt(struct hv_vmbus_channel *chan,
static void static void
vmbus_chan_task(void *xchan, int pending __unused) vmbus_chan_task(void *xchan, int pending __unused)
{ {
struct hv_vmbus_channel *chan = xchan; struct vmbus_channel *chan = xchan;
vmbus_chan_callback_t cb = chan->ch_cb; vmbus_chan_callback_t cb = chan->ch_cb;
void *cbarg = chan->ch_cbarg; void *cbarg = chan->ch_cbarg;
@ -806,7 +806,7 @@ vmbus_chan_task(void *xchan, int pending __unused)
static void static void
vmbus_chan_task_nobatch(void *xchan, int pending __unused) vmbus_chan_task_nobatch(void *xchan, int pending __unused)
{ {
struct hv_vmbus_channel *chan = xchan; struct vmbus_channel *chan = xchan;
chan->ch_cb(chan, chan->ch_cbarg); chan->ch_cb(chan, chan->ch_cbarg);
} }
@ -829,7 +829,7 @@ vmbus_event_flags_proc(struct vmbus_softc *sc, volatile u_long *event_flags,
chid_base = f << VMBUS_EVTFLAG_SHIFT; chid_base = f << VMBUS_EVTFLAG_SHIFT;
while ((chid_ofs = ffsl(flags)) != 0) { while ((chid_ofs = ffsl(flags)) != 0) {
struct hv_vmbus_channel *chan; struct vmbus_channel *chan;
--chid_ofs; /* NOTE: ffsl is 1-based */ --chid_ofs; /* NOTE: ffsl is 1-based */
flags &= ~(1UL << chid_ofs); flags &= ~(1UL << chid_ofs);
@ -875,7 +875,7 @@ vmbus_event_proc_compat(struct vmbus_softc *sc, int cpu)
static void static void
vmbus_chan_update_evtflagcnt(struct vmbus_softc *sc, vmbus_chan_update_evtflagcnt(struct vmbus_softc *sc,
const struct hv_vmbus_channel *chan) const struct vmbus_channel *chan)
{ {
volatile int *flag_cnt_ptr; volatile int *flag_cnt_ptr;
int flag_cnt; int flag_cnt;
@ -900,10 +900,10 @@ vmbus_chan_update_evtflagcnt(struct vmbus_softc *sc,
} }
} }
static struct hv_vmbus_channel * static struct vmbus_channel *
vmbus_chan_alloc(struct vmbus_softc *sc) vmbus_chan_alloc(struct vmbus_softc *sc)
{ {
struct hv_vmbus_channel *chan; struct vmbus_channel *chan;
chan = malloc(sizeof(*chan), M_DEVBUF, M_WAITOK | M_ZERO); chan = malloc(sizeof(*chan), M_DEVBUF, M_WAITOK | M_ZERO);
@ -925,7 +925,7 @@ vmbus_chan_alloc(struct vmbus_softc *sc)
} }
static void static void
vmbus_chan_free(struct hv_vmbus_channel *chan) vmbus_chan_free(struct vmbus_channel *chan)
{ {
/* TODO: assert sub-channel list is empty */ /* TODO: assert sub-channel list is empty */
/* TODO: asset no longer on the primary channel's sub-channel list */ /* TODO: asset no longer on the primary channel's sub-channel list */
@ -936,10 +936,10 @@ vmbus_chan_free(struct hv_vmbus_channel *chan)
} }
static int static int
vmbus_chan_add(struct hv_vmbus_channel *newchan) vmbus_chan_add(struct vmbus_channel *newchan)
{ {
struct vmbus_softc *sc = newchan->ch_vmbus; struct vmbus_softc *sc = newchan->ch_vmbus;
struct hv_vmbus_channel *prichan; struct vmbus_channel *prichan;
if (newchan->ch_id == 0) { if (newchan->ch_id == 0) {
/* /*
@ -1027,7 +1027,7 @@ vmbus_chan_add(struct hv_vmbus_channel *newchan)
} }
void void
vmbus_chan_cpu_set(struct hv_vmbus_channel *chan, int cpu) vmbus_chan_cpu_set(struct vmbus_channel *chan, int cpu)
{ {
KASSERT(cpu >= 0 && cpu < mp_ncpus, ("invalid cpu %d", cpu)); KASSERT(cpu >= 0 && cpu < mp_ncpus, ("invalid cpu %d", cpu));
@ -1047,7 +1047,7 @@ vmbus_chan_cpu_set(struct hv_vmbus_channel *chan, int cpu)
} }
void void
vmbus_chan_cpu_rr(struct hv_vmbus_channel *chan) vmbus_chan_cpu_rr(struct vmbus_channel *chan)
{ {
static uint32_t vmbus_chan_nextcpu; static uint32_t vmbus_chan_nextcpu;
int cpu; int cpu;
@ -1057,7 +1057,7 @@ vmbus_chan_cpu_rr(struct hv_vmbus_channel *chan)
} }
static void static void
vmbus_chan_cpu_default(struct hv_vmbus_channel *chan) vmbus_chan_cpu_default(struct vmbus_channel *chan)
{ {
/* /*
* By default, pin the channel to cpu0. Devices having * By default, pin the channel to cpu0. Devices having
@ -1072,7 +1072,7 @@ vmbus_chan_msgproc_choffer(struct vmbus_softc *sc,
const struct vmbus_message *msg) const struct vmbus_message *msg)
{ {
const struct vmbus_chanmsg_choffer *offer; const struct vmbus_chanmsg_choffer *offer;
struct hv_vmbus_channel *chan; struct vmbus_channel *chan;
int error; int error;
offer = (const struct vmbus_chanmsg_choffer *)msg->msg_data; offer = (const struct vmbus_chanmsg_choffer *)msg->msg_data;
@ -1152,7 +1152,7 @@ vmbus_chan_msgproc_chrescind(struct vmbus_softc *sc,
const struct vmbus_message *msg) const struct vmbus_message *msg)
{ {
const struct vmbus_chanmsg_chrescind *note; const struct vmbus_chanmsg_chrescind *note;
struct hv_vmbus_channel *chan; struct vmbus_channel *chan;
note = (const struct vmbus_chanmsg_chrescind *)msg->msg_data; note = (const struct vmbus_chanmsg_chrescind *)msg->msg_data;
if (note->chm_chanid > VMBUS_CHAN_MAX) { if (note->chm_chanid > VMBUS_CHAN_MAX) {
@ -1177,7 +1177,7 @@ vmbus_chan_msgproc_chrescind(struct vmbus_softc *sc,
static void static void
vmbus_chan_detach_task(void *xchan, int pending __unused) vmbus_chan_detach_task(void *xchan, int pending __unused)
{ {
struct hv_vmbus_channel *chan = xchan; struct vmbus_channel *chan = xchan;
if (VMBUS_CHAN_ISPRIMARY(chan)) { if (VMBUS_CHAN_ISPRIMARY(chan)) {
/* Only primary channel owns the device */ /* Only primary channel owns the device */
@ -1185,7 +1185,7 @@ vmbus_chan_detach_task(void *xchan, int pending __unused)
/* NOTE: DO NOT free primary channel for now */ /* NOTE: DO NOT free primary channel for now */
} else { } else {
struct vmbus_softc *sc = chan->ch_vmbus; struct vmbus_softc *sc = chan->ch_vmbus;
struct hv_vmbus_channel *pri_chan = chan->ch_prichan; struct vmbus_channel *pri_chan = chan->ch_prichan;
struct vmbus_chanmsg_chfree *req; struct vmbus_chanmsg_chfree *req;
struct vmbus_msghc *mh; struct vmbus_msghc *mh;
int error; int error;
@ -1235,7 +1235,7 @@ vmbus_chan_detach_task(void *xchan, int pending __unused)
void void
vmbus_chan_destroy_all(struct vmbus_softc *sc) vmbus_chan_destroy_all(struct vmbus_softc *sc)
{ {
struct hv_vmbus_channel *chan; struct vmbus_channel *chan;
mtx_lock(&sc->vmbus_prichan_lock); mtx_lock(&sc->vmbus_prichan_lock);
while ((chan = TAILQ_FIRST(&sc->vmbus_prichans)) != NULL) { while ((chan = TAILQ_FIRST(&sc->vmbus_prichans)) != NULL) {
@ -1249,7 +1249,7 @@ vmbus_chan_destroy_all(struct vmbus_softc *sc)
mtx_lock(&sc->vmbus_prichan_lock); mtx_lock(&sc->vmbus_prichan_lock);
} }
bzero(sc->vmbus_chmap, bzero(sc->vmbus_chmap,
sizeof(struct hv_vmbus_channel *) * VMBUS_CHAN_MAX); sizeof(struct vmbus_channel *) * VMBUS_CHAN_MAX);
mtx_unlock(&sc->vmbus_prichan_lock); mtx_unlock(&sc->vmbus_prichan_lock);
} }
@ -1258,10 +1258,10 @@ vmbus_chan_destroy_all(struct vmbus_softc *sc)
* be selected. * be selected.
* If no multi-channel, always select primary channel. * If no multi-channel, always select primary channel.
*/ */
struct hv_vmbus_channel * struct vmbus_channel *
vmbus_chan_cpu2chan(struct hv_vmbus_channel *prichan, int cpu) vmbus_chan_cpu2chan(struct vmbus_channel *prichan, int cpu)
{ {
struct hv_vmbus_channel *sel, *chan; struct vmbus_channel *sel, *chan;
uint32_t vcpu, sel_dist; uint32_t vcpu, sel_dist;
KASSERT(cpu >= 0 && cpu < mp_ncpus, ("invalid cpuid %d", cpu)); KASSERT(cpu >= 0 && cpu < mp_ncpus, ("invalid cpuid %d", cpu));
@ -1312,13 +1312,13 @@ do { \
return sel; return sel;
} }
struct hv_vmbus_channel ** struct vmbus_channel **
vmbus_subchan_get(struct hv_vmbus_channel *pri_chan, int subchan_cnt) vmbus_subchan_get(struct vmbus_channel *pri_chan, int subchan_cnt)
{ {
struct hv_vmbus_channel **ret, *chan; struct vmbus_channel **ret, *chan;
int i; int i;
ret = malloc(subchan_cnt * sizeof(struct hv_vmbus_channel *), M_TEMP, ret = malloc(subchan_cnt * sizeof(struct vmbus_channel *), M_TEMP,
M_WAITOK); M_WAITOK);
mtx_lock(&pri_chan->ch_subchan_lock); mtx_lock(&pri_chan->ch_subchan_lock);
@ -1344,14 +1344,14 @@ vmbus_subchan_get(struct hv_vmbus_channel *pri_chan, int subchan_cnt)
} }
void void
vmbus_subchan_rel(struct hv_vmbus_channel **subchan, int subchan_cnt __unused) vmbus_subchan_rel(struct vmbus_channel **subchan, int subchan_cnt __unused)
{ {
free(subchan, M_TEMP); free(subchan, M_TEMP);
} }
void void
vmbus_subchan_drain(struct hv_vmbus_channel *pri_chan) vmbus_subchan_drain(struct vmbus_channel *pri_chan)
{ {
mtx_lock(&pri_chan->ch_subchan_lock); mtx_lock(&pri_chan->ch_subchan_lock);
while (pri_chan->ch_subchan_cnt > 0) while (pri_chan->ch_subchan_cnt > 0)
@ -1375,7 +1375,7 @@ vmbus_chan_msgproc(struct vmbus_softc *sc, const struct vmbus_message *msg)
} }
void void
vmbus_chan_set_readbatch(struct hv_vmbus_channel *chan, bool on) vmbus_chan_set_readbatch(struct vmbus_channel *chan, bool on)
{ {
if (!on) if (!on)
chan->ch_flags &= ~VMBUS_CHAN_FLAG_BATCHREAD; chan->ch_flags &= ~VMBUS_CHAN_FLAG_BATCHREAD;
@ -1384,19 +1384,19 @@ vmbus_chan_set_readbatch(struct hv_vmbus_channel *chan, bool on)
} }
uint32_t uint32_t
vmbus_chan_id(const struct hv_vmbus_channel *chan) vmbus_chan_id(const struct vmbus_channel *chan)
{ {
return chan->ch_id; return chan->ch_id;
} }
uint32_t uint32_t
vmbus_chan_subidx(const struct hv_vmbus_channel *chan) vmbus_chan_subidx(const struct vmbus_channel *chan)
{ {
return chan->ch_subidx; return chan->ch_subidx;
} }
bool bool
vmbus_chan_is_primary(const struct hv_vmbus_channel *chan) vmbus_chan_is_primary(const struct vmbus_channel *chan)
{ {
if (VMBUS_CHAN_ISPRIMARY(chan)) if (VMBUS_CHAN_ISPRIMARY(chan))
return true; return true;
@ -1405,7 +1405,7 @@ vmbus_chan_is_primary(const struct hv_vmbus_channel *chan)
} }
const struct hyperv_guid * const struct hyperv_guid *
vmbus_chan_guid_inst(const struct hv_vmbus_channel *chan) vmbus_chan_guid_inst(const struct vmbus_channel *chan)
{ {
return &chan->ch_guid_inst; return &chan->ch_guid_inst;
} }

View File

@ -70,7 +70,7 @@ typedef struct {
uint32_t ring_data_size; /* ring_size */ uint32_t ring_data_size; /* ring_size */
} hv_vmbus_ring_buffer_info; } hv_vmbus_ring_buffer_info;
typedef struct hv_vmbus_channel { struct vmbus_channel {
/* /*
* NOTE: * NOTE:
* Fields before ch_txbr are only accessed on this channel's * Fields before ch_txbr are only accessed on this channel's
@ -142,19 +142,19 @@ typedef struct hv_vmbus_channel {
* channel. * channel.
*/ */
struct mtx ch_subchan_lock; struct mtx ch_subchan_lock;
TAILQ_HEAD(, hv_vmbus_channel) ch_subchans; TAILQ_HEAD(, vmbus_channel) ch_subchans;
int ch_subchan_cnt; int ch_subchan_cnt;
/* If this is a sub-channel */ /* If this is a sub-channel */
TAILQ_ENTRY(hv_vmbus_channel) ch_sublink; /* sub-channel link */ TAILQ_ENTRY(vmbus_channel) ch_sublink; /* sub-channel link */
struct hv_vmbus_channel *ch_prichan; /* owner primary chan */ struct vmbus_channel *ch_prichan; /* owner primary chan */
void *ch_bufring; /* TX+RX bufrings */ void *ch_bufring; /* TX+RX bufrings */
struct hyperv_dma ch_bufring_dma; struct hyperv_dma ch_bufring_dma;
uint32_t ch_bufring_gpadl; uint32_t ch_bufring_gpadl;
struct task ch_detach_task; struct task ch_detach_task;
TAILQ_ENTRY(hv_vmbus_channel) ch_prilink; /* primary chan link */ TAILQ_ENTRY(vmbus_channel) ch_prilink; /* primary chan link */
uint32_t ch_subidx; /* subchan index */ uint32_t ch_subidx; /* subchan index */
volatile uint32_t ch_stflags; /* atomic-op */ volatile uint32_t ch_stflags; /* atomic-op */
/* VMBUS_CHAN_ST_ */ /* VMBUS_CHAN_ST_ */
@ -162,7 +162,7 @@ typedef struct hv_vmbus_channel {
struct hyperv_guid ch_guid_inst; struct hyperv_guid ch_guid_inst;
struct sysctl_ctx_list ch_sysctl_ctx; struct sysctl_ctx_list ch_sysctl_ctx;
} hv_vmbus_channel __aligned(CACHE_LINE_SIZE); } __aligned(CACHE_LINE_SIZE);
#define VMBUS_CHAN_ISPRIMARY(chan) ((chan)->ch_subidx == 0) #define VMBUS_CHAN_ISPRIMARY(chan) ((chan)->ch_subidx == 0)

View File

@ -86,7 +86,7 @@ struct vmbus_softc {
u_long *vmbus_rx_evtflags; u_long *vmbus_rx_evtflags;
/* compat evtflgs from host */ /* compat evtflgs from host */
struct hv_vmbus_channel **vmbus_chmap; struct vmbus_channel **vmbus_chmap;
struct vmbus_msghc_ctx *vmbus_msg_hc; struct vmbus_msghc_ctx *vmbus_msg_hc;
struct vmbus_pcpu_data vmbus_pcpu[MAXCPU]; struct vmbus_pcpu_data vmbus_pcpu[MAXCPU];
@ -115,7 +115,7 @@ struct vmbus_softc {
/* Primary channels */ /* Primary channels */
struct mtx vmbus_prichan_lock; struct mtx vmbus_prichan_lock;
TAILQ_HEAD(, hv_vmbus_channel) vmbus_prichans; TAILQ_HEAD(, vmbus_channel) vmbus_prichans;
}; };
#define VMBUS_FLAG_ATTACHED 0x0001 /* vmbus was attached */ #define VMBUS_FLAG_ATTACHED 0x0001 /* vmbus was attached */
@ -138,14 +138,14 @@ vmbus_get_device(void)
#define VMBUS_PCPU_GET(sc, field, cpu) (sc)->vmbus_pcpu[(cpu)].field #define VMBUS_PCPU_GET(sc, field, cpu) (sc)->vmbus_pcpu[(cpu)].field
#define VMBUS_PCPU_PTR(sc, field, cpu) &(sc)->vmbus_pcpu[(cpu)].field #define VMBUS_PCPU_PTR(sc, field, cpu) &(sc)->vmbus_pcpu[(cpu)].field
struct hv_vmbus_channel; struct vmbus_channel;
struct trapframe; struct trapframe;
struct vmbus_message; struct vmbus_message;
struct vmbus_msghc; struct vmbus_msghc;
void vmbus_handle_intr(struct trapframe *); void vmbus_handle_intr(struct trapframe *);
int vmbus_add_child(struct hv_vmbus_channel *); int vmbus_add_child(struct vmbus_channel *);
int vmbus_delete_child(struct hv_vmbus_channel *); int vmbus_delete_child(struct vmbus_channel *);
void vmbus_et_intr(struct trapframe *); void vmbus_et_intr(struct trapframe *);
uint32_t vmbus_gpadl_alloc(struct vmbus_softc *); uint32_t vmbus_gpadl_alloc(struct vmbus_softc *);