git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10414 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			305 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			305 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   EFI ISA ACPI Protocol is used to enumerate and manage all the ISA controllers on
 | |
|   the platform's ISA Bus.
 | |
| 
 | |
| Copyright (c) 2006 - 2010, 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 that 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 __ISA_ACPI_H_
 | |
| #define __ISA_ACPI_H_
 | |
| 
 | |
| ///
 | |
| /// Global ID for the EFI ISA ACPI Protocol.
 | |
| ///
 | |
| #define EFI_ISA_ACPI_PROTOCOL_GUID \
 | |
|   { \
 | |
|     0x64a892dc, 0x5561, 0x4536, { 0x92, 0xc7, 0x79, 0x9b, 0xfc, 0x18, 0x33, 0x55 } \
 | |
|   }
 | |
| 
 | |
| ///
 | |
| /// Forward declaration fo the EFI ISA ACPI Protocol
 | |
| ///
 | |
| typedef struct _EFI_ISA_ACPI_PROTOCOL EFI_ISA_ACPI_PROTOCOL;
 | |
| 
 | |
| ///
 | |
| /// ISA ACPI Protocol interrupt resource attributes.
 | |
| ///
 | |
| #define EFI_ISA_ACPI_IRQ_TYPE_HIGH_TRUE_EDGE_SENSITIVE   0x01   ///< Edge triggered interrupt on a rising edge.
 | |
| #define EFI_ISA_ACPI_IRQ_TYPE_LOW_TRUE_EDGE_SENSITIVE    0x02   ///< Edge triggered interrupt on a falling edge.
 | |
| #define EFI_ISA_ACPI_IRQ_TYPE_HIGH_TRUE_LEVEL_SENSITIVE  0x04   ///< Level sensitive interrupt active high.
 | |
| #define EFI_ISA_ACPI_IRQ_TYPE_LOW_TRUE_LEVEL_SENSITIVE   0x08   ///< Level sensitive interrupt active low.
 | |
| 
 | |
| ///
 | |
| /// ISA ACPI Protocol DMA resource attributes.
 | |
| ///
 | |
| #define EFI_ISA_ACPI_DMA_SPEED_TYPE_MASK                 0x03   ///< Bit mask of supported DMA speed attributes.
 | |
| #define EFI_ISA_ACPI_DMA_SPEED_TYPE_COMPATIBILITY        0x00   ///< ISA controller supports compatibility mode DMA transfers.
 | |
| #define EFI_ISA_ACPI_DMA_SPEED_TYPE_A                    0x01   ///< ISA controller supports type A DMA transfers.
 | |
| #define EFI_ISA_ACPI_DMA_SPEED_TYPE_B                    0x02   ///< ISA controller supports type B DMA transfers.
 | |
| #define EFI_ISA_ACPI_DMA_SPEED_TYPE_F                    0x03   ///< ISA controller supports type F DMA transfers.
 | |
| #define EFI_ISA_ACPI_DMA_COUNT_BY_BYTE                   0x04   ///< ISA controller increments DMA address by bytes (8-bit).
 | |
| #define EFI_ISA_ACPI_DMA_COUNT_BY_WORD                   0x08   ///< ISA controller increments DMA address by words (16-bit).
 | |
| #define EFI_ISA_ACPI_DMA_BUS_MASTER                      0x10   ///< ISA controller is a DMA bus master.
 | |
| #define EFI_ISA_ACPI_DMA_TRANSFER_TYPE_8_BIT             0x20   ///< ISA controller only supports 8-bit DMA transfers.
 | |
| #define EFI_ISA_ACPI_DMA_TRANSFER_TYPE_8_BIT_AND_16_BIT  0x40   ///< ISA controller both 8-bit and 16-bit DMA transfers.
 | |
| #define EFI_ISA_ACPI_DMA_TRANSFER_TYPE_16_BIT            0x80   ///< ISA controller only supports 16-bit DMA transfers.
 | |
| 
 | |
| ///
 | |
| /// ISA ACPI Protocol MMIO resource attributes
 | |
| ///
 | |
| #define EFI_ISA_ACPI_MEMORY_WIDTH_MASK                   0x03   ///< Bit mask of supported ISA memory width attributes.
 | |
| #define EFI_ISA_ACPI_MEMORY_WIDTH_8_BIT                  0x00   ///< ISA MMIO region only supports 8-bit access.
 | |
| #define EFI_ISA_ACPI_MEMORY_WIDTH_16_BIT                 0x01   ///< ISA MMIO region only supports 16-bit access.
 | |
