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