--- /dev/null
+/** @file\r
+ Deal with devices that just exist in memory space.\r
+ \r
+ To follow the EFI driver model you need a root handle to start with. An\r
+ EFI driver will have a driver binding protocol (Supported, Start, Stop) \r
+ that is used to layer on top of a handle via a gBS->ConnectController. \r
+ The first handle has to just be in the system to make that work. For\r
+ PCI it is a PCI Root Bridge IO protocol that provides the root. \r
+ \r
+ On an embedded system with MMIO device we need a handle to just \r
+ show up. That handle will have this protocol and a device path \r
+ protocol on it. \r
+ \r
+ For an ethernet device the device path must contain a MAC address device path\r
+ node.\r
+\r
+ Copyright (c) 2008-2009 Apple Inc. All rights reserved.<BR>\r
+\r
+ All rights reserved. This program and the accompanying materials\r
+ are licensed and made available under the terms and conditions of the BSD License\r
+ which accompanies this distribution. The full text of the license may be found at\r
+ http://opensource.org/licenses/bsd-license.php\r
+\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#ifndef __EMBEDDED_DEVICE_PROTOCOL_H__\r
+#define __EMBEDDED_DEVICE_PROTOCOL_H__\r
+\r
+\r
+//\r
+// Protocol GUID\r
+//\r
+// BF4B9D10-13EC-43dd-8880-E90B718F27DE\r
+\r
+#define EMBEDDED_DEVICE_PROTOCOL_GUID \\r
+ { 0xbf4b9d10, 0x13ec, 0x43dd, { 0x88, 0x80, 0xe9, 0xb, 0x71, 0x8f, 0x27, 0xde } }\r
+\r
+\r
+\r
+typedef struct {\r
+ UINT16 VendorId;\r
+ UINT16 DeviceId;\r
+ UINT16 RevisionId;\r
+ UINT16 SubsystemId;\r
+ UINT16 SubsystemVendorId;\r
+ UINT8 ClassCode[3];\r
+ UINT8 HeaderSize;\r
+ UINTN BaseAddress;\r
+} EMBEDDED_DEVICE_PROTOCOL;\r
+\r
+extern EFI_GUID gEmbeddedDeviceGuid;\r
+\r
+#endif\r
+\r
+\r