Эх сурвалжийг харах

Add Device Path Utilities Protocol support

Signed-off-by: Kagurazaka Kotori <kagurazakakotori@gmail.com>
Kagurazaka Kotori 4 жил өмнө
parent
commit
ce0bd62f5c
3 өөрчлөгдсөн 80 нэмэгдсэн , 9 устгасан
  1. 77 9
      inc/efidevp.h
  2. 2 0
      inc/efilib.h
  3. 1 0
      lib/data.c

+ 77 - 9
inc/efidevp.h

@@ -122,7 +122,7 @@ typedef struct _CONTROLLER_DEVICE_PATH {
 /*
  * ACPI Device Path (UEFI 2.4 specification, version 2.4 § 9.3.3 and 9.3.4.)
  */
-#define ACPI_DEVICE_PATH                 0x02
+#define ACPI_DEVICE_PATH                0x02
 
 #define ACPI_DP                         0x01
 typedef struct _ACPI_HID_DEVICE_PATH {
@@ -131,13 +131,13 @@ typedef struct _ACPI_HID_DEVICE_PATH {
         UINT32                          UID;
 } ACPI_HID_DEVICE_PATH;
 
-#define EXPANDED_ACPI_DP		0x02
+#define EXPANDED_ACPI_DP                0x02
 typedef struct _EXPANDED_ACPI_HID_DEVICE_PATH {
-	EFI_DEVICE_PATH_PROTOCOL	Header;
-	UINT32				HID;
-	UINT32				UID;
-	UINT32				CID;
-	UINT8				HidStr[1];
+        EFI_DEVICE_PATH_PROTOCOL        Header;
+        UINT32                          HID;
+        UINT32                          UID;
+        UINT32                          CID;
+        UINT8                           HidStr[1];
 } EXPANDED_ACPI_HID_DEVICE_PATH;
 
 #define ACPI_ADR_DP 3
@@ -555,8 +555,8 @@ CHAR16*
     );
 
 typedef struct _EFI_DEVICE_PATH_TO_TEXT_PROTOCOL {
-	EFI_DEVICE_PATH_TO_TEXT_NODE         ConvertDeviceNodeToText;
-	EFI_DEVICE_PATH_TO_TEXT_PATH         ConvertDevicePathToText;
+    EFI_DEVICE_PATH_TO_TEXT_NODE         ConvertDeviceNodeToText;
+    EFI_DEVICE_PATH_TO_TEXT_PATH         ConvertDevicePathToText;
 } EFI_DEVICE_PATH_TO_TEXT_PROTOCOL;
 
 #define EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL_GUID \
@@ -579,4 +579,72 @@ typedef struct {
     EFI_DEVICE_PATH_FROM_TEXT_PATH       ConvertTextToDevicePath;
 } EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL;
 
+#define EFI_DEVICE_PATH_UTILITIES_PROTOCOL_GUID \
+  { 0x379be4e, 0xd706, 0x437d, {0xb0, 0x37, 0xed, 0xb8, 0x2f, 0xb7, 0x72, 0xa4} }
+
+typedef
+UINTN
+(EFIAPI *EFI_DEVICE_PATH_UTILS_GET_DEVICE_PATH_SIZE) (
+    IN CONST EFI_DEVICE_PATH_PROTOCOL    *DevicePath
+    );
+
+typedef
+EFI_DEVICE_PATH_PROTOCOL*
+(EFIAPI *EFI_DEVICE_PATH_UTILS_DUP_DEVICE_PATH) (
+    IN CONST EFI_DEVICE_PATH_PROTOCOL    *DevicePath
+    );
+
+typedef
+EFI_DEVICE_PATH_PROTOCOL*
+(EFIAPI *EFI_DEVICE_PATH_UTILS_APPEND_PATH) (
+    IN CONST EFI_DEVICE_PATH_PROTOCOL    *Src1,
+    IN CONST EFI_DEVICE_PATH_PROTOCOL    *Src2
+    );
+
+typedef
+EFI_DEVICE_PATH_PROTOCOL*
+(EFIAPI *EFI_DEVICE_PATH_UTILS_APPEND_NODE) (
+    IN CONST EFI_DEVICE_PATH_PROTOCOL    *DevicePath,
+    IN CONST EFI_DEVICE_PATH_PROTOCOL    *DeviceNode
+);
+
+typedef
+EFI_DEVICE_PATH_PROTOCOL*
+(EFIAPI *EFI_DEVICE_PATH_UTILS_APPEND_INSTANCE) (
+    IN CONST EFI_DEVICE_PATH_PROTOCOL    *DevicePath,
+    IN CONST EFI_DEVICE_PATH_PROTOCOL    *DevicePathInstance
+);
+
+typedef
+EFI_DEVICE_PATH_PROTOCOL*
+(EFIAPI *EFI_DEVICE_PATH_UTILS_GET_NEXT_INSTANCE) (
+    IN OUT EFI_DEVICE_PATH_PROTOCOL      **DevicePathInstance,
+    OUT UINTN                            *DevicePathInstanceSize OPTIONAL
+);
+
+typedef
+EFI_DEVICE_PATH_PROTOCOL*
+(EFIAPI *EFI_DEVICE_PATH_UTILS_CREATE_NODE) (
+    IN UINT8                             NodeType,
+    IN UINT8                             NodeSubType,
+    IN UINT16                            NodeLength
+    );
+
+typedef
+BOOLEAN
+(EFIAPI *EFI_DEVICE_PATH_UTILS_IS_MULTI_INSTANCE) (
+    IN CONST EFI_DEVICE_PATH_PROTOCOL    *DevicePath
+    );
+
+typedef struct _EFI_DEVICE_PATH_UTILITIES_PROTOCOL {
+    EFI_DEVICE_PATH_UTILS_GET_DEVICE_PATH_SIZE   GetDevicePathSize;
+    EFI_DEVICE_PATH_UTILS_DUP_DEVICE_PATH        DuplicateDevicePath;
+    EFI_DEVICE_PATH_UTILS_APPEND_PATH            AppendDevicePath;
+    EFI_DEVICE_PATH_UTILS_APPEND_NODE            AppendDeviceNode;
+    EFI_DEVICE_PATH_UTILS_APPEND_INSTANCE        AppendDevicePathInstance;
+    EFI_DEVICE_PATH_UTILS_GET_NEXT_INSTANCE      GetNextDevicePathInstance;
+    EFI_DEVICE_PATH_UTILS_IS_MULTI_INSTANCE      IsDevicePathMultiInstance;
+    EFI_DEVICE_PATH_UTILS_CREATE_NODE            CreateDeviceNode;
+} EFI_DEVICE_PATH_UTILITIES_PROTOCOL;
+
 #endif

+ 2 - 0
inc/efilib.h

@@ -45,6 +45,8 @@ extern EFI_GUID gEfiDevicePathToTextProtocolGuid;
 #define DevicePathToTextProtocol gEfiDevicePathToTextProtocolGuid
 extern EFI_GUID gEfiDevicePathFromTextProtocolGuid;
 #define DevicePathFromTextProtocol gEfiDevicePathFromTextProtocolGuid
+extern EFI_GUID gEfiDevicePathUtilitiesProtocolGuid;
+#define DevicePathUtilitiesProtocol gEfiDevicePathUtilitiesProtocolGuid
 extern EFI_GUID gEfiLoadedImageProtocolGuid;
 #define LoadedImageProtocol gEfiLoadedImageProtocolGuid
 extern EFI_GUID gEfiSimpleTextInProtocolGuid;

+ 1 - 0
lib/data.c

@@ -95,6 +95,7 @@ EFI_GUID NullGuid = { 0,0,0,{0,0,0,0,0,0,0,0} };
 EFI_GUID gEfiDevicePathProtocolGuid                 = EFI_DEVICE_PATH_PROTOCOL_GUID;
 EFI_GUID gEfiDevicePathToTextProtocolGuid           = EFI_DEVICE_PATH_TO_TEXT_PROTOCOL_GUID;
 EFI_GUID gEfiDevicePathFromTextProtocolGuid         = EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL_GUID;
+EFI_GUID gEfiDevicePathUtilitiesProtocolGuid        = EFI_DEVICE_PATH_UTILITIES_PROTOCOL_GUID;
 EFI_GUID gEfiLoadedImageProtocolGuid                = EFI_LOADED_IMAGE_PROTOCOL_GUID;
 EFI_GUID gEfiSimpleTextInProtocolGuid               = EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID;
 EFI_GUID gEfiSimpleTextOutProtocolGuid              = EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID;