| /** @file | |
| Define the PPI to abstract the functions that enable IDE and SATA channels, and to retrieve | |
| the base I/O port address for each of the enabled IDE and SATA channels. | |
| Copyright (c) 2006 - 2011, 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. | |
| **/ | |
| #ifndef _PEI_ATA_CONTROLLER_PPI_H_ | |
| #define _PEI_ATA_CONTROLLER_PPI_H_ | |
| /// | |
| /// Global ID for the PEI_ATA_CONTROLLER_PPI. | |
| /// | |
| #define PEI_ATA_CONTROLLER_PPI_GUID \ | |
| { \ | |
| 0xa45e60d1, 0xc719, 0x44aa, {0xb0, 0x7a, 0xaa, 0x77, 0x7f, 0x85, 0x90, 0x6d } \ | |
| } | |
| /// | |
| /// Forward declaration for the PEI_ATA_CONTROLLER_PPI. | |
| /// | |
| typedef struct _PEI_ATA_CONTROLLER_PPI PEI_ATA_CONTROLLER_PPI; | |
| /// | |
| /// This bit is used in the ChannelMask parameter of EnableAtaChannel() to | |
| /// disable the IDE channels. | |
| /// This is designed for old generation chipset with PATA/SATA controllers. | |
| /// It may be ignored in PPI implementation for new generation chipset without PATA controller. | |
| /// | |
| #define PEI_ICH_IDE_NONE 0x00 | |
| /// | |
| /// This bit is used in the ChannelMask parameter of EnableAtaChannel() to | |
| /// enable the Primary IDE channel. | |
| /// This is designed for old generation chipset with PATA/SATA controllers. | |
| /// It may be ignored in PPI implementation for new generation chipset without PATA controller. | |
| /// | |
| #define PEI_ICH_IDE_PRIMARY 0x01 | |
| /// | |
| /// This bit is used in the ChannelMask parameter of EnableAtaChannel() to | |
| /// enable the Secondary IDE channel. | |
| /// This is designed for old generation chipset with PATA/SATA controllers. | |
| /// It may be ignored in PPI implementation for new generation chipset without PATA controller. | |
| /// | |
| #define PEI_ICH_IDE_SECONDARY 0x02 | |
| /// | |
| /// This bit is used in the ChannelMask parameter of EnableAtaChannel() to | |
| /// disable the SATA channel. | |
| /// This is designed for old generation chipset with PATA/SATA controllers. | |
| /// It may be ignored in PPI implementation for new generation chipset without PATA controller. | |
| /// | |
| #define PEI_ICH_SATA_NONE 0x04 | |
| /// | |
| /// This bit is used in the ChannelMask parameter of EnableAtaChannel() to | |
| /// enable the Primary SATA channel. | |
| /// This is designed for old generation chipset with PATA/SATA controllers. | |
| /// It may be ignored in PPI implementation for new generation chipset without PATA controller. | |
| /// | |
| #define PEI_ICH_SATA_PRIMARY 0x08 | |
| /// | |
| /// This bit is used in the ChannelMask parameter of EnableAtaChannel() to | |
| /// enable the Secondary SATA channel. | |
| /// This is designed for old generation chipset with PATA/SATA controllers. | |
| /// It may be ignored in PPI implementation for new generation chipset without PATA controller. | |
| /// | |
| #define PEI_ICH_SATA_SECONDARY 0x010 | |
| /// | |
| /// Structure that contains the base addresses for the IDE registers | |
| /// | |
| typedef struct { | |
| /// | |
| /// Base I/O port address of the IDE controller's command block | |
| /// | |
| UINT16 CommandBlockBaseAddr; | |
| /// | |
| /// Base I/O port address of the IDE controller's control block | |
| /// | |
| UINT16 ControlBlockBaseAddr; | |
| } IDE_REGS_BASE_ADDR; | |
| /** | |
| Sets IDE and SATA channels to an enabled or disabled state. | |
| This service enables or disables the IDE and SATA channels specified by ChannelMask. | |
| It may ignore ChannelMask setting to enable or disable IDE and SATA channels based on the platform policy. | |
| The number of the enabled channels will be returned by GET_IDE_REGS_BASE_ADDR() function. | |
| If the new state is set, then EFI_SUCCESS is returned. If the new state can | |
| not be set, then EFI_DEVICE_ERROR is returned. | |
| @param[in] PeiServices The pointer to the PEI Services Table. | |
| @param[in] This The pointer to this instance of the PEI_ATA_CONTROLLER_PPI. | |
| @param[in] ChannelMask The bitmask that identifies the IDE and SATA channels to | |
| enable or disable. This paramter is optional. | |
| @retval EFI_SUCCESS The IDE or SATA channels were enabled or disabled successfully. | |
| @retval EFI_DEVICE_ERROR The IDE or SATA channels could not be enabled or disabled. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *PEI_ENABLE_ATA)( | |
| IN EFI_PEI_SERVICES **PeiServices, | |
| IN PEI_ATA_CONTROLLER_PPI *This, | |
| IN UINT8 ChannelMask | |
| ); | |
| /** | |
| Retrieves the I/O port base addresses for command and control registers of the | |
| enabled IDE/SATA channels. | |
| This service fills in the structure poionted to by IdeRegsBaseAddr with the I/O | |
| port base addresses for the command and control registers of the IDE and SATA | |
| channels that were previously enabled in EnableAtaChannel(). The number of | |
| enabled IDE and SATA channels is returned. | |
| @param[in] PeiServices The pointer to the PEI Services Table. | |
| @param[in] This The pointer to this instance of the PEI_ATA_CONTROLLER_PPI. | |
| @param[out] IdeRegsBaseAddr The pointer to caller allocated space to return the | |
| I/O port base addresses of the IDE and SATA channels | |
| that were previosuly enabled with EnableAtaChannel(). | |
| @return The number of enabled IDE and SATA channels in the platform. | |
| **/ | |
| typedef | |
| UINT32 | |
| (EFIAPI *GET_IDE_REGS_BASE_ADDR)( | |
| IN EFI_PEI_SERVICES **PeiServices, | |
| IN PEI_ATA_CONTROLLER_PPI *This, | |
| OUT IDE_REGS_BASE_ADDR *IdeRegsBaseAddr | |
| ); | |
| /// | |
| /// This PPI contains services to enable and disable IDE and SATA channels and | |
| /// retrieves the base I/O port addresses to the enabled IDE and SATA channels. | |
| /// | |
| struct _PEI_ATA_CONTROLLER_PPI { | |
| PEI_ENABLE_ATA EnableAtaChannel; | |
| GET_IDE_REGS_BASE_ADDR GetIdeRegsBaseAddr; | |
| }; | |
| extern EFI_GUID gPeiAtaControllerPpiGuid; | |
| #endif | |