All resource values are published by HV_UIO driver as sysctl key value pairs and they are read at a later point of the code flow
Signed-off-by: Srikanth Kaka <srikant...@oneconvergence.com> Signed-off-by: Vag Singh <vag.si...@oneconvergence.com> Signed-off-by: Anand Thulasiram <av...@juniper.net> --- drivers/bus/vmbus/freebsd/vmbus_bus.c | 127 -------------------------- 1 file changed, 127 deletions(-) diff --git a/drivers/bus/vmbus/freebsd/vmbus_bus.c b/drivers/bus/vmbus/freebsd/vmbus_bus.c index 8eb428a154..9b23b1131c 100644 --- a/drivers/bus/vmbus/freebsd/vmbus_bus.c +++ b/drivers/bus/vmbus/freebsd/vmbus_bus.c @@ -55,142 +55,15 @@ parse_sysfs_uuid(const char *filename, rte_uuid_t uu) return 0; } -static int -get_sysfs_string(const char *filename, char *buf, size_t buflen) -{ - char *cp; - FILE *f; - - f = fopen(filename, "r"); - if (f == NULL) { - VMBUS_LOG(ERR, "cannot open sysfs value %s:%s", - filename, strerror(errno)); - return -1; - } - - if (fgets(buf, buflen, f) == NULL) { - VMBUS_LOG(ERR, "cannot read sysfs value %s", - filename); - fclose(f); - return -1; - } - fclose(f); - - /* remove trailing newline */ - cp = memchr(buf, '\n', buflen); - if (cp) - *cp = '\0'; - - return 0; -} - -static int -vmbus_get_uio_dev(const struct rte_vmbus_device *dev, - char *dstbuf, size_t buflen) -{ - char dirname[PATH_MAX]; - unsigned int uio_num; - struct dirent *e; - DIR *dir; - - /* Assume recent kernel where uio is in uio/uioX */ - snprintf(dirname, sizeof(dirname), - SYSFS_VMBUS_DEVICES "/%s/uio", dev->device.name); - - dir = opendir(dirname); - if (dir == NULL) - return -1; /* Not a UIO device */ - - /* take the first file starting with "uio" */ - while ((e = readdir(dir)) != NULL) { - const int prefix_len = 3; - char *endptr; - - if (strncmp(e->d_name, "uio", prefix_len) != 0) - continue; - - /* try uio%d */ - errno = 0; - uio_num = strtoull(e->d_name + prefix_len, &endptr, 10); - if (errno == 0 && endptr != (e->d_name + prefix_len)) { - snprintf(dstbuf, buflen, "%s/uio%u", dirname, uio_num); - break; - } - } - closedir(dir); - - if (e == NULL) - return -1; - - return uio_num; -} - -/* Check map names with kernel names */ -static const char *map_names[VMBUS_MAX_RESOURCE] = { - [HV_TXRX_RING_MAP] = "txrx_rings", - [HV_INT_PAGE_MAP] = "int_page", - [HV_MON_PAGE_MAP] = "monitor_page", - [HV_RECV_BUF_MAP] = "recv:", - [HV_SEND_BUF_MAP] = "send:", -}; - - /* map the resources of a vmbus device in virtual memory */ int rte_vmbus_map_device(struct rte_vmbus_device *dev) { - char uioname[PATH_MAX], filename[PATH_MAX]; - char dirname[PATH_MAX], mapname[64]; - int i; - - dev->uio_num = vmbus_get_uio_dev(dev, uioname, sizeof(uioname)); if (dev->uio_num < 0) { VMBUS_LOG(DEBUG, "Not managed by UIO driver, skipped"); return 1; } - /* Extract resource value */ - for (i = 0; i < VMBUS_MAX_RESOURCE; i++) { - struct rte_mem_resource *res = &dev->resource[i]; - unsigned long len, gpad = 0; - char *cp; - - snprintf(dirname, sizeof(dirname), - "%s/maps/map%d", uioname, i); - - snprintf(filename, sizeof(filename), - "%s/name", dirname); - - if (get_sysfs_string(filename, mapname, sizeof(mapname)) < 0) { - VMBUS_LOG(ERR, "could not read %s", filename); - return -1; - } - - if (strncmp(map_names[i], mapname, strlen(map_names[i])) != 0) { - VMBUS_LOG(ERR, - "unexpected resource %s (expected %s)", - mapname, map_names[i]); - return -1; - } - - snprintf(filename, sizeof(filename), - "%s/size", dirname); - if (eal_parse_sysfs_value(filename, &len) < 0) { - VMBUS_LOG(ERR, - "could not read %s", filename); - return -1; - } - res->len = len; - - /* both send and receive buffers have gpad in name */ - cp = memchr(mapname, ':', sizeof(mapname)); - if (cp) - gpad = strtoul(cp+1, NULL, 0); - - /* put the GPAD value in physical address */ - res->phys_addr = gpad; - } - return vmbus_uio_map_resource(dev); } -- 2.30.2