+++ /dev/null
-/** @file\r
- This PPI provides the super I/O register access functionality.\r
-\r
- Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\r
- This program and the accompanying materials \r
- are licensed and made available under the terms and conditions of the BSD License \r
- which accompanies this distribution. The full text of the license may be found at \r
- http://opensource.org/licenses/bsd-license.php \r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
-\r
- @par Revision Reference:\r
- This PPI is from PI Version 1.2.1.\r
-\r
-**/\r
-\r
-#ifndef __EFI_SUPER_IO_PPI_H__\r
-#define __EFI_SUPER_IO_PPI_H__\r
-\r
-#include <Protocol/SuperIo.h>\r
-\r
-#define EFI_SIO_PPI_GUID \\r
- { \\r
- 0x23a464ad, 0xcb83, 0x48b8, {0x94, 0xab, 0x1a, 0x6f, 0xef, 0xcf, 0xe5, 0x22} \\r
- }\r
-\r
-typedef struct _EFI_SIO_PPI EFI_SIO_PPI;\r
-typedef struct _EFI_SIO_PPI *PEFI_SIO_PPI;\r
-\r
-typedef UINT16 EFI_SIO_REGISTER;\r
-#define EFI_SIO_REG(ldn,reg) (EFI_SIO_REGISTER) (((ldn) << 8) | reg)\r
-#define EFI_SIO_LDN_GLOBAL 0xFF\r
-\r
-/**\r
- Read a Super I/O register.\r
- \r
- The register is specified as an 8-bit logical device number and an 8-bit\r
- register value. The logical device numbers for specific SIO devices can be\r
- determined using the Info member of the PPI structure.\r
- \r
- @param This A pointer to this instance of the EFI_SIO_PPI.\r
- @param ExitCfgMode A boolean specifying whether the driver should turn on\r
- configuration mode (FALSE) or turn off configuration mode\r
- (TRUE) after completing the read operation. The driver must\r
- track the current state of the configuration mode (if any)\r
- and turn on configuration mode (if necessary) prior to\r
- register access.\r
- @param Register A value specifying the logical device number (bits 15:8) \r
- and the register to read (bits 7:0). The logical device \r
- number of EFI_SIO_LDN_GLOBAL indicates that global\r
- registers will be used.\r
- @param IoData A pointer to the returned register value.\r
-\r
- @retval EFI_SUCCESS Success.\r
- @regval EFI_TIMEOUT The register could not be read in the a reasonable\r
- amount of time. The exact time is device-specific.\r
- @retval EFI_INVALID_PARAMETERS Register was out of range for this device.\r
- @retval EFI_INVALID_PARAMETERS IoData was NULL\r
- @retval EFI_DEVICE_ERROR There was a device fault or the device was not present.\r
-**/\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_PEI_SIO_REGISTER_READ)(\r
- IN CONST EFI_SIO_PPI *This,\r
- IN BOOLEAN ExitCfgMode,\r
- IN EFI_SIO_REGISTER Register,\r
- OUT UINT8 *IoData\r
- );\r
-\r
-/**\r
- Write a Super I/O register.\r
-\r
- The register is specified as an 8-bit logical device number and an 8-bit register\r
- value. The logical device numbers for specific SIO devices can be determined\r
- using the Info member of the PPI structure.\r
-\r
- @param This A pointer to this instance of the EFI_SIO_PPI.\r
- @param ExitCfgMode A boolean specifying whether the driver should turn on\r
- configuration mode (FALSE) or turn off configuration mode\r
- (TRUE) after completing the read operation. The driver must\r
- track the current state of the configuration mode (if any)\r
- and turn on configuration mode (if necessary) prior to\r
- register access.\r
- @param Register A value specifying the logical device number (bits 15:8) \r
- and the register to read (bits 7:0). The logical device \r
- number of EFI_SIO_LDN_GLOBAL indicates that global\r
- registers will be used.\r
- @param IoData A pointer to the returned register value.\r
-\r
- @retval EFI_SUCCESS Success.\r
- @regval EFI_TIMEOUT The register could not be read in the a reasonable\r
- amount of time. The exact time is device-specific.\r
- @retval EFI_INVALID_PARAMETERS Register was out of range for this device.\r
- @retval EFI_INVALID_PARAMETERS IoData was NULL\r
- @retval EFI_DEVICE_ERROR There was a device fault or the device was not present.\r
-**/ \r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_PEI_SIO_REGISTER_WRITE)(\r
- IN CONST EFI_SIO_PPI *This,\r
- IN BOOLEAN ExitCfgMode,\r
- IN EFI_SIO_REGISTER Register,\r
- IN UINT8 IoData\r
- );\r
-\r
-/**\r
- Provides an interface for a table based programming of the Super I/O registers.\r
-\r
- The Modify() function provides an interface for table based programming of the\r
- Super I/O registers. This function can be used to perform programming of\r
- multiple Super I/O registers with a single function call. For each table entry,\r
- the Register is read, its content is bitwise ANDed with AndMask, and then ORed\r
- with OrMask before being written back to the Register. The Super I/O driver\r
- must track the current state of the Super I/O and enable the configuration mode\r
- of Super I/O if necessary prior to table processing. Once the table is processed,\r
- the Super I/O device must be returned to the original state.\r
- \r
- @param This A pointer to this instance of the EFI_SIO_PPI.\r
- @param Command A pointer to an array of NumberOfCommands EFI_SIO_REGISTER_MODIFY\r
- structures. Each structure specifies a single Super I/O register\r
- modify operation.\r
- @param NumberOfCommands The number of elements in the Command array.\r
-\r
- @retval EFI_SUCCESS The operation completed successfully.\r
- @retval EFI_INVALID_PARAMETERS Command is NULL.\r
-**/ \r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_PEI_SIO_REGISTER_MODIFY)(\r
- IN CONST EFI_SIO_PPI *This,\r
- IN CONST EFI_SIO_REGISTER_MODIFY *Command,\r
- IN UINTN NumberOfCommands\r
- );\r
-\r
-///\r
-/// Specifies the end of the information list.\r
-///\r
-#define EFI_ACPI_PNP_HID_END 0\r
-\r
-typedef UINT32 EFI_ACPI_HID;\r
-typedef UINT32 EFI_ACPI_UID;\r
-#pragma pack(1)\r
-typedef struct _EFI_SIO_INFO {\r
- EFI_ACPI_HID Hid;\r
- EFI_ACPI_UID Uid;\r
- UINT8 Ldn;\r
-} EFI_SIO_INFO, *PEFI_SIO_INFO;\r
-#pragma pack()\r
-\r
-///\r
-/// This PPI provides low-level access to Super I/O registers using Read() and\r
-/// Write(). It also uniquely identifies this Super I/O controller using a GUID\r
-/// and provides mappings between ACPI style PNP IDs and the logical device numbers.\r
-/// There is one instance of this PPI per Super I/O device.\r
-///\r
-struct _EFI_SIO_PPI {\r
- ///\r
- /// This function reads a register's value from the Super I/O controller.\r
- ///\r
- EFI_PEI_SIO_REGISTER_READ Read;\r
- ///\r
- /// This function writes a value to a register in the Super I/O controller.\r
- ///\r
- EFI_PEI_SIO_REGISTER_WRITE Write;\r
- ///\r
- /// This function modifies zero or more registers in the Super I/O controller\r
- /// using a table.\r
- ///\r
- EFI_PEI_SIO_REGISTER_MODIFY Modify;\r
- ///\r
- /// This GUID uniquely identifies the Super I/O controller.\r
- ///\r
- EFI_GUID SioGuid;\r
- ///\r
- /// This pointer is to an array which maps EISA identifiers to logical devices numbers.\r
- ///\r
- PEFI_SIO_INFO Info;\r
-};\r
-\r
-extern EFI_GUID gEfiSioPpiGuid;\r
-\r
-#endif \r