};\r
\r
/**\r
- The user Entry Point for module ConPlatform. The user code starts with this function.\r
+ Entrypoint of this module.\r
+\r
+ This function is the entrypoint of this module. It installs Driver Binding\r
+ Protocols together with Component Name Protocols.\r
\r
@param ImageHandle The firmware allocated handle for the EFI image.\r
@param SystemTable A pointer to the EFI System Table.\r
\r
@retval EFI_SUCCESS The entry point is executed successfully.\r
- @retval other Some error occurs when executing this entry point.\r
\r
**/\r
EFI_STATUS\r
{\r
EFI_STATUS Status;\r
\r
- //\r
- // Install driver model protocol(s).\r
- //\r
Status = EfiLibInstallDriverBindingComponentName2 (\r
ImageHandle,\r
SystemTable,\r
);\r
ASSERT_EFI_ERROR (Status);\r
\r
-\r
- return Status;\r
+ return EFI_SUCCESS;\r
}\r
\r
\r
/**\r
- Test to see if EFI Text In Protocol could be supported on the ControllerHandle. \r
+ Test to see if EFI_SIMPLE_TEXT_INPUT_PROTOCOL is supported on ControllerHandle. \r
\r
@param This Protocol instance pointer.\r
@param ControllerHandle Handle of device to test.\r
ConPlatformTextInDriverBindingSupported (\r
IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
IN EFI_HANDLE ControllerHandle,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL\r
)\r
{\r
return ConPlatformDriverBindingSupported (\r
- This,\r
- ControllerHandle,\r
- RemainingDevicePath,\r
- &gEfiSimpleTextInProtocolGuid\r
- );\r
+ This,\r
+ ControllerHandle,\r
+ &gEfiSimpleTextInProtocolGuid\r
+ );\r
}\r
\r
\r
/**\r
- Test to see if EFI Text Out Protocol could be supported on the ControllerHandle. \r
+ Test to see if EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL is supported on ControllerHandle. \r
\r
@param This Protocol instance pointer.\r
@param ControllerHandle Handle of device to test.\r
ConPlatformTextOutDriverBindingSupported (\r
IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
IN EFI_HANDLE ControllerHandle,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL\r
)\r
{\r
return ConPlatformDriverBindingSupported (\r
- This,\r
- ControllerHandle,\r
- RemainingDevicePath,\r
- &gEfiSimpleTextOutProtocolGuid\r
- );\r
+ This,\r
+ ControllerHandle,\r
+ &gEfiSimpleTextOutProtocolGuid\r
+ );\r
}\r
\r
\r
/**\r
- Test to see if the specified Protocol could be supported on the ControllerHandle. \r
+ Test to see if the specified protocol is supported on ControllerHandle. \r
\r
@param This Protocol instance pointer.\r
@param ControllerHandle Handle of device to test.\r
- @param RemainingDevicePath Optional parameter use to pick a specific child\r
- device to start.\r
@param ProtocolGuid The specfic protocol.\r
\r
@retval EFI_SUCCESS This driver supports this device.\r
ConPlatformDriverBindingSupported (\r
IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
IN EFI_HANDLE ControllerHandle,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath,\r
IN EFI_GUID *ProtocolGuid\r
)\r
{\r
}\r
\r
gBS->CloseProtocol (\r
- ControllerHandle,\r
- ProtocolGuid,\r
- This->DriverBindingHandle,\r
- ControllerHandle\r
- );\r
+ ControllerHandle,\r
+ ProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ ControllerHandle\r
+ );\r
\r
return EFI_SUCCESS;\r
}\r
\r
/**\r
- Start this driver on ControllerHandle by opening Simple Text In protocol,\r
+ Start this driver on the device for console input.\r
+\r
+ Start this driver on ControllerHandle by opening Simple Text Input Protocol,\r
reading Device Path, and installing Console In Devcice GUID on ControllerHandle.\r
\r
If this devcie is not one hot-plug devce, append its device path into the \r
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
+ EFI_STATUS Status;\r
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
EFI_SIMPLE_TEXT_INPUT_PROTOCOL *TextIn;\r
\r
//\r
return Status;\r
}\r
//\r
- // Open the Simple Input Protocol BY_DRIVER\r
+ // Open the Simple Text Input Protocol BY_DRIVER\r
//\r
Status = gBS->OpenProtocol (\r
ControllerHandle,\r
//\r
if (IsHotPlugDevice (This->DriverBindingHandle, ControllerHandle)) {\r
gBS->InstallMultipleProtocolInterfaces (\r
- &ControllerHandle,\r
- &gEfiConsoleInDeviceGuid,\r
- NULL,\r
- NULL\r
- );\r
+ &ControllerHandle,\r
+ &gEfiConsoleInDeviceGuid,\r
+ NULL,\r
+ NULL\r
+ );\r
} else {\r
//\r
- // Append the device path to the ConInDev environment variable\r
+ // If it is not a hot-plug device, append the device path to the\r
+ // ConInDev environment variable\r
//\r
ConPlatformUpdateDeviceVariable (\r
L"ConInDev",\r
);\r
\r
//\r
- // If the device path is an instance in the ConIn environment variable,\r
+ // If the device path is successfully added to the ConIn environment variable,\r
// then install EfiConsoleInDeviceGuid onto ControllerHandle\r
//\r
Status = ConPlatformUpdateDeviceVariable (\r
- L"ConIn",\r
- DevicePath,\r
- CHECK\r
- );\r
+ L"ConIn",\r
+ DevicePath,\r
+ CHECK\r
+ );\r
\r
if (!EFI_ERROR (Status)) {\r
gBS->InstallMultipleProtocolInterfaces (\r
- &ControllerHandle,\r
- &gEfiConsoleInDeviceGuid,\r
- NULL,\r
- NULL\r
- );\r
+ &ControllerHandle,\r
+ &gEfiConsoleInDeviceGuid,\r
+ NULL,\r
+ NULL\r
+ );\r
} else {\r
gBS->CloseProtocol (\r
- ControllerHandle,\r
- &gEfiSimpleTextInProtocolGuid,\r
- This->DriverBindingHandle,\r
- ControllerHandle\r
- );\r
+ ControllerHandle,\r
+ &gEfiSimpleTextInProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ ControllerHandle\r
+ );\r
}\r
}\r
\r
}\r
\r
/**\r
- Start this driver on ControllerHandle by opening Simple Text Out protocol,\r
+ Start this driver on the device for console output and stardard error output.\r
+\r
+ Start this driver on ControllerHandle by opening Simple Text Output Protocol,\r
reading Device Path, and installing Console Out Devcic GUID, Standard Error\r
Device GUID on ControllerHandle.\r
\r
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
+ EFI_STATUS Status;\r
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *TextOut;\r
- BOOLEAN NeedClose;\r
+ BOOLEAN NeedClose;\r
\r
NeedClose = TRUE;\r
\r
//\r
if (IsHotPlugDevice (This->DriverBindingHandle, ControllerHandle)) {\r
gBS->InstallMultipleProtocolInterfaces (\r
- &ControllerHandle,\r
- &gEfiConsoleOutDeviceGuid,\r
- NULL,\r
- NULL\r
- );\r
+ &ControllerHandle,\r
+ &gEfiConsoleOutDeviceGuid,\r
+ NULL,\r
+ NULL\r
+ );\r
} else {\r
//\r
- // Append the device path to the ConOutDev environment variable\r
+ // If it is not a hot-plug device, first append the device path to the\r
+ // ConOutDev environment variable\r
//\r
ConPlatformUpdateDeviceVariable (\r
L"ConOutDev",\r
APPEND\r
);\r
//\r
- // Append the device path to the StdErrDev environment variable\r
+ // Then append the device path to the StdErrDev environment variable\r
//\r
ConPlatformUpdateDeviceVariable (\r
L"ErrOutDev",\r
);\r
\r
//\r
- // If the device path is an instance in the ConOut environment variable,\r
+ // If the device path is successfully added to the ConOut environment variable,\r
// then install EfiConsoleOutDeviceGuid onto ControllerHandle\r
//\r
Status = ConPlatformUpdateDeviceVariable (\r
- L"ConOut",\r
- DevicePath,\r
- CHECK\r
- );\r
+ L"ConOut",\r
+ DevicePath,\r
+ CHECK\r
+ );\r
\r
if (!EFI_ERROR (Status)) {\r
NeedClose = FALSE;\r
);\r
}\r
//\r
- // If the device path is an instance in the StdErr environment variable,\r
+ // If the device path is successfully added to the StdErr environment variable,\r
// then install EfiStandardErrorDeviceGuid onto ControllerHandle\r
//\r
Status = ConPlatformUpdateDeviceVariable (\r
- L"ErrOut",\r
- DevicePath,\r
- CHECK\r
- );\r
+ L"ErrOut",\r
+ DevicePath,\r
+ CHECK\r
+ );\r
if (!EFI_ERROR (Status)) {\r
NeedClose = FALSE;\r
gBS->InstallMultipleProtocolInterfaces (\r
- &ControllerHandle,\r
- &gEfiStandardErrorDeviceGuid,\r
- NULL,\r
- NULL\r
- );\r
+ &ControllerHandle,\r
+ &gEfiStandardErrorDeviceGuid,\r
+ NULL,\r
+ NULL\r
+ );\r
}\r
\r
if (NeedClose) {\r
gBS->CloseProtocol (\r
- ControllerHandle,\r
- &gEfiSimpleTextOutProtocolGuid,\r
- This->DriverBindingHandle,\r
- ControllerHandle\r
- );\r
+ ControllerHandle,\r
+ &gEfiSimpleTextOutProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ ControllerHandle\r
+ );\r
}\r
}\r
\r
\r
/**\r
Stop this driver on ControllerHandle by removing Console In Devcice GUID \r
- and closing the Simple Text In protocol on ControllerHandle.\r
+ and closing the Simple Text Input protocol on ControllerHandle.\r
\r
@param This Protocol instance pointer.\r
@param ControllerHandle Handle of device to stop driver on\r
EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
\r
//\r
- // hot plug device is not included into the console associated variables,\r
- // so no need to check variable for those hot plug devices.\r
+ // If it is not a hot-plug device, first delete it from the ConInDev variable.\r
//\r
if (!IsHotPlugDevice (This->DriverBindingHandle, ControllerHandle)) {\r
//\r
);\r
\r
//\r
- // Close the Simple Input Protocol\r
+ // Close the Simple Text Input Protocol\r
//\r
gBS->CloseProtocol (\r
ControllerHandle,\r
\r
/**\r
Stop this driver on ControllerHandle by removing Console Out Devcice GUID \r
- and closing the Simple Text Out protocol on ControllerHandle.\r
+ and closing the Simple Text Output protocol on ControllerHandle.\r
\r
@param This Protocol instance pointer.\r
@param ControllerHandle Handle of device to stop driver on\r
EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
\r
//\r
- // hot plug device is not included into the console associated variables,\r
- // so no need to check variable for those hot plug devices.\r
+ // If it is not a hot-plug device, first delete it from the ConOutDev and StdErrDev variable.\r
//\r
if (!IsHotPlugDevice (This->DriverBindingHandle, ControllerHandle)) {\r
//\r
@param Handle Handle of device to uninstall protocol on.\r
@param ProtocolGuid The specified protocol need to be uninstalled.\r
\r
- @return None.\r
-\r
**/\r
VOID\r
ConPlatformUnInstallProtocol (\r
\r
if (!EFI_ERROR (Status)) {\r
gBS->UninstallMultipleProtocolInterfaces (\r
- Handle,\r
- ProtocolGuid,\r
- NULL,\r
- NULL\r
- );\r
+ Handle,\r
+ ProtocolGuid,\r
+ NULL,\r
+ NULL\r
+ );\r
}\r
\r
return ;\r
}\r
\r
/**\r
- Read the EFI variable (Name) and return a dynamically allocated\r
- buffer, and the size of the buffer. On failure return NULL.\r
+ Get the necessary size of buffer and read the variabe.\r
+\r
+ First get the necessary size of buffer. Then read the\r
+ EFI variable (Name) and return a dynamically allocated\r
+ buffer. On failure return NULL.\r
\r
@param Name String part of EFI variable name\r
\r
Buffer = NULL;\r
\r
//\r
- // Test to see if the variable exists. If it doesn't, reuturn NULL.\r
+ // Test to see if the variable exists. If it doesn't, return NULL.\r
//\r
Status = gRT->GetVariable (\r
Name,\r
Function compares a device path data structure to that of all the nodes of a\r
second device path instance.\r
\r
-\r
@param Multi A pointer to a multi-instance device path data structure.\r
@param Single A pointer to a single-instance device path data structure.\r
@param NewDevicePath If Delete is TRUE, this parameter must not be null, and it\r
If FALSE, the routine just check whether Single matches\r
with any instance in Multi.\r
\r
- @retval EFI_SUCCESS If the Single is contained within Multi.\r
- @retval EFI_NOT_FOUND If the Single is not contained within Multi.\r
+ @retval EFI_SUCCESS If the Single is contained within Multi.\r
+ @retval EFI_NOT_FOUND If the Single is not contained within Multi.\r
+ @retval EFI_INVALID_PARAMETER Multi is NULL.\r
+ @retval EFI_INVALID_PARAMETER Single is NULL.\r
+ @retval EFI_INVALID_PARAMETER NewDevicePath is NULL when Delete is TRUE.\r
\r
**/\r
EFI_STATUS\r
// The passed in DevicePath should not be NULL\r
//\r
if ((Multi == NULL) || (Single == NULL)) {\r
- return EFI_NOT_FOUND;\r
+ return EFI_INVALID_PARAMETER;\r
}\r
\r
//\r
// If performing Delete operation, the NewDevicePath must not be NULL.\r
//\r
if (Delete) {\r
- ASSERT (NewDevicePath != NULL);\r
+ if (NewDevicePath == NULL) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
}\r
\r
TempDevicePath1 = NULL;\r
} else {\r
if (Delete) {\r
//\r
- // Append the mis-matched devcie path into remaining device path.\r
+ // If the node of Multi does not match Single, then added it back to the result.\r
+ // That is, the node matching Single will be dropped and deleted from result.\r
//\r
TempDevicePath2 = AppendDevicePathInstance (\r
TempDevicePath1,\r
\r
if (Delete) {\r
//\r
- // Return the remaining device path data structure\r
+ // Return the new device path data structure with specified node deleted.\r
//\r
*NewDevicePath = TempDevicePath1;\r
return EFI_SUCCESS;\r
@param VariableName Console environment variables, ConOutDev, ConInDev\r
StdErrDev, ConIn or ConOut.\r
@param DevicePath Console devcie's device path.\r
- @param Operation Variable operations, such as APPEND or DELETE.\r
+ @param Operation Variable operations, including APPEND, CHECK and DELETE.\r
\r
@retval EFI_SUCCESS Variable operates successfully.\r
@retval EFI_OUT_OF_RESOURCES If variable cannot be appended.\r
// Match specified DevicePath in Console Variable.\r
// \r
Status = ConPlatformMatchDevicePaths (\r
- VariableDevicePath,\r
- DevicePath,\r
- NULL,\r
- FALSE\r
- );\r
+ VariableDevicePath,\r
+ DevicePath,\r
+ NULL,\r
+ FALSE\r
+ );\r
\r
if ((Operation == CHECK) || (!EFI_ERROR (Status))) {\r
//\r
- // The device path is already in the variable\r
+ // Branch here includes 2 cases:\r
+ // 1. Operation is CHECK, simply return Status.\r
+ // 2. Operation is APPEND, and device path already exists in variable, also return.\r
//\r
if (VariableDevicePath != NULL) {\r
FreePool (VariableDevicePath);\r
return Status;\r
}\r
//\r
- // The device path is not in variable. Append DevicePath to the\r
- // environment variable that is a multi-instance device path.\r
+ // We reach here to append a device path that does not exist in variable.\r
//\r
Status = EFI_SUCCESS;\r
NewVariableDevicePath = AppendDevicePathInstance (\r
\r
} else {\r
//\r
- // Remove DevicePath from the environment variable that\r
+ // We reach here to remove DevicePath from the environment variable that\r
// is a multi-instance device path.\r
//\r
Status = ConPlatformMatchDevicePaths (\r
- VariableDevicePath,\r
- DevicePath,\r
- &NewVariableDevicePath,\r
- TRUE\r
- );\r
+ VariableDevicePath,\r
+ DevicePath,\r
+ &NewVariableDevicePath,\r
+ TRUE\r
+ );\r
}\r
\r
if (VariableDevicePath != NULL) {\r
}\r
\r
/**\r
- Check if the device is one hot-plug supported.\r
+ Check if the device supports hot-plug.\r
\r
@param DriverBindingHandle Protocol instance pointer.\r
@param ControllerHandle Handle of device to check.\r