199a2dd95SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause
299a2dd95SBruce Richardson * Copyright(c) 2020 Mellanox Technologies, Ltd
399a2dd95SBruce Richardson */
499a2dd95SBruce Richardson
599a2dd95SBruce Richardson #include <rte_string_fns.h>
699a2dd95SBruce Richardson
799a2dd95SBruce Richardson #include "eal_private.h"
899a2dd95SBruce Richardson #include "eal_memcfg.h"
999a2dd95SBruce Richardson
1099a2dd95SBruce Richardson /* early configuration structure, when memory config is not mmapped */
11*a4ce111cSDavid Marchand static struct rte_mem_config early_mem_config = {
12*a4ce111cSDavid Marchand .mlock = RTE_RWLOCK_INITIALIZER,
13*a4ce111cSDavid Marchand .qlock = RTE_RWLOCK_INITIALIZER,
14*a4ce111cSDavid Marchand .mplock = RTE_RWLOCK_INITIALIZER,
15*a4ce111cSDavid Marchand .tlock = RTE_SPINLOCK_INITIALIZER,
16*a4ce111cSDavid Marchand .ethdev_lock = RTE_SPINLOCK_INITIALIZER,
17*a4ce111cSDavid Marchand .memory_hotplug_lock = RTE_RWLOCK_INITIALIZER,
18*a4ce111cSDavid Marchand };
1999a2dd95SBruce Richardson
2099a2dd95SBruce Richardson /* Address of global and public configuration */
2199a2dd95SBruce Richardson static struct rte_config rte_config = {
2299a2dd95SBruce Richardson .mem_config = &early_mem_config,
2399a2dd95SBruce Richardson };
2499a2dd95SBruce Richardson
2599a2dd95SBruce Richardson /* platform-specific runtime dir */
2699a2dd95SBruce Richardson static char runtime_dir[PATH_MAX];
2799a2dd95SBruce Richardson
2899a2dd95SBruce Richardson /* internal configuration */
2999a2dd95SBruce Richardson static struct internal_config internal_config;
3099a2dd95SBruce Richardson
3199a2dd95SBruce Richardson const char *
rte_eal_get_runtime_dir(void)3299a2dd95SBruce Richardson rte_eal_get_runtime_dir(void)
3399a2dd95SBruce Richardson {
3499a2dd95SBruce Richardson return runtime_dir;
3599a2dd95SBruce Richardson }
3699a2dd95SBruce Richardson
3799a2dd95SBruce Richardson int
eal_set_runtime_dir(const char * run_dir)3836514d8dSStephen Hemminger eal_set_runtime_dir(const char *run_dir)
3999a2dd95SBruce Richardson {
4036514d8dSStephen Hemminger if (strlcpy(runtime_dir, run_dir, PATH_MAX) >= PATH_MAX) {
41ae67895bSDavid Marchand EAL_LOG(ERR, "Runtime directory string too long");
4299a2dd95SBruce Richardson return -1;
4399a2dd95SBruce Richardson }
4499a2dd95SBruce Richardson
4599a2dd95SBruce Richardson return 0;
4699a2dd95SBruce Richardson }
4799a2dd95SBruce Richardson
4899a2dd95SBruce Richardson /* Return a pointer to the configuration structure */
4999a2dd95SBruce Richardson struct rte_config *
rte_eal_get_configuration(void)5099a2dd95SBruce Richardson rte_eal_get_configuration(void)
5199a2dd95SBruce Richardson {
5299a2dd95SBruce Richardson return &rte_config;
5399a2dd95SBruce Richardson }
5499a2dd95SBruce Richardson
5599a2dd95SBruce Richardson /* Return a pointer to the internal configuration structure */
5699a2dd95SBruce Richardson struct internal_config *
eal_get_internal_configuration(void)5799a2dd95SBruce Richardson eal_get_internal_configuration(void)
5899a2dd95SBruce Richardson {
5999a2dd95SBruce Richardson return &internal_config;
6099a2dd95SBruce Richardson }
6199a2dd95SBruce Richardson
6299a2dd95SBruce Richardson enum rte_iova_mode
rte_eal_iova_mode(void)6399a2dd95SBruce Richardson rte_eal_iova_mode(void)
6499a2dd95SBruce Richardson {
6599a2dd95SBruce Richardson return rte_eal_get_configuration()->iova_mode;
6699a2dd95SBruce Richardson }
6799a2dd95SBruce Richardson
68f3ca33bbSSrikanth Yalavarthi /* Get the EAL base address */
69f3ca33bbSSrikanth Yalavarthi uint64_t
rte_eal_get_baseaddr(void)70f3ca33bbSSrikanth Yalavarthi rte_eal_get_baseaddr(void)
71f3ca33bbSSrikanth Yalavarthi {
72f3ca33bbSSrikanth Yalavarthi return (internal_config.base_virtaddr != 0) ?
73f3ca33bbSSrikanth Yalavarthi (uint64_t) internal_config.base_virtaddr :
74f3ca33bbSSrikanth Yalavarthi eal_get_baseaddr();
75f3ca33bbSSrikanth Yalavarthi }
76f3ca33bbSSrikanth Yalavarthi
7799a2dd95SBruce Richardson enum rte_proc_type_t
rte_eal_process_type(void)7899a2dd95SBruce Richardson rte_eal_process_type(void)
7999a2dd95SBruce Richardson {
8099a2dd95SBruce Richardson return rte_config.process_type;
8199a2dd95SBruce Richardson }
8299a2dd95SBruce Richardson
8399a2dd95SBruce Richardson /* Return user provided mbuf pool ops name */
8499a2dd95SBruce Richardson const char *
rte_eal_mbuf_user_pool_ops(void)8599a2dd95SBruce Richardson rte_eal_mbuf_user_pool_ops(void)
8699a2dd95SBruce Richardson {
8799a2dd95SBruce Richardson return internal_config.user_mbuf_pool_ops_name;
8899a2dd95SBruce Richardson }
8999a2dd95SBruce Richardson
9099a2dd95SBruce Richardson /* return non-zero if hugepages are enabled. */
9199a2dd95SBruce Richardson int
rte_eal_has_hugepages(void)9299a2dd95SBruce Richardson rte_eal_has_hugepages(void)
9399a2dd95SBruce Richardson {
9499a2dd95SBruce Richardson return !internal_config.no_hugetlbfs;
9599a2dd95SBruce Richardson }
9699a2dd95SBruce Richardson
9799a2dd95SBruce Richardson int
rte_eal_has_pci(void)9899a2dd95SBruce Richardson rte_eal_has_pci(void)
9999a2dd95SBruce Richardson {
10099a2dd95SBruce Richardson return !internal_config.no_pci;
10199a2dd95SBruce Richardson }
102