/** @file This code fills in BDA (0x400) and EBDA (pointed to by 0x4xx) information. There is support for doing initializeation before Legacy16 is loaded and before a legacy boot is attempted. Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include "LegacyBiosInterface.h" /** Fill in the standard BDA and EBDA stuff before Legacy16 load @param Private Legacy BIOS Instance data @retval EFI_SUCCESS It should always work. **/ EFI_STATUS LegacyBiosInitBda ( IN LEGACY_BIOS_INSTANCE *Private ) { BDA_STRUC *Bda; UINT8 *Ebda; Bda = (BDA_STRUC *) ((UINTN) 0x400); Ebda = (UINT8 *) ((UINTN) 0x9fc00); ACCESS_PAGE0_CODE ( ZeroMem (Bda, 0x100); // // 640k-1k for EBDA // Bda->MemSize = 0x27f; Bda->KeyHead = 0x1e; Bda->KeyTail = 0x1e; Bda->FloppyData = 0x00; Bda->FloppyTimeout = 0xff; Bda->KeyStart = 0x001E; Bda->KeyEnd = 0x003E; Bda->KeyboardStatus = 0x10; Bda->Ebda = 0x9fc0; // // Move LPT time out here and zero out LPT4 since some SCSI OPROMS // use this as scratch pad (LPT4 is Reserved) // Bda->Lpt1_2Timeout = 0x1414; Bda->Lpt3_4Timeout = 0x1400; ); ZeroMem (Ebda, 0x400); *Ebda = 0x01; return EFI_SUCCESS; }