Download UEFI Driver Writer`s Guide

Transcript
// Make sure this driver is currently managing ControllerHandle
//
Status = EfiTestManagedDevice (
ControllerHandle,
gAbcDriverBinding.DriverBindingHandle,
&gEfiPciIoProtocolGuid
);
if (EFI_ERROR (Status)) {
return Status;
}
//
// If ChildHandle is not NULL, then make sure this driver produced ChildHandle
//
if (ChildHandle != NULL) {
Status = EfiTestChildHandle (
ControllerHandle,
ChildHandle,
&gEfiPciIoProtocolGuid
);
if (EFI_ERROR (Status)) {
return Status;
}
}
if (ChildHandle == NULL) {
//
// Retrieve health status for ControllerHandle
//
} else {
//
// Retrieve health status for ChildHandle
//
}
return EFI_SUCCESS;
}
Example 154—GetHealthStatus() for a Bus Driver or Hybrid Driver
Bus drivers and hybrid drivers are recommended to provide health status for both the
bus controller and the child controllers these types of drivers produce. Implementing
diagnostics for only the bus controller or only the child controllers is strongly
discouraged.
14.3
Repair() Implementation
The Repair() service attempts repair operations on a driver-managed controller or a
child the driver has produced. This service is not allowed to use any of the console-I/Orelated protocols. Instead, the status of the repair operation is returned to the caller.
The Repair() service supports an optional parameter called ProgressNotification that
may be NULL. The caller may pass in a notification function to Repair() so the caller can
inform the user of the progress during extended repair operations. If a repair operation
takes a short period of time to execute, ProgressNotification may be ignored. If the
repair operation takes an extended period of time to execute, the UEFI Driver should
periodically call the function specified by ProgressNotification with Value and Limit
parameters expressing the amount of repair work currently completed. The caller may
choose to log or display the progress of the repair operation as well as the final results
of the repair operation.
316
3/8/2012
Version 1.01