//\r
// Check for invalid Interface\r
//\r
- if (Attributes != EFI_OPEN_PROTOCOL_TEST_PROTOCOL) {\r
- if (Interface == NULL) {\r
- return EFI_INVALID_PARAMETER;\r
- } else {\r
- *Interface = NULL;\r
- }\r
+ if ((Attributes != EFI_OPEN_PROTOCOL_TEST_PROTOCOL) && (Interface == NULL)) {\r
+ return EFI_INVALID_PARAMETER;\r
}\r
\r
//\r
goto Done;\r
}\r
\r
- //\r
- // This is the protocol interface entry for this protocol\r
- //\r
- if (Attributes != EFI_OPEN_PROTOCOL_TEST_PROTOCOL) {\r
- *Interface = Prot->Interface;\r
- }\r
Status = EFI_SUCCESS;\r
\r
ByDriver = FALSE;\r
}\r
\r
Done:\r
+\r
+ if (Attributes != EFI_OPEN_PROTOCOL_TEST_PROTOCOL) {\r
+ //\r
+ // Keep Interface unmodified in case of any Error\r
+ // except EFI_ALREADY_STARTED and EFI_UNSUPPORTED.\r
+ //\r
+ if (!EFI_ERROR (Status) || Status == EFI_ALREADY_STARTED) {\r
+ //\r
+ // EFI_ALREADY_STARTED is not an error for bus driver.\r
+ // Return the corresponding protocol interface.\r
+ //\r
+ *Interface = Prot->Interface;\r
+ } else if (Status == EFI_UNSUPPORTED) {\r
+ //\r
+ // Return NULL Interface if Unsupported Protocol.\r
+ //\r
+ *Interface = NULL;\r
+ }\r
+ }\r
+\r
//\r
- // Done. Release the database lock are return\r
+ // Done. Release the database lock and return\r
//\r
CoreReleaseProtocolLock ();\r
return Status;\r