162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef _ASM_X86_BIOS_EBDA_H
362306a36Sopenharmony_ci#define _ASM_X86_BIOS_EBDA_H
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#include <asm/io.h>
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci/*
862306a36Sopenharmony_ci * Returns physical address of EBDA.  Returns 0 if there is no EBDA.
962306a36Sopenharmony_ci */
1062306a36Sopenharmony_cistatic inline unsigned int get_bios_ebda(void)
1162306a36Sopenharmony_ci{
1262306a36Sopenharmony_ci	/*
1362306a36Sopenharmony_ci	 * There is a real-mode segmented pointer pointing to the
1462306a36Sopenharmony_ci	 * 4K EBDA area at 0x40E.
1562306a36Sopenharmony_ci	 */
1662306a36Sopenharmony_ci	unsigned int address = *(unsigned short *)phys_to_virt(0x40E);
1762306a36Sopenharmony_ci	address <<= 4;
1862306a36Sopenharmony_ci	return address;	/* 0 means none */
1962306a36Sopenharmony_ci}
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_civoid reserve_bios_regions(void);
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci#ifdef CONFIG_X86_CHECK_BIOS_CORRUPTION
2462306a36Sopenharmony_ci/*
2562306a36Sopenharmony_ci * This is obviously not a great place for this, but we want to be
2662306a36Sopenharmony_ci * able to scatter it around anywhere in the kernel.
2762306a36Sopenharmony_ci */
2862306a36Sopenharmony_civoid check_for_bios_corruption(void);
2962306a36Sopenharmony_civoid start_periodic_check_for_corruption(void);
3062306a36Sopenharmony_ci#else
3162306a36Sopenharmony_cistatic inline void check_for_bios_corruption(void)
3262306a36Sopenharmony_ci{
3362306a36Sopenharmony_ci}
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_cistatic inline void start_periodic_check_for_corruption(void)
3662306a36Sopenharmony_ci{
3762306a36Sopenharmony_ci}
3862306a36Sopenharmony_ci#endif
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci#endif /* _ASM_X86_BIOS_EBDA_H */
41