MCPcopy Create free account
hub / github.com/F-Stack/f-stack / rte_devargs_parse

Function rte_devargs_parse

dpdk/lib/eal/common/eal_common_devargs.c:183–247  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

181}
182
183int
184rte_devargs_parse(struct rte_devargs *da, const char *dev)
185{
186 struct rte_bus *bus = NULL;
187 const char *devname;
188 const size_t maxlen = sizeof(da->name);
189 size_t i;
190
191 if (da == NULL)
192 return -EINVAL;
193 memset(da, 0, sizeof(*da));
194
195 /* First parse according global device syntax. */
196 if (rte_devargs_layers_parse(da, dev) == 0) {
197 if (da->bus != NULL || da->cls != NULL)
198 return 0;
199 rte_devargs_reset(da);
200 }
201
202 /* Otherwise fallback to legacy syntax: */
203
204 /* Retrieve eventual bus info */
205 do {
206 devname = dev;
207 bus = rte_bus_find(bus, bus_name_cmp, dev);
208 if (bus == NULL)
209 break;
210 devname = dev + strlen(bus->name) + 1;
211 if (rte_bus_find_by_device_name(devname) == bus)
212 break;
213 } while (1);
214 /* Store device name */
215 i = 0;
216 while (devname[i] != '\0' && devname[i] != ',') {
217 da->name[i] = devname[i];
218 i++;
219 if (i == maxlen) {
220 RTE_LOG(WARNING, EAL, "Parsing \"%s\": device name should be shorter than %zu\n",
221 dev, maxlen);
222 da->name[i - 1] = '\0';
223 return -EINVAL;
224 }
225 }
226 da->name[i] = '\0';
227 if (bus == NULL) {
228 bus = rte_bus_find_by_device_name(da->name);
229 if (bus == NULL) {
230 RTE_LOG(ERR, EAL, "failed to parse device \"%s\"\n",
231 da->name);
232 return -EFAULT;
233 }
234 }
235 da->bus = bus;
236 /* Parse eventual device arguments */
237 if (devname[i] == ',')
238 da->data = strdup(&devname[i + 1]);
239 else
240 da->data = strdup("");

Callers 12

rte_eth_iterator_initFunction · 0.85
__handle_primary_requestFunction · 0.85
local_dev_probeFunction · 0.85
rte_devargs_parsefFunction · 0.85
rte_devargs_addFunction · 0.85
rte_pmd_failsafe_probeFunction · 0.85
fs_bus_initFunction · 0.85
fs_parse_deviceFunction · 0.85
netvsc_hotadd_callbackFunction · 0.85
test_valid_devargs_casesFunction · 0.85
test_invalid_devargsFunction · 0.85

Calls 6

memsetFunction · 0.85
rte_devargs_layers_parseFunction · 0.85
rte_devargs_resetFunction · 0.85
rte_bus_findFunction · 0.85
strdupFunction · 0.85

Tested by 2

test_valid_devargs_casesFunction · 0.68
test_invalid_devargsFunction · 0.68