mirror of https://github.com/acidanthera/audk.git
63 lines
1.4 KiB
C
63 lines
1.4 KiB
C
|
/** @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.<BR>
|
||
|
|
||
|
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;
|
||
|
}
|