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: Laszlo Ersek <lersek@redhat.com>
		
			
				
	
	
		
			215 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			215 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   The SioBusDxe driver is used to create child devices on the ISA bus and
 | |
|   installs the Super I/O protocols on them.
 | |
| 
 | |
|   Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
 | |
| 
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef __SIO_SERVICE_H__
 | |
| #define __SIO_SERVICE_H__
 | |
| 
 | |
| #pragma pack(1)
 | |
| 
 | |
| typedef struct {
 | |
|   EFI_ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR  Io;
 | |
|   EFI_ACPI_END_TAG_DESCRIPTOR                 End;
 | |
| } SIO_RESOURCES_IO;
 | |
| 
 | |
| #pragma pack()
 | |
| 
 | |
| typedef struct {
 | |
|   UINT32                      Hid;
 | |
|   UINT32                      Uid;
 | |
|   ACPI_RESOURCE_HEADER_PTR    Resources;
 | |
| } SIO_DEVICE_INFO;
 | |
| 
 | |
| //
 | |
| // SIO device private data structure
 | |
| //
 | |
| typedef struct {
 | |
|   UINT32                      Signature;
 | |
|   EFI_HANDLE                  Handle;
 | |
|   EFI_PCI_IO_PROTOCOL         *PciIo;
 | |
|   EFI_DEVICE_PATH_PROTOCOL    *DevicePath;
 | |
| 
 | |
|   EFI_SIO_PROTOCOL            Sio;
 | |
|   UINT32                      DeviceIndex;
 | |
| } SIO_DEV;
 | |
| #define SIO_DEV_SIGNATURE      SIGNATURE_32 ('S', 'I', 'O', 'D')
 | |
| #define SIO_DEV_FROM_SIO(a)    CR (a, SIO_DEV, Sio, SIO_DEV_SIGNATURE)
 | |
| 
 | |
| 
 | |
| //
 | |
| // Super I/O Protocol interfaces
 | |
| //
 | |
| 
 | |
