1 /** @file 2 3 Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR> 4 5 6 This program and the accompanying materials are licensed and made available under 7 8 the terms and conditions of the BSD License that accompanies this distribution. 9 10 The full text of the license may be found at 11 12 http://opensource.org/licenses/bsd-license.php. 13 14 15 16 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 17 18 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 19 20 21 22 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 }, LPCWPCE791SetDefault()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; DisableLogicalDevice(UINT8 DeviceId)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 { WriteRegister(IN UINT8 Index,IN UINT8 Data)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 WriteRegisterAndSaveToScript(IN UINT8 Index,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