| #define EFI_ISA_ACPI_MEMORY_WIDTH_8_BIT_AND_16_BIT       0x02   ///< ISA MMIO region supports both 8-bit and 16-bit access.
 | |
| #define EFI_ISA_ACPI_MEMORY_WRITEABLE                    0x04   ///< ISA MMIO region supports write transactions.
 | |
| #define EFI_ISA_ACPI_MEMORY_CACHEABLE                    0x08   ///< ISA MMIO region supports being cached.
 | |
| #define EFI_ISA_ACPI_MEMORY_SHADOWABLE                   0x10   ///< ISA MMIO region may be shadowed.
 | |
| #define EFI_ISA_ACPI_MEMORY_EXPANSION_ROM                0x20   ///< ISA MMIO region is an expansion ROM.
 | |
| 
 | |
| ///
 | |
| /// ISA ACPI Protocol I/O resource attributes
 | |
| ///
 | |
| #define EFI_ISA_ACPI_IO_DECODE_10_BITS                   0x01    ///< ISA controllers uses a 10-bit address decoder for I/O cycles.
 | |
| #define EFI_ISA_ACPI_IO_DECODE_16_BITS                   0x02    ///< ISA controllers uses a 16-bit address decoder for I/O cycles.
 | |
| 
 | |
| ///
 | |
| /// EFI ISA ACPI resource type 
 | |
| ///
 | |
| typedef enum {
 | |
|   EfiIsaAcpiResourceEndOfList,    ///< Marks the end if a resource list.
 | |
|   EfiIsaAcpiResourceIo,           ///< ISA I/O port resource range.
 | |
|   EfiIsaAcpiResourceMemory,       ///< ISA MMIO resource range.
 | |
|   EfiIsaAcpiResourceDma,          ///< ISA DMA resource. 
 | |
|   EfiIsaAcpiResourceInterrupt     ///< ISA interrupt resource.
 | |
| } EFI_ISA_ACPI_RESOURCE_TYPE;
 | |
| 
 | |
| ///
 | |
| /// EFI ISA ACPI generic resource structure
 | |
| ///
 | |
| typedef struct {
 | |
|   EFI_ISA_ACPI_RESOURCE_TYPE  Type;         ///< The type of resource (I/O, MMIO, DMA, Interrupt).
 | |
|   UINT32                      Attribute;    ///< Bit mask of attributes associated with this resource.  See EFI_ISA_ACPI_xxx macros for valid combinations.
 | |
|   UINT32                      StartRange;   ///< The start of the resource range.
 | |
|   UINT32                      EndRange;     ///< The end of the resource range.
 | |
| } EFI_ISA_ACPI_RESOURCE;
 | |
| 
 | |
| ///
 | |
| /// EFI ISA ACPI resource device identifier
 | |
| ///
 | |
| typedef struct {
 | |
|   UINT32  HID;   ///< The ACPI Hardware Identifier value associated with an ISA controller.  Matchs ACPI DSDT contents.
 | |
|   UINT32  UID;   ///< The ACPI Unique Identifier value associated with an ISA controller.  Matches ACPI DSDT contents.
 | |
| } EFI_ISA_ACPI_DEVICE_ID;
 | |
| 
 | |
| ///
 | |
| /// EFI ISA ACPI resource list
 | |
| ///
 | |
| typedef struct {
 | |
|   EFI_ISA_ACPI_DEVICE_ID  Device;          ///< The ACPI HID/UID associated with an ISA controller.
 | |
|   EFI_ISA_ACPI_RESOURCE   *ResourceItem;   ///< A pointer to the list of resources associated with an ISA controller.
 | |
| } EFI_ISA_ACPI_RESOURCE_LIST;
 | |
| 
 | |
