| 78 | } |
| 79 | |
| 80 | static int |
| 81 | dev_add(const char *dev_name) |
| 82 | { |
| 83 | struct rte_platform_device *pdev, *tmp; |
| 84 | char path[PATH_MAX]; |
| 85 | unsigned long val; |
| 86 | |
| 87 | pdev = calloc(1, sizeof(*pdev)); |
| 88 | if (pdev == NULL) |
| 89 | return -ENOMEM; |
| 90 | |
| 91 | rte_strscpy(pdev->name, dev_name, sizeof(pdev->name)); |
| 92 | pdev->device.name = pdev->name; |
| 93 | pdev->device.devargs = dev_devargs(dev_name); |
| 94 | pdev->device.bus = &platform_bus.bus; |
| 95 | snprintf(path, sizeof(path), PLATFORM_BUS_DEVICES_PATH "/%s/numa_node", dev_name); |
| 96 | pdev->device.numa_node = eal_parse_sysfs_value(path, &val) ? rte_socket_id() : val; |
| 97 | |
| 98 | FOREACH_DEVICE_ON_PLATFORM_BUS(tmp) { |
| 99 | if (!strcmp(tmp->name, pdev->name)) { |
| 100 | PLATFORM_LOG(INFO, "device %s already added\n", pdev->name); |
| 101 | |
| 102 | if (tmp->device.devargs != pdev->device.devargs) |
| 103 | rte_devargs_remove(pdev->device.devargs); |
| 104 | |
| 105 | free(pdev); |
| 106 | return -EEXIST; |
| 107 | } |
| 108 | } |
| 109 | |
| 110 | TAILQ_INSERT_HEAD(&platform_bus.device_list, pdev, next); |
| 111 | |
| 112 | PLATFORM_LOG(INFO, "adding device %s to the list\n", dev_name); |
| 113 | |
| 114 | return 0; |
| 115 | } |
| 116 | |
| 117 | static char * |
| 118 | dev_kernel_driver_name(const char *dev_name) |
no test coverage detected