/** @file
  Deal with devices that just exist in memory space.

  To follow the EFI driver model you need a root handle to start with. An
  EFI driver will have a driver binding protocol (Supported, Start, Stop)
  that is used to layer on top of a handle via a gBS->ConnectController.
  The first handle has to just be in the system to make that work. For
  PCI it is a PCI Root Bridge IO protocol that provides the root.

  On an embedded system with MMIO device we need a handle to just
  show up. That handle will have this protocol and a device path
  protocol on it.

  For an ethernet device the device path must contain a MAC address device path
  node.

  Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>

  SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef __EMBEDDED_DEVICE_PROTOCOL_H__
#define __EMBEDDED_DEVICE_PROTOCOL_H__


//
// Protocol GUID
//
// BF4B9D10-13EC-43dd-8880-E90B718F27DE

#define EMBEDDED_DEVICE_PROTOCOL_GUID \
  { 0xbf4b9d10, 0x13ec, 0x43dd, { 0x88, 0x80, 0xe9, 0xb, 0x71, 0x8f, 0x27, 0xde } }



typedef struct {
  UINT16          VendorId;
  UINT16          DeviceId;
  UINT16          RevisionId;
  UINT16          SubsystemId;
  UINT16          SubsystemVendorId;
  UINT8           ClassCode[3];
  UINT8           HeaderSize;
  UINTN           BaseAddress;
} EMBEDDED_DEVICE_PROTOCOL;

extern EFI_GUID gEmbeddedDeviceGuid;

#endif