| /**
 | |
|   Enumerates the ISA controllers on an ISA bus.
 | |
| 
 | |
|   This service allows all the ISA controllers on an ISA bus to be enumerated.  If
 | |
|   Device is a pointer to a NULL value, then the first ISA controller on the ISA
 | |
|   bus is returned in Device and EFI_SUCCESS is returned.  If Device is a pointer 
 | |
|   to a value that was returned on a prior call to DeviceEnumerate(), then the next 
 | |
|   ISA controller on the ISA bus is returned in Device and EFI_SUCCESS is returned.
 | |
|   If Device is a pointer to the last ISA controller on the ISA bus, then 
 | |
|   EFI_NOT_FOUND is returned.
 | |
| 
 | |
|   @param[in]  This     The pointer to the EFI_ISA_ACPI_PROTOCOL instance.
 | |
|   @param[out] Device   The pointer to an ISA controller named by ACPI HID/UID.
 | |
| 
 | |
|   @retval EFI_SUCCESS    The next ISA controller on the ISA bus was returned.
 | |
|   @retval EFI_NOT_FOUND  No device found.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_ISA_ACPI_DEVICE_ENUMERATE)(
 | |
|   IN  EFI_ISA_ACPI_PROTOCOL   *This,
 | |
|   OUT EFI_ISA_ACPI_DEVICE_ID  **Device
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Sets the power state of an ISA controller.
 | |
| 
 | |
|   This services sets the power state of the ISA controller specified by Device to 
 | |
|   the power state specified by OnOff.  TRUE denotes on, FALSE denotes off. 
 | |
|   If the power state is sucessfully set on the ISA Controller, then
 | |
|   EFI_SUCCESS is returned.
 | |
| 
 | |
|   @param[in] This     The pointer to the EFI_ISA_ACPI_PROTOCOL instance.
 | |
|   @param[in] Device   The pointer to an ISA controller named by ACPI HID/UID.
 | |
|   @param[in] OnOff    TRUE denotes on, FALSE denotes off.
 | |
| 
 | |
|   @retval EFI_SUCCESS   Successfully set the power state of the ISA controller.
 | |
|   @retval Other         The ISA controller could not be placed in the requested power state.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_ISA_ACPI_SET_DEVICE_POWER)(
 | |
|   IN EFI_ISA_ACPI_PROTOCOL   *This,
 | |
|   IN EFI_ISA_ACPI_DEVICE_ID  *Device,
 | |
|   IN BOOLEAN                 OnOff
 | |
|   );
 | |
|   
 | |
| /**
 | |
|   Retrieves the current set of resources associated with an ISA controller.
 | |
| 
 | |
|   Retrieves the set of I/O, MMIO, DMA, and interrupt resources currently 
 | |
|   assigned to the ISA controller specified by Device.  These resources
 | |
|   are returned in ResourceList.
 | |
| 
 | |
|   @param[in]  This          The pointer to the EFI_ISA_ACPI_PROTOCOL instance.
 | |
|   @param[in]  Device        The pointer to an ISA controller named by ACPI HID/UID.
 | |
|   @param[out] ResourceList  The pointer to the current resource list for Device.
 | |
| 
 | |
|   @retval EFI_SUCCESS    Successfully retrieved the current resource list.
 | |
|   @retval EFI_NOT_FOUND  The resource list could not be retrieved.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_ISA_ACPI_GET_CUR_RESOURCE)(
 | |
|   IN  EFI_ISA_ACPI_PROTOCOL       *This,
 | |
|   IN  EFI_ISA_ACPI_DEVICE_ID      *Device,
 | |
|   OUT EFI_ISA_ACPI_RESOURCE_LIST  **ResourceList
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Retrieves the set of possible resources that may be assigned to an ISA controller
 | |
|   with SetResource().
 | |
| 
 | |
|   Retrieves the possible sets of I/O, MMIO, DMA, and interrupt resources for the
 | |
|   ISA controller specified by Device.  The sets are returned in ResourceList.
 | |
| 
 | |
|   @param[in]  This           The pointer to the EFI_ISA_ACPI_PROTOCOL instance.
 | |
|   @param[in]  Device         The pointer to an ISA controller named by ACPI HID/UID.
 | |
|   @param[out] ResourceList   The pointer to the returned list of resource lists.
 | |
| 
 | |
|   @retval EFI_UNSUPPORTED  This service is not supported.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_ISA_ACPI_GET_POS_RESOURCE)(
 | |
|   IN EFI_ISA_ACPI_PROTOCOL        *This,
 | |
|   IN EFI_ISA_ACPI_DEVICE_ID       *Device,
 | |
|   OUT EFI_ISA_ACPI_RESOURCE_LIST  **ResourceList
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Assigns resources to an ISA controller.
 | |
| 
 | |
|   Assigns the I/O, MMIO, DMA, and interrupt resources specified by ResourceList
 | |
|   to the ISA controller specified by Device.  ResourceList must match a resource list returned by GetPosResource() for the same ISA controller.
 | |
| 
 | |
|   @param[in] This           The pointer to the EFI_ISA_ACPI_PROTOCOL instance.
 | |
|   @param[in] Device         The pointer to an ISA controller named by ACPI HID/UID.
 | |
|   @param[in] ResourceList   The pointer to a resources list that must be one of the 
 | |
|                             resource lists returned by GetPosResource() for the
 | |
|                             ISA controller specified by Device.
 | |
| 
 | |
|   @retval EFI_SUCCESS  Successfully set resources on the ISA controller.
 | |
|   @retval Other        The resources could not be set for the ISA controller.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_ISA_ACPI_SET_RESOURCE)(
 | |
|   IN EFI_ISA_ACPI_PROTOCOL       *This,
 | |
|   IN EFI_ISA_ACPI_DEVICE_ID      *Device,
 | |
|   IN EFI_ISA_ACPI_RESOURCE_LIST  *ResourceList
 | |
|   );    
 | |
| 
 | |
| /**
 | |
|   Enables or disables an ISA controller.
 | |
| 
 | |
|   @param[in] This     The pointer to the EFI_ISA_ACPI_PROTOCOL instance.
 | |
|   @param[in] Device   The pointer to the ISA controller to enable/disable.
 | |
|   @param[in] Enable   TRUE to enable the ISA controller.  FALSE to disable the
 | |
|                       ISA controller.
 | |
| 
 | |
|   @retval EFI_SUCCESS   Successfully enabled/disabled the ISA controller.
 | |
|   @retval Other         The ISA controller could not be placed in the requested state.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_ISA_ACPI_ENABLE_DEVICE)(
 | |
|   IN EFI_ISA_ACPI_PROTOCOL   *This,
 | |
|   IN EFI_ISA_ACPI_DEVICE_ID  *Device,
 | |
|   IN BOOLEAN                 Enable
 | |
|   );    
 | |
| 
 | |
| /**
 | |
|   Initializes an ISA controller, so that it can be used.  This service must be called
 | |
|   before SetResource(), EnableDevice(), or SetPower() will behave as expected.
 | |
| 
 | |
|   @param[in] This     The pointer to the EFI_ISA_ACPI_PROTOCOL instance.
 | |
|   @param[in] Device   The pointer to an ISA controller named by ACPI HID/UID.
 | |
| 
 | |
|   @retval EFI_SUCCESS   Successfully initialized an ISA controller.
 | |
|   @retval Other         The ISA controller could not be initialized.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_ISA_ACPI_INIT_DEVICE)(
 | |
|   IN EFI_ISA_ACPI_PROTOCOL   *This,
 | |
|   IN EFI_ISA_ACPI_DEVICE_ID  *Device
 | |
|   );  
 | |
| 
 | |
| /**
 | |
|   Initializes all the HW states required for the ISA controllers on the ISA bus 
 | |
|   to be enumerated and managed by the rest of the services in this prorotol.
 | |
|   This service must be called before any of the other services in this
 | |
|   protocol will function as expected.
 | |
|  
 | |
|   @param[in] This  The pointer to the EFI_ISA_ACPI_PROTOCOL instance.
 | |
| 
 | |
|   @retval EFI_SUCCESS   Successfully initialized all required hardware states.
 | |
|   @retval Other         The ISA interface could not be initialized.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_ISA_ACPI_INTERFACE_INIT)(
 | |
|   IN EFI_ISA_ACPI_PROTOCOL  *This
 | |
|   );
 | |
| 
 | |
| ///
 | |
| /// The EFI_ISA_ACPI_PROTOCOL provides the services to enumerate and manage
 | |
| /// ISA controllers on an ISA bus.  These services include the ability to initialize, 
 | |
| /// enable, disable, and manage the power state of ISA controllers.  It also 
 | |
| /// includes services to query current resources, query possible resources, 
 | |
| /// and assign resources to an ISA controller.
 | |
| ///
 | |
| struct _EFI_ISA_ACPI_PROTOCOL {
 | |
|   EFI_ISA_ACPI_DEVICE_ENUMERATE  DeviceEnumerate;
 | |
|   EFI_ISA_ACPI_SET_DEVICE_POWER  SetPower;
 | |
|   EFI_ISA_ACPI_GET_CUR_RESOURCE  GetCurResource;
 | |
|   EFI_ISA_ACPI_GET_POS_RESOURCE  GetPosResource;
 | |
|   EFI_ISA_ACPI_SET_RESOURCE      SetResource;
 | |
|   EFI_ISA_ACPI_ENABLE_DEVICE     EnableDevice;
 | |
|   EFI_ISA_ACPI_INIT_DEVICE       InitDevice;
 | |
|   EFI_ISA_ACPI_INTERFACE_INIT    InterfaceInit;
 | |
| };
 | |
| 
 | |
| extern EFI_GUID gEfiIsaAcpiProtocolGuid;
 | |
|   
 | |
| #endif
 |