]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Add Driver Diagnostic 2 Protocol support for WinNtBlockIo driver.
authorqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 30 Oct 2007 05:28:45 +0000 (05:28 +0000)
committerqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 30 Oct 2007 05:28:45 +0000 (05:28 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4240 6f19259b-4bc3-4df7-8a09-765794883524

Nt32Pkg/WinNtBlockIoDxe/DriverDiagnostics.c
Nt32Pkg/WinNtBlockIoDxe/WinNtBlockIo.c
Nt32Pkg/WinNtBlockIoDxe/WinNtBlockIo.h

index b20bdb56c9c07d076bee19ca673c0917487386fd..1bfa3059b5eea5e90e9d1b219512e8538a4e8601 100644 (file)
@@ -43,9 +43,17 @@ WinNtBlockIoDriverDiagnosticsRunDiagnostics (
 //\r
 // EFI Driver Diagnostics Protocol\r
 //\r
-EFI_DRIVER_DIAGNOSTICS_PROTOCOL gWinNtBlockIoDriverDiagnostics = {\r
+GLOBAL_REMOVE_IF_UNREFERENCED EFI_DRIVER_DIAGNOSTICS_PROTOCOL gWinNtBlockIoDriverDiagnostics = {\r
   WinNtBlockIoDriverDiagnosticsRunDiagnostics,\r
-  LANGUAGESUPPORTED\r
+  "eng"\r
+};\r
+\r
+//\r
+// EFI Driver Diagnostics 2 Protocol\r
+//\r
+GLOBAL_REMOVE_IF_UNREFERENCED EFI_DRIVER_DIAGNOSTICS2_PROTOCOL gWinNtBlockIoDriverDiagnostics2 = {\r
+  (EFI_DRIVER_DIAGNOSTICS2_RUN_DIAGNOSTICS) WinNtBlockIoDriverDiagnosticsRunDiagnostics,\r
+  "en"\r
 };\r
 \r
 EFI_STATUS\r
@@ -78,7 +86,8 @@ WinNtBlockIoDriverDiagnosticsRunDiagnostics (
                        specified by ControllerHandle and ChildHandle.   See\r
                        "Related Definitions" for the list of supported types.\r
     Language         - A pointer to a three character ISO 639-2 language\r
-                       identifier.  This is the language in which the optional\r
+                       identifier or a Null-terminated ASCII string array indicating\r
+                       the language.  This is the language in which the optional\r
                        error message should be returned in Buffer, and it must\r
                        match one of the languages specified in SupportedLanguages.\r
                        The number of languages supported by a driver is up to\r
@@ -121,7 +130,10 @@ WinNtBlockIoDriverDiagnosticsRunDiagnostics (
 {\r
   EFI_STATUS            Status;\r
   EFI_BLOCK_IO_PROTOCOL *BlockIo;\r
-  CHAR8                 *SupportedLanguage;\r
+  CHAR8                 *SupportedLanguages;\r
+  BOOLEAN               Iso639Language;\r
+  BOOLEAN               Found;\r
+  UINTN                 Index;\r
 \r
   if (Language         == NULL ||\r
       ErrorType        == NULL ||\r
@@ -132,22 +144,36 @@ WinNtBlockIoDriverDiagnosticsRunDiagnostics (
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  SupportedLanguage = This->SupportedLanguages;\r
-\r
-  Status            = EFI_UNSUPPORTED;\r
-  while (*SupportedLanguage != 0) {\r
-    if (AsciiStrnCmp (Language, SupportedLanguage, 3) == 0) {\r
-      Status = EFI_SUCCESS;\r
-      break;\r
+  SupportedLanguages = This->SupportedLanguages;\r
+  Iso639Language = (BOOLEAN)(This == &gWinNtBlockIoDriverDiagnostics);\r
+  //\r
+  // Make sure Language is in the set of Supported Languages\r
+  //\r
+  Found = FALSE;\r
+  while (*SupportedLanguages != 0) {\r
+    if (Iso639Language) {\r
+      if (CompareMem (Language, SupportedLanguages, 3) == 0) {\r
+        Found = TRUE;\r
+        break;\r
+      }\r
+      SupportedLanguages += 3;\r
+    } else {\r
+      for (Index = 0; SupportedLanguages[Index] != 0 && SupportedLanguages[Index] != ';'; Index++);\r
+      if (AsciiStrnCmp(SupportedLanguages, Language, Index) == 0) {\r
+        Found = TRUE;\r
+        break;\r
+      }\r
+      SupportedLanguages += Index;\r
+      for (; *SupportedLanguages != 0 && *SupportedLanguages == ';'; SupportedLanguages++);\r
     }\r
-\r
-    SupportedLanguage += 3;\r
   }\r
-\r
-  if (EFI_ERROR (Status)) {\r
+  //\r
+  // If Language is not a member of SupportedLanguages, then return EFI_UNSUPPORTED\r
+  //\r
+  if (!Found) {\r
     return EFI_UNSUPPORTED;\r
   }\r
-\r
+  \r
   *ErrorType  = NULL;\r
   *BufferSize = 0;\r
   if (DiagnosticType != EfiDriverDiagnosticTypeStandard) {\r
index 998fc5047d7e1b14851ad7d0522ef5b526a43fbf..1089d05111922ba3d2fe67c703d2e6add492d4df 100644 (file)
@@ -119,7 +119,7 @@ InitializeWinNtBlockIo(
              &gWinNtBlockIoComponentName2,\r
              NULL,\r
              &gWinNtBlockIoDriverDiagnostics,\r
-             NULL\r
+             &gWinNtBlockIoDriverDiagnostics2\r
              );\r
   ASSERT_EFI_ERROR (Status);\r
 \r
index 313e25448c31aef964c6ac12ce2193106bf14324..6330daabf70a8d92402841e4ff67fc5e6a0b345c 100644 (file)
@@ -99,6 +99,7 @@ extern EFI_COMPONENT_NAME_PROTOCOL         gWinNtBlockIoComponentName;
 extern EFI_COMPONENT_NAME2_PROTOCOL        gWinNtBlockIoComponentName2;\r
 extern EFI_DRIVER_CONFIGURATION_PROTOCOL   gWinNtBlockIoDriverConfiguration;\r
 extern EFI_DRIVER_DIAGNOSTICS_PROTOCOL     gWinNtBlockIoDriverDiagnostics;\r
+extern EFI_DRIVER_DIAGNOSTICS2_PROTOCOL    gWinNtBlockIoDriverDiagnostics2;\r
 \r
 //\r
 // EFI Driver Binding Functions\r