/** @file | |
ISA ACPI Protocol Implementation | |
Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR> | |
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. | |
**/ | |
#include "PcatIsaAcpi.h" | |
// | |
// Platform specific data for the ISA devices that are present.in the platform | |
// | |
// | |
// COM 1 UART Controller | |
// | |
GLOBAL_REMOVE_IF_UNREFERENCED | |
EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiCom1DeviceResources[] = { | |
{EfiIsaAcpiResourceIo, 0, 0x3f8, 0x3ff}, | |
{EfiIsaAcpiResourceInterrupt, 0, 4, 0}, | |
{EfiIsaAcpiResourceEndOfList, 0, 0, 0} | |
}; | |
// | |
// COM 2 UART Controller | |
// | |
GLOBAL_REMOVE_IF_UNREFERENCED | |
EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiCom2DeviceResources[] = { | |
{EfiIsaAcpiResourceIo, 0, 0x2f8, 0x2ff}, | |
{EfiIsaAcpiResourceInterrupt, 0, 3, 0}, | |
{EfiIsaAcpiResourceEndOfList, 0, 0, 0} | |
}; | |
// | |
// PS/2 Keyboard Controller | |
// | |
GLOBAL_REMOVE_IF_UNREFERENCED | |
EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiPs2KeyboardDeviceResources[] = { | |
{EfiIsaAcpiResourceIo, 0, 0x60, 0x64}, | |
{EfiIsaAcpiResourceInterrupt, 0, 1, 0}, | |
{EfiIsaAcpiResourceEndOfList, 0, 0, 0} | |
}; | |
// | |
// PS/2 Mouse Controller | |
// | |
GLOBAL_REMOVE_IF_UNREFERENCED | |
EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiPs2MouseDeviceResources[] = { | |
{EfiIsaAcpiResourceIo, 0, 0x60, 0x64}, | |
{EfiIsaAcpiResourceInterrupt, 0, 12, 0}, | |
{EfiIsaAcpiResourceEndOfList, 0, 0, 0} | |
}; | |
// | |
// Floppy Disk Controller | |
// | |
GLOBAL_REMOVE_IF_UNREFERENCED | |
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} | |
}; | |
GLOBAL_REMOVE_IF_UNREFERENCED | |
EFI_ISA_ACPI_RESOURCE_LIST mPcatIsaAcpiCom1Device = { | |
{EISA_PNP_ID(0x501), 0}, mPcatIsaAcpiCom1DeviceResources | |
}; // COM 1 UART Controller | |
GLOBAL_REMOVE_IF_UNREFERENCED | |
EFI_ISA_ACPI_RESOURCE_LIST mPcatIsaAcpiCom2Device = { | |
{EISA_PNP_ID(0x501), 1}, mPcatIsaAcpiCom2DeviceResources | |
}; // COM 2 UART Controller | |
GLOBAL_REMOVE_IF_UNREFERENCED | |
EFI_ISA_ACPI_RESOURCE_LIST mPcatIsaAcpiPs2KeyboardDevice = { | |
{EISA_PNP_ID(0x303), 0}, mPcatIsaAcpiPs2KeyboardDeviceResources | |
}; // PS/2 Keyboard Controller | |
GLOBAL_REMOVE_IF_UNREFERENCED | |
EFI_ISA_ACPI_RESOURCE_LIST mPcatIsaAcpiPs2MouseDevice = { | |
{EISA_PNP_ID(0x303), 1}, mPcatIsaAcpiPs2MouseDeviceResources | |
}; // PS/2 Mouse Controller | |
GLOBAL_REMOVE_IF_UNREFERENCED | |
EFI_ISA_ACPI_RESOURCE_LIST mPcatIsaAcpiFloppyADevice = { | |
{EISA_PNP_ID(0x604), 0}, mPcatIsaAcpiFloppyResources | |
}; // Floppy Disk Controller A: | |
GLOBAL_REMOVE_IF_UNREFERENCED | |
EFI_ISA_ACPI_RESOURCE_LIST mPcatIsaAcpiFloppyBDevice = { | |
{EISA_PNP_ID(0x604), 1}, mPcatIsaAcpiFloppyResources | |
}; // Floppy Disk Controller B: | |
// | |
// Table of ISA Controllers | |
// | |
EFI_ISA_ACPI_RESOURCE_LIST gPcatIsaAcpiDeviceList[7] = {{{0, 0}, NULL}}; | |
/** | |
Initialize gPcatIsaAcpiDeviceList. | |
**/ | |
VOID | |
InitializePcatIsaAcpiDeviceList ( | |
VOID | |
) | |
{ | |
UINTN Index; | |
Index = 0; | |
if (PcdGetBool (PcdIsaAcpiCom1Enable)) { | |
CopyMem (&gPcatIsaAcpiDeviceList[Index], &mPcatIsaAcpiCom1Device, sizeof(mPcatIsaAcpiCom1Device)); | |
Index++; | |
} | |
if (PcdGetBool (PcdIsaAcpiCom2Enable)) { | |
CopyMem (&gPcatIsaAcpiDeviceList[Index], &mPcatIsaAcpiCom2Device, sizeof(mPcatIsaAcpiCom2Device)); | |
Index++; | |
} | |
if (PcdGetBool (PcdIsaAcpiPs2KeyboardEnable)) { | |
CopyMem (&gPcatIsaAcpiDeviceList[Index], &mPcatIsaAcpiPs2KeyboardDevice, sizeof(mPcatIsaAcpiPs2KeyboardDevice)); | |
Index++; | |
} | |
if (PcdGetBool (PcdIsaAcpiPs2MouseEnable)) { | |
CopyMem (&gPcatIsaAcpiDeviceList[Index], &mPcatIsaAcpiPs2MouseDevice, sizeof(mPcatIsaAcpiPs2MouseDevice)); | |
Index++; | |
} | |
if (PcdGetBool (PcdIsaAcpiFloppyAEnable)) { | |
CopyMem (&gPcatIsaAcpiDeviceList[Index], &mPcatIsaAcpiFloppyADevice, sizeof(mPcatIsaAcpiFloppyADevice)); | |
Index++; | |
} | |
if (PcdGetBool (PcdIsaAcpiFloppyBEnable)) { | |
CopyMem (&gPcatIsaAcpiDeviceList[Index], &mPcatIsaAcpiFloppyBDevice, sizeof(mPcatIsaAcpiFloppyBDevice)); | |
Index++; | |
} | |
} | |
// | |
// ISA ACPI Protocol Functions | |
// | |
/** | |
Enumerate the ISA devices on the ISA bus. | |
@param Device Point to device ID instance | |
@param IsaAcpiDevice On return, point to resource data for Isa device | |
@param NextIsaAcpiDevice On return, point to resource data for next Isa device | |
**/ | |
VOID | |
IsaDeviceLookup ( | |
IN EFI_ISA_ACPI_DEVICE_ID *Device, | |
OUT EFI_ISA_ACPI_RESOURCE_LIST **IsaAcpiDevice, | |
OUT EFI_ISA_ACPI_RESOURCE_LIST **NextIsaAcpiDevice | |
) | |
{ | |
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]); | |
} | |
} | |
/** | |
Enumerate the ISA devices on the ISA bus | |
@param This Point to instance of EFI_ISA_ACPI_PROTOCOL | |
@param Device Point to device ID instance | |
@retval EFI_NOT_FOUND Can not found the next Isa device. | |
@retval EFI_SUCESS Success retrieve the next Isa device for enumration. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
IsaDeviceEnumerate ( | |
IN EFI_ISA_ACPI_PROTOCOL *This, | |
OUT EFI_ISA_ACPI_DEVICE_ID **Device | |
) | |
{ | |
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; | |
} | |
/** | |
Set ISA device power | |
@param This Point to instance of EFI_ISA_ACPI_PROTOCOL | |
@param Device Point to device ID instance | |
@param OnOff TRUE for setting isa device power on, | |
FALSE for setting isa device power off | |
@return EFI_SUCCESS Sucess to change power status for isa device. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
IsaDeviceSetPower ( | |
IN EFI_ISA_ACPI_PROTOCOL *This, | |
IN EFI_ISA_ACPI_DEVICE_ID *Device, | |
IN BOOLEAN OnOff | |
) | |
{ | |
return EFI_SUCCESS; | |
} | |
/** | |
Get current resource for the specific ISA device. | |
@param This Point to instance of EFI_ISA_ACPI_PROTOCOL | |
@param Device Point to device ID instance | |
@param ResourceList On return, point to resources instances for given isa device | |
@retval EFI_NOT_FOUND Can not found the resource instance for given isa device | |
@retval EFI_SUCCESS Success to get resource instance for given isa device. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
IsaGetCurrentResource ( | |
IN EFI_ISA_ACPI_PROTOCOL *This, | |
IN EFI_ISA_ACPI_DEVICE_ID *Device, | |
OUT EFI_ISA_ACPI_RESOURCE_LIST **ResourceList | |
) | |
{ | |
IsaDeviceLookup (Device, ResourceList, NULL); | |
if (*ResourceList == NULL) { | |
return EFI_NOT_FOUND; | |
} | |
return EFI_SUCCESS; | |
} | |
/** | |
Get possible resource for the specific ISA device. | |
@param This Point to instance of EFI_ISA_ACPI_PROTOCOL | |
@param Device Point to device ID instance | |
@param ResourceList On return, point to resources instances for given isa device | |
@retval EFI_SUCCESS Success to get resource instance for given isa device. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
IsaGetPossibleResource ( | |
IN EFI_ISA_ACPI_PROTOCOL *This, | |
IN EFI_ISA_ACPI_DEVICE_ID *Device, | |
OUT EFI_ISA_ACPI_RESOURCE_LIST **ResourceList | |
) | |
{ | |
return EFI_SUCCESS; | |
} | |
/** | |
Set resource for the specific ISA device. | |
@param This Point to instance of EFI_ISA_ACPI_PROTOCOL | |
@param Device Point to device ID instance | |
@param ResourceList Point to resources instances for given isa device | |
@return EFI_SUCESS Success to set resource. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
IsaSetResource ( | |
IN EFI_ISA_ACPI_PROTOCOL *This, | |
IN EFI_ISA_ACPI_DEVICE_ID *Device, | |
IN EFI_ISA_ACPI_RESOURCE_LIST *ResourceList | |
) | |
{ | |
return EFI_SUCCESS; | |
} | |
/** | |
Enable/Disable the specific ISA device. | |
@param This Point to instance of EFI_ISA_ACPI_PROTOCOL | |
@param Device Point to device ID instance | |
@param Enable Enable/Disable | |
@return EFI_SUCESS Success to enable/disable. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
IsaEnableDevice ( | |
IN EFI_ISA_ACPI_PROTOCOL *This, | |
IN EFI_ISA_ACPI_DEVICE_ID *Device, | |
IN BOOLEAN Enable | |
) | |
{ | |
return EFI_SUCCESS; | |
} | |
/** | |
Initialize the specific ISA device. | |
@param This Point to instance of EFI_ISA_ACPI_PROTOCOL | |
@param Device Point to device ID instance | |
@return EFI_SUCESS Success to initialize. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
IsaInitDevice ( | |
IN EFI_ISA_ACPI_PROTOCOL *This, | |
IN EFI_ISA_ACPI_DEVICE_ID *Device | |
) | |
{ | |
return EFI_SUCCESS; | |
} | |
/** | |
Initialize the ISA interface. | |
@param This Point to instance of EFI_ISA_ACPI_PROTOCOL | |
@return EFI_SUCESS Success to initialize ISA interface. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
IsaInterfaceInit ( | |
IN EFI_ISA_ACPI_PROTOCOL *This | |
) | |
{ | |
return EFI_SUCCESS; | |
} |