a3146db2555304aa823aadc7a29b10ae00f3ba28
[dpdk.git] / drivers / common / sfc_efx / sfc_efx.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  *
3  * Copyright(c) 2019-2021 Xilinx, Inc.
4  * Copyright(c) 2019 Solarflare Communications Inc.
5  *
6  * This software was jointly developed between OKTET Labs (under contract
7  * for Solarflare) and Solarflare Communications, Inc.
8  */
9
10 #include <string.h>
11 #include <rte_log.h>
12 #include <rte_kvargs.h>
13 #include <rte_devargs.h>
14
15 #include "sfc_efx_log.h"
16 #include "sfc_efx.h"
17
18 uint32_t sfc_efx_logtype;
19
20 static int
21 sfc_efx_kvarg_dev_class_handler(__rte_unused const char *key,
22                                 const char *class_str, void *opaque)
23 {
24         enum sfc_efx_dev_class *dev_class = opaque;
25
26         if (class_str == NULL)
27                 return *dev_class;
28
29         if (strcmp(class_str, "vdpa") == 0) {
30                 *dev_class = SFC_EFX_DEV_CLASS_VDPA;
31         } else if (strcmp(class_str, "net") == 0) {
32                 *dev_class = SFC_EFX_DEV_CLASS_NET;
33         } else {
34                 SFC_EFX_LOG(ERR, "Unsupported class %s.", class_str);
35                 *dev_class = SFC_EFX_DEV_CLASS_INVALID;
36         }
37
38         return 0;
39 }
40
41 enum sfc_efx_dev_class
42 sfc_efx_dev_class_get(struct rte_devargs *devargs)
43 {
44         struct rte_kvargs *kvargs;
45         const char *key = SFC_EFX_KVARG_DEV_CLASS;
46         enum sfc_efx_dev_class dev_class = SFC_EFX_DEV_CLASS_NET;
47
48         if (devargs == NULL)
49                 return dev_class;
50
51         kvargs = rte_kvargs_parse(devargs->args, NULL);
52         if (kvargs == NULL)
53                 return dev_class;
54
55         if (rte_kvargs_count(kvargs, key) != 0) {
56                 rte_kvargs_process(kvargs, key, sfc_efx_kvarg_dev_class_handler,
57                                    &dev_class);
58         }
59
60         rte_kvargs_free(kvargs);
61
62         return dev_class;
63 }
64
65 RTE_INIT(sfc_efx_register_logtype)
66 {
67         int ret;
68
69         ret = rte_log_register_type_and_pick_level("pmd.common.sfc_efx",
70                                                    RTE_LOG_NOTICE);
71         sfc_efx_logtype = (ret < 0) ? RTE_LOGTYPE_PMD : ret;
72 }