Added these drivers: * LegacyBiosDxe * BlockIoDxe * KeyboardDxe * Snp16Dxe * VideoDxe Signed-off-by: jljusten Reviewed-by: mdkinney Reviewed-by: geekboy15a git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11905 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			125 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   This code fills in standard CMOS values and updates the standard CMOS
 | |
|   checksum. The Legacy16 code or LegacyBiosPlatform.c is responsible for
 | |
|   non-standard CMOS locations and non-standard checksums.
 | |
| 
 | |
| 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"
 | |
| 
 | |
| /**
 | |
|   Read CMOS register through index/data port.
 | |
| 
 | |
|   @param[in]  Index   The index of the CMOS register to read.
 | |
| 
 | |
|   @return  The data value from the CMOS register specified by Index.
 | |
| 
 | |
| **/
 | |
| UINT8
 | |
| LegacyReadStandardCmos (
 | |
|   IN UINT8  Index
 | |
|   )
 | |
| {
 | |
|   IoWrite8 (PORT_70, Index);
 | |
|   return IoRead8 (PORT_71);
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Write CMOS register through index/data port.
 | |
| 
 | |
|   @param[in]  Index  The index of the CMOS register to write.
 | |
|   @param[in]  Value  The value of CMOS register to write.
 | |
| 
 | |
|   @return  The value written to the CMOS register specified by Index.
 | |
| 
 | |
| **/
 | |
| UINT8
 | |
| LegacyWriteStandardCmos (
 | |
|   IN UINT8  Index,
 | |
|   IN UINT8  Value
 | |
|   )
 | |
| {
 | |
|   IoWrite8 (PORT_70, Index);
 | |
|   return IoWrite8 (PORT_71, Value);
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Calculate the new standard CMOS checksum and write it.
 | |
| 
 | |
|   @param  Private      Legacy BIOS Instance data
 | |
| 
 | |
|   @retval EFI_SUCCESS  Calculate 16-bit checksum successfully
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| LegacyCalculateWriteStandardCmosChecksum (
 | |
|   VOID
 | |
|   )
 | |
| {
 | |
|   UINT8   Register;
 | |
|   UINT16  Checksum;
 | |
| 
 | |
|   for (Checksum = 0, Register = 0x10; Register < 0x2e; Register++) {
 | |
|     Checksum = (UINT16)(Checksum + LegacyReadStandardCmos (Register));
 | |
|   }
 | |
|   LegacyWriteStandardCmos (CMOS_2E, (UINT8)(Checksum >> 8));
 | |
|   LegacyWriteStandardCmos (CMOS_2F, (UINT8)(Checksum & 0xff));
 | |
|   return EFI_SUCCESS;
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Fill in the standard CMOS stuff before Legacy16 load
 | |
| 
 | |
|   @param  Private      Legacy BIOS Instance data
 | |
| 
 | |
|   @retval EFI_SUCCESS  It should always work.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| LegacyBiosInitCmos (
 | |
|   IN  LEGACY_BIOS_INSTANCE    *Private
 | |
|   )
 | |
| {
 | |
|   UINT32  Size;
 | |
| 
 | |
|   //
 | |
|   //  Clear all errors except RTC lost power
 | |
|   //
 | |
|   LegacyWriteStandardCmos (CMOS_0E, (UINT8)(LegacyReadStandardCmos (CMOS_0E) & BIT7));
 | |
| 
 | |
|   //
 | |
|   // Update CMOS locations 15,16,17,18,30,31 and 32
 | |
|   // CMOS 16,15 = 640Kb = 0x280
 | |
|   // CMOS 18,17 = 31,30 = 15Mb max in 1Kb increments =0x3C00 max
 | |
|   // CMOS 32 = 0x20
 | |
|   //
 | |
|   LegacyWriteStandardCmos (CMOS_15, 0x80);
 | |
|   LegacyWriteStandardCmos (CMOS_16, 0x02);
 | |
| 
 | |
|   Size = 15 * SIZE_1MB;
 | |
|   if (Private->IntThunk->EfiToLegacy16InitTable.OsMemoryAbove1Mb < (15 * SIZE_1MB)) {
 | |
|     Size  = Private->IntThunk->EfiToLegacy16InitTable.OsMemoryAbove1Mb >> 10;
 | |
|   }
 | |
| 
 | |
|   LegacyWriteStandardCmos (CMOS_17, (UINT8)(Size & 0xFF));
 | |
|   LegacyWriteStandardCmos (CMOS_30, (UINT8)(Size & 0xFF));
 | |
|   LegacyWriteStandardCmos (CMOS_18, (UINT8)(Size >> 8));
 | |
|   LegacyWriteStandardCmos (CMOS_31, (UINT8)(Size >> 8));
 | |
| 
 | |
|   LegacyCalculateWriteStandardCmosChecksum ();
 | |
| 
 | |
|   return EFI_SUCCESS;
 | |
| }
 |