UINT32 ControllerNumber;\r
} CONTROLLER_DEVICE_PATH;\r
\r
+///\r
+/// BMC Device Path SubType.\r
+///\r
+#define HW_BMC_DP 0x06\r
+\r
+///\r
+/// BMC Device Path.\r
+///\r
+typedef struct {\r
+ EFI_DEVICE_PATH_PROTOCOL Header;\r
+ ///\r
+ /// Interface Type.\r
+ ///\r
+ UINT8 InterfaceType;\r
+ ///\r
+ /// Base Address.\r
+ ///\r
+ UINT8 BaseAddress[8];\r
+} BMC_DEVICE_PATH;\r
+\r
///\r
/// ACPI Device Paths.\r
///\r
VENDOR_DEVICE_PATH Vendor;\r
\r
CONTROLLER_DEVICE_PATH Controller;\r
+ BMC_DEVICE_PATH Bmc;\r
ACPI_HID_DEVICE_PATH Acpi;\r
ACPI_EXTENDED_HID_DEVICE_PATH ExtendedAcpi;\r
ACPI_ADR_DEVICE_PATH AcpiAdr;\r
VENDOR_DEVICE_PATH *Vendor;\r
\r
CONTROLLER_DEVICE_PATH *Controller;\r
+ BMC_DEVICE_PATH *Bmc;\r
ACPI_HID_DEVICE_PATH *Acpi;\r
ACPI_EXTENDED_HID_DEVICE_PATH *ExtendedAcpi;\r
ACPI_ADR_DEVICE_PATH *AcpiAdr;\r
return (EFI_DEVICE_PATH_PROTOCOL *) Controller;\r
}\r
\r
+/**\r
+ Converts a text device path node to BMC device path structure.\r
+\r
+ @param TextDeviceNode The input Text device path node.\r
+\r
+ @return A pointer to the newly-created BMC device path structure.\r
+\r
+**/\r
+EFI_DEVICE_PATH_PROTOCOL *\r
+DevPathFromTextBmc (\r
+ IN CHAR16 *TextDeviceNode\r
+ )\r
+{\r
+ CHAR16 *InterfaceTypeStr;\r
+ CHAR16 *BaseAddressStr;\r
+ BMC_DEVICE_PATH *BmcDp;\r
+\r
+ InterfaceTypeStr = GetNextParamStr (&TextDeviceNode);\r
+ BaseAddressStr = GetNextParamStr (&TextDeviceNode);\r
+ BmcDp = (BMC_DEVICE_PATH *) CreateDeviceNode (\r
+ HARDWARE_DEVICE_PATH,\r
+ HW_BMC_DP,\r
+ (UINT16) sizeof (BMC_DEVICE_PATH)\r
+ );\r
+\r
+ BmcDp->InterfaceType = (UINT8) Strtoi (InterfaceTypeStr);\r
+ WriteUnaligned64 (\r
+ (UINT64 *) (&BmcDp->BaseAddress),\r
+ StrHexToUint64 (BaseAddressStr)\r
+ );\r
+\r
+ return (EFI_DEVICE_PATH_PROTOCOL *) BmcDp;\r
+}\r
+\r
/**\r
Converts a generic ACPI text device path node to ACPI device path structure.\r
\r
{L"MemoryMapped", DevPathFromTextMemoryMapped },\r
{L"VenHw", DevPathFromTextVenHw },\r
{L"Ctrl", DevPathFromTextCtrl },\r
+ {L"Bmc", DevPathFromTextBmc },\r
\r
{L"AcpiPath", DevPathFromTextAcpiPath },\r
{L"Acpi", DevPathFromTextAcpi },\r
);\r
}\r
\r
+/**\r
+ Converts a BMC device path structure to its string representative.\r
+\r
+ @param Str The string representative of input device.\r
+ @param DevPath The input device path structure.\r
+ @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation\r
+ of the display node is used, where applicable. If DisplayOnly\r
+ is FALSE, then the longer text representation of the display node\r
+ is used.\r
+ @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text\r
+ representation for a device node can be used, where applicable.\r
+\r
+**/\r
+VOID\r
+DevPathToTextBmc (\r
+ IN OUT POOL_PRINT *Str,\r
+ IN VOID *DevPath,\r
+ IN BOOLEAN DisplayOnly,\r
+ IN BOOLEAN AllowShortcuts\r
+ )\r
+{\r
+ BMC_DEVICE_PATH *Bmc;\r
+\r
+ Bmc = DevPath;\r
+ UefiDevicePathLibCatPrint (\r
+ Str,\r
+ L"Bmc(0x%x,0x%lx)",\r
+ Bmc->InterfaceType,\r
+ ReadUnaligned64 ((UINT64 *) (&Bmc->BaseAddress))\r
+ );\r
+}\r
+\r
/**\r
Converts a ACPI device path structure to its string representative.\r
\r
{HARDWARE_DEVICE_PATH, HW_MEMMAP_DP, DevPathToTextMemMap },\r
{HARDWARE_DEVICE_PATH, HW_VENDOR_DP, DevPathToTextVendor },\r
{HARDWARE_DEVICE_PATH, HW_CONTROLLER_DP, DevPathToTextController },\r
+ {HARDWARE_DEVICE_PATH, HW_BMC_DP, DevPathToTextBmc },\r
{ACPI_DEVICE_PATH, ACPI_DP, DevPathToTextAcpi },\r
{ACPI_DEVICE_PATH, ACPI_EXTENDED_DP, DevPathToTextAcpiEx },\r
{ACPI_DEVICE_PATH, ACPI_ADR_DP, DevPathToTextAcpiAdr },\r