mirror of https://github.com/acidanthera/audk.git
135 lines
4.3 KiB
C
135 lines
4.3 KiB
C
/** @file
|
|
PCI Incompatible device support Libary.
|
|
|
|
Copyright (c) 2007 Intel Corporation. All rights reserved. <BR>
|
|
This software and associated documentation (if any) is furnished
|
|
under a license and may only be used or copied in accordance
|
|
with the terms of the license. Except as permitted by such
|
|
license, no part of this software or documentation may be
|
|
reproduced, stored in a retrieval system, or transmitted in any
|
|
form or by any means without the express written consent of
|
|
Intel Corporation.
|
|
|
|
**/
|
|
|
|
#define PCI_REGISTER_READ 0xfffffffffffffff1ULL
|
|
#define PCI_REGISTER_WRITE 0xfffffffffffffff2ULL
|
|
#define VALUE_NOCARE 0xffffffffffffffffULL
|
|
|
|
//
|
|
// PCI device device information
|
|
//
|
|
typedef struct {
|
|
UINT64 VendorID;
|
|
UINT64 DeviceID;
|
|
UINT64 RevisionID;
|
|
UINT64 SubsystemVendorID;
|
|
UINT64 SubsystemID;
|
|
} EFI_PCI_DEVICE_INFO;
|
|
|
|
|
|
//
|
|
// store hardcode value of resgister
|
|
//
|
|
typedef struct {
|
|
UINT64 AndValue;
|
|
UINT64 OrValue;
|
|
} EFI_PCI_REGISTER_VALUE_DATA;
|
|
|
|
//
|
|
// store access width information
|
|
//
|
|
typedef struct {
|
|
UINT64 StartOffset;
|
|
UINT64 EndOffset;
|
|
UINT64 Width;
|
|
} EFI_PCI_REGISTER_ACCESS_DATA;
|
|
|
|
|
|
//
|
|
// ACPI resource descriptor
|
|
//
|
|
typedef struct {
|
|
UINT64 ResType;
|
|
UINT64 GenFlag;
|
|
UINT64 SpecificFlag;
|
|
UINT64 AddrSpaceGranularity;
|
|
UINT64 AddrRangeMin;
|
|
UINT64 AddrRangeMax;
|
|
UINT64 AddrTranslationOffset;
|
|
UINT64 AddrLen;
|
|
} EFI_PCI_RESOUCE_DESCRIPTOR;
|
|
|
|
/**
|
|
Checks the incompatible device list for ACPI resource update and return
|
|
the configuration.
|
|
|
|
This function searches the incompatible device list according to request
|
|
information. If the PCI device belongs to the devices list, corresponding
|
|
configuration informtion will be returned, in the meantime return EFI_SUCCESS.
|
|
|
|
@param PciDeviceInfo A pointer to PCI device information.
|
|
@param Configuration Returned information.
|
|
|
|
@retval returns EFI_SUCCESS if check incompatible device ok.
|
|
Otherwise return EFI_UNSUPPORTED.
|
|
**/
|
|
RETURN_STATUS
|
|
EFIAPI
|
|
PciResourceUpdateCheck (
|
|
IN EFI_PCI_DEVICE_INFO *PciDeviceInfo,
|
|
OUT VOID *Configuration
|
|
);
|
|
|
|
/**
|
|
Checks the incompatible device list and return configuration register mask values.
|
|
|
|
This function searches the incompatible device list according to request
|
|
information. If the PCI device belongs to the devices list, corresponding
|
|
configuration informtion will be returned, in the meantime return EFI_SUCCESS.
|
|
|
|
@param PciDeviceInfo A pointer to EFI_PCI_DEVICE_INFO.
|
|
@param AccessType Access Type, READ or WRITE.
|
|
@param Offset The address within the PCI configuration space.
|
|
@param Configuration Returned information.
|
|
|
|
@retval returns EFI_SUCCESS if check incompatible device ok.
|
|
Otherwise return EFI_UNSUPPORTED.
|
|
**/
|
|
RETURN_STATUS
|
|
EFIAPI
|
|
PciRegisterUpdateCheck (
|
|
IN EFI_PCI_DEVICE_INFO *PciDeviceInfo,
|
|
IN UINT64 AccessType,
|
|
IN UINT64 Offset,
|
|
OUT VOID *Configuration
|
|
);
|
|
|
|
/**
|
|
Checks the incompatible device list for access width incompatibility and
|
|
return the configuration
|
|
|
|
This function searches the incompatible device list for access width
|
|
incompatibility according to request information. If the PCI device
|
|
belongs to the devices list, corresponding configuration informtion
|
|
will be returned, in the meantime return EFI_SUCCESS.
|
|
|
|
@param PciDeviceInfo A pointer to PCI device information.
|
|
@param AccessType Access type, READ or WRITE.
|
|
@param Offset The address within the PCI configuration space.
|
|
@param AccessWidth Access width needs to check incompatibility.
|
|
@param Configuration Returned information.
|
|
|
|
@retval returns EFI_SUCCESS if check incompatible device ok.
|
|
Otherwise return EFI_UNSUPPORTED.
|
|
**/
|
|
RETURN_STATUS
|
|
EFIAPI
|
|
PciRegisterAccessCheck (
|
|
IN EFI_PCI_DEVICE_INFO *PciDeviceInfo,
|
|
IN UINT64 AccessType,
|
|
IN UINT64 Offset,
|
|
IN UINT64 AccessWidth,
|
|
OUT VOID *Configuration
|
|
);
|