libpayload: Outsource delay function into own header

For libflashrom we need the delay functions but when including the whole
libpayload.h it has conflicting symbols.

Change-Id: I6e4a669b8ba25836fb870d74c200985c1bfdb387
Signed-off-by: Thomas Heijligen <src@posteo.de>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/70139
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Nico Huber <nico.h@gmx.de>
Reviewed-by: Julius Werner <jwerner@chromium.org>
This commit is contained in:
Thomas Heijligen 2022-11-29 19:53:31 +01:00 committed by Felix Held
parent 711f84d177
commit 303a895d77
3 changed files with 60 additions and 49 deletions

View File

@ -0,0 +1,59 @@
/* SPDX-License-Identifier: BSD-3-Clause */
#ifndef LIBPAYLOAD_DELAY_H
#define LIBPAYLOAD_DELAY_H
#include <stdint.h>
#define NSECS_PER_SEC 1000000000
#define USECS_PER_SEC 1000000
#define MSECS_PER_SEC 1000
#define NSECS_PER_MSEC (NSECS_PER_SEC / MSECS_PER_SEC)
#define NSECS_PER_USEC (NSECS_PER_SEC / USECS_PER_SEC)
#define USECS_PER_MSEC (USECS_PER_SEC / MSECS_PER_SEC)
unsigned int get_cpu_speed(void);
void arch_ndelay(uint64_t n);
/**
* Delay for a specified number of nanoseconds.
*
* @param ns Number of nanoseconds to delay for.
*/
static inline void ndelay(unsigned int ns)
{
arch_ndelay((uint64_t)ns);
}
/**
* Delay for a specified number of microseconds.
*
* @param us Number of microseconds to delay for.
*/
static inline void udelay(unsigned int us)
{
arch_ndelay((uint64_t)us * NSECS_PER_USEC);
}
/**
* Delay for a specified number of milliseconds.
*
* @param ms Number of milliseconds to delay for.
*/
static inline void mdelay(unsigned int ms)
{
arch_ndelay((uint64_t)ms * NSECS_PER_MSEC);
}
/**
* Delay for a specified number of seconds.
*
* @param s Number of seconds to delay for.
*/
static inline void delay(unsigned int s)
{
arch_ndelay((uint64_t)s * NSECS_PER_SEC);
}
#endif /* LIBPAYLOAD_DELAY_H */

View File

@ -68,6 +68,7 @@
#include <sysinfo.h> #include <sysinfo.h>
#include <pci.h> #include <pci.h>
#include <archive.h> #include <archive.h>
#include <delay.h>
#define BIT(x) (1ul << (x)) #define BIT(x) (1ul << (x))
@ -510,53 +511,11 @@ void lib_sysinfo_get_memranges(struct memrange **ranges,
/* Timer functions. */ /* Timer functions. */
/* Defined by each architecture. */ /* Defined by each architecture. */
unsigned int get_cpu_speed(void);
uint64_t timer_hz(void); uint64_t timer_hz(void);
uint64_t timer_raw_value(void); uint64_t timer_raw_value(void);
uint64_t timer_us(uint64_t base); uint64_t timer_us(uint64_t base);
void arch_ndelay(uint64_t n);
/* Generic. */ /* Generic. */
/**
* Delay for a specified number of nanoseconds.
*
* @param ns Number of nanoseconds to delay for.
*/
static inline void ndelay(unsigned int ns)
{
arch_ndelay((uint64_t)ns);
}
/**
* Delay for a specified number of microseconds.
*
* @param us Number of microseconds to delay for.
*/
static inline void udelay(unsigned int us)
{
arch_ndelay((uint64_t)us * NSECS_PER_USEC);
}
/**
* Delay for a specified number of milliseconds.
*
* @param ms Number of milliseconds to delay for.
*/
static inline void mdelay(unsigned int ms)
{
arch_ndelay((uint64_t)ms * NSECS_PER_MSEC);
}
/**
* Delay for a specified number of seconds.
*
* @param s Number of seconds to delay for.
*/
static inline void delay(unsigned int s)
{
arch_ndelay((uint64_t)s * NSECS_PER_SEC);
}
/** /**
* @defgroup readline Readline functions * @defgroup readline Readline functions
* This interface provides a simple implementation of the standard readline() * This interface provides a simple implementation of the standard readline()

View File

@ -26,11 +26,4 @@ typedef __SIZE_TYPE__ size_t;
typedef __SIZE_TYPE__ ssize_t; typedef __SIZE_TYPE__ ssize_t;
#undef unsigned #undef unsigned
#define NSECS_PER_SEC 1000000000
#define USECS_PER_SEC 1000000
#define MSECS_PER_SEC 1000
#define NSECS_PER_MSEC (NSECS_PER_SEC / MSECS_PER_SEC)
#define NSECS_PER_USEC (NSECS_PER_SEC / USECS_PER_SEC)
#define USECS_PER_MSEC (USECS_PER_SEC / MSECS_PER_SEC)
#endif #endif