Add missing status code in several modules.
Signed-off-by: Li Elvin <elvin.li@intel.com> Reviewed-by: Yao Jiewen <jiewen.yao@intel.com> Reviewed-by: Ni Ruiyu <ruiyu.ni@intel.com> Reviewed-by: Gao Liming <liming.gao@intel.com> Reviewed-by: Tian Feng <feng.tian@intel.com> Reviewed-by: Fan Jeff <jeff.fan@intel.com> git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13890 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@ -294,6 +294,15 @@ RegisterAtaDevice (
|
|||||||
InitializeListHead (&AtaDevice->AtaTaskList);
|
InitializeListHead (&AtaDevice->AtaTaskList);
|
||||||
InitializeListHead (&AtaDevice->AtaSubTaskList);
|
InitializeListHead (&AtaDevice->AtaSubTaskList);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Report Status Code to indicate the ATA device will be enabled
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE_WITH_DEVICE_PATH (
|
||||||
|
EFI_PROGRESS_CODE,
|
||||||
|
(EFI_IO_BUS_ATA_ATAPI | EFI_IOB_PC_ENABLE),
|
||||||
|
AtaBusDriverData->ParentDevicePath
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Try to identify the ATA device via the ATA pass through command.
|
// Try to identify the ATA device via the ATA pass through command.
|
||||||
//
|
//
|
||||||
@ -719,6 +728,15 @@ AtaBusDriverBindingStart (
|
|||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Report Status Code to indicate ATA bus starts
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE_WITH_DEVICE_PATH (
|
||||||
|
EFI_PROGRESS_CODE,
|
||||||
|
(EFI_IO_BUS_ATA_ATAPI | EFI_IOB_PC_INIT),
|
||||||
|
ParentDevicePath
|
||||||
|
);
|
||||||
|
|
||||||
Status = gBS->OpenProtocol (
|
Status = gBS->OpenProtocol (
|
||||||
Controller,
|
Controller,
|
||||||
&gEfiAtaPassThruProtocolGuid,
|
&gEfiAtaPassThruProtocolGuid,
|
||||||
@ -771,6 +789,15 @@ AtaBusDriverBindingStart (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Report Status Code to indicate detecting devices on bus
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE_WITH_DEVICE_PATH (
|
||||||
|
EFI_PROGRESS_CODE,
|
||||||
|
(EFI_IO_BUS_ATA_ATAPI | EFI_IOB_PC_DETECT),
|
||||||
|
ParentDevicePath
|
||||||
|
);
|
||||||
|
|
||||||
if (RemainingDevicePath == NULL) {
|
if (RemainingDevicePath == NULL) {
|
||||||
Port = 0xFFFF;
|
Port = 0xFFFF;
|
||||||
while (TRUE) {
|
while (TRUE) {
|
||||||
|
@ -38,6 +38,7 @@
|
|||||||
#include <Library/DevicePathLib.h>
|
#include <Library/DevicePathLib.h>
|
||||||
#include <Library/UefiRuntimeServicesTableLib.h>
|
#include <Library/UefiRuntimeServicesTableLib.h>
|
||||||
#include <Library/TimerLib.h>
|
#include <Library/TimerLib.h>
|
||||||
|
#include <Library/ReportStatusCodeLib.h>
|
||||||
|
|
||||||
#include <IndustryStandard/Atapi.h>
|
#include <IndustryStandard/Atapi.h>
|
||||||
|
|
||||||
|
@ -56,6 +56,7 @@
|
|||||||
UefiDriverEntryPoint
|
UefiDriverEntryPoint
|
||||||
DebugLib
|
DebugLib
|
||||||
TimerLib
|
TimerLib
|
||||||
|
ReportStatusCodeLib
|
||||||
|
|
||||||
[Guids]
|
[Guids]
|
||||||
gEfiDiskInfoIdeInterfaceGuid # CONSUMES ## GUID
|
gEfiDiskInfoIdeInterfaceGuid # CONSUMES ## GUID
|
||||||
|
@ -185,6 +185,15 @@ ResetAtaDevice (
|
|||||||
|
|
||||||
AtaPassThru = AtaDevice->AtaBusDriverData->AtaPassThru;
|
AtaPassThru = AtaDevice->AtaBusDriverData->AtaPassThru;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Report Status Code to indicate reset happens
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE_WITH_DEVICE_PATH (
|
||||||
|
EFI_PROGRESS_CODE,
|
||||||
|
(EFI_IO_BUS_ATA_ATAPI | EFI_IOB_PC_RESET),
|
||||||
|
AtaDevice->AtaBusDriverData->ParentDevicePath
|
||||||
|
);
|
||||||
|
|
||||||
return AtaPassThru->ResetDevice (
|
return AtaPassThru->ResetDevice (
|
||||||
AtaPassThru,
|
AtaPassThru,
|
||||||
AtaDevice->Port,
|
AtaDevice->Port,
|
||||||
|
@ -122,8 +122,20 @@ EhcReset (
|
|||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
UINT32 DbgCtrlStatus;
|
UINT32 DbgCtrlStatus;
|
||||||
|
|
||||||
|
Ehc = EHC_FROM_THIS (This);
|
||||||
|
|
||||||
|
if (Ehc->DevicePath != NULL) {
|
||||||
|
//
|
||||||
|
// Report Status Code to indicate reset happens
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE_WITH_DEVICE_PATH (
|
||||||
|
EFI_PROGRESS_CODE,
|
||||||
|
(EFI_IO_BUS_USB | EFI_IOB_PC_RESET),
|
||||||
|
Ehc->DevicePath
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
OldTpl = gBS->RaiseTPL (EHC_TPL);
|
OldTpl = gBS->RaiseTPL (EHC_TPL);
|
||||||
Ehc = EHC_FROM_THIS (This);
|
|
||||||
|
|
||||||
switch (Attributes) {
|
switch (Attributes) {
|
||||||
case EFI_USB_HC_RESET_GLOBAL:
|
case EFI_USB_HC_RESET_GLOBAL:
|
||||||
@ -1543,8 +1555,9 @@ EhcGetUsbDebugPortInfo (
|
|||||||
**/
|
**/
|
||||||
USB2_HC_DEV *
|
USB2_HC_DEV *
|
||||||
EhcCreateUsb2Hc (
|
EhcCreateUsb2Hc (
|
||||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||||
IN UINT64 OriginalPciAttributes
|
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
|
||||||
|
IN UINT64 OriginalPciAttributes
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
USB2_HC_DEV *Ehc;
|
USB2_HC_DEV *Ehc;
|
||||||
@ -1578,6 +1591,7 @@ EhcCreateUsb2Hc (
|
|||||||
Ehc->Usb2Hc.MinorRevision = 0x0;
|
Ehc->Usb2Hc.MinorRevision = 0x0;
|
||||||
|
|
||||||
Ehc->PciIo = PciIo;
|
Ehc->PciIo = PciIo;
|
||||||
|
Ehc->DevicePath = DevicePath;
|
||||||
Ehc->OriginalPciAttributes = OriginalPciAttributes;
|
Ehc->OriginalPciAttributes = OriginalPciAttributes;
|
||||||
|
|
||||||
InitializeListHead (&Ehc->AsyncIntTransfers);
|
InitializeListHead (&Ehc->AsyncIntTransfers);
|
||||||
@ -1684,6 +1698,7 @@ EhcDriverBindingStart (
|
|||||||
UINTN EhciDeviceNumber;
|
UINTN EhciDeviceNumber;
|
||||||
UINTN EhciFunctionNumber;
|
UINTN EhciFunctionNumber;
|
||||||
UINT32 State;
|
UINT32 State;
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL *HcDevicePath;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Open the PciIo Protocol, then enable the USB host controller
|
// Open the PciIo Protocol, then enable the USB host controller
|
||||||
@ -1701,6 +1716,19 @@ EhcDriverBindingStart (
|
|||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Open Device Path Protocol for on USB host controller
|
||||||
|
//
|
||||||
|
HcDevicePath = NULL;
|
||||||
|
Status = gBS->OpenProtocol (
|
||||||
|
Controller,
|
||||||
|
&gEfiDevicePathProtocolGuid,
|
||||||
|
(VOID **) &HcDevicePath,
|
||||||
|
This->DriverBindingHandle,
|
||||||
|
Controller,
|
||||||
|
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||||
|
);
|
||||||
|
|
||||||
PciAttributesSaved = FALSE;
|
PciAttributesSaved = FALSE;
|
||||||
//
|
//
|
||||||
// Save original PCI attributes
|
// Save original PCI attributes
|
||||||
@ -1842,7 +1870,7 @@ EhcDriverBindingStart (
|
|||||||
//
|
//
|
||||||
// Create then install USB2_HC_PROTOCOL
|
// Create then install USB2_HC_PROTOCOL
|
||||||
//
|
//
|
||||||
Ehc = EhcCreateUsb2Hc (PciIo, OriginalPciAttributes);
|
Ehc = EhcCreateUsb2Hc (PciIo, HcDevicePath, OriginalPciAttributes);
|
||||||
|
|
||||||
if (Ehc == NULL) {
|
if (Ehc == NULL) {
|
||||||
DEBUG ((EFI_D_ERROR, "EhcDriverBindingStart: failed to create USB2_HC\n"));
|
DEBUG ((EFI_D_ERROR, "EhcDriverBindingStart: failed to create USB2_HC\n"));
|
||||||
|
@ -32,6 +32,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
#include <Library/BaseLib.h>
|
#include <Library/BaseLib.h>
|
||||||
#include <Library/MemoryAllocationLib.h>
|
#include <Library/MemoryAllocationLib.h>
|
||||||
#include <Library/PcdLib.h>
|
#include <Library/PcdLib.h>
|
||||||
|
#include <Library/ReportStatusCodeLib.h>
|
||||||
|
|
||||||
#include <IndustryStandard/Pci.h>
|
#include <IndustryStandard/Pci.h>
|
||||||
|
|
||||||
@ -115,6 +116,7 @@ struct _USB2_HC_DEV {
|
|||||||
EFI_USB2_HC_PROTOCOL Usb2Hc;
|
EFI_USB2_HC_PROTOCOL Usb2Hc;
|
||||||
|
|
||||||
EFI_PCI_IO_PROTOCOL *PciIo;
|
EFI_PCI_IO_PROTOCOL *PciIo;
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||||
UINT64 OriginalPciAttributes;
|
UINT64 OriginalPciAttributes;
|
||||||
USBHC_MEM_POOL *MemPool;
|
USBHC_MEM_POOL *MemPool;
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
# This way avoids the control transfer on a shared port between EHCI and companion host
|
# This way avoids the control transfer on a shared port between EHCI and companion host
|
||||||
# controller when UHCI gets attached earlier than EHCI and a USB 2.0 device inserts.
|
# controller when UHCI gets attached earlier than EHCI and a USB 2.0 device inserts.
|
||||||
#
|
#
|
||||||
# Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
|
# Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||||
#
|
#
|
||||||
# This program and the accompanying materials
|
# This program and the accompanying materials
|
||||||
# are licensed and made available under the terms and conditions of the BSD License
|
# are licensed and made available under the terms and conditions of the BSD License
|
||||||
@ -75,6 +75,7 @@
|
|||||||
BaseMemoryLib
|
BaseMemoryLib
|
||||||
DebugLib
|
DebugLib
|
||||||
PcdLib
|
PcdLib
|
||||||
|
ReportStatusCodeLib
|
||||||
|
|
||||||
[Guids]
|
[Guids]
|
||||||
gEfiEventExitBootServicesGuid ## PRODUCES ## Event
|
gEfiEventExitBootServicesGuid ## PRODUCES ## Event
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
PCI Root Bridges. So it means platform needs install PCI Root Bridge IO protocol for each
|
PCI Root Bridges. So it means platform needs install PCI Root Bridge IO protocol for each
|
||||||
PCI Root Bus and install PCI Host Bridge Resource Allocation Protocol.
|
PCI Root Bus and install PCI Host Bridge Resource Allocation Protocol.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -239,7 +239,8 @@ PciBusDriverBindingStart (
|
|||||||
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
|
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check RemainingDevicePath validation
|
// Check RemainingDevicePath validation
|
||||||
@ -285,6 +286,28 @@ PciBusDriverBindingStart (
|
|||||||
|
|
||||||
gFullEnumeration = (BOOLEAN) ((SearchHostBridgeHandle (Controller) ? FALSE : TRUE));
|
gFullEnumeration = (BOOLEAN) ((SearchHostBridgeHandle (Controller) ? FALSE : TRUE));
|
||||||
|
|
||||||
|
//
|
||||||
|
// Open Device Path Protocol for PCI root bridge
|
||||||
|
//
|
||||||
|
Status = gBS->OpenProtocol (
|
||||||
|
Controller,
|
||||||
|
&gEfiDevicePathProtocolGuid,
|
||||||
|
(VOID **) &ParentDevicePath,
|
||||||
|
This->DriverBindingHandle,
|
||||||
|
Controller,
|
||||||
|
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||||
|
);
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Report Status Code to indicate PCI bus starts
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE_WITH_DEVICE_PATH (
|
||||||
|
EFI_PROGRESS_CODE,
|
||||||
|
(EFI_IO_BUS_PCI | EFI_IOB_PC_INIT),
|
||||||
|
ParentDevicePath
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Enumerate the entire host bridge
|
// Enumerate the entire host bridge
|
||||||
// After enumeration, a database that records all the device information will be created
|
// After enumeration, a database that records all the device information will be created
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
PCI eunmeration implementation on entire PCI bus system for PCI Bus module.
|
PCI eunmeration implementation on entire PCI bus system for PCI Bus module.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -2095,6 +2095,14 @@ PciHotPlugRequestNotify (
|
|||||||
RootBridgeHandle = Temp->Handle;
|
RootBridgeHandle = Temp->Handle;
|
||||||
|
|
||||||
if (Operation == EfiPciHotPlugRequestAdd) {
|
if (Operation == EfiPciHotPlugRequestAdd) {
|
||||||
|
//
|
||||||
|
// Report Status Code to indicate hot plug happens
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE_WITH_DEVICE_PATH (
|
||||||
|
EFI_PROGRESS_CODE,
|
||||||
|
(EFI_IO_BUS_PCI | EFI_IOB_PC_HOTPLUG),
|
||||||
|
Temp->DevicePath
|
||||||
|
);
|
||||||
|
|
||||||
if (NumberOfChildren != NULL) {
|
if (NumberOfChildren != NULL) {
|
||||||
*NumberOfChildren = 0;
|
*NumberOfChildren = 0;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
The UHCI driver model and HC protocol routines.
|
The UHCI driver model and HC protocol routines.
|
||||||
|
|
||||||
Copyright (c) 2004 - 2011, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2004 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -53,7 +53,18 @@ Uhci2Reset (
|
|||||||
return EFI_UNSUPPORTED;
|
return EFI_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
Uhc = UHC_FROM_USB2_HC_PROTO (This);
|
Uhc = UHC_FROM_USB2_HC_PROTO (This);
|
||||||
|
|
||||||
|
if (Uhc->DevicePath != NULL) {
|
||||||
|
//
|
||||||
|
// Report Status Code to indicate reset happens
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE_WITH_DEVICE_PATH (
|
||||||
|
EFI_PROGRESS_CODE,
|
||||||
|
(EFI_IO_BUS_USB | EFI_IOB_PC_RESET),
|
||||||
|
Uhc->DevicePath
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
OldTpl = gBS->RaiseTPL (UHCI_TPL);
|
OldTpl = gBS->RaiseTPL (UHCI_TPL);
|
||||||
|
|
||||||
@ -1425,8 +1436,9 @@ ON_EXIT:
|
|||||||
**/
|
**/
|
||||||
USB_HC_DEV *
|
USB_HC_DEV *
|
||||||
UhciAllocateDev (
|
UhciAllocateDev (
|
||||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||||
IN UINT64 OriginalPciAttributes
|
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
|
||||||
|
IN UINT64 OriginalPciAttributes
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
USB_HC_DEV *Uhc;
|
USB_HC_DEV *Uhc;
|
||||||
@ -1460,6 +1472,7 @@ UhciAllocateDev (
|
|||||||
Uhc->Usb2Hc.MinorRevision = 0x1;
|
Uhc->Usb2Hc.MinorRevision = 0x1;
|
||||||
|
|
||||||
Uhc->PciIo = PciIo;
|
Uhc->PciIo = PciIo;
|
||||||
|
Uhc->DevicePath = DevicePath;
|
||||||
Uhc->OriginalPciAttributes = OriginalPciAttributes;
|
Uhc->OriginalPciAttributes = OriginalPciAttributes;
|
||||||
Uhc->MemPool = UsbHcInitMemPool (PciIo, TRUE, 0);
|
Uhc->MemPool = UsbHcInitMemPool (PciIo, TRUE, 0);
|
||||||
|
|
||||||
@ -1622,6 +1635,7 @@ UhciDriverBindingStart (
|
|||||||
UINT64 Supports;
|
UINT64 Supports;
|
||||||
UINT64 OriginalPciAttributes;
|
UINT64 OriginalPciAttributes;
|
||||||
BOOLEAN PciAttributesSaved;
|
BOOLEAN PciAttributesSaved;
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL *HcDevicePath;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Open PCIIO, then enable the EHC device and turn off emulation
|
// Open PCIIO, then enable the EHC device and turn off emulation
|
||||||
@ -1640,6 +1654,19 @@ UhciDriverBindingStart (
|
|||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Open Device Path Protocol for on USB host controller
|
||||||
|
//
|
||||||
|
HcDevicePath = NULL;
|
||||||
|
Status = gBS->OpenProtocol (
|
||||||
|
Controller,
|
||||||
|
&gEfiDevicePathProtocolGuid,
|
||||||
|
(VOID **) &HcDevicePath,
|
||||||
|
This->DriverBindingHandle,
|
||||||
|
Controller,
|
||||||
|
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||||
|
);
|
||||||
|
|
||||||
PciAttributesSaved = FALSE;
|
PciAttributesSaved = FALSE;
|
||||||
//
|
//
|
||||||
// Save original PCI attributes
|
// Save original PCI attributes
|
||||||
@ -1684,7 +1711,7 @@ UhciDriverBindingStart (
|
|||||||
goto CLOSE_PCIIO;
|
goto CLOSE_PCIIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
Uhc = UhciAllocateDev (PciIo, OriginalPciAttributes);
|
Uhc = UhciAllocateDev (PciIo, HcDevicePath, OriginalPciAttributes);
|
||||||
|
|
||||||
if (Uhc == NULL) {
|
if (Uhc == NULL) {
|
||||||
Status = EFI_OUT_OF_RESOURCES;
|
Status = EFI_OUT_OF_RESOURCES;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
The definition for UHCI driver model and HC protocol routines.
|
The definition for UHCI driver model and HC protocol routines.
|
||||||
|
|
||||||
Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2004 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -33,6 +33,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
#include <Library/BaseLib.h>
|
#include <Library/BaseLib.h>
|
||||||
#include <Library/MemoryAllocationLib.h>
|
#include <Library/MemoryAllocationLib.h>
|
||||||
#include <Library/PcdLib.h>
|
#include <Library/PcdLib.h>
|
||||||
|
#include <Library/ReportStatusCodeLib.h>
|
||||||
|
|
||||||
#include <IndustryStandard/Pci.h>
|
#include <IndustryStandard/Pci.h>
|
||||||
|
|
||||||
@ -112,6 +113,7 @@ struct _USB_HC_DEV {
|
|||||||
UINT32 Signature;
|
UINT32 Signature;
|
||||||
EFI_USB2_HC_PROTOCOL Usb2Hc;
|
EFI_USB2_HC_PROTOCOL Usb2Hc;
|
||||||
EFI_PCI_IO_PROTOCOL *PciIo;
|
EFI_PCI_IO_PROTOCOL *PciIo;
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||||
UINT64 OriginalPciAttributes;
|
UINT64 OriginalPciAttributes;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
# It implements the interfaces of monitoring the status of all ports and transferring
|
# It implements the interfaces of monitoring the status of all ports and transferring
|
||||||
# Control, Bulk, Interrupt and Isochronous requests to Usb1.x device
|
# Control, Bulk, Interrupt and Isochronous requests to Usb1.x device
|
||||||
#
|
#
|
||||||
# Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
|
# Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||||
#
|
#
|
||||||
# This program and the accompanying materials
|
# This program and the accompanying materials
|
||||||
# are licensed and made available under the terms and conditions of the BSD License
|
# are licensed and made available under the terms and conditions of the BSD License
|
||||||
@ -71,6 +71,7 @@
|
|||||||
BaseMemoryLib
|
BaseMemoryLib
|
||||||
DebugLib
|
DebugLib
|
||||||
PcdLib
|
PcdLib
|
||||||
|
ReportStatusCodeLib
|
||||||
|
|
||||||
[Guids]
|
[Guids]
|
||||||
gEfiEventExitBootServicesGuid ## PRODUCES ## Event
|
gEfiEventExitBootServicesGuid ## PRODUCES ## Event
|
||||||
|
@ -140,16 +140,27 @@ XhcReset (
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
USB_XHCI_INSTANCE *Xhc;
|
USB_XHCI_INSTANCE *Xhc;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_TPL OldTpl;
|
EFI_TPL OldTpl;
|
||||||
|
|
||||||
OldTpl = gBS->RaiseTPL (XHC_TPL);
|
Xhc = XHC_FROM_THIS (This);
|
||||||
|
|
||||||
Xhc = XHC_FROM_THIS (This);
|
if (Xhc->DevicePath != NULL) {
|
||||||
|
//
|
||||||
switch (Attributes) {
|
// Report Status Code to indicate reset happens
|
||||||
case EFI_USB_HC_RESET_GLOBAL:
|
//
|
||||||
//
|
REPORT_STATUS_CODE_WITH_DEVICE_PATH (
|
||||||
|
EFI_PROGRESS_CODE,
|
||||||
|
(EFI_IO_BUS_USB | EFI_IOB_PC_RESET),
|
||||||
|
Xhc->DevicePath
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
OldTpl = gBS->RaiseTPL (XHC_TPL);
|
||||||
|
|
||||||
|
switch (Attributes) {
|
||||||
|
case EFI_USB_HC_RESET_GLOBAL:
|
||||||
|
//
|
||||||
// Flow through, same behavior as Host Controller Reset
|
// Flow through, same behavior as Host Controller Reset
|
||||||
//
|
//
|
||||||
case EFI_USB_HC_RESET_HOST_CONTROLLER:
|
case EFI_USB_HC_RESET_HOST_CONTROLLER:
|
||||||
@ -1678,14 +1689,15 @@ ON_EXIT:
|
|||||||
@return The allocated and initialized USB_XHCI_INSTANCE structure if created,
|
@return The allocated and initialized USB_XHCI_INSTANCE structure if created,
|
||||||
otherwise NULL.
|
otherwise NULL.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
USB_XHCI_INSTANCE*
|
USB_XHCI_INSTANCE*
|
||||||
XhcCreateUsbHc (
|
XhcCreateUsbHc (
|
||||||
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
||||||
IN UINT64 OriginalPciAttributes
|
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
|
||||||
)
|
IN UINT64 OriginalPciAttributes
|
||||||
{
|
)
|
||||||
USB_XHCI_INSTANCE *Xhc;
|
{
|
||||||
|
USB_XHCI_INSTANCE *Xhc;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
UINT32 PageSize;
|
UINT32 PageSize;
|
||||||
UINT16 ExtCapReg;
|
UINT16 ExtCapReg;
|
||||||
@ -1698,12 +1710,13 @@ XhcCreateUsbHc (
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Initialize private data structure
|
// Initialize private data structure
|
||||||
//
|
//
|
||||||
Xhc->Signature = XHCI_INSTANCE_SIG;
|
Xhc->Signature = XHCI_INSTANCE_SIG;
|
||||||
Xhc->PciIo = PciIo;
|
Xhc->PciIo = PciIo;
|
||||||
Xhc->OriginalPciAttributes = OriginalPciAttributes;
|
Xhc->DevicePath = DevicePath;
|
||||||
CopyMem (&Xhc->Usb2Hc, &gXhciUsb2HcTemplate, sizeof (EFI_USB2_HC_PROTOCOL));
|
Xhc->OriginalPciAttributes = OriginalPciAttributes;
|
||||||
|
CopyMem (&Xhc->Usb2Hc, &gXhciUsb2HcTemplate, sizeof (EFI_USB2_HC_PROTOCOL));
|
||||||
|
|
||||||
InitializeListHead (&Xhc->AsyncIntTransfers);
|
InitializeListHead (&Xhc->AsyncIntTransfers);
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -1827,12 +1840,13 @@ XhcDriverBindingStart (
|
|||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_PCI_IO_PROTOCOL *PciIo;
|
EFI_PCI_IO_PROTOCOL *PciIo;
|
||||||
UINT64 Supports;
|
UINT64 Supports;
|
||||||
UINT64 OriginalPciAttributes;
|
UINT64 OriginalPciAttributes;
|
||||||
BOOLEAN PciAttributesSaved;
|
BOOLEAN PciAttributesSaved;
|
||||||
USB_XHCI_INSTANCE *Xhc;
|
USB_XHCI_INSTANCE *Xhc;
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL *HcDevicePath;
|
||||||
//
|
|
||||||
// Open the PciIo Protocol, then enable the USB host controller
|
//
|
||||||
|
// Open the PciIo Protocol, then enable the USB host controller
|
||||||
//
|
//
|
||||||
Status = gBS->OpenProtocol (
|
Status = gBS->OpenProtocol (
|
||||||
Controller,
|
Controller,
|
||||||
@ -1844,12 +1858,25 @@ XhcDriverBindingStart (
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
PciAttributesSaved = FALSE;
|
//
|
||||||
//
|
// Open Device Path Protocol for on USB host controller
|
||||||
// Save original PCI attributes
|
//
|
||||||
|
HcDevicePath = NULL;
|
||||||
|
Status = gBS->OpenProtocol (
|
||||||
|
Controller,
|
||||||
|
&gEfiDevicePathProtocolGuid,
|
||||||
|
(VOID **) &HcDevicePath,
|
||||||
|
This->DriverBindingHandle,
|
||||||
|
Controller,
|
||||||
|
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||||
|
);
|
||||||
|
|
||||||
|
PciAttributesSaved = FALSE;
|
||||||
|
//
|
||||||
|
// Save original PCI attributes
|
||||||
//
|
//
|
||||||
Status = PciIo->Attributes (
|
Status = PciIo->Attributes (
|
||||||
PciIo,
|
PciIo,
|
||||||
@ -1884,13 +1911,13 @@ XhcDriverBindingStart (
|
|||||||
goto CLOSE_PCIIO;
|
goto CLOSE_PCIIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Create then install USB2_HC_PROTOCOL
|
// Create then install USB2_HC_PROTOCOL
|
||||||
//
|
//
|
||||||
Xhc = XhcCreateUsbHc (PciIo, OriginalPciAttributes);
|
Xhc = XhcCreateUsbHc (PciIo, HcDevicePath, OriginalPciAttributes);
|
||||||
|
|
||||||
if (Xhc == NULL) {
|
if (Xhc == NULL) {
|
||||||
DEBUG ((EFI_D_ERROR, "XhcDriverBindingStart: failed to create USB2_HC\n"));
|
DEBUG ((EFI_D_ERROR, "XhcDriverBindingStart: failed to create USB2_HC\n"));
|
||||||
return EFI_OUT_OF_RESOURCES;
|
return EFI_OUT_OF_RESOURCES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,6 +30,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
#include <Library/MemoryAllocationLib.h>
|
#include <Library/MemoryAllocationLib.h>
|
||||||
#include <Library/UefiLib.h>
|
#include <Library/UefiLib.h>
|
||||||
#include <Library/DebugLib.h>
|
#include <Library/DebugLib.h>
|
||||||
|
#include <Library/ReportStatusCodeLib.h>
|
||||||
|
|
||||||
#include <IndustryStandard/Pci.h>
|
#include <IndustryStandard/Pci.h>
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
# It implements the interfaces of monitoring the status of all ports and transferring
|
# It implements the interfaces of monitoring the status of all ports and transferring
|
||||||
# Control, Bulk, Interrupt and Isochronous requests to those attached usb LS/FS/HS/SS devices.
|
# Control, Bulk, Interrupt and Isochronous requests to those attached usb LS/FS/HS/SS devices.
|
||||||
#
|
#
|
||||||
# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
|
# Copyright (c) 2011 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||||
#
|
#
|
||||||
# This program and the accompanying materials
|
# This program and the accompanying materials
|
||||||
# are licensed and made available under the terms and conditions of the BSD License
|
# are licensed and made available under the terms and conditions of the BSD License
|
||||||
@ -59,6 +59,7 @@
|
|||||||
UefiDriverEntryPoint
|
UefiDriverEntryPoint
|
||||||
BaseMemoryLib
|
BaseMemoryLib
|
||||||
DebugLib
|
DebugLib
|
||||||
|
ReportStatusCodeLib
|
||||||
|
|
||||||
[Guids]
|
[Guids]
|
||||||
gEfiEventExitBootServicesGuid ## PRODUCES ## Event
|
gEfiEventExitBootServicesGuid ## PRODUCES ## Event
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
SCSI Bus driver that layers on every SCSI Pass Thru and
|
SCSI Bus driver that layers on every SCSI Pass Thru and
|
||||||
Extended SCSI Pass Thru protocol in the system.
|
Extended SCSI Pass Thru protocol in the system.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -341,6 +341,15 @@ SCSIBusDriverBindingStart (
|
|||||||
return DevicePathStatus;
|
return DevicePathStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Report Status Code to indicate SCSI bus starts
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE_WITH_DEVICE_PATH (
|
||||||
|
EFI_PROGRESS_CODE,
|
||||||
|
(EFI_IO_BUS_SCSI | EFI_IOB_PC_INIT),
|
||||||
|
ParentDevicePath
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
// To keep backward compatibility, UEFI ExtPassThru Protocol is supported as well as
|
// To keep backward compatibility, UEFI ExtPassThru Protocol is supported as well as
|
||||||
// EFI PassThru Protocol. From priority perspective, ExtPassThru Protocol is firstly
|
// EFI PassThru Protocol. From priority perspective, ExtPassThru Protocol is firstly
|
||||||
@ -451,6 +460,15 @@ SCSIBusDriverBindingStart (
|
|||||||
ScsiBusDev = SCSI_BUS_CONTROLLER_DEVICE_FROM_THIS (BusIdentify);
|
ScsiBusDev = SCSI_BUS_CONTROLLER_DEVICE_FROM_THIS (BusIdentify);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Report Status Code to indicate detecting devices on bus
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE_WITH_DEVICE_PATH (
|
||||||
|
EFI_PROGRESS_CODE,
|
||||||
|
(EFI_IO_BUS_SCSI | EFI_IOB_PC_DETECT),
|
||||||
|
ParentDevicePath
|
||||||
|
);
|
||||||
|
|
||||||
Lun = 0;
|
Lun = 0;
|
||||||
if (RemainingDevicePath == NULL) {
|
if (RemainingDevicePath == NULL) {
|
||||||
//
|
//
|
||||||
@ -828,6 +846,15 @@ ScsiResetBus (
|
|||||||
|
|
||||||
ScsiIoDevice = SCSI_IO_DEV_FROM_THIS (This);
|
ScsiIoDevice = SCSI_IO_DEV_FROM_THIS (This);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Report Status Code to indicate reset happens
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE_WITH_DEVICE_PATH (
|
||||||
|
EFI_PROGRESS_CODE,
|
||||||
|
(EFI_IO_BUS_ATA_ATAPI | EFI_IOB_PC_RESET),
|
||||||
|
ScsiIoDevice->ScsiBusDeviceData->DevicePath
|
||||||
|
);
|
||||||
|
|
||||||
if (ScsiIoDevice->ExtScsiSupport){
|
if (ScsiIoDevice->ExtScsiSupport){
|
||||||
return ScsiIoDevice->ExtScsiPassThru->ResetChannel (ScsiIoDevice->ExtScsiPassThru);
|
return ScsiIoDevice->ExtScsiPassThru->ResetChannel (ScsiIoDevice->ExtScsiPassThru);
|
||||||
} else {
|
} else {
|
||||||
@ -857,6 +884,16 @@ ScsiResetDevice (
|
|||||||
UINT8 Target[TARGET_MAX_BYTES];
|
UINT8 Target[TARGET_MAX_BYTES];
|
||||||
|
|
||||||
ScsiIoDevice = SCSI_IO_DEV_FROM_THIS (This);
|
ScsiIoDevice = SCSI_IO_DEV_FROM_THIS (This);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Report Status Code to indicate reset happens
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE_WITH_DEVICE_PATH (
|
||||||
|
EFI_PROGRESS_CODE,
|
||||||
|
(EFI_IO_BUS_ATA_ATAPI | EFI_IOB_PC_RESET),
|
||||||
|
ScsiIoDevice->ScsiBusDeviceData->DevicePath
|
||||||
|
);
|
||||||
|
|
||||||
CopyMem (Target,&ScsiIoDevice->Pun, TARGET_MAX_BYTES);
|
CopyMem (Target,&ScsiIoDevice->Pun, TARGET_MAX_BYTES);
|
||||||
|
|
||||||
|
|
||||||
@ -1121,6 +1158,7 @@ ScsiScanCreateDevice (
|
|||||||
}
|
}
|
||||||
|
|
||||||
ScsiIoDevice->Signature = SCSI_IO_DEV_SIGNATURE;
|
ScsiIoDevice->Signature = SCSI_IO_DEV_SIGNATURE;
|
||||||
|
ScsiIoDevice->ScsiBusDeviceData = ScsiBusDev;
|
||||||
CopyMem(&ScsiIoDevice->Pun, TargetId, TARGET_MAX_BYTES);
|
CopyMem(&ScsiIoDevice->Pun, TargetId, TARGET_MAX_BYTES);
|
||||||
ScsiIoDevice->Lun = Lun;
|
ScsiIoDevice->Lun = Lun;
|
||||||
|
|
||||||
@ -1141,6 +1179,15 @@ ScsiScanCreateDevice (
|
|||||||
ScsiIoDevice->ScsiIo.ResetDevice = ScsiResetDevice;
|
ScsiIoDevice->ScsiIo.ResetDevice = ScsiResetDevice;
|
||||||
ScsiIoDevice->ScsiIo.ExecuteScsiCommand = ScsiExecuteSCSICommand;
|
ScsiIoDevice->ScsiIo.ExecuteScsiCommand = ScsiExecuteSCSICommand;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Report Status Code here since the new SCSI device will be discovered
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE_WITH_DEVICE_PATH (
|
||||||
|
EFI_PROGRESS_CODE,
|
||||||
|
(EFI_IO_BUS_SCSI | EFI_IOB_PC_ENABLE),
|
||||||
|
ScsiBusDev->DevicePath
|
||||||
|
);
|
||||||
|
|
||||||
if (!DiscoverScsiDevice (ScsiIoDevice)) {
|
if (!DiscoverScsiDevice (ScsiIoDevice)) {
|
||||||
Status = EFI_OUT_OF_RESOURCES;
|
Status = EFI_OUT_OF_RESOURCES;
|
||||||
goto ErrorExit;
|
goto ErrorExit;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
Header file for SCSI Bus Driver.
|
Header file for SCSI Bus Driver.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -33,6 +33,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
#include <Library/UefiScsiLib.h>
|
#include <Library/UefiScsiLib.h>
|
||||||
#include <Library/UefiBootServicesTableLib.h>
|
#include <Library/UefiBootServicesTableLib.h>
|
||||||
#include <Library/DevicePathLib.h>
|
#include <Library/DevicePathLib.h>
|
||||||
|
#include <Library/ReportStatusCodeLib.h>
|
||||||
|
|
||||||
#include <IndustryStandard/Scsi.h>
|
#include <IndustryStandard/Scsi.h>
|
||||||
|
|
||||||
@ -54,27 +55,10 @@ typedef struct {
|
|||||||
VOID *Data2;
|
VOID *Data2;
|
||||||
} SCSI_EVENT_DATA;
|
} SCSI_EVENT_DATA;
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
UINT32 Signature;
|
|
||||||
EFI_HANDLE Handle;
|
|
||||||
EFI_SCSI_IO_PROTOCOL ScsiIo;
|
|
||||||
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
|
||||||
BOOLEAN ExtScsiSupport;
|
|
||||||
EFI_SCSI_PASS_THRU_PROTOCOL *ScsiPassThru;
|
|
||||||
EFI_EXT_SCSI_PASS_THRU_PROTOCOL *ExtScsiPassThru;
|
|
||||||
SCSI_TARGET_ID Pun;
|
|
||||||
UINT64 Lun;
|
|
||||||
UINT8 ScsiDeviceType;
|
|
||||||
UINT8 ScsiVersion;
|
|
||||||
BOOLEAN RemovableDevice;
|
|
||||||
} SCSI_IO_DEV;
|
|
||||||
|
|
||||||
#define SCSI_IO_DEV_FROM_THIS(a) CR (a, SCSI_IO_DEV, ScsiIo, SCSI_IO_DEV_SIGNATURE)
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// SCSI Bus Controller device strcuture
|
// SCSI Bus Controller device strcuture
|
||||||
//
|
//
|
||||||
|
#define SCSI_BUS_DEVICE_SIGNATURE SIGNATURE_32 ('s', 'c', 's', 'i')
|
||||||
|
|
||||||
//
|
//
|
||||||
// The ScsiBusProtocol is just used to locate ScsiBusDev
|
// The ScsiBusProtocol is just used to locate ScsiBusDev
|
||||||
@ -87,9 +71,6 @@ typedef struct _EFI_SCSI_BUS_PROTOCOL {
|
|||||||
UINT64 Reserved;
|
UINT64 Reserved;
|
||||||
} EFI_SCSI_BUS_PROTOCOL;
|
} EFI_SCSI_BUS_PROTOCOL;
|
||||||
|
|
||||||
#define SCSI_BUS_DEVICE_SIGNATURE SIGNATURE_32 ('s', 'c', 's', 'i')
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct _SCSI_BUS_DEVICE {
|
typedef struct _SCSI_BUS_DEVICE {
|
||||||
UINTN Signature;
|
UINTN Signature;
|
||||||
EFI_SCSI_BUS_PROTOCOL BusIdentify;
|
EFI_SCSI_BUS_PROTOCOL BusIdentify;
|
||||||
@ -101,6 +82,24 @@ typedef struct _SCSI_BUS_DEVICE {
|
|||||||
|
|
||||||
#define SCSI_BUS_CONTROLLER_DEVICE_FROM_THIS(a) CR (a, SCSI_BUS_DEVICE, BusIdentify, SCSI_BUS_DEVICE_SIGNATURE)
|
#define SCSI_BUS_CONTROLLER_DEVICE_FROM_THIS(a) CR (a, SCSI_BUS_DEVICE, BusIdentify, SCSI_BUS_DEVICE_SIGNATURE)
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
UINT32 Signature;
|
||||||
|
EFI_HANDLE Handle;
|
||||||
|
EFI_SCSI_IO_PROTOCOL ScsiIo;
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||||
|
BOOLEAN ExtScsiSupport;
|
||||||
|
EFI_SCSI_PASS_THRU_PROTOCOL *ScsiPassThru;
|
||||||
|
EFI_EXT_SCSI_PASS_THRU_PROTOCOL *ExtScsiPassThru;
|
||||||
|
SCSI_BUS_DEVICE *ScsiBusDeviceData;
|
||||||
|
SCSI_TARGET_ID Pun;
|
||||||
|
UINT64 Lun;
|
||||||
|
UINT8 ScsiDeviceType;
|
||||||
|
UINT8 ScsiVersion;
|
||||||
|
BOOLEAN RemovableDevice;
|
||||||
|
} SCSI_IO_DEV;
|
||||||
|
|
||||||
|
#define SCSI_IO_DEV_FROM_THIS(a) CR (a, SCSI_IO_DEV, ScsiIo, SCSI_IO_DEV_SIGNATURE)
|
||||||
|
|
||||||
//
|
//
|
||||||
// Global Variables
|
// Global Variables
|
||||||
//
|
//
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
# each of them. After this the driver installs the Device Path Protocol and SCSI I/O Protocol on
|
# each of them. After this the driver installs the Device Path Protocol and SCSI I/O Protocol on
|
||||||
# these handles.
|
# these handles.
|
||||||
#
|
#
|
||||||
# Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
|
# Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||||
# This program and the accompanying materials
|
# This program and the accompanying materials
|
||||||
# are licensed and made available under the terms and conditions of the BSD License
|
# are licensed and made available under the terms and conditions of the BSD License
|
||||||
# which accompanies this distribution. The full text of the license may be found at
|
# which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -55,6 +55,7 @@
|
|||||||
UefiDriverEntryPoint
|
UefiDriverEntryPoint
|
||||||
DebugLib
|
DebugLib
|
||||||
MemoryAllocationLib
|
MemoryAllocationLib
|
||||||
|
ReportStatusCodeLib
|
||||||
|
|
||||||
|
|
||||||
[Protocols]
|
[Protocols]
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
Usb Bus Driver Binding and Bus IO Protocol.
|
Usb Bus Driver Binding and Bus IO Protocol.
|
||||||
|
|
||||||
Copyright (c) 2004 - 2011, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2004 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -1018,7 +1018,16 @@ UsbBusBuildProtocol (
|
|||||||
RootIf->Signature = USB_INTERFACE_SIGNATURE;
|
RootIf->Signature = USB_INTERFACE_SIGNATURE;
|
||||||
RootIf->Device = RootHub;
|
RootIf->Device = RootHub;
|
||||||
RootIf->DevicePath = UsbBus->DevicePath;
|
RootIf->DevicePath = UsbBus->DevicePath;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Report Status Code here since we will enumerate the USB devices
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE_WITH_DEVICE_PATH (
|
||||||
|
EFI_PROGRESS_CODE,
|
||||||
|
(EFI_IO_BUS_USB | EFI_IOB_PC_DETECT),
|
||||||
|
UsbBus->DevicePath
|
||||||
|
);
|
||||||
|
|
||||||
Status = mUsbRootHubApi.Init (RootIf);
|
Status = mUsbRootHubApi.Init (RootIf);
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
@ -1265,6 +1274,26 @@ UsbBusControllerDriverStart (
|
|||||||
{
|
{
|
||||||
EFI_USB_BUS_PROTOCOL *UsbBusId;
|
EFI_USB_BUS_PROTOCOL *UsbBusId;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
|
||||||
|
|
||||||
|
Status = gBS->OpenProtocol (
|
||||||
|
Controller,
|
||||||
|
&gEfiDevicePathProtocolGuid,
|
||||||
|
(VOID **) &ParentDevicePath,
|
||||||
|
This->DriverBindingHandle,
|
||||||
|
Controller,
|
||||||
|
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||||
|
);
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Report Status Code here since we will initialize the host controller
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE_WITH_DEVICE_PATH (
|
||||||
|
EFI_PROGRESS_CODE,
|
||||||
|
(EFI_IO_BUS_USB | EFI_IOB_PC_INIT),
|
||||||
|
ParentDevicePath
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Locate the USB bus protocol, if it is found, USB bus
|
// Locate the USB bus protocol, if it is found, USB bus
|
||||||
|
@ -803,6 +803,14 @@ UsbEnumerateNewDev (
|
|||||||
goto ON_ERROR;
|
goto ON_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Report Status Code to indicate USB device has been detected by hotplug
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE_WITH_DEVICE_PATH (
|
||||||
|
EFI_PROGRESS_CODE,
|
||||||
|
(EFI_IO_BUS_USB | EFI_IOB_PC_HOTPLUG),
|
||||||
|
Bus->DevicePath
|
||||||
|
);
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
|
|
||||||
ON_ERROR:
|
ON_ERROR:
|
||||||
|
@ -244,12 +244,25 @@ USBKeyboardDriverBindingStart (
|
|||||||
|
|
||||||
if (!Found) {
|
if (!Found) {
|
||||||
//
|
//
|
||||||
|
// Report Status Code to indicate that there is no USB keyboard
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE (
|
||||||
|
EFI_ERROR_CODE | EFI_ERROR_MINOR,
|
||||||
|
(EFI_PERIPHERAL_KEYBOARD | EFI_P_EC_NOT_DETECTED)
|
||||||
|
);
|
||||||
|
//
|
||||||
// No interrupt endpoint found, then return unsupported.
|
// No interrupt endpoint found, then return unsupported.
|
||||||
//
|
//
|
||||||
Status = EFI_UNSUPPORTED;
|
Status = EFI_UNSUPPORTED;
|
||||||
goto ErrorExit;
|
goto ErrorExit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
REPORT_STATUS_CODE_WITH_DEVICE_PATH (
|
||||||
|
EFI_PROGRESS_CODE,
|
||||||
|
(EFI_PERIPHERAL_KEYBOARD | EFI_P_PC_DETECTED),
|
||||||
|
UsbKeyboardDevice->DevicePath
|
||||||
|
);
|
||||||
|
|
||||||
UsbKeyboardDevice->Signature = USB_KB_DEV_SIGNATURE;
|
UsbKeyboardDevice->Signature = USB_KB_DEV_SIGNATURE;
|
||||||
UsbKeyboardDevice->SimpleInput.Reset = USBKeyboardReset;
|
UsbKeyboardDevice->SimpleInput.Reset = USBKeyboardReset;
|
||||||
UsbKeyboardDevice->SimpleInput.ReadKeyStroke = USBKeyboardReadKeyStroke;
|
UsbKeyboardDevice->SimpleInput.ReadKeyStroke = USBKeyboardReadKeyStroke;
|
||||||
|
@ -188,6 +188,16 @@ USBMouseAbsolutePointerDriverBindingStart (
|
|||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
goto ErrorExit;
|
goto ErrorExit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Report Status Code here since USB mouse will be detected next.
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE_WITH_DEVICE_PATH (
|
||||||
|
EFI_PROGRESS_CODE,
|
||||||
|
(EFI_PERIPHERAL_MOUSE | EFI_P_PC_PRESENCE_DETECT),
|
||||||
|
UsbMouseDevice->DevicePath
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Get interface & endpoint descriptor
|
// Get interface & endpoint descriptor
|
||||||
//
|
//
|
||||||
@ -221,12 +231,28 @@ USBMouseAbsolutePointerDriverBindingStart (
|
|||||||
|
|
||||||
if (!Found) {
|
if (!Found) {
|
||||||
//
|
//
|
||||||
|
// Report Status Code to indicate that there is no USB mouse
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE (
|
||||||
|
EFI_ERROR_CODE | EFI_ERROR_MINOR,,
|
||||||
|
(EFI_PERIPHERAL_MOUSE | EFI_P_EC_NOT_DETECTED)
|
||||||
|
);
|
||||||
|
//
|
||||||
// No interrupt endpoint found, then return unsupported.
|
// No interrupt endpoint found, then return unsupported.
|
||||||
//
|
//
|
||||||
Status = EFI_UNSUPPORTED;
|
Status = EFI_UNSUPPORTED;
|
||||||
goto ErrorExit;
|
goto ErrorExit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Report Status Code here since USB mouse has be detected.
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE_WITH_DEVICE_PATH (
|
||||||
|
EFI_PROGRESS_CODE,
|
||||||
|
(EFI_PERIPHERAL_MOUSE | EFI_P_PC_DETECTED),
|
||||||
|
UsbMouseDevice->DevicePath
|
||||||
|
);
|
||||||
|
|
||||||
Status = InitializeUsbMouseDevice (UsbMouseAbsolutePointerDevice);
|
Status = InitializeUsbMouseDevice (UsbMouseAbsolutePointerDevice);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
//
|
//
|
||||||
|
@ -188,6 +188,16 @@ USBMouseDriverBindingStart (
|
|||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
goto ErrorExit;
|
goto ErrorExit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Report Status Code here since USB mouse will be detected next.
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE_WITH_DEVICE_PATH (
|
||||||
|
EFI_PROGRESS_CODE,
|
||||||
|
(EFI_PERIPHERAL_MOUSE | EFI_P_PC_PRESENCE_DETECT),
|
||||||
|
UsbMouseDevice->DevicePath
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Get interface & endpoint descriptor
|
// Get interface & endpoint descriptor
|
||||||
//
|
//
|
||||||
@ -221,12 +231,28 @@ USBMouseDriverBindingStart (
|
|||||||
|
|
||||||
if (!Found) {
|
if (!Found) {
|
||||||
//
|
//
|
||||||
|
// Report Status Code to indicate that there is no USB mouse
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE (
|
||||||
|
EFI_ERROR_CODE | EFI_ERROR_MINOR,
|
||||||
|
(EFI_PERIPHERAL_MOUSE | EFI_P_EC_NOT_DETECTED)
|
||||||
|
);
|
||||||
|
//
|
||||||
// No interrupt endpoint found, then return unsupported.
|
// No interrupt endpoint found, then return unsupported.
|
||||||
//
|
//
|
||||||
Status = EFI_UNSUPPORTED;
|
Status = EFI_UNSUPPORTED;
|
||||||
goto ErrorExit;
|
goto ErrorExit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Report Status Code here since USB mouse has be detected.
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE_WITH_DEVICE_PATH (
|
||||||
|
EFI_PROGRESS_CODE,
|
||||||
|
(EFI_PERIPHERAL_MOUSE | EFI_P_PC_DETECTED),
|
||||||
|
UsbMouseDevice->DevicePath
|
||||||
|
);
|
||||||
|
|
||||||
Status = InitializeUsbMouseDevice (UsbMouseDevice);
|
Status = InitializeUsbMouseDevice (UsbMouseDevice);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
//
|
//
|
||||||
|
@ -448,7 +448,17 @@ DxeMain (
|
|||||||
//
|
//
|
||||||
// Assert if the Architectural Protocols are not present.
|
// Assert if the Architectural Protocols are not present.
|
||||||
//
|
//
|
||||||
ASSERT_EFI_ERROR (CoreAllEfiServicesAvailable ());
|
Status = CoreAllEfiServicesAvailable ();
|
||||||
|
if (EFI_ERROR(Status)) {
|
||||||
|
//
|
||||||
|
// Report Status code that some Architectural Protocols are not present.
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE (
|
||||||
|
EFI_ERROR_CODE | EFI_ERROR_MAJOR,
|
||||||
|
(EFI_SOFTWARE_DXE_CORE | EFI_SW_DXE_CORE_EC_NO_ARCH)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Report Status code before transfer control to BDS
|
// Report Status code before transfer control to BDS
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
Last PEIM.
|
Last PEIM.
|
||||||
Responsibility of this module is to load the DXE Core from a Firmware Volume.
|
Responsibility of this module is to load the DXE Core from a Firmware Volume.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -221,25 +221,49 @@ DxeLoadCore (
|
|||||||
NULL,
|
NULL,
|
||||||
(VOID **) &S3Resume
|
(VOID **) &S3Resume
|
||||||
);
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
//
|
||||||
|
// Report Status code that S3Resume PPI can not be found
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE (
|
||||||
|
EFI_ERROR_CODE | EFI_ERROR_MAJOR,
|
||||||
|
(EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_EC_S3_RESUME_PPI_NOT_FOUND)
|
||||||
|
);
|
||||||
|
}
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
Status = S3Resume->S3RestoreConfig2 (S3Resume);
|
Status = S3Resume->S3RestoreConfig2 (S3Resume);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
} else if (BootMode == BOOT_IN_RECOVERY_MODE) {
|
} else if (BootMode == BOOT_IN_RECOVERY_MODE) {
|
||||||
|
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, (EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_PC_RECOVERY_BEGIN));
|
||||||
Status = PeiServicesLocatePpi (
|
Status = PeiServicesLocatePpi (
|
||||||
&gEfiPeiRecoveryModulePpiGuid,
|
&gEfiPeiRecoveryModulePpiGuid,
|
||||||
0,
|
0,
|
||||||
NULL,
|
NULL,
|
||||||
(VOID **) &PeiRecovery
|
(VOID **) &PeiRecovery
|
||||||
);
|
);
|
||||||
|
//
|
||||||
|
// Report Status code the failure of locating Recovery PPI
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE (
|
||||||
|
EFI_ERROR_CODE | EFI_ERROR_MAJOR,
|
||||||
|
(EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_EC_RECOVERY_PPI_NOT_FOUND)
|
||||||
|
);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, (EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_PC_CAPSULE_LOAD));
|
||||||
Status = PeiRecovery->LoadRecoveryCapsule (PeiServices, PeiRecovery);
|
Status = PeiRecovery->LoadRecoveryCapsule (PeiServices, PeiRecovery);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
DEBUG ((DEBUG_ERROR, "Load Recovery Capsule Failed.(Status = %r)\n", Status));
|
DEBUG ((DEBUG_ERROR, "Load Recovery Capsule Failed.(Status = %r)\n", Status));
|
||||||
|
//
|
||||||
|
// Report Status code that S3Resume PPI can not be found
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE (
|
||||||
|
EFI_ERROR_CODE | EFI_ERROR_MAJOR,
|
||||||
|
(EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_EC_NO_RECOVERY_CAPSULE)
|
||||||
|
);
|
||||||
CpuDeadLoop ();
|
CpuDeadLoop ();
|
||||||
}
|
}
|
||||||
|
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, (EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_PC_CAPSULE_START));
|
||||||
//
|
//
|
||||||
// Now should have a HOB with the DXE core
|
// Now should have a HOB with the DXE core
|
||||||
//
|
//
|
||||||
|
@ -48,6 +48,13 @@ PeiResetSystem (
|
|||||||
if (!EFI_ERROR (Status)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
return ResetPpi->ResetSystem (PeiServices);
|
return ResetPpi->ResetSystem (PeiServices);
|
||||||
}
|
}
|
||||||
|
//
|
||||||
|
// Report Status Code that Reset PPI is not available
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE (
|
||||||
|
EFI_ERROR_CODE | EFI_ERROR_MINOR,
|
||||||
|
(EFI_SOFTWARE_PEI_CORE | EFI_SW_PS_EC_RESET_NOT_AVAILABLE)
|
||||||
|
);
|
||||||
return EFI_NOT_AVAILABLE_YET;
|
return EFI_NOT_AVAILABLE_YET;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ Revision History:
|
|||||||
Table now contains an item named CalculateCrc32.
|
Table now contains an item named CalculateCrc32.
|
||||||
|
|
||||||
|
|
||||||
Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -279,6 +279,11 @@ RuntimeDriverSetVirtualAddressMap (
|
|||||||
//
|
//
|
||||||
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, (EFI_SOFTWARE_EFI_RUNTIME_SERVICE | EFI_SW_RS_PC_SET_VIRTUAL_ADDRESS_MAP));
|
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, (EFI_SOFTWARE_EFI_RUNTIME_SERVICE | EFI_SW_RS_PC_SET_VIRTUAL_ADDRESS_MAP));
|
||||||
|
|
||||||
|
//
|
||||||
|
// Report Status Code here since EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE event will be signaled.
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_PC_VIRTUAL_ADDRESS_CHANGE_EVENT));
|
||||||
|
|
||||||
//
|
//
|
||||||
// Signal all the EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE events.
|
// Signal all the EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE events.
|
||||||
// All runtime events are stored in a list in Runtime AP.
|
// All runtime events are stored in a list in Runtime AP.
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
Definitions for data structures used in S3 resume.
|
Definitions for data structures used in S3 resume.
|
||||||
|
|
||||||
Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2011 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||||
|
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions
|
are licensed and made available under the terms and conditions
|
||||||
@ -22,6 +22,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
#define SMM_S3_RESUME_SMM_32 SIGNATURE_64 ('S','M','M','S','3','_','3','2')
|
#define SMM_S3_RESUME_SMM_32 SIGNATURE_64 ('S','M','M','S','3','_','3','2')
|
||||||
#define SMM_S3_RESUME_SMM_64 SIGNATURE_64 ('S','M','M','S','3','_','6','4')
|
#define SMM_S3_RESUME_SMM_64 SIGNATURE_64 ('S','M','M','S','3','_','6','4')
|
||||||
|
|
||||||
|
#pragma pack(1)
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
UINT64 Signature;
|
UINT64 Signature;
|
||||||
EFI_PHYSICAL_ADDRESS SmmS3ResumeEntryPoint;
|
EFI_PHYSICAL_ADDRESS SmmS3ResumeEntryPoint;
|
||||||
@ -50,12 +52,15 @@ typedef struct {
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
UINT16 ReturnCs;
|
UINT16 ReturnCs;
|
||||||
|
UINT64 ReturnStatus;
|
||||||
EFI_PHYSICAL_ADDRESS ReturnEntryPoint;
|
EFI_PHYSICAL_ADDRESS ReturnEntryPoint;
|
||||||
EFI_PHYSICAL_ADDRESS ReturnStackPointer;
|
EFI_PHYSICAL_ADDRESS ReturnStackPointer;
|
||||||
EFI_PHYSICAL_ADDRESS AsmTransferControl;
|
EFI_PHYSICAL_ADDRESS AsmTransferControl;
|
||||||
IA32_DESCRIPTOR Idtr;
|
IA32_DESCRIPTOR Idtr;
|
||||||
} PEI_S3_RESUME_STATE;
|
} PEI_S3_RESUME_STATE;
|
||||||
|
|
||||||
|
#pragma pack()
|
||||||
|
|
||||||
#define EFI_ACPI_S3_CONTEXT_GUID \
|
#define EFI_ACPI_S3_CONTEXT_GUID \
|
||||||
{ \
|
{ \
|
||||||
0xef98d3a, 0x3e33, 0x497a, {0xa4, 0x1, 0x77, 0xbe, 0x3e, 0xb7, 0x4f, 0x38} \
|
0xef98d3a, 0x3e33, 0x497a, {0xa4, 0x1, 0x77, 0xbe, 0x3e, 0xb7, 0x4f, 0x38} \
|
||||||
|
@ -68,9 +68,12 @@ S3BootScriptExecutorEntryFunction (
|
|||||||
// for that parameter.
|
// for that parameter.
|
||||||
//
|
//
|
||||||
Status = S3BootScriptExecute ();
|
Status = S3BootScriptExecute ();
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
return Status;
|
//
|
||||||
}
|
// Need report status back to S3ResumePeim.
|
||||||
|
// If boot script execution is failed, S3ResumePeim wil report the error status code.
|
||||||
|
//
|
||||||
|
PeiS3ResumeState->ReturnStatus = (UINT64)(UINTN)Status;
|
||||||
|
|
||||||
AsmWbinvd ();
|
AsmWbinvd ();
|
||||||
|
|
||||||
@ -79,13 +82,6 @@ S3BootScriptExecutorEntryFunction (
|
|||||||
//
|
//
|
||||||
Facs = (EFI_ACPI_4_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *) ((UINTN) (AcpiS3Context->AcpiFacsTable));
|
Facs = (EFI_ACPI_4_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *) ((UINTN) (AcpiS3Context->AcpiFacsTable));
|
||||||
|
|
||||||
if ((Facs == NULL) ||
|
|
||||||
(Facs->Signature != EFI_ACPI_4_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE) ||
|
|
||||||
((Facs->FirmwareWakingVector == 0) && (Facs->XFirmwareWakingVector == 0)) ) {
|
|
||||||
CpuDeadLoop();
|
|
||||||
return EFI_INVALID_PARAMETER;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// We need turn back to S3Resume - install boot script done ppi and report status code on S3resume.
|
// We need turn back to S3Resume - install boot script done ppi and report status code on S3resume.
|
||||||
//
|
//
|
||||||
@ -97,12 +93,16 @@ S3BootScriptExecutorEntryFunction (
|
|||||||
DEBUG ((EFI_D_ERROR, "Call AsmDisablePaging64() to return to S3 Resume in PEI Phase\n"));
|
DEBUG ((EFI_D_ERROR, "Call AsmDisablePaging64() to return to S3 Resume in PEI Phase\n"));
|
||||||
PeiS3ResumeState->AsmTransferControl = (EFI_PHYSICAL_ADDRESS)(UINTN)AsmTransferControl32;
|
PeiS3ResumeState->AsmTransferControl = (EFI_PHYSICAL_ADDRESS)(UINTN)AsmTransferControl32;
|
||||||
|
|
||||||
//
|
if ((Facs != NULL) &&
|
||||||
// more step needed - because relative address is handled differently between X64 and IA32.
|
(Facs->Signature == EFI_ACPI_4_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE) &&
|
||||||
//
|
(Facs->FirmwareWakingVector != 0) ) {
|
||||||
AsmTransferControl16Address = (UINTN)AsmTransferControl16;
|
//
|
||||||
AsmFixAddress16 = (UINT32)AsmTransferControl16Address;
|
// more step needed - because relative address is handled differently between X64 and IA32.
|
||||||
AsmJmpAddr32 = (UINT32)((Facs->FirmwareWakingVector & 0xF) | ((Facs->FirmwareWakingVector & 0xFFFF0) << 12));
|
//
|
||||||
|
AsmTransferControl16Address = (UINTN)AsmTransferControl16;
|
||||||
|
AsmFixAddress16 = (UINT32)AsmTransferControl16Address;
|
||||||
|
AsmJmpAddr32 = (UINT32)((Facs->FirmwareWakingVector & 0xF) | ((Facs->FirmwareWakingVector & 0xFFFF0) << 12));
|
||||||
|
}
|
||||||
|
|
||||||
AsmDisablePaging64 (
|
AsmDisablePaging64 (
|
||||||
PeiS3ResumeState->ReturnCs,
|
PeiS3ResumeState->ReturnCs,
|
||||||
@ -132,7 +132,10 @@ S3BootScriptExecutorEntryFunction (
|
|||||||
CpuDeadLoop();
|
CpuDeadLoop();
|
||||||
return EFI_UNSUPPORTED;
|
return EFI_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// S3ResumePeim does not provide a way to jump back to itself, so resume to OS here directly
|
||||||
|
//
|
||||||
if (Facs->XFirmwareWakingVector != 0) {
|
if (Facs->XFirmwareWakingVector != 0) {
|
||||||
//
|
//
|
||||||
// Switch to native waking vector
|
// Switch to native waking vector
|
||||||
|
@ -104,6 +104,11 @@ ResetSystem (
|
|||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
UINTN Size;
|
UINTN Size;
|
||||||
UINTN CapsuleDataPtr;
|
UINTN CapsuleDataPtr;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Indicate reset system runtime service is called.
|
||||||
|
//
|
||||||
|
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, (EFI_SOFTWARE_EFI_RUNTIME_SERVICE | EFI_SW_RS_PC_RESET_SYSTEM));
|
||||||
|
|
||||||
switch (ResetType) {
|
switch (ResetType) {
|
||||||
case EfiResetWarm:
|
case EfiResetWarm:
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#include <Library/UefiRuntimeLib.h>
|
#include <Library/UefiRuntimeLib.h>
|
||||||
#include <Library/UefiRuntimeServicesTableLib.h>
|
#include <Library/UefiRuntimeServicesTableLib.h>
|
||||||
#include <Library/ResetSystemLib.h>
|
#include <Library/ResetSystemLib.h>
|
||||||
|
#include <Library/ReportStatusCodeLib.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
The driver's entry point.
|
The driver's entry point.
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
# This driver implements Reset Architectural Protocol.
|
# This driver implements Reset Architectural Protocol.
|
||||||
#
|
#
|
||||||
# Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
|
# Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||||
#
|
#
|
||||||
# This program and the accompanying materials are
|
# This program and the accompanying materials are
|
||||||
# licensed and made available under the terms and conditions of the BSD License
|
# licensed and made available under the terms and conditions of the BSD License
|
||||||
@ -48,6 +48,7 @@
|
|||||||
UefiLib
|
UefiLib
|
||||||
DebugLib
|
DebugLib
|
||||||
BaseLib
|
BaseLib
|
||||||
|
ReportStatusCodeLib
|
||||||
|
|
||||||
|
|
||||||
[Guids]
|
[Guids]
|
||||||
|
Reference in New Issue
Block a user