/** @file Super I/O specific header. Copyright (c) 2010 - 2019 Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _SIO_H_ #define _SIO_H_ #include "Register.h" typedef UINT8 (EFIAPI *LOCAL_IO_WRITE8) ( IN UINTN Port, IN UINT8 Value ); #define RESOURCE_IO BIT0 #define RESOURCE_IRQ BIT1 #define RESOURCE_DMA BIT2 #define RESOURCE_MEM BIT3 #define DEVICE_ENABLED 0x01 #define DEVICE_INFO_END { { 0xFFFFFFFF, 0xFFFFFFFF } } #pragma pack(1) typedef struct { EFI_ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR Io; EFI_ACPI_IRQ_NOFLAG_DESCRIPTOR Irq; EFI_ACPI_END_TAG_DESCRIPTOR End; } ACPI_SIO_RESOURCES_IO_IRQ; #pragma pack() typedef struct { UINT32 HID; UINT32 UID; } EFI_SIO_ACPI_DEVICE_ID; typedef struct { EFI_SIO_ACPI_DEVICE_ID Device; UINT8 DeviceId; UINT8 ResourceMask; ACPI_RESOURCE_HEADER_PTR Resources; ACPI_RESOURCE_HEADER_PTR PossibleResources; } DEVICE_INFO; typedef struct { UINT8 Segment; UINT8 Bus; UINT8 Device; UINT8 Funtion; } SIO_PCI_ISA_BRIDGE_DEVICE_INFO; /** Return the supported devices. @param[out] Devices Pointer to pointer of EFI_SIO_ACPI_DEVICE_ID. Caller is responsible to free the buffer. @param[out] Count Pointer to UINTN holding the device count. **/ VOID DeviceGetList ( OUT EFI_SIO_ACPI_DEVICE_ID **Devices, OUT UINTN *Count ); /** Program the SIO chip to enable the specified device using the default resource. @param[in] Device Pointer to EFI_SIO_ACPI_DEVICE_ID. **/ VOID DeviceEnable ( IN EFI_SIO_ACPI_DEVICE_ID *Device ); /** Get the possible ACPI resources for specified device. @param[in] Device Pointer to EFI_SIO_ACPI_DEVICE_ID. @param[out] Resources Pointer to ACPI_RESOURCE_HEADER_PTR. @retval EFI_SUCCESS The resources are returned successfully. **/ EFI_STATUS DevicePossibleResources ( IN EFI_SIO_ACPI_DEVICE_ID *Device, OUT ACPI_RESOURCE_HEADER_PTR *Resources ); /** Set the ACPI resources for specified device. The SIO chip is programmed to use the new resources and the resources setting are saved. The function assumes the resources are valid. @param[in] Device Pointer to EFI_SIO_ACPI_DEVICE_ID. @param[in] Resources ACPI_RESOURCE_HEADER_PTR. @retval EFI_SUCCESS The resources are set successfully. **/ EFI_STATUS DeviceSetResources ( IN EFI_SIO_ACPI_DEVICE_ID *Device, IN ACPI_RESOURCE_HEADER_PTR Resources ); /** Get the ACPI resources for specified device. @param[in] Device Pointer to EFI_SIO_ACPI_DEVICE_ID. @param[out] Resources Pointer to ACPI_RESOURCE_HEADER_PTR. @retval EFI_SUCCESS The resources are returned successfully. **/ EFI_STATUS DeviceGetResources ( IN EFI_SIO_ACPI_DEVICE_ID *Device, OUT ACPI_RESOURCE_HEADER_PTR *Resources ); /** Program the SIO chip to enter the configure mode. **/ VOID EnterConfigMode ( VOID ); /** Program the SIO chip to exit the configure mode. **/ VOID ExitConfigMode ( VOID ); /** Perform a 8-bit I/O write to SIO register. @param[in] Index The register index. @param[in] Data The value to write to register. **/ VOID WriteRegister ( IN UINT8 Index, IN UINT8 Data ); /** Perform a 8-bit I/O read from SIO register. @param[in] Index The register index. @retval Value The value written to the register. **/ UINT8 ReadRegister ( IN UINT8 Index ); // // Prototypes for the sio internal function // // // Internal function // /** Find Super I/O controller. @retval EFI_SUCCESS Super I/O controller exists. @retval EFI_UNSUPPORTED Super I/O controller does not exist. **/ EFI_STATUS SioInit ( VOID ); #endif