https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
		
			
				
	
	
		
			299 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			299 lines
		
	
	
		
			12 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 - 2018, Intel Corporation. All rights reserved.<BR>
 | 
						|
SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#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
 |