summaryrefslogtreecommitdiff
path: root/IntelFrameworkModulePkg
diff options
context:
space:
mode:
Diffstat (limited to 'IntelFrameworkModulePkg')
-rw-r--r--IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/DriverDiagnostics.c53
-rw-r--r--IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/idebus.c7
-rw-r--r--IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/idebus.h4
3 files changed, 60 insertions, 4 deletions
diff --git a/IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/DriverDiagnostics.c b/IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/DriverDiagnostics.c
index 8aa6d05712..f3f649c163 100644
--- a/IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/DriverDiagnostics.c
+++ b/IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/DriverDiagnostics.c
@@ -18,11 +18,19 @@
//
// EFI Driver Diagnostics Protocol
//
-EFI_DRIVER_DIAGNOSTICS_PROTOCOL gIDEBusDriverDiagnostics = {
+GLOBAL_REMOVE_IF_UNREFERENCED EFI_DRIVER_DIAGNOSTICS_PROTOCOL gIDEBusDriverDiagnostics = {
IDEBusDriverDiagnosticsRunDiagnostics,
"eng"
};
+//
+// EFI Driver Diagnostics 2 Protocol
+//
+GLOBAL_REMOVE_IF_UNREFERENCED EFI_DRIVER_DIAGNOSTICS2_PROTOCOL gIDEBusDriverDiagnostics2 = {
+ (EFI_DRIVER_DIAGNOSTICS2_RUN_DIAGNOSTICS) IDEBusDriverDiagnosticsRunDiagnostics,
+ "en"
+};
+
/**
Runs diagnostics on a controller.
@@ -98,6 +106,49 @@ IDEBusDriverDiagnosticsRunDiagnostics (
IDE_BLK_IO_DEV *IdeBlkIoDevice;
UINT32 VendorDeviceId;
VOID *BlockBuffer;
+ CHAR8 *SupportedLanguages;
+ BOOLEAN Iso639Language;
+ BOOLEAN Found;
+ UINTN Index;
+
+ if (Language == NULL ||
+ ErrorType == NULL ||
+ Buffer == NULL ||
+ ControllerHandle == NULL ||
+ BufferSize == NULL) {
+
+ return EFI_INVALID_PARAMETER;
+ }
+
+ SupportedLanguages = This->SupportedLanguages;
+ Iso639Language = (BOOLEAN)(This == &gIDEBusDriverDiagnostics);
+ //
+ // Make sure Language is in the set of Supported Languages
+ //
+ Found = FALSE;
+ while (*SupportedLanguages != 0) {
+ if (Iso639Language) {
+ if (CompareMem (Language, SupportedLanguages, 3) == 0) {
+ Found = TRUE;
+ break;
+ }
+ SupportedLanguages += 3;
+ } else {
+ for (Index = 0; SupportedLanguages[Index] != 0 && SupportedLanguages[Index] != ';'; Index++);
+ if (AsciiStrnCmp(SupportedLanguages, Language, Index) == 0) {
+ Found = TRUE;
+ break;
+ }
+ SupportedLanguages += Index;
+ for (; *SupportedLanguages != 0 && *SupportedLanguages == ';'; SupportedLanguages++);
+ }
+ }
+ //
+ // If Language is not a member of SupportedLanguages, then return EFI_UNSUPPORTED
+ //
+ if (!Found) {
+ return EFI_UNSUPPORTED;
+ }
*ErrorType = NULL;
*BufferSize = 0;
diff --git a/IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/idebus.c b/IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/idebus.c
index 48c2184696..666b81768c 100644
--- a/IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/idebus.c
+++ b/IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/idebus.c
@@ -1419,13 +1419,16 @@ InitializeIdeBus(
//
// Install driver model protocol(s).
//
- Status = EfiLibInstallDriverBindingComponentName2 (
+ Status = EfiLibInstallAllDriverProtocols2 (
ImageHandle,
SystemTable,
&gIDEBusDriverBinding,
ImageHandle,
&gIDEBusComponentName,
- &gIDEBusComponentName2
+ &gIDEBusComponentName2,
+ NULL,
+ &gIDEBusDriverDiagnostics,
+ &gIDEBusDriverDiagnostics2
);
ASSERT_EFI_ERROR (Status);
diff --git a/IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/idebus.h b/IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/idebus.h
index 9c6e41bc95..da7a03f71b 100644
--- a/IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/idebus.h
+++ b/IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/idebus.h
@@ -111,7 +111,9 @@ typedef struct {
//
// Global Variables
//
-extern EFI_DRIVER_BINDING_PROTOCOL gIDEBusDriverBinding;
+extern EFI_DRIVER_BINDING_PROTOCOL gIDEBusDriverBinding;
+extern EFI_DRIVER_DIAGNOSTICS_PROTOCOL gIDEBusDriverDiagnostics;
+extern EFI_DRIVER_DIAGNOSTICS2_PROTOCOL gIDEBusDriverDiagnostics2;
#include "ide.h"