• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /** @file
2   ISA ACPI Protocol Implementation
3 
4 Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution.  The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9 
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 **/
13 
14 #include "PcatIsaAcpi.h"
15 
16 //
17 // Platform specific data for the ISA devices that are present.in the platform
18 //
19 
20 //
21 // COM 1 UART Controller
22 //
23 GLOBAL_REMOVE_IF_UNREFERENCED
24 EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiCom1DeviceResources[] = {
25   {EfiIsaAcpiResourceIo,        0, 0x3f8, 0x3ff},
26   {EfiIsaAcpiResourceInterrupt, 0, 4,     0},
27   {EfiIsaAcpiResourceEndOfList, 0, 0,     0}
28 };
29 
30 //
31 // COM 2 UART Controller
32 //
33 GLOBAL_REMOVE_IF_UNREFERENCED
34 EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiCom2DeviceResources[] = {
35   {EfiIsaAcpiResourceIo,        0, 0x2f8, 0x2ff},
36   {EfiIsaAcpiResourceInterrupt, 0, 3,     0},
37   {EfiIsaAcpiResourceEndOfList, 0, 0,     0}
38 };
39 
40 //
41 // PS/2 Keyboard Controller
42 //
43 GLOBAL_REMOVE_IF_UNREFERENCED
44 EFI_ISA_ACPI_RESOURCE  mPcatIsaAcpiPs2KeyboardDeviceResources[] = {
45   {EfiIsaAcpiResourceIo,        0, 0x60, 0x64},
46   {EfiIsaAcpiResourceInterrupt, 0, 1,     0},
47   {EfiIsaAcpiResourceEndOfList, 0, 0,     0}
48 };
49 
50 //
51 // PS/2 Mouse Controller
52 //
53 GLOBAL_REMOVE_IF_UNREFERENCED
54 EFI_ISA_ACPI_RESOURCE  mPcatIsaAcpiPs2MouseDeviceResources[] = {
55   {EfiIsaAcpiResourceIo,        0, 0x60, 0x64},
56   {EfiIsaAcpiResourceInterrupt, 0, 12,     0},
57   {EfiIsaAcpiResourceEndOfList, 0, 0,     0}
58 };
59 
60 //
61 // Floppy Disk Controller
62 //
63 GLOBAL_REMOVE_IF_UNREFERENCED
64 EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiFloppyResources[] = {
65   {EfiIsaAcpiResourceIo,        0, 0x3f0, 0x3f7},
66   {EfiIsaAcpiResourceInterrupt, 0, 6,     0},
67   {EfiIsaAcpiResourceDma,       EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_SPEED_COMPATIBLE | EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_WIDTH_8 | EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_SINGLE_MODE, 2,     0},
68   {EfiIsaAcpiResourceEndOfList, 0, 0,     0}
69 };
70 
71 GLOBAL_REMOVE_IF_UNREFERENCED
72 EFI_ISA_ACPI_RESOURCE_LIST mPcatIsaAcpiCom1Device = {
73   {EISA_PNP_ID(0x501), 0}, mPcatIsaAcpiCom1DeviceResources
74 }; // COM 1 UART Controller
75 
76 GLOBAL_REMOVE_IF_UNREFERENCED
77 EFI_ISA_ACPI_RESOURCE_LIST mPcatIsaAcpiCom2Device = {
78   {EISA_PNP_ID(0x501), 1}, mPcatIsaAcpiCom2DeviceResources
79 }; // COM 2 UART Controller
80 
81 GLOBAL_REMOVE_IF_UNREFERENCED
82 EFI_ISA_ACPI_RESOURCE_LIST mPcatIsaAcpiPs2KeyboardDevice = {
83   {EISA_PNP_ID(0x303), 0}, mPcatIsaAcpiPs2KeyboardDeviceResources
84 }; // PS/2 Keyboard Controller
85 
86 GLOBAL_REMOVE_IF_UNREFERENCED
87 EFI_ISA_ACPI_RESOURCE_LIST mPcatIsaAcpiPs2MouseDevice = {
88   {EISA_PNP_ID(0x303), 1}, mPcatIsaAcpiPs2MouseDeviceResources
89 }; // PS/2 Mouse Controller
90 
91 GLOBAL_REMOVE_IF_UNREFERENCED
92 EFI_ISA_ACPI_RESOURCE_LIST mPcatIsaAcpiFloppyADevice = {
93   {EISA_PNP_ID(0x604), 0}, mPcatIsaAcpiFloppyResources
94 }; // Floppy Disk Controller A:
95 
96 GLOBAL_REMOVE_IF_UNREFERENCED
97 EFI_ISA_ACPI_RESOURCE_LIST mPcatIsaAcpiFloppyBDevice = {
98   {EISA_PNP_ID(0x604), 1}, mPcatIsaAcpiFloppyResources
99 }; // Floppy Disk Controller B:
100 
101 //
102 // Table of ISA Controllers
103 //
104 EFI_ISA_ACPI_RESOURCE_LIST gPcatIsaAcpiDeviceList[7] = {{{0, 0}, NULL}};
105 
106 /**
107   Initialize gPcatIsaAcpiDeviceList.
108 **/
109 VOID
InitializePcatIsaAcpiDeviceList(VOID)110 InitializePcatIsaAcpiDeviceList (
111   VOID
112   )
113 {
114   UINTN  Index;
115 
116   Index = 0;
117   if (PcdGetBool (PcdIsaAcpiCom1Enable)) {
118     CopyMem (&gPcatIsaAcpiDeviceList[Index], &mPcatIsaAcpiCom1Device, sizeof(mPcatIsaAcpiCom1Device));
119     Index++;
120   }
121   if (PcdGetBool (PcdIsaAcpiCom2Enable)) {
122     CopyMem (&gPcatIsaAcpiDeviceList[Index], &mPcatIsaAcpiCom2Device, sizeof(mPcatIsaAcpiCom2Device));
123     Index++;
124   }
125   if (PcdGetBool (PcdIsaAcpiPs2KeyboardEnable)) {
126     CopyMem (&gPcatIsaAcpiDeviceList[Index], &mPcatIsaAcpiPs2KeyboardDevice, sizeof(mPcatIsaAcpiPs2KeyboardDevice));
127     Index++;
128   }
129   if (PcdGetBool (PcdIsaAcpiPs2MouseEnable)) {
130     CopyMem (&gPcatIsaAcpiDeviceList[Index], &mPcatIsaAcpiPs2MouseDevice, sizeof(mPcatIsaAcpiPs2MouseDevice));
131     Index++;
132   }
133   if (PcdGetBool (PcdIsaAcpiFloppyAEnable)) {
134     CopyMem (&gPcatIsaAcpiDeviceList[Index], &mPcatIsaAcpiFloppyADevice, sizeof(mPcatIsaAcpiFloppyADevice));
135     Index++;
136   }
137   if (PcdGetBool (PcdIsaAcpiFloppyBEnable)) {
138     CopyMem (&gPcatIsaAcpiDeviceList[Index], &mPcatIsaAcpiFloppyBDevice, sizeof(mPcatIsaAcpiFloppyBDevice));
139     Index++;
140   }
141 }
142 
143 //
144 // ISA ACPI Protocol Functions
145 //
146 /**
147   Enumerate the ISA devices on the ISA bus.
148 
149   @param Device             Point to device ID instance
150   @param IsaAcpiDevice      On return, point to resource data for Isa device
151   @param NextIsaAcpiDevice  On return, point to resource data for next Isa device
152 **/
153 VOID
IsaDeviceLookup(IN EFI_ISA_ACPI_DEVICE_ID * Device,OUT EFI_ISA_ACPI_RESOURCE_LIST ** IsaAcpiDevice,OUT EFI_ISA_ACPI_RESOURCE_LIST ** NextIsaAcpiDevice)154 IsaDeviceLookup (
155   IN  EFI_ISA_ACPI_DEVICE_ID      *Device,
156   OUT EFI_ISA_ACPI_RESOURCE_LIST  **IsaAcpiDevice,
157   OUT EFI_ISA_ACPI_RESOURCE_LIST  **NextIsaAcpiDevice
158   )
159 {
160   UINTN  Index;
161 
162   *IsaAcpiDevice = NULL;
163   if (NextIsaAcpiDevice != NULL) {
164     *NextIsaAcpiDevice = NULL;
165   }
166   if (Device == NULL) {
167     Index = 0;
168   } else {
169     for(Index = 0; gPcatIsaAcpiDeviceList[Index].ResourceItem != NULL; Index++) {
170       if (Device->HID == gPcatIsaAcpiDeviceList[Index].Device.HID &&
171           Device->UID == gPcatIsaAcpiDeviceList[Index].Device.UID    ) {
172         break;
173       }
174     }
175     if (gPcatIsaAcpiDeviceList[Index].ResourceItem == NULL) {
176       return;
177     }
178     *IsaAcpiDevice = &(gPcatIsaAcpiDeviceList[Index]);
179     Index++;
180   }
181   if (gPcatIsaAcpiDeviceList[Index].ResourceItem != NULL && NextIsaAcpiDevice != NULL) {
182     *NextIsaAcpiDevice = &(gPcatIsaAcpiDeviceList[Index]);
183   }
184 }
185 
186 /**
187   Enumerate the ISA devices on the ISA bus
188 
189 
190   @param This            Point to instance of EFI_ISA_ACPI_PROTOCOL
191   @param Device          Point to device ID instance
192 
193   @retval EFI_NOT_FOUND Can not found the next Isa device.
194   @retval EFI_SUCESS    Success retrieve the next Isa device for enumration.
195 
196 **/
197 EFI_STATUS
198 EFIAPI
IsaDeviceEnumerate(IN EFI_ISA_ACPI_PROTOCOL * This,OUT EFI_ISA_ACPI_DEVICE_ID ** Device)199 IsaDeviceEnumerate (
200   IN  EFI_ISA_ACPI_PROTOCOL   *This,
201   OUT EFI_ISA_ACPI_DEVICE_ID  **Device
202   )
203 {
204   EFI_ISA_ACPI_RESOURCE_LIST  *IsaAcpiDevice;
205   EFI_ISA_ACPI_RESOURCE_LIST  *NextIsaAcpiDevice;
206 
207   IsaDeviceLookup (*Device, &IsaAcpiDevice, &NextIsaAcpiDevice);
208   if (NextIsaAcpiDevice == NULL) {
209     return EFI_NOT_FOUND;
210   }
211   *Device = &(NextIsaAcpiDevice->Device);
212   return EFI_SUCCESS;
213 }
214 
215 /**
216   Set ISA device power
217 
218 
219   @param This            Point to instance of EFI_ISA_ACPI_PROTOCOL
220   @param Device          Point to device ID instance
221   @param OnOff           TRUE for setting isa device power on,
222                          FALSE for setting isa device power off
223 
224   @return EFI_SUCCESS    Sucess to change power status for isa device.
225 **/
226 EFI_STATUS
227 EFIAPI
IsaDeviceSetPower(IN EFI_ISA_ACPI_PROTOCOL * This,IN EFI_ISA_ACPI_DEVICE_ID * Device,IN BOOLEAN OnOff)228 IsaDeviceSetPower (
229   IN EFI_ISA_ACPI_PROTOCOL   *This,
230   IN EFI_ISA_ACPI_DEVICE_ID  *Device,
231   IN BOOLEAN                 OnOff
232   )
233 {
234   return EFI_SUCCESS;
235 }
236 
237 /**
238   Get current resource for the specific ISA device.
239 
240   @param This            Point to instance of EFI_ISA_ACPI_PROTOCOL
241   @param Device          Point to device ID instance
242   @param ResourceList    On return, point to resources instances for given isa device
243 
244   @retval EFI_NOT_FOUND Can not found the resource instance for given isa device
245   @retval EFI_SUCCESS   Success to get resource instance for given isa device.
246 **/
247 EFI_STATUS
248 EFIAPI
IsaGetCurrentResource(IN EFI_ISA_ACPI_PROTOCOL * This,IN EFI_ISA_ACPI_DEVICE_ID * Device,OUT EFI_ISA_ACPI_RESOURCE_LIST ** ResourceList)249 IsaGetCurrentResource (
250   IN  EFI_ISA_ACPI_PROTOCOL       *This,
251   IN  EFI_ISA_ACPI_DEVICE_ID      *Device,
252   OUT EFI_ISA_ACPI_RESOURCE_LIST  **ResourceList
253   )
254 {
255   IsaDeviceLookup (Device, ResourceList, NULL);
256   if (*ResourceList == NULL) {
257     return EFI_NOT_FOUND;
258   }
259   return EFI_SUCCESS;
260 }
261 
262 /**
263   Get possible resource for the specific ISA device.
264 
265   @param This            Point to instance of EFI_ISA_ACPI_PROTOCOL
266   @param Device          Point to device ID instance
267   @param ResourceList    On return, point to resources instances for given isa device
268 
269   @retval EFI_SUCCESS   Success to get resource instance for given isa device.
270 **/
271 EFI_STATUS
272 EFIAPI
IsaGetPossibleResource(IN EFI_ISA_ACPI_PROTOCOL * This,IN EFI_ISA_ACPI_DEVICE_ID * Device,OUT EFI_ISA_ACPI_RESOURCE_LIST ** ResourceList)273 IsaGetPossibleResource (
274   IN  EFI_ISA_ACPI_PROTOCOL       *This,
275   IN  EFI_ISA_ACPI_DEVICE_ID      *Device,
276   OUT EFI_ISA_ACPI_RESOURCE_LIST  **ResourceList
277   )
278 {
279   return EFI_SUCCESS;
280 }
281 
282 /**
283   Set resource for the specific ISA device.
284 
285   @param This            Point to instance of EFI_ISA_ACPI_PROTOCOL
286   @param Device          Point to device ID instance
287   @param ResourceList    Point to resources instances for given isa device
288 
289   @return EFI_SUCESS  Success to set resource.
290 
291 **/
292 EFI_STATUS
293 EFIAPI
IsaSetResource(IN EFI_ISA_ACPI_PROTOCOL * This,IN EFI_ISA_ACPI_DEVICE_ID * Device,IN EFI_ISA_ACPI_RESOURCE_LIST * ResourceList)294 IsaSetResource (
295   IN EFI_ISA_ACPI_PROTOCOL       *This,
296   IN EFI_ISA_ACPI_DEVICE_ID      *Device,
297   IN EFI_ISA_ACPI_RESOURCE_LIST  *ResourceList
298   )
299 {
300   return EFI_SUCCESS;
301 }
302 
303 /**
304   Enable/Disable the specific ISA device.
305 
306   @param This            Point to instance of EFI_ISA_ACPI_PROTOCOL
307   @param Device          Point to device ID instance
308   @param Enable          Enable/Disable
309 
310   @return EFI_SUCESS  Success to enable/disable.
311 
312 **/
313 EFI_STATUS
314 EFIAPI
IsaEnableDevice(IN EFI_ISA_ACPI_PROTOCOL * This,IN EFI_ISA_ACPI_DEVICE_ID * Device,IN BOOLEAN Enable)315 IsaEnableDevice (
316   IN EFI_ISA_ACPI_PROTOCOL   *This,
317   IN EFI_ISA_ACPI_DEVICE_ID  *Device,
318   IN BOOLEAN                 Enable
319   )
320 {
321   return EFI_SUCCESS;
322 }
323 
324 /**
325   Initialize the specific ISA device.
326 
327   @param This            Point to instance of EFI_ISA_ACPI_PROTOCOL
328   @param Device          Point to device ID instance
329 
330   @return EFI_SUCESS  Success to initialize.
331 
332 **/
333 EFI_STATUS
334 EFIAPI
IsaInitDevice(IN EFI_ISA_ACPI_PROTOCOL * This,IN EFI_ISA_ACPI_DEVICE_ID * Device)335 IsaInitDevice (
336   IN EFI_ISA_ACPI_PROTOCOL   *This,
337   IN EFI_ISA_ACPI_DEVICE_ID  *Device
338   )
339 {
340   return EFI_SUCCESS;
341 }
342 
343 
344 /**
345   Initialize the ISA interface.
346 
347   @param This            Point to instance of EFI_ISA_ACPI_PROTOCOL
348 
349   @return EFI_SUCESS  Success to initialize ISA interface.
350 
351 **/
352 EFI_STATUS
353 EFIAPI
IsaInterfaceInit(IN EFI_ISA_ACPI_PROTOCOL * This)354 IsaInterfaceInit (
355   IN EFI_ISA_ACPI_PROTOCOL  *This
356 )
357 {
358   return EFI_SUCCESS;
359 }
360