1 /** @file 2 3 Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR> 4 5 This program and the accompanying materials are licensed and made available under 7 the terms and conditions of the BSD License that accompanies this distribution. 9 The full text of the license may be found at 11 http://opensource.org/licenses/bsd-license.php. 13 15 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 17 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 19 21 23 Module Name: 24 25 Module Name: 26 27 LpcSio.c 28 29 Abstract: Sio implementation 30 31 Revision History 32 33 --*/ 34 35 #include "LpcDriver.h" 36 #include <Library/S3BootScriptLib.h> 37 38 VOID 39 WriteRegister ( 40 IN UINT8 Index, 41 IN UINT8 Data 42 ); 43 44 typedef struct { 45 UINT8 Register; 46 UINT8 Value; 47 } EFI_SIO_TABLE; 48 49 EFI_SIO_TABLE mSioTable[] = { 50 // 51 // Init keyboard controller 52 // 53 { REG_LOGICAL_DEVICE, SIO_KEYBOARD }, 54 { BASE_ADDRESS_HIGH, 0x00 }, 55 { BASE_ADDRESS_LOW, 0x60 }, 56 { BASE_ADDRESS_HIGH2, 0x00 }, 57 { BASE_ADDRESS_LOW2, 0x64 }, 58 { PRIMARY_INTERRUPT_SELECT, 0x01 }, 59 { ACTIVATE, 0x1 }, 60 61 // 62 // Init Mouse controller 63 // 64 { REG_LOGICAL_DEVICE, SIO_MOUSE }, 65 { BASE_ADDRESS_HIGH, 0x00 }, 66 { BASE_ADDRESS_LOW, 0x60 }, 67 { BASE_ADDRESS_HIGH2, 0x00 }, 68 { BASE_ADDRESS_LOW2, 0x64 }, 69 { PRIMARY_INTERRUPT_SELECT, 0x0c }, 70 { ACTIVATE, 0x1 }, 71 72 { REG_LOGICAL_DEVICE, SIO_COM }, 73 { BASE_ADDRESS_HIGH, 0x03 }, 74 { BASE_ADDRESS_LOW, 0xf8 }, 75 { PRIMARY_INTERRUPT_SELECT, 0x04 }, 76 { ACTIVATE, 0x1 }, 77 78 79 }; 80 81 VOID 82 LPCWPCE791SetDefault () 83 { 84 UINT8 Index; 85 86 for (Index = 0; Index < sizeof(mSioTable)/sizeof(EFI_SIO_TABLE); Index++) { 87 WriteRegisterAndSaveToScript (mSioTable[Index].Register, mSioTable[Index].Value); 88 } 89 90 return; 91 } 92 93 VOID 94 DisableLogicalDevice ( 95 UINT8 DeviceId 96 ) 97 { 98 WriteRegisterAndSaveToScript (REG_LOGICAL_DEVICE, DeviceId); 99 WriteRegisterAndSaveToScript (ACTIVATE, 0); 100 WriteRegisterAndSaveToScript (BASE_ADDRESS_HIGH, 0); 101 WriteRegisterAndSaveToScript (BASE_ADDRESS_LOW, 0); 102 103 return; 104 } 105 106 VOID 107 WriteRegister ( 108 IN UINT8 Index, 109 IN UINT8 Data 110 ) 111 { 112 LpcIoWrite8(CONFIG_PORT, Index); 113 LpcIoWrite8(DATA_PORT, Data); 114 115 return; 116 } 117 118 VOID 119 WriteRegisterAndSaveToScript ( 120 IN UINT8 Index, 121 IN UINT8 Data 122 ) 123 { 124 UINT8 Buffer[2]; 125 126 LpcIoWrite8(CONFIG_PORT, Index); 127 LpcIoWrite8(DATA_PORT, Data); 128 129 Buffer[0] = Index; 130 Buffer[1] = Data; 131 S3BootScriptSaveIoWrite ( 132 EfiBootScriptWidthUint8, 133 INDEX_PORT, 134 2, 135 Buffer 136 ); 137 138 return; 139 } 140 141