X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fbus%2Fdpaa%2Fdpaa_bus.c;h=f39d6e20923952ba1ea18d095dbcefcb54c01101;hb=a86cb7e259ca5efc5fee4895619d4dbd0fbc6ac2;hp=c94c72106f2c0b6e40a338cd62d53ffa34abd624;hpb=cb056611a8ed9ab9024f3b91bf26e97255194514;p=dpdk.git diff --git a/drivers/bus/dpaa/dpaa_bus.c b/drivers/bus/dpaa/dpaa_bus.c index c94c72106f..f39d6e2092 100644 --- a/drivers/bus/dpaa/dpaa_bus.c +++ b/drivers/bus/dpaa/dpaa_bus.c @@ -32,6 +32,7 @@ #include #include #include +#include #include #include @@ -55,6 +56,9 @@ unsigned int dpaa_svr_family; RTE_DEFINE_PER_LCORE(struct dpaa_portal *, dpaa_io); +#define DPAA_SEQN_DYNFIELD_NAME "dpaa_seqn_dynfield" +int dpaa_seqn_dynfield_offset = -1; + struct fm_eth_port_cfg * dpaa_get_eth_port_cfg(int dev_id) { @@ -251,6 +255,11 @@ dpaa_clean_device_list(void) int rte_dpaa_portal_init(void *arg) { + static const struct rte_mbuf_dynfield dpaa_seqn_dynfield_desc = { + .name = DPAA_SEQN_DYNFIELD_NAME, + .size = sizeof(dpaa_seqn_t), + .align = __alignof__(dpaa_seqn_t), + }; unsigned int cpu, lcore = rte_lcore_id(); int ret; @@ -264,6 +273,13 @@ int rte_dpaa_portal_init(void *arg) cpu = rte_lcore_to_cpu_id(lcore); + dpaa_seqn_dynfield_offset = + rte_mbuf_dynfield_register(&dpaa_seqn_dynfield_desc); + if (dpaa_seqn_dynfield_offset < 0) { + DPAA_BUS_LOG(ERR, "Failed to register mbuf field for dpaa sequence number\n"); + return -rte_errno; + } + /* Initialise bman thread portals */ ret = bman_thread_init(); if (ret) { @@ -369,12 +385,10 @@ dpaa_portal_finish(void *arg) } static int -rte_dpaa_bus_parse(const char *name, void *out_name) +rte_dpaa_bus_parse(const char *name, void *out) { - int i, j; - int max_fman = 2, max_macs = 16; - char *dup_name; - char *sep = NULL; + unsigned int i, j; + size_t delta; /* There are two ways of passing device name, with and without * separator. "dpaa_bus:fm1-mac3" with separator, and "fm1-mac3" @@ -383,46 +397,36 @@ rte_dpaa_bus_parse(const char *name, void *out_name) */ DPAA_BUS_DEBUG("Parse device name (%s)", name); - /* Check for dpaa_bus:fm1-mac3 style */ - dup_name = strdup(name); - sep = strchr(dup_name, ':'); - if (!sep) - /* If not, check for name=fm1-mac3 style */ - sep = strchr(dup_name, '='); + delta = 0; + if (strncmp(name, "dpaa_bus:", 9) == 0) { + delta = 9; + } else if (strncmp(name, "name=", 5) == 0) { + delta = 5; + } - if (sep) - /* jump over the seprator */ - sep = (char *) (sep + 1); - else - sep = dup_name; - - for (i = 0; i < max_fman; i++) { - for (j = 0; j < max_macs; j++) { - char fm_name[16]; - snprintf(fm_name, 16, "fm%d-mac%d", i, j); - if (strcmp(fm_name, sep) == 0) { - if (out_name) - strcpy(out_name, sep); - free(dup_name); - return 0; - } - } + if (sscanf(&name[delta], "fm%u-mac%u", &i, &j) != 2 || + i >= 2 || j >= 16) { + return -EINVAL; } - for (i = 0; i < RTE_LIBRTE_DPAA_MAX_CRYPTODEV; i++) { - char sec_name[16]; - - snprintf(sec_name, 16, "dpaa_sec-%d", i+1); - if (strcmp(sec_name, sep) == 0) { - if (out_name) - strcpy(out_name, sep); - free(dup_name); - return 0; - } + if (out != NULL) { + char *out_name = out; + const size_t max_name_len = sizeof("fm.-mac..") - 1; + + /* Do not check for truncation, either name ends with + * '\0' or the device name is followed by parameters and there + * will be a ',' instead. Not copying past this comma is not an + * error. + */ + strlcpy(out_name, &name[delta], max_name_len + 1); + + /* Second digit of mac%u could instead be ','. */ + if ((strlen(out_name) == max_name_len) && + out_name[max_name_len] == ',') + out_name[max_name_len] = '\0'; } - free(dup_name); - return -EINVAL; + return 0; } #define DPAA_DEV_PATH1 "/sys/devices/platform/soc/soc:fsl,dpaa" @@ -568,7 +572,7 @@ rte_dpaa_bus_probe(void) struct rte_dpaa_driver *drv; FILE *svr_file = NULL; unsigned int svr_ver; - int probe_all = rte_dpaa_bus.bus.conf.scan_mode != RTE_BUS_SCAN_WHITELIST; + int probe_all = rte_dpaa_bus.bus.conf.scan_mode != RTE_BUS_SCAN_ALLOWLIST; static int process_once; /* If DPAA bus is not present nothing needs to be done */ @@ -630,13 +634,12 @@ rte_dpaa_bus_probe(void) if (!drv->probe || (dev->device.devargs && - dev->device.devargs->policy == RTE_DEV_BLACKLISTED)) + dev->device.devargs->policy == RTE_DEV_BLOCKED)) continue; if (probe_all || (dev->device.devargs && - dev->device.devargs->policy == - RTE_DEV_WHITELISTED)) { + dev->device.devargs->policy == RTE_DEV_ALLOWED)) { ret = drv->probe(drv, dev); if (ret) { DPAA_BUS_ERR("unable to probe:%s",