MdeModulePkg: introduce non-discoverable device protocol

Introduce a protocol that can be exposed by a platform for devices that
are not discoverable, usually because they are wired straight to the
memory bus rather than to an enumerable bus like PCI or USB.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
Tested-by: Marcin Wojtas <mw@semihalf.com>
This commit is contained in:
Ard Biesheuvel
2016-10-31 14:54:56 +00:00
parent 5a066b87bd
commit 9598cdc292
3 changed files with 149 additions and 0 deletions

View File

@ -0,0 +1,77 @@
/** @file
Protocol to describe devices that are not on a discoverable bus
Copyright (c) 2016, Linaro, Ltd. 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 __NON_DISCOVERABLE_DEVICE_H__
#define __NON_DISCOVERABLE_DEVICE_H__
#include <IndustryStandard/Acpi.h>
#define EDKII_NON_DISCOVERABLE_DEVICE_PROTOCOL_GUID \
{ 0x0d51905b, 0xb77e, 0x452a, {0xa2, 0xc0, 0xec, 0xa0, 0xcc, 0x8d, 0x51, 0x4a } }
//
// Protocol interface structure
//
typedef struct _NON_DISCOVERABLE_DEVICE NON_DISCOVERABLE_DEVICE;
//
// Data Types
//
typedef enum {
NonDiscoverableDeviceDmaTypeCoherent,
NonDiscoverableDeviceDmaTypeNonCoherent,
NonDiscoverableDeviceDmaTypeMax,
} NON_DISCOVERABLE_DEVICE_DMA_TYPE;
//
// Function Prototypes
//
/**
Perform device specific initialization before the device is started
@param This The non-discoverable device protocol pointer
@retval EFI_SUCCESS Initialization successful, the device may be used
@retval Other Initialization failed, device should not be started
**/
typedef
EFI_STATUS
(EFIAPI *NON_DISCOVERABLE_DEVICE_INIT) (
IN NON_DISCOVERABLE_DEVICE *This
);
struct _NON_DISCOVERABLE_DEVICE {
//
// The type of device
//
CONST EFI_GUID *Type;
//
// Whether this device is DMA coherent
//
NON_DISCOVERABLE_DEVICE_DMA_TYPE DmaType;
//
// Initialization function for the device
//
NON_DISCOVERABLE_DEVICE_INIT Initialize;
//
// The MMIO and I/O regions owned by the device
//
EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Resources;
};
extern EFI_GUID gEdkiiNonDiscoverableDeviceProtocolGuid;
#endif