| 82 | } |
| 83 | |
| 84 | int |
| 85 | rte_pci_devargs_parse(struct rte_devargs *da) |
| 86 | { |
| 87 | struct rte_kvargs *kvargs; |
| 88 | const char *addr_str; |
| 89 | struct rte_pci_addr addr; |
| 90 | int ret = 0; |
| 91 | |
| 92 | if (da == NULL || da->bus_str == NULL) |
| 93 | return 0; |
| 94 | |
| 95 | kvargs = rte_kvargs_parse(da->bus_str, NULL); |
| 96 | if (kvargs == NULL) { |
| 97 | RTE_LOG(ERR, EAL, "cannot parse argument list: %s\n", |
| 98 | da->bus_str); |
| 99 | ret = -ENODEV; |
| 100 | goto out; |
| 101 | } |
| 102 | |
| 103 | addr_str = rte_kvargs_get(kvargs, pci_params_keys[RTE_PCI_PARAM_ADDR]); |
| 104 | if (addr_str == NULL) { |
| 105 | RTE_LOG(DEBUG, EAL, "No PCI address specified using '%s=<id>' in: %s\n", |
| 106 | pci_params_keys[RTE_PCI_PARAM_ADDR], da->bus_str); |
| 107 | goto out; |
| 108 | } |
| 109 | |
| 110 | ret = rte_pci_addr_parse(addr_str, &addr); |
| 111 | if (ret != 0) { |
| 112 | RTE_LOG(ERR, EAL, "PCI address invalid: %s\n", da->bus_str); |
| 113 | ret = -EINVAL; |
| 114 | goto out; |
| 115 | } |
| 116 | |
| 117 | rte_pci_device_name(&addr, da->name, sizeof(da->name)); |
| 118 | |
| 119 | out: |
| 120 | rte_kvargs_free(kvargs); |
| 121 | if (ret != 0) |
| 122 | rte_errno = -ret; |
| 123 | return ret; |
| 124 | } |
nothing calls this directly
no test coverage detected