Ruiyu Ni 7111e46fde MdeModulePkg/NvmExpressDxe: Notify NVME HW when system reset happens
Per NVM Express Spec, software should notify NVME HW when shutdown
occurs.

The NVME controller requires notification for shutdown as part of
its management of internal structures. Even with FUA, failing to
notify the NVME controller to shutdown power off causes the NVME
controller to take quite some time to organize its tables on the
next power on. This time exceeds the normal timeout, so we would
fail to boot the NVME disk.

The host should set the Shutdown Notification (CC.SHN) field to 01b
to indicate a normal shutdown operation. The controller indicates
when shutdown processing is completed by updating the Shutdown Status
(CSTS.SHST) field to 10b.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
Reviewed-by: Hao A Wu <hao.a.wu@intel.com>
2017-08-09 15:59:13 +08:00

81 lines
2.5 KiB
INI

## @file
# NVM Express Host Controller Module.
#
# NvmExpressDxe driver is used to manage non-volatile memory subsystem which follows
# NVM Express specification.
#
# Copyright (c) 2013 - 2017, Intel Corporation. All rights reserved.<BR>
#
# This program and the accompanying materials
# 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
# http://opensource.org/licenses/bsd-license.php.
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
##
[Defines]
INF_VERSION = 0x00010005
BASE_NAME = NvmExpressDxe
MODULE_UNI_FILE = NvmExpressDxe.uni
FILE_GUID = 5BE3BDF4-53CF-46a3-A6A9-73C34A6E5EE3
MODULE_TYPE = UEFI_DRIVER
VERSION_STRING = 1.0
ENTRY_POINT = NvmExpressDriverEntry
UNLOAD_IMAGE = NvmExpressUnload
#
# The following information is for reference only and not required by the build tools.
#
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
#
# DRIVER_BINDING = gNvmExpressDriverBinding
# COMPONENT_NAME = gNvmExpressComponentName
# COMPONENT_NAME2 = gNvmExpressComponentName2
[Sources]
NvmExpressBlockIo.c
NvmExpressBlockIo.h
ComponentName.c
NvmExpress.c
NvmExpress.h
NvmExpressDiskInfo.c
NvmExpressDiskInfo.h
NvmExpressHci.c
NvmExpressHci.h
NvmExpressPassthru.c
[Packages]
MdePkg/MdePkg.dec
[LibraryClasses]
BaseMemoryLib
BaseLib
DebugLib
DevicePathLib
MemoryAllocationLib
UefiDriverEntryPoint
UefiBootServicesTableLib
UefiLib
PrintLib
[Protocols]
gEfiPciIoProtocolGuid ## TO_START
## BY_START
## TO_START
gEfiDevicePathProtocolGuid
gEfiNvmExpressPassThruProtocolGuid ## BY_START
gEfiBlockIoProtocolGuid ## BY_START
gEfiBlockIo2ProtocolGuid ## BY_START
gEfiDiskInfoProtocolGuid ## BY_START
gEfiStorageSecurityCommandProtocolGuid ## BY_START
gEfiDriverSupportedEfiVersionProtocolGuid ## PRODUCES
gEfiResetNotificationProtocolGuid ## CONSUMES
# [Event]
# EVENT_TYPE_RELATIVE_TIMER ## SOMETIMES_CONSUMES
#
[UserExtensions.TianoCore."ExtraFiles"]
NvmExpressDxeExtra.uni