| /**
 | |
|   Provides a low level access to the registers for the Super I/O.
 | |
| 
 | |
|   @param[in]     This           Indicates a pointer to the calling context.
 | |
|   @param[in]     Write          Specifies the type of the register operation.
 | |
|                                 If this parameter is TRUE, Value is interpreted
 | |
|                                 as an input parameter and the operation is a
 | |
|                                 register write. If this parameter is FALSE,
 | |
|                                 Value is interpreted as an output parameter and
 | |
|                                 the operation is a register read.
 | |
|   @param[in]     ExitCfgMode    Exit Configuration Mode Indicator. If this
 | |
|                                 parameter is set to TRUE, the Super I/O driver
 | |
|                                 will turn off configuration mode of the Super
 | |
|                                 I/O prior to returning from this function. If
 | |
|                                 this parameter is set to FALSE, the Super I/O
 | |
|                                 driver will leave Super I/O in the
 | |
|                                 configuration mode. The Super I/O driver must
 | |
|                                 track the current state of the Super I/O and
 | |
|                                 enable the configuration mode of Super I/O if
 | |
|                                 necessary prior to register access.
 | |
|   @param[in]     Register       Register number.
 | |
|   @param[in,out] Value          If Write is TRUE, Value is a pointer to the
 | |
|                                 buffer containing the byte of data to be
 | |
|                                 written to the Super I/O register. If Write is
 | |
|                                 FALSE, Value is a pointer to the destination
 | |
|                                 buffer for the byte of data to be read from the
 | |
|                                 Super I/O register.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The operation completed successfully.
 | |
|   @retval EFI_INVALID_PARAMETER The Value is NULL.
 | |
|   @retval EFI_INVALID_PARAMETER Invalid Register number.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| SioRegisterAccess (
 | |
|   IN CONST EFI_SIO_PROTOCOL    *This,
 | |
|   IN       BOOLEAN             Write,
 | |
|   IN       BOOLEAN             ExitCfgMode,
 | |
|   IN       UINT8               Register,
 | |
|   IN OUT   UINT8               *Value
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Provides an interface to get a list of the current resources consumed by the
 | |
|   device in the ACPI Resource Descriptor format.
 | |
| 
 | |
|   GetResources() returns a list of resources currently consumed by the device.
 | |
|   The ResourceList is a pointer to the buffer containing resource descriptors
 | |
|   for the device. The descriptors are in the format of Small or Large ACPI
 | |
|   resource descriptor as defined by ACPI specification (2.0 & 3.0). The buffer
 | |
|   of resource descriptors is terminated with the 'End tag' resource descriptor.
 | |
| 
 | |
|   @param[in]  This              Indicates a pointer to the calling context.
 | |
|   @param[out] ResourceList      A pointer to an ACPI resource descriptor list
 | |
|                                 that defines the current resources used by the
 | |
|                                 device.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The operation completed successfully.
 | |
|   @retval EFI_INVALID_PARAMETER ResourceList is NULL.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| SioGetResources (
 | |
|   IN CONST EFI_SIO_PROTOCOL            *This,
 | |
|   OUT      ACPI_RESOURCE_HEADER_PTR    *ResourceList
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Sets the resources for the device.
 | |
| 
 | |
|   @param[in] This               Indicates a pointer to the calling context.
 | |
|   @param[in] ResourceList       Pointer to the ACPI resource descriptor list.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The operation completed successfully.
 | |
|   @retval EFI_INVALID_PARAMETER ResourceList is invalid.
 | |
|   @retval EFI_ACCESS_DENIED     Some of the resources in ResourceList are in
 | |
|                                 use.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| SioSetResources (
 | |
|   IN CONST EFI_SIO_PROTOCOL            *This,
 | |
|   IN       ACPI_RESOURCE_HEADER_PTR    ResourceList
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Provides a collection of resource descriptor lists. Each resource descriptor
 | |
|   list in the collection defines a combination of resources that can
 | |
|   potentially be used by the device.
 | |
| 
 | |
|   @param[in]  This                  Indicates a pointer to the calling context.
 | |
|   @param[out] ResourceCollection    Collection of the resource descriptor
 | |
|                                     lists.
 | |
| 
 | |
|   @retval EFI_SUCCESS               The operation completed successfully.
 | |
|   @retval EFI_INVALID_PARAMETER     ResourceCollection is NULL.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| SioPossibleResources (
 | |
|   IN CONST EFI_SIO_PROTOCOL            *This,
 | |
|   OUT      ACPI_RESOURCE_HEADER_PTR    *ResourceCollection
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Provides an interface for a table based programming of the Super I/O
 | |
|   registers.
 | |
| 
 | |
|   The Modify() function provides an interface for table based programming of
 | |
|   the Super I/O registers. This function can be used to perform programming of
 | |
|   multiple Super I/O registers with a single function call. For each table
 | |
|   entry, the Register is read, its content is bitwise ANDed with AndMask, and
 | |
|   then ORed with OrMask before being written back to the Register. The Super
 | |
|   I/O driver must track the current state of the Super I/O and enable the
 | |
|   configuration mode of Super I/O if necessary prior to table processing. Once
 | |
|   the table is processed, the Super I/O device has to be returned to the
 | |
|   original state.
 | |
| 
 | |
|   @param[in] This               Indicates a pointer to the calling context.
 | |
|   @param[in] Command            A pointer to an array of NumberOfCommands
 | |
|                                 EFI_SIO_REGISTER_MODIFY structures. Each
 | |
|                                 structure specifies a single Super I/O register
 | |
|                                 modify operation.
 | |
|   @param[in] NumberOfCommands   Number of elements in the Command array.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The operation completed successfully.
 | |
|   @retval EFI_INVALID_PARAMETER Command is NULL.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| SioModify (
 | |
|   IN CONST EFI_SIO_PROTOCOL           *This,
 | |
|   IN CONST EFI_SIO_REGISTER_MODIFY    *Command,
 | |
|   IN       UINTN                      NumberOfCommands
 | |
|   );
 | |
| 
 | |
| //
 | |
| // Internal functions
 | |
| //
 | |
| 
 | |
| /**
 | |
|   Create all the ISA child devices on the ISA bus controller (PCI to ISA
 | |
|   bridge).
 | |
| 
 | |
|   @param[in] This              The EFI_DRIVER_BINDING_PROTOCOL instance.
 | |
|   @param[in] Controller        The handle of ISA bus controller.
 | |
|   @param[in] PciIo             The pointer to the PCI protocol.
 | |
|   @param[in] ParentDevicePath  Device path of the ISA bus controller.
 | |
| 
 | |
|   @retval The number of child device that is successfully created.
 | |
| 
 | |
| **/
 | |
| UINT32
 | |
| SioCreateAllChildDevices (
 | |
|   IN EFI_DRIVER_BINDING_PROTOCOL  *This,
 | |
|   IN EFI_HANDLE                   Controller,
 | |
|   IN EFI_PCI_IO_PROTOCOL          *PciIo,
 | |
|   IN EFI_DEVICE_PATH_PROTOCOL     *ParentDevicePath
 | |
|   );
 | |
| 
 | |
| #endif  // __SIO_SERVICE_H__
 |