Vishal Bhoj | 82c8071 | 2015-12-15 21:13:33 +0530 | [diff] [blame^] | 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
|
| 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
|
| 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
|
| 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
|
| 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
|
| 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
|
| 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
|
| 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
|
| 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
|
| 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
|
| 354 | IsaInterfaceInit (
|
| 355 | IN EFI_ISA_ACPI_PROTOCOL *This
|
| 356 | )
|
| 357 | {
|
| 358 | return EFI_SUCCESS;
|
| 359 | }
|