199 lines
4.1 KiB
C
Raw Normal View History

/* SPDX-License-Identifier: BSD-3-Clause
* Copyright(c) 2010-2014 Intel Corporation
*/
#ifndef _EAL_PRIVATE_H_
#define _EAL_PRIVATE_H_
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
/**
* Initialize the memzone subsystem (private to eal).
*
* @return
* - 0 on success
* - Negative on error
*/
int rte_eal_memzone_init(void);
/**
log: respect logger configured before EAL init Before this patch, application-specific loggers could not be installed before rte_eal_init completed (the initialization process called rte_openlog_stream, overwriting any previously installed logger). This made it impossible for an application to capture the initial log messages generated during rte_eal_init. This patch changes initialization so that information from a previous call to rte_openlog_stream is not lost. Specifically: * The default log stream is now maintained separately from an application-specific log stream installed with rte_openlog_stream. * rte_eal_common_log_init has been renamed to eal_log_set_default, since this is all it does. It no longer invokes rte_openlog_stream; it just updates the default stream. Also, this method now returns void, rather than int, since there are no errors. This patch also removes the "early log" mechanism and cleans up the log initialization mechanism: * The default log stream defaults to stderr on all platforms if eal_log_set_default hasn't been invoked (Linux used to use stdout during the first part of initialization). * Removed rte_eal_log_early_init; all of the desired functionality can be achieved by calling eal_log_set_default. * Removed lib/librte_eal/bsdapp/eal/eal_log.c: it contained only one function, rte_eal_log_init, which is not needed or invoked for BSD. * Removed declaration for eal_default_log_stream in rte_log.h (it's now private to eal_common_log.c). * Moved call to rte_eal_log_init earlier in rte_eal_init for Linux, so that it starts using the preferrred log ASAP. Signed-off-by: John Ousterhout <ouster@cs.stanford.edu>
2016-10-12 12:38:32 -07:00
* Common log initialization function (private to eal). Determines
* where log data is written when no call to rte_openlog_stream is
* in effect.
*
* @param default_log
* The default log stream to be used.
* @return
* - 0 on success
* - Negative on error
*/
log: respect logger configured before EAL init Before this patch, application-specific loggers could not be installed before rte_eal_init completed (the initialization process called rte_openlog_stream, overwriting any previously installed logger). This made it impossible for an application to capture the initial log messages generated during rte_eal_init. This patch changes initialization so that information from a previous call to rte_openlog_stream is not lost. Specifically: * The default log stream is now maintained separately from an application-specific log stream installed with rte_openlog_stream. * rte_eal_common_log_init has been renamed to eal_log_set_default, since this is all it does. It no longer invokes rte_openlog_stream; it just updates the default stream. Also, this method now returns void, rather than int, since there are no errors. This patch also removes the "early log" mechanism and cleans up the log initialization mechanism: * The default log stream defaults to stderr on all platforms if eal_log_set_default hasn't been invoked (Linux used to use stdout during the first part of initialization). * Removed rte_eal_log_early_init; all of the desired functionality can be achieved by calling eal_log_set_default. * Removed lib/librte_eal/bsdapp/eal/eal_log.c: it contained only one function, rte_eal_log_init, which is not needed or invoked for BSD. * Removed declaration for eal_default_log_stream in rte_log.h (it's now private to eal_common_log.c). * Moved call to rte_eal_log_init earlier in rte_eal_init for Linux, so that it starts using the preferrred log ASAP. Signed-off-by: John Ousterhout <ouster@cs.stanford.edu>
2016-10-12 12:38:32 -07:00
void eal_log_set_default(FILE *default_log);
/**
* Fill configuration with number of physical and logical processors
*
* This function is private to EAL.
*
* Parse /proc/cpuinfo to get the number of physical and logical
* processors on the machine.
*
* @return
* 0 on success, negative on error
*/
int rte_eal_cpu_init(void);
/**
* Map memory
*
* This function is private to EAL.
*
* Fill configuration structure with these infos, and return 0 on success.
*
* @return
* 0 on success, negative on error
*/
int rte_eal_memory_init(void);
/**
* Configure timers
*
* This function is private to EAL.
*
* Mmap memory areas used by HPET (high precision event timer) that will
* provide our time reference, and configure the TSC frequency also for it
* to be used as a reference.
*
* @return
* 0 on success, negative on error
*/
int rte_eal_timer_init(void);
/**
* Init the default log stream
*
* This function is private to EAL.
*
* @return
* 0 on success, negative on error
*/
int rte_eal_log_init(const char *id, int facility);
/**
* Init tail queues for non-EAL library structures. This is to allow
* the rings, mempools, etc. lists to be shared among multiple processes
*
* This function is private to EAL
*
* @return
* 0 on success, negative on error
*/
int rte_eal_tailqs_init(void);
/**
* Init interrupt handling.
*
* This function is private to EAL.
*
* @return
* 0 on success, negative on error
*/
int rte_eal_intr_init(void);
/**
* Init alarm mechanism. This is to allow a callback be called after
* specific time.
*
* This function is private to EAL.
*
* @return
* 0 on success, negative on error
*/
int rte_eal_alarm_init(void);
/**
* Function is to check if the kernel module(like, vfio, vfio_iommu_type1,
* etc.) loaded.
*
* @param module_name
* The module's name which need to be checked
*
* @return
* -1 means some error happens(NULL pointer or open failure)
* 0 means the module not loaded
* 1 means the module loaded
*/
int rte_eal_check_module(const char *module_name);
/**
* Get cpu core_id.
*
* This function is private to the EAL.
*/
unsigned eal_cpu_core_id(unsigned lcore_id);
/**
* Check if cpu is present.
*
* This function is private to the EAL.
*/
int eal_cpu_detected(unsigned lcore_id);
/**
* Set TSC frequency from precise value or estimation
*
* This function is private to the EAL.
*/
void set_tsc_freq(void);
/**
* Get precise TSC frequency from system
*
* This function is private to the EAL.
*/
uint64_t get_tsc_freq(void);
/**
* Get TSC frequency if the architecture supports.
*
* This function is private to the EAL.
*
* @return
* The number of TSC cycles in one second.
* Returns zero if the architecture support is not available.
*/
uint64_t get_tsc_freq_arch(void);
/**
* Prepare physical memory mapping
* i.e. hugepages on Linux and
* contigmem on BSD.
*
* This function is private to the EAL.
*/
int rte_eal_hugepage_init(void);
/**
* Creates memory mapping in secondary process
* i.e. hugepages on Linux and
* contigmem on BSD.
*
* This function is private to the EAL.
*/
int rte_eal_hugepage_attach(void);
/**
* Find a bus capable of identifying a device.
*
* @param str
* A device identifier (PCI address, virtual PMD name, ...).
*
* @return
* A valid bus handle if found.
* NULL if no bus is able to parse this device.
*/
struct rte_bus *rte_bus_find_by_device_name(const char *str);
#endif /* _EAL_PRIVATE_H_ */