| /** @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> | |
| This program and the accompanying materials | |
| are licensed and made available under the terms and conditions | |
| of the BSD License which accompanies this distribution. The | |
| full text of the license may be found at | |
| http://opensource.org/licenses/bsd-license.php | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
| **/ | |
| #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; | |
| } |