summaryrefslogtreecommitdiffstats
path: root/sys/dev/hyperv/utilities/hv_kvp.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/hyperv/utilities/hv_kvp.c')
-rw-r--r--sys/dev/hyperv/utilities/hv_kvp.c32
1 files changed, 16 insertions, 16 deletions
diff --git a/sys/dev/hyperv/utilities/hv_kvp.c b/sys/dev/hyperv/utilities/hv_kvp.c
index ebf948c..9a6d1f8 100644
--- a/sys/dev/hyperv/utilities/hv_kvp.c
+++ b/sys/dev/hyperv/utilities/hv_kvp.c
@@ -69,6 +69,7 @@ __FBSDID("$FreeBSD$");
#include "hv_util.h"
#include "unicode.h"
#include "hv_kvp.h"
+#include "vmbus_if.h"
/* hv_kvp defines */
#define BUFFERSIZE sizeof(struct hv_kvp_msg)
@@ -89,7 +90,7 @@ static int hv_kvp_log = 0;
log(LOG_INFO, "hv_kvp: " __VA_ARGS__); \
} while (0)
-static hv_guid service_guid = { .data =
+static const hv_guid service_guid = { .data =
{0xe7, 0xf4, 0xa0, 0xa9, 0x45, 0x5a, 0x96, 0x4d,
0xb8, 0x27, 0x8a, 0x84, 0x1e, 0x8c, 0x3, 0xe6} };
@@ -307,10 +308,6 @@ hv_kvp_convert_utf16_ipinfo_to_utf8(struct hv_kvp_ip_msg *host_ip_msg,
{
int err_ip, err_subnet, err_gway, err_dns, err_adap;
int UNUSED_FLAG = 1;
- struct hv_device *hv_dev; /* GUID Data Structure */
- hn_softc_t *sc; /* hn softc structure */
- char buf[HYPERV_GUID_STRLEN];
-
device_t *devs;
int devcnt;
@@ -332,12 +329,18 @@ hv_kvp_convert_utf16_ipinfo_to_utf8(struct hv_kvp_ip_msg *host_ip_msg,
if (devclass_get_devices(devclass_find("hn"), &devs, &devcnt) == 0) {
for (devcnt = devcnt - 1; devcnt >= 0; devcnt--) {
- sc = device_get_softc(devs[devcnt]);
-
- /* Trying to find GUID of Network Device */
- hv_dev = sc->hn_dev_obj;
+ /* XXX access other driver's softc? are you kidding? */
+ device_t dev = devs[devcnt];
+ struct hn_softc *sc = device_get_softc(dev);
+ struct hv_vmbus_channel *chan;
+ char buf[HYPERV_GUID_STRLEN];
- hyperv_guid2str(&hv_dev->device_id, buf, sizeof(buf));
+ /*
+ * Trying to find GUID of Network Device
+ * TODO: need vmbus interface.
+ */
+ chan = vmbus_get_channel(dev);
+ hyperv_guid2str(&chan->ch_guid_inst, buf, sizeof(buf));
if (strncmp(buf, (char *)umsg->body.kvp_ip_val.adapter_id,
HYPERV_GUID_STRLEN - 1) == 0) {
@@ -572,7 +575,7 @@ hv_kvp_respond_host(hv_kvp_sc *sc, int error)
hv_icmsg_hdrp->status = error;
hv_icmsg_hdrp->icflags = HV_ICMSGHDRFLAG_TRANSACTION | HV_ICMSGHDRFLAG_RESPONSE;
- error = hv_vmbus_channel_send_packet(sc->util_sc.hv_dev->channel,
+ error = hv_vmbus_channel_send_packet(sc->util_sc.channel,
sc->rcv_buf,
sc->host_msg_len, sc->host_msg_id,
HV_VMBUS_PACKET_TYPE_DATA_IN_BAND, 0);
@@ -623,7 +626,7 @@ hv_kvp_process_request(void *context, int pending)
sc = (hv_kvp_sc*)context;
kvp_buf = sc->util_sc.receive_buffer;;
- channel = sc->util_sc.hv_dev->channel;
+ channel = sc->util_sc.channel;
ret = hv_vmbus_channel_recv_packet(channel, kvp_buf, 2 * PAGE_SIZE,
&recvlen, &requestid);
@@ -865,16 +868,13 @@ hv_kvp_dev_daemon_poll(struct cdev *dev, int events, struct thread *td)
static int
hv_kvp_probe(device_t dev)
{
- const char *p = vmbus_get_type(dev);
-
if (resource_disabled("hvkvp", 0))
return ENXIO;
- if (!memcmp(p, &service_guid, sizeof(hv_guid))) {
+ if (VMBUS_PROBE_GUID(device_get_parent(dev), dev, &service_guid) == 0) {
device_set_desc(dev, "Hyper-V KVP Service");
return BUS_PROBE_DEFAULT;
}
-
return ENXIO;
}
OpenPOWER on IntegriCloud