/*++ Copyright (c) 2006, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at http://opensource.org/licenses/bsd-license.php THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. Module Name: IsaAcpi.c Abstract: ISA ACPI Protocol Implementation Revision History --*/ #include "PcatIsaAcpi.h" // // Platform specific data for the ISA devices that are present.in the platform // // // COM 1 UART Controller // EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiCom1DeviceResources[] = { {EfiIsaAcpiResourceIo, 0, 0x3f8, 0x3ff}, {EfiIsaAcpiResourceInterrupt, 0, 4, 0}, {EfiIsaAcpiResourceEndOfList, 0, 0, 0} }; // // COM 2 UART Controller // EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiCom2DeviceResources[] = { {EfiIsaAcpiResourceIo, 0, 0x2f8, 0x2ff}, {EfiIsaAcpiResourceInterrupt, 0, 3, 0}, {EfiIsaAcpiResourceEndOfList, 0, 0, 0} }; // // PS/2 Keyboard Controller // EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiPs2KeyboardDeviceResources[] = { {EfiIsaAcpiResourceIo, 0, 0x60, 0x64}, {EfiIsaAcpiResourceInterrupt, 0, 1, 0}, {EfiIsaAcpiResourceEndOfList, 0, 0, 0} }; // // PS/2 Mouse Controller // EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiPs2MouseDeviceResources[] = { {EfiIsaAcpiResourceIo, 0, 0x60, 0x64}, {EfiIsaAcpiResourceInterrupt, 0, 12, 0}, {EfiIsaAcpiResourceEndOfList, 0, 0, 0} }; // // Floppy Disk Controller // EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiFloppyResources[] = { {EfiIsaAcpiResourceIo, 0, 0x3f0, 0x3f7}, {EfiIsaAcpiResourceInterrupt, 0, 6, 0}, {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}, {EfiIsaAcpiResourceEndOfList, 0, 0, 0} }; // // Table of ISA Controllers // EFI_ISA_ACPI_RESOURCE_LIST gPcatIsaAcpiDeviceList[] = { {{EISA_PNP_ID(0x501), 0}, mPcatIsaAcpiCom1DeviceResources }, // COM 1 UART Controller {{EISA_PNP_ID(0x501), 1}, mPcatIsaAcpiCom2DeviceResources }, // COM 2 UART Controller {{EISA_PNP_ID(0x303), 0}, mPcatIsaAcpiPs2KeyboardDeviceResources }, // PS/2 Keyboard Controller {{EISA_PNP_ID(0x303), 1}, mPcatIsaAcpiPs2MouseDeviceResources }, // PS/2 Mouse Controller {{EISA_PNP_ID(0x604), 0}, mPcatIsaAcpiFloppyResources }, // Floppy Disk Controller A: {{EISA_PNP_ID(0x604), 1}, mPcatIsaAcpiFloppyResources }, // Floppy Disk Controller B: {{0, 0}, NULL } // End if ISA Controllers }; // // ISA ACPI Protocol Functions // VOID IsaDeviceLookup ( IN EFI_ISA_ACPI_DEVICE_ID *Device, OUT EFI_ISA_ACPI_RESOURCE_LIST **IsaAcpiDevice, OUT EFI_ISA_ACPI_RESOURCE_LIST **NextIsaAcpiDevice ) /*++ Routine Description: Enumerate the ISA devices on the ISA bus Arguments: Returns: --*/ { UINTN Index; *IsaAcpiDevice = NULL; if (NextIsaAcpiDevice != NULL) { *NextIsaAcpiDevice = NULL; } if (Device == NULL) { Index = 0; } else { for(Index = 0; gPcatIsaAcpiDeviceList[Index].ResourceItem != NULL; Index++) { if (Device->HID == gPcatIsaAcpiDeviceList[Index].Device.HID && Device->UID == gPcatIsaAcpiDeviceList[Index].Device.UID ) { break; } } if (gPcatIsaAcpiDeviceList[Index].ResourceItem == NULL) { return; } *IsaAcpiDevice = &(gPcatIsaAcpiDeviceList[Index]); Index++; } if (gPcatIsaAcpiDeviceList[Index].ResourceItem != NULL && NextIsaAcpiDevice != NULL) { *NextIsaAcpiDevice = &(gPcatIsaAcpiDeviceList[Index]); } } EFI_STATUS EFIAPI IsaDeviceEnumerate ( IN EFI_ISA_ACPI_PROTOCOL *This, OUT EFI_ISA_ACPI_DEVICE_ID **Device ) /*++ Routine Description: Enumerate the ISA devices on the ISA bus Arguments: Returns: --*/ { EFI_ISA_ACPI_RESOURCE_LIST *IsaAcpiDevice; EFI_ISA_ACPI_RESOURCE_LIST *NextIsaAcpiDevice; IsaDeviceLookup (*Device, &IsaAcpiDevice, &NextIsaAcpiDevice); if (NextIsaAcpiDevice == NULL) { return EFI_NOT_FOUND; } *Device = &(NextIsaAcpiDevice->Device); return EFI_SUCCESS; } EFI_STATUS EFIAPI IsaDeviceSetPower ( IN EFI_ISA_ACPI_PROTOCOL *This, IN EFI_ISA_ACPI_DEVICE_ID *Device, IN BOOLEAN OnOff ) /*++ Routine Description: Set ISA device power Arguments: Returns: --*/ { return EFI_SUCCESS; } EFI_STATUS EFIAPI IsaGetCurrentResource ( IN EFI_ISA_ACPI_PROTOCOL *This, IN EFI_ISA_ACPI_DEVICE_ID *Device, OUT EFI_ISA_ACPI_RESOURCE_LIST **ResourceList ) /*++ Routine Description: Get current Resource of the specific ISA device Arguments: Returns: --*/ { IsaDeviceLookup (Device, ResourceList, NULL); if (*ResourceList == NULL) { return EFI_NOT_FOUND; } return EFI_SUCCESS; } EFI_STATUS EFIAPI IsaGetPossibleResource ( IN EFI_ISA_ACPI_PROTOCOL *This, IN EFI_ISA_ACPI_DEVICE_ID *Device, OUT EFI_ISA_ACPI_RESOURCE_LIST **ResourceList ) /*++ Routine Description: Arguments: Returns: --*/ { return EFI_SUCCESS; } EFI_STATUS EFIAPI IsaSetResource ( IN EFI_ISA_ACPI_PROTOCOL *This, IN EFI_ISA_ACPI_DEVICE_ID *Device, IN EFI_ISA_ACPI_RESOURCE_LIST *ResourceList ) /*++ Routine Description: Arguments: Returns: --*/ { return EFI_SUCCESS; } EFI_STATUS EFIAPI IsaEnableDevice ( IN EFI_ISA_ACPI_PROTOCOL *This, IN EFI_ISA_ACPI_DEVICE_ID *Device, IN BOOLEAN Enable ) /*++ Routine Description: Arguments: Returns: --*/ { return EFI_SUCCESS; } EFI_STATUS EFIAPI IsaInitDevice ( IN EFI_ISA_ACPI_PROTOCOL *This, IN EFI_ISA_ACPI_DEVICE_ID *Device ) /*++ Routine Description: Arguments: Returns: --*/ { return EFI_SUCCESS; } EFI_STATUS EFIAPI IsaInterfaceInit ( IN EFI_ISA_ACPI_PROTOCOL *This ) /*++ Routine Description: Arguments: Returns: --*/ { return EFI_SUCCESS; }