American Megatrends, Inc.

Nvme

Copyright

Release Notes

© American Megatrends, Inc.


Nvme

AMIBIOS Document References

Previous Release Notes

Release Notes 001.htm

Release Notes 002.htm

Release Notes 003.htm

Release Notes 004.htm

Release Notes 005.htm

Built on 19:31:20 12/08/16


Release Notes - NDA Required

Component Information:
Component Title: Nvme
Component Reference Name: Nvme
Component Type: eModule
Release Date: 2014-06-23
Source Control Label: 4.6.5.5_Nvme_001
Source Control Location: SS: Alaska;$/Alaska:/Source/Modules/Nvme;
Dependencies
Component Dependencies
N0NE

File Dependencies
N0NE

Protocol Dependencies
N0NE
Non-Compiled BIN and LIB File(s) within this Component:
N0NE
Component Description:
NVMe driver detects and configures the devices connected in the NVM express controller. It installs the EFI_BLOCK_IO_PROTOCOL for NVMe devices , to support Nvme devices in UEFI Environment. This driver supports booting to UEFI OS that is present in the Nvme device, assuming that UEFI OS supports Nvme devices. This driver is developed based on the Nvme 1.1 specification.
Nvme driver displays the controller and devices information in the setup.
Note: Nvme driver doesn't support legacy environments.
Filename | Description
Main Component | Root\Core\EM\Nvme
Nvme.cif | Component information file for the eModule.
Nvme.mak | Make file to build Nvme module.
Nvme.sdl | Contains BIOS build parameters.
Nvme.sd | Nvme Driver Setup Page.
Nvme.uni | Nvme driver setup string definitions.
NvmeSetup.c | Display the Nvme Controller and device information in the Setup.
NvmeBus.c | Provides Nvme Block IO protocol.
NvmeController.c | Provides Access to Nvme Controller.
NvmeComonentName.c | Provides Controller and device Name information.
NvmeIncludes.h | Common header file for the Nvme Driver.
NvmeBus.h | Header file for the Nvme Bus Driver.
NvmeController.h | Nvme Controller related defination.
BIOS Parameters:
Parameter Name | Type | Description
NVMe_SUPPORT | Boolean | Main switch to enable Nvme support in Project.
NVME_VERBOSE_PRINT | Integer | Token to Enable/Disable Versbose Mode.
NVME_SETUP | Integer | Enable if Nvme setup controls from Nvme eModule needs to be displayd in setup.
NVME_BUS_DRIVER_VERSION | Integer | Nvme Bus driver version # reported in Driver Binding Protocol.
AMI Build Tools:
Tools Label: 4.5.5_TOOLS_41, Dated: 2013-03-19
Visual eBios: RSS.5.73.0244, Dated: 2013-03-19
Compiler Tool(s): Microsoft's Windows Driver Kit (WDK) Ver. 7600.16385.1
New features added in this label:
NONE
General Bug Fixes and EIP Addressed in this Label:
NONE
Files Changed for General Bug Fixes and EIP Addressed in this Label:
NONE
Known Limitations and Erratas in this label:
NONE
Remaining Issues:
NONE
Unit Testing:
1. NVMe SSD should able to boot Windows 8.1 and Windows Server 2012 R2 OS.
2. Check NVMe SSD detect in BIOS setup and shell.
3. In Shell, check connect and disconnect commands with NVMe driver
Validation Testing:
Quality Assurance System Test Plan
Quality Assurance Test Results
Release History:
4.6.5.5_Nvme_001
Initial Release

© American Megatrends Inc.


Release Notes - NDA Required

Component Information:
Component Title: Nvme
Component Reference Name: Nvme
Component Type: eModule
Release Date: 2014-09-24
Source Control Label: 4.6.5.5_Nvme_002
Source Control Location: SS: Alaska;$/Alaska:/Source/Modules/Nvme;
Component Description:
NVMe driver detects and configures the devices connected in the NVM express controller. It installs the EFI_BLOCK_IO_PROTOCOL for NVMe devices , to support Nvme devices in UEFI\Legacy Environment. This driver supports booting to UEFI\Legacy OS that is present in the Nvme device, assuming that UEFI\Legacy OS supports Nvme devices. This driver is developed based on the Nvme 1.1 specification.
Nvme driver displays the controller and devices information in the setup.
Note: SMM communication protocol should be available and enable for Nvme Legacy support in project.
Filename | Description
Main Component | Root\Core\EM\Nvme
Nvme.cif | Component information file for the eModule.
Nvme.chm | CHM file for the Nvme eModule
Nvme.mak | Make file to build Nvme module.
Nvme.sd | Nvme Driver Setup Page.
Nvme.sdl | Contains BIOS build parameters.
Nvme.uni | Nvme driver setup string definitions.
NvmeBus.c | Provides Nvme Block IO protocol.
NvmeBus.h | Header file for the Nvme Bus Driver.
NvmeComonentName.c | Provides Controller and device Name information.
NvmeIncludes.h | Common header file for the Nvme Driver.
NvmeSetup.c | Display the Nvme Controller and device information in the Setup.
NvmeControllerLib ModulePart | Root\Core\EM\Nvme
NvmeController.cif | Component information file for NvmeControllerLib
NvmeController.c | Provides Access to Nvme Controller
NvmeController.h | Nvme Controller related defination
NvmeController.mak | Make file for NvmeController Lib
NvmeController.sdl | Contains BIOS build parameters.
NvmeSmm ModulePart | Root\Core\EM\Nvme\NvmeSmm
NvmeSmm.cif | Component information file for NvmeSmm
NvmeDef.h | Nvme Smm and Non Smm interface Definitions
NvmeSmm.c | Nvme SMM driver to handle the Nvme device access
NvmeSmm.dxs | This file is the dependency file for the NvmeSmm driver
NvmeSmm.h | Header file for the NvmeSmm
NvmeSmm.mak | Make file for NvmeSmm
NvmeSmm.sdl | Contains BIOS build parameters for NvmeSmm module part
Nvme Int13 ModulePart | Root\Core\EM\Nvme\NvmeInt13
NvmeInt13.cif | Component information file for NvmeInt13
NvmeInt13.c | Nvme Driver for Legacy Mode. It installs the Int13 support for the Nvme devices
NvmeInt13.dxs | This file is the dependency file for the NvmeInt13 driver
NvmeInt13.h | Definitions and structures for NVMe INT13
NvmeInt13.inf | Rev and Bin Info of NvmeI13.BIN
NvmeInt13.mak | Make file for NvmeInt13
NvmeInt13.sdl | Contains BIOS build parameters for NvmeInt13 module part
Nvme Int13 16-bit Binary ModulePart | Root\Addon
NvmeI13.bin | Nvme Int13 16-bit Binary
Nvme Protocol ModulePart | Root\Include\Protocol
NvmeProtocol.cif | Component information file for NvmeProtocol
AmiNvmeController.h | Protocol Header file for the Nvme Controller
AmiNvmeLegacy.h | Protocol header file the Ami Nvme Legacy interface
AmiNvmePassThru.h | Protocol Header file for the Nvme PassThru Protocol
BIOS Parameters:
Nvme - Parameter Name | Type | Description
NVMe_SUPPORT | Boolean | Main switch to enable Nvme support in Project.
NVME_VERBOSE_PRINT | Integer | Token to Enable/Disable Versbose Mode.
NVME_SETUP | Integer | Enable if Nvme setup controls from Nvme eModule needs to be displayd in setup.
NVME_BUS_DRIVER_VERSION | Integer | Nvme Bus driver version # reported in Driver Binding Protocol.
NvmeControllerLib - Parameter Name | Type | Description
NvmeController_SUPPORT | Boolean | Main switch to enable NVMe Controller Library support in Project
NvmeSmm - Parameter Name | Type | Description
NvmeSmm_SUPPORT | Boolean | Main switch to enable NvmeSmm support in Project
NVME_INIT_SMM_SWSMI | Integer | Data to be written to SW SMI port to Init NVME Smm Data
Nvme Int13 - Parameter Name | Type | Description
NVMEINT13_SUPPORT | Boolean | Main switch to enable Sdio Int13 support in the project.
NVME_SWSMI | Integer | Data to be written to SW SMI port to invoke NVME SW SMI handler.
AMI Build Tools:
Tools Label: 4.5.5_TOOLS_41, Dated: 2013-03-19
Visual eBios: RSS.5.73.0244, Dated: 2013-03-19
Compiler Tool(s): Microsoft's Windows Driver Kit (WDK) Ver. 7600.16385.1
New features added in this label:
NONE
General Bug Fixes and EIP Addressed in this Label:
General Bug Fixes
EIP# 175772 - AMI Nvme Driver setup tries to display the devices detected by UEFI option rom
EIP# 182004 - Runtime attribute set for the some of the variable used by Nvme driver and needs to be reviewed

EIP Addressed
EIP# 180861 - Legacy Boot support in Aptio 4.x Nvme driver
EIP# 175772 - AMI Nvme Driver setup tries to display the devices detected by UEFI option rom
EIP# 182004 - Runtime attribute set for the some of the variable used by Nvme driver and needs to be reviewed
EIP# 180861 - Add Legacy Boot support in Aptio 4.x Nvme driver - NON PI 1.2 Support
Files Changed for General Bug Fixes and EIP Addressed in this Label:

EIP Addressed
Root\Core\EM\Nvme\NvmeSetup.c (EIP #182004, #180861, #175772)
Root\Core\EM\Nvme\Nvme.cif (EIP #180861)
Root\Core\EM\Nvme\Nvme.mak (EIP #180861)
Root\Core\EM\Nvme\Nvme.uni (EIP #180861)
Root\Core\EM\Nvme\Nvme.chm (EIP #180861)
Root\Core\EM\Nvme\NvmeBus.c (EIP #180861)
Root\Core\EM\Nvme\NvmeComponentName.c (EIP #180861)
Root\Core\EM\Nvme\NvmeIncludes.h (EIP #180861)
Root\Core\EM\Nvme\NvmeBus.h (EIP #180861)
Root\Core\EM\Nvme\NvmeSmm.c (EIP #180861)
Root\Core\EM\Nvme\NvmeSmm.h (EIP #180861)
Root\Core\EM\Nvme\NvmeSmm.dxs (EIP #180861)
Root\Core\EM\Nvme\NvmeSmm.sdl (EIP #180861)
Root\Core\EM\Nvme\NvmeController.c (EIP #180861)
Root\Core\EM\Nvme\NvmeController.h (EIP #180861)
Known Limitations and Erratas in this label:
NONE
Remaining Issues:
NONE
Unit Testing:
1. NVMe SSD should able to boot UEFI\Legacy Windows 8.1 and Windows Server 2012 R2 OS.
2. Check NVMe SSD detect in BIOS setup and shell.
3. In Shell, check connect and disconnect commands with NVMe driver
Validation Testing:
Quality Assurance System Test Plan
Quality Assurance Test Results
Release History:
4.6.5.5_Nvme_002

  • [TAG] EIP180861
    [Category] Improvement
    [Description] Legacy Boot support in Aptio 4.x Nvme driver
    [Files] Nvme.cif,Nvme.mak,Nvme.uni,Nvme.chm,NvmeSetup.c,NvmeBus.c,NvmeComponentName.c,NvmeIncludes.h,NvmeBus.h [NvmeControllerLib],[NvmeSmm],[NVMEINT13],[NvmeProtocol]

  • [TAG] EIP175772
    [Category] Bug Fix
    [Severity] Normal
    [Symptom] AMI Nvme Driver setup tries to display the devices detected by UEFI option rom
    [RootCause] Display to Nvme devices information did not chack for ontroller handle to confirm if gAmiNvmeControllerProtocol is present
    [Solution] Added checking in the controller handle to confirm if gAmiNvmeControllerProtocol is present or not.
    [Files] NvmeSetup.c

  • [TAG] EIP182004
    [Category] Bug Fix
    [Severity] Important
    [Symptom] Runtime attribute set for the some of the variable used by Nvme driver and needs to be reviewed
    [RootCause] Runtime attribute set for the some of the variable used by Nvme driver and needs to be reviewed
    [Solution] Get the attribute using getvariable and same attribute should have been used for Setvariable
    [Files] NvmeSetup.c

  • [TAG] EIP180861
    [Category] Improvement
    [Description] Add Legacy Boot support in Aptio 4.x Nvme driver - NON PI 1.2 Support
    [Files] NvmeBus.c,NvmeBus.h,NvmeSmm.c,NvmeSmm.h,NvmeSmm.dxs,NvmeSmm.sdl

Release_4.6.5.5_Nvme_001

© American Megatrends Inc.


Release Notes - NDA Required

Component Information:
Component Title: Nvme
Component Reference Name: Nvme
Component Type: eModule
Release Date: 2015-01-02
Source Control Label: 4.6.5.5_Nvme_003
Source Control Location: SS: Alaska;$/Alaska/SOURCE/Modules/NVMe;
Dependencies
Component Dependencies
AmiBufferValidationLib
Dependent Component Title: AmiBufferValidationLib
Dependent Component Reference Name: AmiBufferValidationLib
Dependent Source Control Label: AmiBufferValidationLib_01
Dependent Source Control Location: SS: Alaska;$/Alaska/SOURCE/Modules/AmiBufferValidationLib;
Component Description:
NVMe driver detects and configures the devices connected in the NVM express controller. It installs the EFI_BLOCK_IO_PROTOCOL for NVMe devices , to support Nvme devices in UEFI\Legacy Environment. This driver supports booting to UEFI\Legacy OS that is present in the Nvme device, assuming that UEFI\Legacy OS supports Nvme devices. This driver is developed based on the Nvme 1.1 specification.
Nvme driver displays the controller and devices information in the setup.
Note: SMM communication protocol should be available and enable for Nvme Legacy support in project.
Filename | Description
Main Component | Root\Core\EM\Nvme
Nvme.cif | Component information file for the eModule.
Nvme.chm | CHM file for the Nvme eModule
Nvme.mak | Make file to build Nvme module.
Nvme.sd | Nvme Driver Setup Page.
Nvme.sdl | Contains BIOS build parameters.
Nvme.uni | Nvme driver setup string definitions.
NvmeBus.c | Provides Nvme Block IO protocol.
NvmeBus.h | Header file for the Nvme Bus Driver.
NvmeComonentName.c | Provides Controller and device Name information.
NvmeIncludes.h | Common header file for the Nvme Driver.
NvmeSetup.c | Display the Nvme Controller and device information in the Setup.
NvmeControllerLib ModulePart | Root\Core\EM\Nvme
NvmeController.cif | Component information file for NvmeControllerLib
NvmeController.c | Provides Access to Nvme Controller
NvmeController.h | Nvme Controller related defination
NvmeController.mak | Make file for NvmeController Lib
NvmeController.sdl | Contains BIOS build parameters.
NvmeSmm ModulePart | Root\Core\EM\Nvme\NvmeSmm
NvmeSmm.cif | Component information file for NvmeSmm
NvmeDef.h | Nvme Smm and Non Smm interface Definitions
NvmeSmm.c | Nvme SMM driver to handle the Nvme device access
NvmeSmm.dxs | This file is the dependency file for the NvmeSmm driver
NvmeSmm.h | Header file for the NvmeSmm
NvmeSmm.mak | Make file for NvmeSmm
NvmeSmm.sdl | Contains BIOS build parameters for NvmeSmm module part
Nvme Int13 ModulePart | Root\Core\EM\Nvme\NvmeInt13
NvmeInt13.cif | Component information file for NvmeInt13
NvmeInt13.c | Nvme Driver for Legacy Mode. It installs the Int13 support for the Nvme devices
NvmeInt13.dxs | This file is the dependency file for the NvmeInt13 driver
NvmeInt13.h | Definitions and structures for NVMe INT13
NvmeInt13.inf | Rev and Bin Info of NvmeI13.BIN
NvmeInt13.mak | Make file for NvmeInt13
NvmeInt13.sdl | Contains BIOS build parameters for NvmeInt13 module part
Nvme Int13 16-bit Binary ModulePart | Root\Addon
NvmeI13.bin | Nvme Int13 16-bit Binary
Nvme Protocol ModulePart | Root\Include\Protocol
NvmeProtocol.cif | Component information file for NvmeProtocol
AmiNvmeController.h | Protocol Header file for the Nvme Controller
AmiNvmeLegacy.h | Protocol header file the Ami Nvme Legacy interface
AmiNvmePassThru.h | Protocol Header file for the Nvme PassThru Protocol
BIOS Parameters:
Nvme - Parameter Name | Type | Description
NVMe_SUPPORT | Boolean | Main switch to enable Nvme support in Project.
NVME_VERBOSE_PRINT | Integer | Token to Enable/Disable Versbose Mode.
NVME_SETUP | Integer | Enable if Nvme setup controls from Nvme eModule needs to be displayd in setup.
NVME_BUS_DRIVER_VERSION | Integer | Nvme Bus driver version # reported in Driver Binding Protocol.
NvmeControllerLib - Parameter Name | Type | Description
NvmeController_SUPPORT | Boolean | Main switch to enable NVMe Controller Library support in Project
NvmeSmm - Parameter Name | Type | Description
NvmeSmm_SUPPORT | Boolean | Main switch to enable NvmeSmm support in Project
NVME_INIT_SMM_SWSMI | Integer | Data to be written to SW SMI port to Init NVME Smm Data
Nvme Int13 - Parameter Name | Type | Description
NVMEINT13_SUPPORT | Boolean | Main switch to enable Sdio Int13 support in the project.
NVME_SWSMI | Integer | Data to be written to SW SMI port to invoke NVME SW SMI handler.
AMI Build Tools:
Tools Label: 4.5.5_TOOLS_41, Dated: 2013-03-19
Visual eBios: RSS.5.73.0244, Dated: 2013-03-19
Compiler Tool(s): Microsoft's Windows Driver Kit (WDK) Ver. 7600.16385.1
New features added in this label:
EIP# 185327 - Security Enhancement for SMIHandler in Aptio4.x NVMe Driver
General Bug Fixes and EIP Addressed in this Label:
General Bug Fixes
NONE

EIP Addressed
EIP# 185327 - Security Enhancement for SMIHandler in Aptio4.x NVMe Driver
Files Changed for General Bug Fixes and EIP Addressed in this Label:

EIP Addressed
Root\Core\EM\Nvme\NvmeSmm\NvmeSmm.c (EIP #185327)
Root\Core\EM\Nvme\NvmeSmm\NvmeSmm.h (EIP #185327)
Root\Core\EM\Nvme\NvmeSmm\NvmeSmm.mak (EIP #185327)
Known Limitations and Erratas in this label:
NONE
Remaining Issues:
NONE
Unit Testing:
1. NVMe SSD should able to boot UEFI\Legacy Windows 8.1 and Windows Server 2012 R2 OS.
2. Check NVMe SSD detect in BIOS setup and shell.
3. In Shell, check connect and disconnect commands with NVMe driver
4. Nvme device should boot to DOS and able to see device in Fdisk.
Validation Testing:
Quality Assurance System Test Plan
Quality Assurance Test Results
Release History:
4.6.5.5_Nvme_003

  • [TAG] EIP185327
    [Category] Improvement
    [Description] Security Enhancement for SMIHandler in Aptio4.x NVMe Driver
    [Files] NvmeSmm.mak, NvmeSmm.c, NvmeSmm.h

Release_4.6.5.5_Nvme_002
Release_4.6.5.5_Nvme_001

© American Megatrends Inc.


Release Notes - NDA Required

Component Information:
Component Title: Nvme
Component Reference Name: Nvme
Component Type: eModule
Release Date: 2015-04-22
Source Control Label: 4.6.5.5_NVMe_004
Source Control Location: SS: Alaska;$/Alaska/SOURCE/Modules/NVMe;
Dependencies
Component Dependencies
AmiBufferValidationLib
Dependent Component Title: AmiBufferValidationLib
Dependent Component Reference Name: AmiBufferValidationLib
Dependent Source Control Label: AmiBufferValidationLib_01
Dependent Source Control Location: SS: Alaska;$/Alaska/SOURCE/Modules/AmiBufferValidationLib;
Component Description:
NVMe driver detects and configures the devices connected in the NVM express controller. It installs the EFI_BLOCK_IO_PROTOCOL for NVMe devices , to support Nvme devices in UEFI\Legacy Environment. This driver supports booting to UEFI\Legacy OS that is present in the Nvme device, assuming that UEFI\Legacy OS supports Nvme devices. This driver is developed based on the Nvme 1.1 specification.
Nvme driver displays the controller and devices information in the setup.
Note: SMM communication protocol should be available and enable for Nvme Legacy support in project.
Filename | Description
Main Component | Root\Core\EM\Nvme
Nvme.cif | Component information file for the eModule.
Nvme.chm | CHM file for the Nvme eModule
Nvme.mak | Make file to build Nvme module.
Nvme.sd | Nvme Driver Setup Page.
Nvme.sdl | Contains BIOS build parameters.
Nvme.uni | Nvme driver setup string definitions.
NvmeBus.c | Provides Nvme Block IO protocol.
NvmeBus.h | Header file for the Nvme Bus Driver.
NvmeComonentName.c | Provides Controller and device Name information.
NvmeIncludes.h | Common header file for the Nvme Driver.
NvmeSetup.c | Display the Nvme Controller and device information in the Setup.
NvmeControllerLib ModulePart | Root\Core\EM\Nvme
NvmeController.cif | Component information file for NvmeControllerLib
NvmeController.c | Provides Access to Nvme Controller
NvmeController.h | Nvme Controller related defination
NvmeController.mak | Make file for NvmeController Lib
NvmeController.sdl | Contains BIOS build parameters.
NvmeSmm ModulePart | Root\Core\EM\Nvme\NvmeSmm
NvmeSmm.cif | Component information file for NvmeSmm
NvmeDef.h | Nvme Smm and Non Smm interface Definitions
NvmeSmm.c | Nvme SMM driver to handle the Nvme device access
NvmeSmm.dxs | This file is the dependency file for the NvmeSmm driver
NvmeSmm.h | Header file for the NvmeSmm
NvmeSmm.mak | Make file for NvmeSmm
NvmeSmm.sdl | Contains BIOS build parameters for NvmeSmm module part
Nvme Int13 ModulePart | Root\Core\EM\Nvme\NvmeInt13
NvmeInt13.cif | Component information file for NvmeInt13
NvmeInt13.c | Nvme Driver for Legacy Mode. It installs the Int13 support for the Nvme devices
NvmeInt13.dxs | This file is the dependency file for the NvmeInt13 driver
NvmeInt13.h | Definitions and structures for NVMe INT13
NvmeInt13.inf | Rev and Bin Info of NvmeI13.BIN
NvmeInt13.mak | Make file for NvmeInt13
NvmeInt13.sdl | Contains BIOS build parameters for NvmeInt13 module part
Nvme Int13 16-bit Binary ModulePart | Root\Addon
NvmeI13.bin | Nvme Int13 16-bit Binary
Nvme Protocol ModulePart | Root\Include\Protocol
NvmeProtocol.cif | Component information file for NvmeProtocol
AmiNvmeController.h | Protocol Header file for the Nvme Controller
AmiNvmeLegacy.h | Protocol header file the Ami Nvme Legacy interface
AmiNvmePassThru.h | Protocol Header file for the Nvme PassThru Protocol
BIOS Parameters:
Nvme - Parameter Name | Type | Description
NVMe_SUPPORT | Boolean | Main switch to enable Nvme support in Project.
NVME_VERBOSE_PRINT | Integer | Token to Enable/Disable Versbose Mode.
NVME_SETUP | Integer | Enable if Nvme setup controls from Nvme eModule needs to be displayd in setup.
NVME_BUS_DRIVER_VERSION | Integer | Nvme Bus driver version # reported in Driver Binding Protocol.
NvmeControllerLib - Parameter Name | Type | Description
NvmeController_SUPPORT | Boolean | Main switch to enable NVMe Controller Library support in Project
NvmeSmm - Parameter Name | Type | Description
NvmeSmm_SUPPORT | Boolean | Main switch to enable NvmeSmm support in Project
NVME_INIT_SMM_SWSMI | Integer | Data to be written to SW SMI port to Init NVME Smm Data
Nvme Int13 - Parameter Name | Type | Description
NVMEINT13_SUPPORT | Boolean | Main switch to enable Nvme Int13 support in the project.
NVME_SWSMI | Integer | Data to be written to SW SMI port to invoke NVME SW SMI handler.
NVMEI13_BIN | Expression
AMI Build Tools:
Tools Label: 4.5.5_TOOLS_41, Dated: 2013-03-19
Visual eBios: RSS.5.73.0244, Dated: 2013-03-19
Compiler Tool(s): Microsoft's Windows Driver Kit (WDK) Ver. 7600.16385.1
New features added in this label:
NONE
General Bug Fixes and EIP Addressed in this Label:
General Bug Fixes
EIP# 212320 - CPU exception in Nvme Driver if PcdCpuSmmCodeAccessCheckEnable is enabled
EIP# 214300 - Nvme device with legacy OS can not resume from S4

EIP Addressed
EIP# 212320 - CPU exception in Nvme Driver if PcdCpuSmmCodeAccessCheckEnable is enabled
EIP# 202328 - IO Completion Size decided based on the size reported by device.
Files Changed for General Bug Fixes and EIP Addressed in this Label:

EIP Addressed
Root\Core\EM\Nvme\NvmeBus.c (EIP #202328, #212320)
Root\Core\EM\Nvme\NvmeSmm\NvmeSmm.c (EIP #212320, #214300)
Root\Include\Protocol\AmiNvmeController.h (EIP #212320)
Known Limitations and Erratas in this label:
NONE
Remaining Issues:
NONE
Unit Testing:
1. NVMe SSD should able to boot UEFI\Legacy Windows 8.1 and Windows Server 2012 R2 OS.
2. Check NVMe SSD detect in BIOS setup and shell.
3. In Shell, check reconnect -r commands with NVMe driver
4. Nvme device should boot to DOS and read\write function should work then able to see device in Fdisk.
Validation Testing:
Quality Assurance System Test Plan
Quality Assurance Test Results
Release History:
4.6.5.5_Nvme_004
  • [TAG] EIP202328
    [Category] Improvement
    [Description] IO Completion Size decided based on the size reported by device.
    [Files] NvmeBus.c

  • [TAG] EIP212320
    [Category] Bug Fix
    [Severity] Critical
    [Symptom] CPU exception in Nvme Driver if PcdCpuSmmCodeAccessCheckEnable is enabled
    [RootCause] BootService call shouldn't be used inside SMM function. if PcdCpuSmmCodeAccessCheckEnable is enabled, It causes CPU exception.
    [Solution] Changes made to avoid BootService call inside SMM function
    [Files] NvmeSmm.c, NvmeBus.c, AmiNvmeController.h

  • [TAG] EIP214300
    [Category] Bug Fix
    [Severity] Normal
    [Symptom] Nvme device with legacy OS can not resume from S4
    [RootCause] In Aptio 4.x NvmeSmm Driver, Media buffer in EFI_BLOCK_IO_MEDIA holds invalid memory address ( i.e. The memory is not allocated in SMRAM ).
    [Solution] Memory for Media buffer(EFI_BLOCK_IO_MEDIA) is allocated in SMRAM region
    [Files] NvmeSmm.c

Release_4.6.5.5_Nvme_003
Release_4.6.5.5_Nvme_002
Release_4.6.5.5_Nvme_001

© American Megatrends Inc.


Release Notes - NDA Required

Component Information:
Component Title: Nvme
Component Reference Name: Nvme
Component Type: eModule
Release Date: 2015-05-28
Source Control Label: 4.6.5.5_NVMe_005
Source Control Location: SS: Alaska;$/Alaska/SOURCE/Modules/NVMe;
Dependencies
Component Dependencies
AmiBufferValidationLib
Dependent Component Title: AmiBufferValidationLib
Dependent Component Reference Name: AmiBufferValidationLib
Dependent Source Control Label: AmiBufferValidationLib_01
Dependent Source Control Location: SS: Alaska;$/Alaska/SOURCE/Modules/AmiBufferValidationLib;
Component Description:
NVMe driver detects and configures the devices connected in the NVM express controller. It installs the EFI_BLOCK_IO_PROTOCOL for NVMe devices , to support Nvme devices in UEFI\Legacy Environment. This driver supports booting to UEFI\Legacy OS that is present in the Nvme device, assuming that UEFI\Legacy OS supports Nvme devices. This driver is developed based on the Nvme 1.2 specification. This driver supports EfiNvmExpressPassThru protocol to send Nvme command to Nvme device.
Nvme driver displays the controller and devices information in the setup.
Note: SMM communication protocol should be available and enable for Nvme Legacy support in project.
Filename | Description
Main Component | Root\Core\EM\Nvme
Nvme.cif | Component information file for the eModule.
Nvme.chm | CHM file for the Nvme eModule
Nvme.mak | Make file to build Nvme module.
Nvme.sd | Nvme Driver Setup Page.
Nvme.sdl | Contains BIOS build parameters.
Nvme.uni | Nvme driver setup string definitions.
NvmeBus.c | Provides Nvme Block IO protocol.
NvmeBus.h | Header file for the Nvme Bus Driver.
NvmeComonentName.c | Provides Controller and device Name information.
NvmeIncludes.h | Common header file for the Nvme Driver.
NvmePassthru.c | Contain Nvme Express passthru protocol APIs definition
NvmePassthru.h | Header file for NvmePassthru.h file
NvmeSetup.c | Display the Nvme Controller and device information in the Setup.
NvmeControllerLib ModulePart | Root\Core\EM\Nvme
NvmeController.cif | Component information file for NvmeControllerLib
NvmeController.c | Provides Access to Nvme Controller
NvmeController.h | Nvme Controller related defination
NvmeController.mak | Make file for NvmeController Lib
NvmeController.sdl | Contains BIOS build parameters.
NvmeSmm ModulePart | Root\Core\EM\Nvme\NvmeSmm
NvmeSmm.cif | Component information file for NvmeSmm
NvmeDef.h | Nvme Smm and Non Smm interface Definitions
NvmeSmm.c | Nvme SMM driver to handle the Nvme device access
NvmeSmm.dxs | This file is the dependency file for the NvmeSmm driver
NvmeSmm.h | Header file for the NvmeSmm
NvmeSmm.mak | Make file for NvmeSmm
NvmeSmm.sdl | Contains BIOS build parameters for NvmeSmm module part
Nvme Int13 ModulePart | Root\Core\EM\Nvme\NvmeInt13
NvmeInt13.cif | Component information file for NvmeInt13
NvmeInt13.c | Nvme Driver for Legacy Mode. It installs the Int13 support for the Nvme devices
NvmeInt13.dxs | This file is the dependency file for the NvmeInt13 driver
NvmeInt13.h | Definitions and structures for NVMe INT13
NvmeInt13.inf | Rev and Bin Info of NvmeI13.BIN
NvmeInt13.mak | Make file for NvmeInt13
NvmeInt13.sdl | Contains BIOS build parameters for NvmeInt13 module part
Nvme Int13 16-bit Binary ModulePart | Root\Addon
NvmeI13.cif | Component information file for Nvme Int13 16-bit Binary
NvmeI13.bin | Nvme Int13 16-bit Binary
Nvme Protocol ModulePart | Root\Include\Protocol
NvmeProtocol.cif | Component information file for NvmeProtocol
AmiNvmeController.h | Protocol Header file for the Nvme Controller
AmiNvmeLegacy.h | Protocol Header file the Ami Nvme Legacy interface
AmiNvmePassThru.h | Protocol Header file for the Nvme PassThru Protocol
NvmExpressPassThru.h | Protocol Header file for the NvmExpressPassThru Protocol
BIOS Parameters:
Nvme - Parameter Name | Type | Description
NVMe_SUPPORT | Boolean | Main switch to enable Nvme support in Project.
NVME_VERBOSE_PRINT | Integer | Token to Enable/Disable Versbose Mode.
NVME_SETUP | Integer | Enable if Nvme setup controls from Nvme eModule needs to be displayd in setup.
NVME_BUS_DRIVER_VERSION | Integer | Nvme Bus driver version # reported in Driver Binding Protocol.
NvmeControllerLib - Parameter Name | Type | Description
NvmeController_SUPPORT | Boolean | Main switch to enable NVMe Controller Library support in Project
NvmeSmm - Parameter Name | Type | Description
NvmeSmm_SUPPORT | Boolean | Main switch to enable NvmeSmm support in Project
NVME_INIT_SMM_SWSMI | Integer | Data to be written to SW SMI port to Init NVME Smm Data
Nvme Int13 - Parameter Name | Type | Description
NVMEINT13_SUPPORT | Boolean | Main switch to enable Nvme Int13 support in the project.
NVME_SWSMI | Integer | Data to be written to SW SMI port to invoke NVME SW SMI handler.
NVMEI13_BIN | Expression
AMI Build Tools:
Tools Label: 4.5.5_TOOLS_41, Dated: 2013-03-19
Visual eBios: RSS.5.73.0244, Dated: 2013-03-19
Compiler Tool(s): Microsoft's Windows Driver Kit (WDK) Ver. 7600.16385.1
New features added in this label:
NONE
General Bug Fixes and EIP Addressed in this Label:
General Bug Fixes
NONE

EIP Addressed
EIP# 216763 - Update the Aptio 4.x Nvme driver to Aptio 5.x Nvme driver Label 05
EIP# 218818 - Aptio 4.x: When NVMe device is not connect then in BIOS Setup should display "No Nvme device found"
EIP# 218059 - Update Aptio4 NVME module to spec v1.2
Files Changed for General Bug Fixes and EIP Addressed in this Label:

EIP Addressed
Root\Core\EM\Nvme\Nvme.mak (EIP #216763)
Root\Core\EM\Nvme\NvmeBus.c (EIP #216763)
Root\Core\EM\Nvme\NvmeBus.h (EIP #216763)
Root\Core\EM\Nvme\Nvme.sd (EIP #218818)
Root\Core\EM\Nvme\Nvme.uni (EIP #218818)
Root\Core\EM\Nvme\NvmeSetup.c (EIP #218818)
Root\Core\EM\Nvme\NvmeController.c (EIP #216763)
Root\Core\EM\Nvme\NvmePassthru.c (EIP #216763)
Root\Core\EM\Nvme\NvmePassthru.h (EIP #216763)
Root\Core\EM\Nvme\NvmeSmm\NvmeSmm.c (EIP #216763)
Root\Include\Protocol\NvmExpressPassThru.h (EIP #216763)
Root\Core\EM\Nvme\NvmeController.h (EIP #218059)
Root\Include\Protocol\AmiNvmeController.h (EIP #218059)
Known Limitations and Erratas in this label:
NONE
Remaining Issues:
NONE
Unit Testing:
1. NVMe SSD should able to boot UEFI\Legacy Windows 8.1 and Windows Server 2012 R2 OS.
2. Check NVMe SSD detect in BIOS setup and shell.
3. In Shell, check reconnect -r commands with NVMe driver
4. Nvme device should boot to DOS and read\write function should work then able to see device in Fdisk.
5. Test NVMe driver gEfiNvmExpressPassThru protocol support with TestNvmePassthru.efi application.
Validation Testing:
Quality Assurance Test Results
Release History:
4.6.5.5_Nvme_005
  • [TAG] EIP216763
    [Category] Improvement
    [Description] Update the Aptio 4.x Nvme driver to Aptio 5.x Nvme driver Label 05
    [Files] Nvme.mak,NvmeBus.c, NvmeBus.h, NvmeController.c, NvmePassthru.c,NvmePassthru.h, NvmeSmm.c, NvmExpressPassThru.h, PDiskInfo.h

  • [TAG] EIP218818
    [Category] Improvement
    [Description] Aptio 4.x: When NVMe device is not connect then in BIOS Setup should display "No Nvme device found"
    [Files] Nvme.sd, Nvme.uni, NvmeSetup.c

  • [TAG] EIP218059
    [Category] Improvement
    [Description] Update Aptio4 NVME module to spec v1.2
    [Files] AmiNvmeController.h, NvmeController.h

Release_4.6.5.5_Nvme_004
Release_4.6.5.5_Nvme_003
Release_4.6.5.5_Nvme_002
Release_4.6.5.5_Nvme_001

© American Megatrends Inc.


Nvme

AMIBIOS Document References

Previous Validation Test Report

Validation Test Report 001.htm

Validation Test Report 002.htm

Validation Test Report 003.htm

Validation Test Report 004.htm

Validation Test Report 005.htm

Built on 19:31:20 12/08/16


Release Notes - NDA Required

Validation Test Report for NVMe Label (INT)_a_4.6.5.5_NVMe_001

Platform Information Form :

Board Information - SharkBay
BIOS Information (Label, Path) - Labeled'4.6.5.4_VEB_1AQPM035'; Path ' SS: Alaska;$/Alaska/Projects/Intel/Haswell/LynxPoint_SharkBay-MB_Crb_1AQPM/SharkBay.veb';
Chipset Information (Type, Stepping) -
CPU Information (Type, Stepping) -
Memory Info (Manufacturer, Speed, Configuration) -
Graphics (Please specify which one in used) -
Chipset driver Version -
Graphics drive Version -

The following BQA Tests have been validated in UEFI 2.3.1 BIOS Versions

Build
REF-37927: .N/A Linux - Test ROM build---- Untestable
Status Update: Test is applicable for Aptio 5.x

CppCheck
REF-37351: .N/A Cpp Check---- Untestable
Status Update:Applicable for Aptio 5.x

NVMeDevices
REF-40004:EFI connect\disconnect drivers in shell---- PASS
Status Update: return EFI_SUCCESS

OS
REF-40178: Windows 8.1 x64 GA UEFI Windows 8.1 x64 GA Install - NVMe Mode---- PASS
Status Update:
REF-40177: UEFI Windows 2012 R2 GA UEFI Windows Server 2012 Installation - NVMe Mode---- Blocked
Status Update: minimal testing

SCT
REF-28581: EFI SCT Execution---- Blocked
Status Update: Minimal testing


Release Notes - NDA Required

Validation Test Report for NVMe Label (INT)_b_4.6.5.5_Nvme_002

Platform Information Form :

Board Information - SugarBay
BIOS Information (Label, Path) - Labeled'4.6.4.1_VEB_1AOQI021'; Path ' SS: Alaska;$/Alaska/Projects/Intel/SandyBridge/IMBA-Q670/SugarBay.veb';
Chipset Information (Type, Stepping) -
CPU Information (Type, Stepping) -
Memory Info (Manufacturer, Speed, Configuration) -
Graphics (Please specify which one in used) -
Chipset driver Version -
Graphics drive Version -

The following BQA Tests have been validated in UEFI 2.3.1 BIOS Versions

Build
REF-37927: .N/A Linux - Test ROM build---- Blocked..
Status Update: N/A for Aptio 4.x project

CppCheck
REF-37351: .N/A Cpp Check---- Blocked..
Status Update:N/A for Aptio 4.x

NVMeDevices
REF-40004:EFI connect\disconnect drivers in shell---- PASS
Status Update: Shell, disconnect/connect worked as expected

OS
REF-41443: DOS Boot to DOS - NVMe Mode---- PASS
Status Update: Dos, fdisk, format, and copy/delete worked as expected

REF-41442: Windows 8.1 x64 GA Legacy Windows 8.1 x64 GA Install - NVMe Mode---- PASS
Status Update: Legacy W8.1 installed, Restart/S4/S5 worked as expected

REF-41441: Windows Server 2008 R2 x64 Legacy Windows Server 2012 Installation - NVMe ---- PASS
Status Update: Legacy W2012 installed, Restart/S5 worked as expected

REF-41444: EFI Test Multiple Nvme devices in Setup ---- PASS
Status Update: Setup, NVMe Config shows for device

REF-40178: Windows (multiple) UEFI Windows 8.1 x64 Install - NVMe Mode ---- PASS
Status Update: Uefi W8.1 installed, Restart/S4/S5 worked as expected

REF-40177: UEFI Windows 2012 R2 GA UEFI Windows Server 2012 Installation - NVMe Mode---- PASS
Status Update: Uefi W2012 installed, Restart/S5 worked as expected

SCT
REF-28581: EFI SCT Execution---- Blocked
Status Update: Not Tested


Release Notes - NDA Required

Validation Test Report for NVMe Label (INT)_a_4.6.5.5_Nvme_003

Platform Information Form :

Board Information - SugarBay
BIOS Information (Label, Path) - Labeled'(INT)_Label_8'; Path ' SS: Alaska;$/Alaska/Projects/Intel/SandyBridge/IMBA-Q670/SugarBay.veb';
Chipset Information (Type, Stepping) -
CPU Information (Type, Stepping) -
Memory Info (Manufacturer, Speed, Configuration) -
Graphics (Please specify which one in used) -
Chipset driver Version -
Graphics drive Version -

The following BQA Tests have been validated in UEFI 2.3.1 BIOS Versions

Build
REF-37927: .N/A Linux - Test ROM build---- Blocked..
Status Update: Not applicable for Aptio 4

CppCheck
REF-37351: .N/A Cpp Check---- Blocked..
Status Update: Not applicable for Aptio 4

NVMeDevices
REF-40004:EFI connect\disconnect drivers in shell---- PASS
Status Update:

OS
REF-41443: DOS Boot to DOS - NVMe Mode---- PASS
Status Update:

REF-41441: Windows Server 2008 R2 x64 Legacy Windows Server 2012 Installation - NVMe ---- PASS
Status Update:

REF-41444: EFI Test Multiple Nvme devices in Setup ---- ---- Blocked..
Status Update: Check Comment#7 in EIP# 197617

REF-40178: Windows (multiple) UEFI Windows 8.1 x64 Install - NVMe Mode ---- PASS
Status Update:

REF-40177: UEFI Windows 2012 R2 GA UEFI Windows Server 2012 Installation - NVMe Mode---- PASS
Status Update:

SCT
REF-28581: EFI SCT Execution---- Blocked
Status Update: Refer comment#7 in EIP#197617


Release Notes - NDA Required

Validation Test Report for NVMe Label (INT)_a_4.6.5.5_Nvme_004

Platform Information Form :

Board Information - SharkBay
BIOS Information (Label, Path) - Labeled'4.6.5.4_VEB_1AQPM043'; Path 'SS: Alaska;$/Alaska/Projects/Intel/Haswell/LynxPoint_SharkBay-MB_Crb_1AQPM/SharkBay.veb';
Chipset Information (Type, Stepping) - LynxPoint C1
CPU Information (Type, Stepping) - Haswell C0
Memory Info (Manufacturer, Speed, Configuration) - 2GB DDR3 1600Mhz
Graphics (Please specify which one in used) -
Chipset driver Version -
Graphics drive Version - Win64_10.18.10.3993

Description:

Board: Grays Reef Peak Fab 3
BIOS ID: 1AQPM043
Processor: Haswell C0
PCH: LynxPoint C1
RAM: 2GB DDR3 1600Mhz
SCT: 2.3.1C
Drivers: Win64_10.18.10.3993

The following BQA Tests have been validated in UEFI 2.3.1 BIOS Versions

Build
REF-37927: .N/A Linux - Test ROM build---- Untestable..
Status Update: Not applicable for Aptio 4

CppCheck
REF-37351: .N/A Cpp Check---- Untestable..
Status Update: Not applicable for Aptio 4

NVMeDevices
REF-40478:EFI connect\disconnect drivers in shell---- PASS
Status Update: Able to access NVMe device after reconnect in shell

OS
REF-41443: DOS Boot to DOS - NVMe Mode---- PASS
Status Update: Able to boot DOS from NVMe device.
Read\Write -PASS

REF-41441: Windows Server 2008 R2 x64 Legacy Windows Server 2012 Installation - NVMe ---- PASS
Status Update: #S3 - PASS
#Cold\Warm boot - PASS
#Device detected in NVMe Configuration' page

REF-41444: EFI Test Multiple Nvme devices in Setup ---- ---- Untestable..
Status Update: Do not have multiple devices for testing

REF-40178: Windows (multiple) UEFI Windows 8.1 x64 Install - NVMe Mode ---- PASS
Status Update: S3/S4 - PASS
Cold\Warm boot - PASS
Device detected in NVMe Configuration' page

REF-40177: UEFI Windows 2012 R2 GA UEFI Windows Server 2012 Installation - NVMe Mode---- PASS
Status Update: #S3 - PASS
#Cold\Warm boot - PASS
#Device detected in NVMe Configuration' page

REF-42056: Windows (multiple) Windows 8.1 x64 Install - PCIe SSD (NVMe Mode) ---- PASS
Status Update: S3/S4 - PASS
Cold\Warm boot - PASS
Device detected in NVMe Configuration' page

SCT
REF-28581: EFI SCT Execution---- PASS
Status Update: SCT: 2.3.1C Attached SCT report.


Release Notes - NDA Required

Validation Test Report for NVMe Label (INT)_a_4.6.5.5_Nvme_005

Platform Information Form :

Board Information - SharkBay
BIOS Information (Label, Path) - Labeled'4.6.5.4_VEB_1AQPM043'; Path 'SS: Alaska;$/Alaska/Projects/Intel/Haswell/LynxPoint_SharkBay-MB_Crb_1AQPM/SharkBay.veb';
Chipset Information (Type, Stepping) - LynxPoint C1
CPU Information (Type, Stepping) - Haswell C0
Memory Info (Manufacturer, Speed, Configuration) - 2GB DDR3 1600Mhz
Graphics (Please specify which one in used) -
Chipset driver Version -
Graphics drive Version - Win64_10.18.10.3993

Description:

Board: Grays Reef Peak Fab 3
BIOS ID: 1AQPM043
Processor: Haswell C0
PCH: LynxPoint C1
RAM: 2GB DDR3 1600Mhz
SCT: 2.3.1C
Drivers: Win64_10.18.10.3993

The following BQA Tests have been validated in UEFI 2.3.1 BIOS Versions

Build
REF-37927: .N/A Linux - Test ROM build---- Untestable..
Status Update: Not applicable for Aptio 4

CppCheck
REF-37351: .N/A Cpp Check---- Untestable..
Status Update: Not applicable for Aptio 4

NVMeDevices
REF-40478:EFI connect\disconnect drivers in shell---- PASS
Status Update: Able to access NVMe device after reconnect in shell

OS
REF-41443: DOS Boot to DOS - NVMe Mode---- PASS
Status Update:

REF-41441: Windows Server 2008 R2 x64 Legacy Windows Server 2012 Installation - NVMe ---- PASS
Status Update: S3 - PASS, S4-unsupported
Cold\Warm boot - PASS
Device detected in NVMe Configuration' page

REF-41444: EFI Test Multiple Nvme devices in Setup ---- ---- Untestable..
Status Update: Do not have multiple devices for testing

REF-40178: Windows (multiple) UEFI Windows 8.1 x64 Install - NVMe Mode ---- PASS
Status Update: S3\S4 - PASS
Cold\Warm boot - PASS
Device detected in NVMe Configuration' page

REF-40177: UEFI Windows 2012 R2 GA UEFI Windows Server 2012 Installation - NVMe Mode---- PASS
Status Update: S3 - PASS, S4 - Unsupported
Cold\Warm boot - PASS
Device detected in NVMe Configuration' page

REF-42056: Windows (multiple) Windows 8.1 x64 Install - PCIe SSD (NVMe Mode) ---- PASS
Status Update: S3\S4 - PASS
Cold\Warm boot - PASS
Device detected in NVMe Configuration' page

SCT
REF-28581: EFI SCT Execution---- PASS
Status Update:


Copyright

American Megatrends, Inc.
5555 Oakbrook Parkway
Suite 200
Norcross, GA 30093 (USA)

Copyright (c) 1999-2016 American Megatrends, Inc. All Rights Reserved.

This publication contains proprietary information, which is protected by copyright. No part of this publication may be reproduced, transcribed, stored in a retrieval system, translated into any language or computer language, or transmitted in any form whatsoever without the prior written consent of the publisher, American Megatrends, Inc.

American Megatrends, Inc. retains the right to update, change, modify this publication at any time, without notice.

For Additional Information

Call American Megatrends BIOS Sales Department at 1-800-828-9264 for additional information.

Limitations of Liability

In no event shall American Megatrends be held liable for any loss, expenses, or damages of any kind whatsoever, whether direct, indirect, incidental, or consequential, arising from the design or use of this product or the support materials provided with the product.

Limited Warranty

No warranties are made, either expressed or implied, with regard to the contents of this work, its merchantability, or fitness for a particular use. American Megatrends assumes no responsibility for errors and omissions or for the uses made of the material contained herein or reader decisions based on such use.

Trademark and Copyright Acknowledgments

All product names used in this publication are for identification purposes only and are trademarks of their respective Companies.


Release Notes - NDA Required

Component Information:
Component Title: Nvme
Component Reference Name: Nvme
Component Type: eModule
Release Date: 2016-12-08
Source Control Label: 4.6.5.5_NVMe_006
Source Control Location: SS: Alaska;$/Alaska/SOURCE/Modules/NVMe;
Dependencies
Component Dependencies
AmiBufferValidationLib
Dependent Component Title: AmiBufferValidationLib
Dependent Component Reference Name: AmiBufferValidationLib
Dependent Source Control Label: AmiBufferValidationLib_01 and above
Dependent Source Control Location: SS: Alaska;$/Alaska/SOURCE/Modules/AmiBufferValidationLib;
Component Description:
NVMe driver detects and configures the devices connected in the NVM express controller. It installs the EFI_BLOCK_IO_PROTOCOL for NVMe devices , to support Nvme devices in UEFI\Legacy Environment. This driver supports booting to UEFI\Legacy OS that is present in the Nvme device, assuming that UEFI\Legacy OS supports Nvme devices. This driver is developed based on the Nvme 1.2 specification. This driver supports EfiNvmExpressPassThru protocol to send Nvme command to Nvme device.
Nvme driver displays the controller and devices information in the setup.
Note: SMM communication protocol should be available and enable for Nvme Legacy support in project.
Filename | Description
Main Component | Root\Core\EM\Nvme
Nvme.cif | Component information file for the eModule.
Nvme.chm | CHM file for the Nvme eModule
Nvme.mak | Make file to build Nvme module.
Nvme.sd | Nvme Driver Setup Page.
Nvme.sdl | Contains BIOS build parameters.
Nvme.uni | Nvme driver setup string definitions.
NvmeBus.c | Provides Nvme Block IO protocol.
NvmeBus.h | Header file for the Nvme Bus Driver.
NvmeComonentName.c | Provides Controller and device Name information.
NvmeIncludes.h | Common header file for the Nvme Driver.
NvmePassthru.c | Contain Nvme Express passthru protocol APIs definition
NvmePassthru.h | Header file for NvmePassthru.h file
NvmeSetup.c | Display the Nvme Controller and device information in the Setup.
NvmeControllerLib ModulePart | Root\Core\EM\Nvme
NvmeController.cif | Component information file for NvmeControllerLib
NvmeController.c | Provides Access to Nvme Controller
NvmeController.h | Nvme Controller related defination
NvmeController.mak | Make file for NvmeController Lib
NvmeController.sdl | Contains BIOS build parameters.
NvmeSmm ModulePart | Root\Core\EM\Nvme\NvmeSmm
NvmeSmm.cif | Component information file for NvmeSmm
NvmeDef.h | Nvme Smm and Non Smm interface Definitions
NvmeSmm.c | Nvme SMM driver to handle the Nvme device access
NvmeSmm.dxs | This file is the dependency file for the NvmeSmm driver
NvmeSmm.h | Header file for the NvmeSmm
NvmeSmm.mak | Make file for NvmeSmm
NvmeSmm.sdl | Contains BIOS build parameters for NvmeSmm module part
Nvme Int13 ModulePart | Root\Core\EM\Nvme\NvmeInt13
NvmeInt13.cif | Component information file for NvmeInt13
NvmeInt13.c | Nvme Driver for Legacy Mode. It installs the Int13 support for the Nvme devices
NvmeInt13.dxs | This file is the dependency file for the NvmeInt13 driver
NvmeInt13.h | Definitions and structures for NVMe INT13
NvmeInt13.inf | Rev and Bin Info of NvmeI13.BIN
NvmeInt13.mak | Make file for NvmeInt13
NvmeInt13.sdl | Contains BIOS build parameters for NvmeInt13 module part
Nvme Int13 16-bit Binary ModulePart | Root\Addon
NvmeI13.cif | Component information file for Nvme Int13 16-bit Binary
NvmeI13.bin | Nvme Int13 16-bit Binary
Nvme Protocol ModulePart | Root\Include\Protocol
NvmeProtocol.cif | Component information file for NvmeProtocol
AmiNvmeController.h | Protocol Header file for the Nvme Controller
AmiNvmeLegacy.h | Protocol Header file the Ami Nvme Legacy interface
AmiNvmePassThru.h | Protocol Header file for the Nvme PassThru Protocol
NvmExpressPassThru.h | Protocol Header file for the NvmExpressPassThru Protocol
BIOS Parameters:
Nvme - Parameter Name | Type | Description
NVMe_SUPPORT | Boolean | Main switch to enable Nvme support in Project.
NVME_VERBOSE_PRINT | Integer | Token to Enable/Disable Versbose Mode.
NVME_SETUP | Integer | Enable if Nvme setup controls from Nvme eModule needs to be displayd in setup.
NVME_BUS_DRIVER_VERSION | Integer | Nvme Bus driver version # reported in Driver Binding Protocol.
NvmeControllerLib - Parameter Name | Type | Description
NvmeController_SUPPORT | Boolean | Main switch to enable NVMe Controller Library support in Project
NvmeSmm - Parameter Name | Type | Description
NvmeSmm_SUPPORT | Boolean | Main switch to enable NvmeSmm support in Project
NVME_INIT_SMM_SWSMI | Integer | Data to be written to SW SMI port to Init NVME Smm Data
Nvme Int13 - Parameter Name | Type | Description
NVMEINT13_SUPPORT | Boolean | Main switch to enable Nvme Int13 support in the project.
NVME_SWSMI | Integer | Data to be written to SW SMI port to invoke NVME SW SMI handler.
NVMEI13_BIN | Expression
AMI Build Tools:
Tools Label: 4.5.5_TOOLS_41, Dated: 2013-03-19
Visual eBios: RSS.5.73.0244, Dated: 2013-03-19
Compiler Tool(s): Microsoft's Windows Driver Kit (WDK) Ver. 7600.16385.1
New features added in this label:
EIP# 254133 - Modify NVMe driver to avoid repeated FALSE THREAT issue report in Security Advisory.
General Bug Fixes and EIP Addressed in this Label:
General Bug Fixes
EIP# 258388 - Build error when disable CSM_SUPPORT token
EIP# 254245 - Static code analysis issues found in Aptio4 Nvme module

EIP Addressed
EIP# 228506 - Legacy Os installation failing for NVME device in AMD platform
EIP# 300640 - NvmeSmm: Security vulnerability in the NvmeSmm driver.
Files Changed for General Bug Fixes and EIP Addressed in this Label:

EIP Addressed
Root\Core\EM\Nvme\NvmeBus.c (EIP #258388)
Root\Core\EM\Nvme\NvmeInt13\NvmeInt13.c (EIP #254245)
Root\Core\EM\Nvme\NvmeSmm\NvmeSmm.c (EIP #254133, #300640, #254245)
Root\Core\EM\Nvme\NvmeSmm\NvmeSmm.sdl (EIP #258388)
Root\Core\EM\Nvme\NvmeSmm\NvmeSmm.mak (EIP #228506)
Known Limitations and Erratas in this label:
NONE
Remaining Issues:
NONE
Unit Testing:
1. NVMe SSD should able to boot UEFI\Legacy Windows 8.1 and Windows Server 2012 R2 OS.
2. Check NVMe SSD detect in BIOS setup and shell.
3. In Shell, check reconnect -r commands with NVMe driver
4. Nvme device should boot to DOS and read\write function should work then able to see device in Fdisk.
5. Test NVMe driver gEfiNvmExpressPassThru protocol support with TestNvmePassthru.efi application.
Validation Testing:
Quality Assurance Test Results
Release History:
4.6.5.5_Nvme_006
  • [TAG] EIP258388
    [Category] Bug Fix
    [Severity] Minor
    [Symptom] Build error when disable CSM_SUPPORT token
    [RootCause] NvmeSmm driver is dependent on NvmeInt13 driver which is disabled if CSM_SUPPORT token is off.
    [Solution] NvmeSmm driver will be disabled if CSM_SUPPORT, NVMEINT13_SUPPORT sdl tokens are OFF.
    [Files] NvmeSmm.sdl,NvmeBus.c

  • [TAG] EIP228506
    [Category] Improvement
    [Description] Legacy Os installation failing for NVME device in AMD platform
    [Files] NvmeSmm.mak

  • [TAG] EIP300640
    [Category] Improvement
    [Description] NvmeSmm: Security vulnerability in the NvmeSmm driver
    [Files] NvmeSmm.c

  • [TAG] EIP254245
    [Category] Bug Fix
    [Symptom] Static code analysis issues found in Aptio4 Nvme module
    [RootCause] In for loop comma operator is used instead of && for mutiple test conditions.
    [Solution] Replaced comma operator with &&.
    [Files] NvmeInt13.c, NvmeSmm.c

  • [TAG] EIP254133
    [Category] New Feature
    [Description] Modify NVMe driver to avoid repeated FALSE THREAT issue report in Security Advisory.
    [Files] NvmeSmm.c

Release_4.6.5.5_Nvme_005
Release_4.6.5.5_Nvme_004
Release_4.6.5.5_Nvme_003
Release_4.6.5.5_Nvme_002
Release_4.6.5.5_Nvme_001

© American Megatrends Inc.


Release Notes - NDA Required

Validation Test Report for NVMe Label (INT)_b_4.6.5.5_Nvme_006

Platform Information Form :

Board Information - SugarBay
BIOS Information (Label, Path) - Labeled'4.6.5.5_VEB_1AOQI008''; Path SS: Alaska;$/Alaska/Projects/Intel/SandyBridge/IMBA-Q670/SugarBay.veb';
Chipset Information (Type, Stepping) -
CPU Information (Type, Stepping)
Memory Info (Manufacturer, Speed, Configuration)
Graphics (Please specify which one in used) -
Chipset driver Version -
Graphics drive Version -

The following BQA Tests have been validated in UEFI 2.3.1 BIOS Versions

Build
REF-37927: .N/A Linux - Test ROM build---- Untestable..
Status Update: Not applicable for Aptio 4

CppCheck
REF-37351: .N/A Cpp Check---- Untestable..
Status Update: Not applicable for Aptio 4

NVMeDevices
REF-40478:EFI connect\disconnect drivers in shell---- PASS
Status Update:

OS
REF-41443: DOS Boot to DOS - NVMe Mode---- PASS
Status Update:

REF-41441: Windows Server 2008 R2 x64 Legacy Windows Server 2012 Installation - NVMe ---- PASS
Status Update:

REF-41444: EFI Test Multiple Nvme devices in Setup ---- ---- Untestable..
Status Update: Do not have multiple devices for testing

REF-40178: Windows (multiple) UEFI Win 10 x64 Install -PCIe SSD (NVMe Mode) ---- PASS
Status Update:Tested With Win 8.1 and win 10

REF-40177: UEFI Windows 2012 R2 UEFI Windows Server 2012 Installation - NVMe Mod---- PASS
Status Update:

REF-42056: Windows (multiple) Windows 10 x64 Install - PCIe SSD (NVMe Mode) ---- PASS
Status Update: Tested with WIN 8.1 and Win 10 Legacy Os

SCT
REF-28581: EFI SCT Execution-------- Untestable
Status Update: No SCT tool available for this platform


Function by File Name

AMIBIOS Function Reference

By File Name

The following is a list of the .asm files.
For a list in alphabetical order, see In Alphabetical Order.

  • Nvme.mak
  • Nvme.sd
  • NvmeBus.c
  • NvmeBus.h
  • NvmeComponentName.c
  • NvmeController.c
  • NvmeController.h
  • NvmeController.mak
  • NvmeDef.h
  • NvmeIncludes.h
  • NvmeInt13.c
  • NvmeInt13.dxs
  • NvmeInt13.h
  • NvmeInt13.mak
  • NvmePassthru.c
  • NvmePassthru.h
  • NvmeSetup.c
  • NvmeSmm.c
  • NvmeSmm.dxs
  • NvmeSmm.h
  • NvmeSmm.mak
Built on 19:31:20 12/08/16


Nvme.mak

Description:
Built on 19:31:20 12/08/16


Nvme.sd

Description:
Nvme Driver Setup Page
Built on 19:31:20 12/08/16


NvmeBus.c

Description:
Provides Nvme Block IO protocol

The following functions are used in the file: NvmeBus.c.

Function | Description
CreateNVMeDevicePath | Allocate memory and create a NVMe devicepath
DetectActiveNameSpace | Issue GetIdentifyData cmd to get the list of active name space.
EnumerateActiveNameSpace | Detects active Namespavce and adds it into a linked list
GetIdentifyData | Issue Nvme Admin Identify cmd
GetNvmeGeometryData | Get drive geometry data for INT13 support
InitializeNvmeController | Initialize Nvme controller and ADMIN submission and Completion queues
InstallBlockIoDiskInfo | Install BlockIo and DevicePath protocol for Active namespace
InstallNvmeLegacyDevice | Add the NVMe active partition as a legacy device
NvmeBusEntryPoint | Installs gNvmeBusDriverBinding protocol
NvmeBusStart | Installs Nvme Block IO Protocol
NvmeBusStop | Uninstall all devices installed in start procedure.
NvmeBusSupported | Checks whether it is a Nvme controller or not. If 'yes', return SUCCESS else ERROR
NvmeDiskInfoIdentify | Return Identify Data
NvmeDiskInfoInquiry | Return Nvme device Inquiry data
NvmeDiskInfoSenseData | Return InfoSenseData.
NvmeDiskInfoWhichIde | Returns info about where the device is connected.
NvmeFlushBlocks | Flushes the data
NvmeMassUpdateCylinderInfo | This procedure updates cylinder parameter for device geometry. head and sector parameters are required before invoking this function.
NvmeReadBlocks | Reads data from the given LBA address
NvmeReset | Resets Nvme Controller
NvmeSetDefaultGeometry | This procedure sets the default geometry for mass storage devices
NvmeUpdateCHSFromBootRecord | This function parses the boot record and extract the CHS information of the formatted media from the boot record. This routine checks for DOS & NTFS formats only
NvmeValidatePartitionTable | This procedure checks whether the partition table is valid.
NvmeWriteBlocks | Write data from the given LBA address
PrintIdentifyDataStructure | Prints Identify data structure
PrintNvmeCapability | Prints Controller capabilities
PrintNvmeMassDevInfo | Prints Nvme Mass Device Information
ReadBlock | Read the Data from device
SetNumberOfQueues | Issue Set feature cmd to set the # if queues to 1
TransferNvmeDataToSmram | Transfer the Nvme Controller information to SMRAM area that would be used by the Nvme SMM driver

Built on 19:31:20 12/08/16


CreateNVMeDevicePath in the NvmeBus.c

Function : CreateNVMeDevicePath

File: NvmeBus.c
Description:
Allocate memory and create a NVMe devicepath
Input:
IN EFI_DRIVER_BINDING_PROTOCOL     *This,
IN AMI_NVME_CONTROLLER_PROTOCOL    *NvmeController
Output:
EFI_STATUS
Modified:
Notes:
Referrals:
Built on 19:31:19 12/08/16


DetectActiveNameSpace in the NvmeBus.c

Function : DetectActiveNameSpace

File: NvmeBus.c
Description:
Issue GetIdentifyData cmd to get the list of active name space.
Input:
IN AMI_NVME_CONTROLLER_PROTOCOL    *NvmeController,
IN OUT ACTIVE_NAMESPACE_DATA       *ActiveNameSpaceData
Output:
EFI_STATUS
Modified:
Notes:
Referrals:
Built on 19:31:19 12/08/16


EnumerateActiveNameSpace in the NvmeBus.c

Function : EnumerateActiveNameSpace

File: NvmeBus.c
Description:
Detects active Namespavce and adds it into a linked list
Input:
IN OUT AMI_NVME_CONTROLLER_PROTOCOL        *NvmeController
Output:
EFI_STATUS
Modified:
Notes:
Referrals:
Built on 19:31:19 12/08/16


GetIdentifyData in the NvmeBus.c

Function : GetIdentifyData

File: NvmeBus.c
Description:
Issue Nvme Admin Identify cmd
Input:
IN AMI_NVME_CONTROLLER_PROTOCOL		*NvmeController,
OUT UINT8                           *IdentifyData,
IN UINT8                            ControllerNameSpaceStructure,
IN UINT32                           NameSpaceID
Output:
EFI_STATUS
Modified:
Notes:
ControllerNameSpaceStructure can take 0/1/2 : See Figure 81 NVM Express 1.1 Spec
NameSpaceID can be 0 or specific NameSpace ID. See Figure 38 NVM Express 1.1 Spec
Referrals:
Built on 19:31:19 12/08/16


GetNvmeGeometryData in the NvmeBus.c

Function : GetNvmeGeometryData

File: NvmeBus.c
Description:
Get drive geometry data for INT13 support
Input:
IN  OUT ACTIVE_NAMESPACE_DATA   *ActiveNameSpace,
IN  OUT NVME_MASS_DEV_INFO      *NvmeMassDevInfo,
IN  UINT8                       *Buffer
Output:
EFI_STATUS
Modified:
Notes:
Referrals:
Built on 19:31:19 12/08/16


InitializeNvmeController in the NvmeBus.c

Function : InitializeNvmeController

File: NvmeBus.c
Description:
Initialize Nvme controller and ADMIN submission and Completion queues
Input:
IN  EFI_HANDLE                      Controller,
IN  EFI_HANDLE                      DriverBindingHandle,
OUT AMI_NVME_CONTROLLER_PROTOCOL        **NvmeControllerReturnAddress
Output:
EFI_STATUS
Modified:
Notes:
Referrals:
Built on 19:31:19 12/08/16


InstallBlockIoDiskInfo in the NvmeBus.c

Function : InstallBlockIoDiskInfo

File: NvmeBus.c
Description:
Install BlockIo and DevicePath protocol for Active namespace
Input:
IN EFI_DRIVER_BINDING_PROTOCOL       *This,
IN AMI_NVME_CONTROLLER_PROTOCOL      *NvmeController
Output:
EFI_STATUS
Modified:
Notes:
Referrals:
Built on 19:31:19 12/08/16


InstallNvmeLegacyDevice in the NvmeBus.c

Function : InstallNvmeLegacyDevice

File: NvmeBus.c
Description:
Add the NVMe active partition as a legacy device
Input:
IN AMI_NVME_CONTROLLER_PROTOCOL    *NvmeController,
IN OUT ACTIVE_NAMESPACE_DATA       *ActiveNameSpaceData
IN  UINT8                          *Buffer
Output:
NONE
Modified:
Notes:
Referrals:
Built on 19:31:19 12/08/16


NvmeBusEntryPoint in the NvmeBus.c

Function : NvmeBusEntryPoint

File: NvmeBus.c
Description:
Installs gNvmeBusDriverBinding protocol
Input:
IN EFI_HANDLE        ImageHandle,
IN EFI_SYSTEM_TABLE  *SystemTable
Output:
EFI_STATUS
Modified:
Notes:
Here is the control flow of this function:
1. Initialize Ami Lib.
2. Install Driver Binding Protocol
3. Return EFI_SUCCESS.
Referrals:
InitAmiLib InstallMultipleProtocolInterfaces DListInit
Built on 19:31:19 12/08/16


NvmeBusStart in the NvmeBus.c

Function : NvmeBusStart

File: NvmeBus.c
Description:
Installs Nvme Block IO Protocol
Input:
IN EFI_DRIVER_BINDING_PROTOCOL    *This,
IN EFI_HANDLE                     Controller,
IN EFI_DEVICE_PATH_PROTOCOL       *RemainingDevicePath
Output:
EFI_STATUS
Modified:
Notes:

Referrals:

Built on 19:31:19 12/08/16


NvmeBusStop in the NvmeBus.c

Function : NvmeBusStop

File: NvmeBus.c
Description:
Uninstall all devices installed in start procedure.
Input:
IN EFI_DRIVER_BINDING_PROTOCOL    *This,
IN EFI_HANDLE                     Controller,
IN UINTN                          NumberOfChildren,
IN EFI_HANDLE                     *ChildHandleBuffer
Output:
EFI_STATUS
Modified:
Notes:
Referrals:
OpenProtocol CloseProtocol
Built on 19:31:19 12/08/16


NvmeBusSupported in the NvmeBus.c

Function : NvmeBusSupported

File: NvmeBus.c
Description:
Checks whether it is a Nvme controller or not.
If 'yes', return SUCCESS else ERROR
Input:
IN EFI_DRIVER_BINDING_PROTOCOL    *This,
IN EFI_HANDLE                     Controller,
IN EFI_DEVICE_PATH_PROTOCOL       *RemainingDevicePath
Output:
EFI_STATUS
Built on 19:31:19 12/08/16


NvmeDiskInfoIdentify in the NvmeBus.c

Function : NvmeDiskInfoIdentify

File: NvmeBus.c
Description:
Return Identify Data
Input:
IN  EFI_DISK_INFO_PROTOCOL   *This
IN  VOID                   *IdentifyData,
IN  UINT32                 *IdentifyDataSize
Output:
EFI_STATUS
Note:
Return the Nvme device Identify command data.
Modified:
Referrals:

Built on 19:31:19 12/08/16


NvmeDiskInfoInquiry in the NvmeBus.c

Function : NvmeDiskInfoInquiry

File: NvmeBus.c
Description:
Return Nvme device Inquiry data
Input:
IN  EFI_DISK_INFO_PROTOCOL   *This
IN  VOID                   *InquiryData,
IN  UINT32                 *InquiryDataSize
Output:
EFI_STATUS /EFI_NOT_FOUND
Modified:
Referrals:

Built on 19:31:19 12/08/16


NvmeDiskInfoSenseData in the NvmeBus.c

Function : NvmeDiskInfoSenseData

File: NvmeBus.c
Description:
Return InfoSenseData.
Input:
IN  EFI_DISK_INFO_PROTOCOL   *This
IN  VOID                     *SenseData,
IN  UINT32                   *SenseDataSize
IN  UINT8                    *SenseDataNumber
Output:
EFI_STATUS / EFI_NOT_FOUND
Modified:
Referrals:

Built on 19:31:19 12/08/16


NvmeDiskInfoWhichIde in the NvmeBus.c

Function : NvmeDiskInfoWhichIde

File: NvmeBus.c
Description:
Returns info about where the device is connected.
Input:
IN  EFI_DISK_INFO_PROTOCOL   *This
IN  UINT32                   *IdeChannel
IN  UINT32                   *IdeDevice
Output:
EFI_STATUS
Note:
Return Port and PMPort
Modified:
Referrals:

Built on 19:31:19 12/08/16


NvmeFlushBlocks in the NvmeBus.c

Function : NvmeFlushBlocks

File: NvmeBus.c
Description:
Flushes the data
Input:
IN  EFI_BLOCK_IO_PROTOCOL   *This
Output:
EFI_STATUS
Modified:
Referrals:

Built on 19:31:19 12/08/16


NvmeMassUpdateCylinderInfo in the NvmeBus.c

Function : NvmeMassUpdateCylinderInfo

File: NvmeBus.c
Description:
This procedure updates cylinder parameter for device geometry.
head and sector parameters are required before invoking this
function.
Input:
IN  OUT ACTIVE_NAMESPACE_DATA   *ActiveNameSpace,
Output:
NONE
Modified:
Notes:
Referrals:
Built on 19:31:20 12/08/16


NvmeReadBlocks in the NvmeBus.c

Function : NvmeReadBlocks

File: NvmeBus.c
Description:
Reads data from the given LBA address
Input:
IN  EFI_BLOCK_IO_PROTOCOL   *This,
IN  UINT32                  MediaId,
IN  EFI_LBA                 LBA,
IN  UINTN                   BufferSize,
OUT VOID                    *Buffer
Output:
None
Modified:
Referrals:

Built on 19:31:20 12/08/16


NvmeReset in the NvmeBus.c

Function : NvmeReset

File: NvmeBus.c
Description:
Resets Nvme Controller
Input:
IN  EFI_BLOCK_IO_PROTOCOL   *This,
IN  BOOLEAN                 ExtendedVerification
Output:
None
Modified:
Referrals:

Built on 19:31:20 12/08/16


NvmeSetDefaultGeometry in the NvmeBus.c

Function : NvmeSetDefaultGeometry

File: NvmeBus.c
Description:
This procedure sets the  default geometry for mass storage devices
Input:
IN  OUT ACTIVE_NAMESPACE_DATA   *ActiveNameSpace,
Output:
EFI_STATUS
Modified:
Notes:
Referrals:
Built on 19:31:20 12/08/16


NvmeUpdateCHSFromBootRecord in the NvmeBus.c

Function : NvmeUpdateCHSFromBootRecord

File: NvmeBus.c
Description:
This function parses the boot record and extract the CHS
information of the formatted media from the boot record.
This routine checks for DOS & NTFS formats only
Input:
IN  OUT ACTIVE_NAMESPACE_DATA   *ActiveNameSpace,
IN  UINT8*                      BootRecord
Output:
EFI_STATUS
Modified:
Notes:
The amount of data that will get printed can be controlled
using DEBUG_ERROR_LEVEL_MASK SDL token. Make sure
PcdDebugPrintErrorLevel is properly cloned and set to
PcdsPatchableInModule in the project.
Referrals:
Built on 19:31:20 12/08/16


NvmeValidatePartitionTable in the NvmeBus.c

Function : NvmeValidatePartitionTable

File: NvmeBus.c
Description:
This procedure checks whether the partition table is valid.
Input:
IN  UINT8   *Buffer,
IN  UINT64  dMaxLBA,
OUT UINT8   **ActPartAddr
Output:
EFI_STATUS
Modified:
Notes:
Referrals:
Built on 19:31:20 12/08/16


NvmeWriteBlocks in the NvmeBus.c

Function : NvmeWriteBlocks

File: NvmeBus.c
Description:
Write data from the given LBA address
Input:
IN  EFI_BLOCK_IO_PROTOCOL   *This,
IN  UINT32                  MediaId,
IN  EFI_LBA                 LBA,
IN  UINTN                   BufferSize,
OUT VOID                    *Buffer
Output:
EFI_STATUS
Modified:
Referrals:

Built on 19:31:20 12/08/16


PrintIdentifyDataStructure in the NvmeBus.c

Function : PrintIdentifyDataStructure

File: NvmeBus.c
Description:
Prints Identify data structure
Input:
UINT8       *IdentifyData,
UINT8       ControllerNameSpaceStructure
Output:
None
Modified:
Referrals:
Built on 19:31:20 12/08/16


PrintNvmeCapability in the NvmeBus.c

Function : PrintNvmeCapability

File: NvmeBus.c
Description:
Prints Controller capabilities
Input:
IN AMI_NVME_CONTROLLER_PROTOCOL        *NvmeController
Output:
None
Modified:
Notes:
The amount of data that will get printed can be controlled using DEBUG_ERROR_LEVEL_MASK SDL token.
Make sure PcdDebugPrintErrorLevel is properly cloned and set to PcdsPatchableInModule in the project.
Referrals:
Built on 19:31:20 12/08/16


PrintNvmeMassDevInfo in the NvmeBus.c

Function : PrintNvmeMassDevInfo

File: NvmeBus.c
Description:
Prints Nvme Mass Device Information
Input:
NVME_MASS_DEV_INFO              *NvmeMassDevInfo
Output:
None
Modified:
Referrals:

Built on 19:31:20 12/08/16


ReadBlock in the NvmeBus.c

Function : ReadBlock

File: NvmeBus.c
Description:
Read the Data from device
Input:
AMI_NVME_CONTROLLER_PROTOCOL    *NvmeController,
ACTIVE_NAMESPACE_DATA       *ActiveNameSpace
Output:
None
Modified:
Referrals:

Built on 19:31:20 12/08/16


SetNumberOfQueues in the NvmeBus.c

Function : SetNumberOfQueues

File: NvmeBus.c
Description:
Issue Set feature cmd to set the # if queues to 1
Input:
IN AMI_NVME_CONTROLLER_PROTOCOL     *NvmeController,
Output:
EFI_STATUS
Modified:
Notes:
Referrals:
Built on 19:31:20 12/08/16


TransferNvmeDataToSmram in the NvmeBus.c

Function : TransferNvmeDataToSmram

File: NvmeBus.c
Description:
Transfer the Nvme Controller information to SMRAM area that would be used
by the Nvme SMM driver
Input:
IN AMI_NVME_CONTROLLER_PROTOCOL    *NvmeController
Output:
NONE
Modified:
Notes:
Referrals:
Built on 19:31:20 12/08/16


NvmeBus.h

Description:
Header file for the Nvme Bus Driver
Built on 19:31:20 12/08/16


NvmeComponentName.c

Description:
Provides Controller and device Name information
Built on 19:31:20 12/08/16


NvmeController.c

Description:
Provides Access to Nvme Controller

The following functions are used in the file: NvmeController.c.

Function | Description
AddToAdminSubmissionQueue | Submits the cmd to the Admin Submission queue
AddToQueue1SubmissionQueue | Submits the Nvme cmd to the Queue1 Submission queue
CreateAdditionalSubmissionCompletionQueue | Creates Submission and Completion Queue
ExecuteNvmeCmd | Execute Admin and Nvme cmds
NvmeReadWriteBlocks | Read/Write data from the given LBA address
PrintCommandCompletionData | Prints the cmd completion status
PrintNvmeCmdWrapper | Prints Nvme cmd parameters
ProgramPRP2List | Programs PRP2 with the list of page address for data transfer
RecreateAllQueues | Delete Admin and other Completion/Submission queue and create it back again.
RecreateQueue1 | Delete Completion and Submission queue and create it back again.
SmmStall | Stall Function
UnicodeStrToAsciiStr | This function converts the content of the Unicode string Source to the ASCII string Destination by copying the lower 8 bits of each Unicode character and returns Destination
UpdateDoorBellRegister | Update door bell register for the controller to start executing the cmd
WaitForCompletionQueueUpdate | Checks for the completion queue for the correct PhaseTag, Queue Identified and Cmd Identifier

Built on 19:31:20 12/08/16


AddToAdminSubmissionQueue in the NvmeController.c

Function : AddToAdminSubmissionQueue

File: NvmeController.c
Description:
Submits the cmd to the Admin Submission queue
Input:
IN  AMI_NVME_CONTROLLER_PROTOCOL    *NvmeController,
IN  NVME_COMMAND_WRAPPER            *NvmeCmdWrapper
Output:
EFI_STATUS
Modified:
Notes:
Referrals:
Built on 19:31:19 12/08/16


AddToQueue1SubmissionQueue in the NvmeController.c

Function : AddToQueue1SubmissionQueue

File: NvmeController.c
Description:
Submits the Nvme cmd to the Queue1 Submission queue
Input:
IN  AMI_NVME_CONTROLLER_PROTOCOL    *NvmeController,
IN  NVME_COMMAND_WRAPPER            *NvmeCmdWrapper,
Output:
EFI_STATUS
Modified:
Notes:
Referrals:
Built on 19:31:19 12/08/16


CreateAdditionalSubmissionCompletionQueue in the NvmeController.c

Function : CreateAdditionalSubmissionCompletionQueue

File: NvmeController.c
Description:
Creates Submission and Completion Queue
Input:
IN  AMI_NVME_CONTROLLER_PROTOCOL    *NvmeController,
IN  NVME_COMMAND_WRAPPER            *NvmeCmdWrapper,
IN  UINT16                          QueueNumber,
IN  UINT32                          QueueSize
Output:
EFI_STATUS
Modified:
Notes:
Can be called recursively
Referrals:
Built on 19:31:19 12/08/16


ExecuteNvmeCmd in the NvmeController.c

Function : ExecuteNvmeCmd

File: NvmeController.c
Description:
Execute Admin and Nvme cmds
Input:
IN  AMI_NVME_CONTROLLER_PROTOCOL    *NvmeController,
IN  NVME_COMMAND_WRAPPER            *NvmeCmdWrapper,
OUT COMPLETION_QUEUE_ENTRY          *CmdCompletionData
Output:
EFI_STATUS
Modified:
Notes:
If the cmd needs to be retried due to a failure, caller can initialize the RetryCount.
Can be called recursively.
Referrals:
Built on 19:31:19 12/08/16


NvmeReadWriteBlocks in the NvmeController.c

Function : NvmeReadWriteBlocks

File: NvmeController.c
Description:
Read/Write data from the given LBA address
Input:
IN  ACTIVE_NAMESPACE_DATA   *ActiveNameSpace,
IN UINT32                       MediaId,
IN EFI_LBA                      LBA,
IN UINTN                        BufferSize,
OUT VOID                        *Buffer
IN UINT8                        ReadWriteOpCode
Output:
EFI_STATUS
Modified:
Notes:

Referrals:

Built on 19:31:20 12/08/16


PrintCommandCompletionData in the NvmeController.c

Function : PrintCommandCompletionData

File: NvmeController.c
Description:
Prints the cmd completion status
Input:
IN  COMPLETION_QUEUE_ENTRY  *pCmdCompletionData
Output:
NONE
Modified:
Notes:
The amount of data that will get printed can be controlled
using DEBUG_ERROR_LEVEL_MASK SDL token.
Make sure PcdDebugPrintErrorLevel is properly cloned and set to
PcdsPatchableInModule in the project.
Referrals:
Built on 19:31:20 12/08/16


PrintNvmeCmdWrapper in the NvmeController.c

Function : PrintNvmeCmdWrapper

File: NvmeController.c
Description:
Prints Nvme cmd parameters
Input:
NVME_COMMAND_WRAPPER    *NvmeCmdWrapper
Output:
NONE
Modified:
Notes:
The amount of data that will get printed can be controlled
using DEBUG_ERROR_LEVEL_MASK SDL token.
Make sure PcdDebugPrintErrorLevel is properly cloned and set to
PcdsPatchableInModule in the project.
Referrals:
Built on 19:31:20 12/08/16


ProgramPRP2List in the NvmeController.c

Function : ProgramPRP2List

File: NvmeController.c
Description:
Programs PRP2 with the list of page address for data transfer
Input:
IN EFI_BLOCK_IO_PROTOCOL        *This
Output:
EFI_STATUS
Modified:
Notes:

Referrals:

Built on 19:31:20 12/08/16


RecreateAllQueues in the NvmeController.c

Function : RecreateAllQueues

File: NvmeController.c
Description:
Delete Admin and other Completion/Submission queue and create it back again.
Input:
IN  AMI_NVME_CONTROLLER_PROTOCOL        *NvmeController
Output:
EFI_STATUS
Modified:
Notes:
This procedure will be called if the queue gets filled up. This situation shouldn't generally happen as each cmd
is completed in our case. So both Head and Tail should point to the same location before and after cmd is executed.
One possibility for calling this routine will be when the cmd doesn't get completed and Completion Queue doesn't get updated
by the controller. Also any Set Feature cmd that was issued during initilization should be re-issued here.
Referrals:
Built on 19:31:20 12/08/16


RecreateQueue1 in the NvmeController.c

Function : RecreateQueue1

File: NvmeController.c
Description:
Delete Completion and Submission queue and create it back again.
Input:
IN  AMI_NVME_CONTROLLER_PROTOCOL        *NvmeController
Output:
EFI_STATUS
Modified:
Notes:
This procedure will be called if the queue gets filled up. This situation shouldn't generally happen as each cmd
is completed in our case. So both Head and Tail should point to the same location before and after cmd is executed.
One possibility for calling this routine will be when the cmd doesn't get completed and Completion Queue doesn't get updated
by the controller. Can be called recursively.
Referrals:
Built on 19:31:20 12/08/16


SmmStall in the NvmeController.c

Function : SmmStall

File: NvmeController.c
Description:
Stall Function
Input:
UINTN   Usec
Output:
NONE
Modified:
Notes:

Referrals:

Built on 19:31:20 12/08/16


UnicodeStrToAsciiStr in the NvmeController.c

Function : UnicodeStrToAsciiStr

File: NvmeController.c
Description:
This function converts the content of the Unicode string Source
to the ASCII string Destination by copying the lower 8 bits of
each Unicode character and returns Destination
Input:
Source        A pointer to a Null-terminated Unicode string.
Destination   A pointer to a Null-terminated ASCII string.
Output:
None
Built on 19:31:20 12/08/16


UpdateDoorBellRegister in the NvmeController.c

Function : UpdateDoorBellRegister

File: NvmeController.c
Description:
Update door bell register for the controller to start executing the cmd
Input:
IN AMI_NVME_CONTROLLER_PROTOCOL      *NvmeController,
IN UINT16                            QueueNumber,
IN UINT32                            Value
Output:
EFI_STATUS
Modified:
Notes:
Referrals:
Built on 19:31:20 12/08/16


WaitForCompletionQueueUpdate in the NvmeController.c

Function : WaitForCompletionQueueUpdate

File: NvmeController.c
Description:
Checks for the completion queue for the correct PhaseTag, Queue Identified and Cmd Identifier
Input:
IN  AMI_NVME_CONTROLLER_PROTOCOL        *NvmeController,
IN  NVME_COMMAND_WRAPPER                *NvmeCmdWrapper,
OUT COMPLETION_QUEUE_ENTRY              *CmdCompletionData
Output:
EFI_STATUS
Modified:
Notes:
Referrals:
Built on 19:31:20 12/08/16


NvmeController.h

Description:
Nvme Controller related defination
Built on 19:31:20 12/08/16


NvmeController.mak

Description:
Make file for NvmeController Lib
Built on 19:31:20 12/08/16


NvmeDef.h

Description:
Nvme Smm and Non Smm interface Definitions
Built on 19:31:20 12/08/16


NvmeIncludes.h

Description:
Common header file for the Nvme Driver
Built on 19:31:20 12/08/16


NvmeInt13.c

Description:
Nvme Driver for Legacy Mode. It installs the Int13
support for the Nvme devices

The following functions are used in the file: NvmeInt13.c.

Function | Description
CreateBbsEntry | This function takes the device index within NVMEMASS_INT13_DEV list and prepares BBS entry for this device
CreateDeviceName | This function retrieves NVMe device name, copies it into lower memory and returns a pointer to the string
InitInt13RuntimeImage | Initialization of data structures and placement of runtime
NvmeInstallLegacyDevice | This API is called by NVMe bus driver. The device is added into CSM16 data area for legacy boot
NvmeInt13EntryPoint | NVMe INT13 driver entry point. Installs call back notification on gAmiNvmeLegacyProtocolGuid installation.

Built on 19:31:20 12/08/16


CreateBbsEntry in the NvmeInt13.c

Function : CreateBbsEntry

File: NvmeInt13.c
Description:
This function takes the device index within NVMEMASS_INT13_DEV
list and prepares BBS entry for this device
Input:
UINT8                       DevIndex,
IN NVME_LEGACY_MASS_DEVICE  *NvmeLegacyMassDevice,
OUT BBS_TABLE               *BbsEntry
Output:
EFI_STATUS
Modified:
Notes:
None
Referrals:
Built on 19:31:19 12/08/16


CreateDeviceName in the NvmeInt13.c

Function : CreateDeviceName

File: NvmeInt13.c
Description:
This function retrieves NVMe device name, copies it into
lower memory and returns a pointer to the string
Input:
UINT8   DevIndex,
UINT8   *DevNameStringSrc,
UINT16  *StringDestinationSegment,
UINT16  *StringDestinationOffset,
UINT16  *MfgStringDestinationSegment,
UINT16  *MfgStringDestinationOffset
Output:
EFI_STATUS
Modified:
Notes:
None
Referrals:
Built on 19:31:19 12/08/16


InitInt13RuntimeImage in the NvmeInt13.c

Function : InitInt13RuntimeImage

File: NvmeInt13.c
Description:
Initialization of data structures and placement of runtime
Input:
NONE
Output:
EFI_STATUS
Modified:
Notes:
None
Referrals:
Built on 19:31:19 12/08/16


NvmeInstallLegacyDevice in the NvmeInt13.c

Function : NvmeInstallLegacyDevice

File: NvmeInt13.c
Description:
This API is called by NVMe bus driver. The device is added into CSM16
data area for legacy boot
Input:
NVME_LEGACY_MASS_DEVICE *NvmeLegacyMassDevice
Output:
EFI_STATUS
Modified:
Notes:
None
Referrals:
Built on 19:31:19 12/08/16


NvmeInt13EntryPoint in the NvmeInt13.c

Function : NvmeInt13EntryPoint

File: NvmeInt13.c
Description:
NVMe INT13 driver entry point. Installs call back
   notification on gAmiNvmeLegacyProtocolGuid installation.
Input:
IN  EFI_HANDLE       ImageHandle,
IN  EFI_SYSTEM_TABLE *SystemTable
Output:
EFI_STATUS
Modified:
Notes:
None
Referrals:
Built on 19:31:19 12/08/16


NvmeInt13.dxs

Description:
This file is the dependency file for the NvmeInt13 driver
Built on 19:31:20 12/08/16


NvmeInt13.h

Description:
Definitions and structures for NVMe INT13
Built on 19:31:20 12/08/16


NvmeInt13.mak

Description:
Make file for NvmeInt13
Built on 19:31:20 12/08/16


NvmePassthru.c

Description:
Contain Nvme Express passthru protocol APIs definition

The following functions are used in the file: NvmePassthru.c.

Function | Description
BuildDevicePath | Used to allocate and build a device path node for an NVM Express namespace on an NVM Express controller
GetActiveNameSpace | Routine to get the Active NameSpace
GetNamespace | Used to translate a device path node to a Namespace ID
GetNextNamespace | API to get next valid NameSpace ID of the Nvme Device
NvmePassThru | Sends an NVM Express Command Packet to an NVM Express controller or namespace
SearchDevicePathNode | Routine Searches device path by specific Type and SubType

Built on 19:31:20 12/08/16


BuildDevicePath in the NvmePassthru.c

Function : BuildDevicePath

File: NvmePassthru.c
Description:
Used to allocate and build a device path node for an NVM Express namespace
on an NVM Express controller
Input:
IN     This         A pointer to the EFI_NVM_EXPRESS_PASS_THRU_PROTOCOL instance
IN     NamespaceId  The NVM Express namespace ID for which a device path node is
         to be allocated and built
IN     DevicePath   A pointer to a single device path node that describes the
         NVM Express namespace specified by NamespaceId.
Output:
EFI_STATUS
Modified:
Notes:

Referrals:

Built on 19:31:19 12/08/16


GetActiveNameSpace in the NvmePassthru.c

Function : GetActiveNameSpace

File: NvmePassthru.c
Description:
Routine to get the Active NameSpace
Input:
IN AMI_NVME_CONTROLLER_PROTOCOL   *NvmeController
IN UINT32                         NamespaceId
Output:
ACTIVE_NAMESPACE_DATA pointer for the NamespaceId
Modified:
Notes:

Referrals:

Built on 19:31:19 12/08/16


GetNamespace in the NvmePassthru.c

Function : GetNamespace

File: NvmePassthru.c
Description:
Used to translate a device path node to a Namespace ID
Input:
IN     This         A pointer to the EFI_NVM_EXPRESS_PASS_THRU_PROTOCOL instance
IN     DevicePath   A pointer to the device path node that describes an NVM
         Express namespace on the NVM Express controller.
IN     NamespaceId  The NVM Express namespace ID contained in the device path node
Output:
EFI_STATUS
Modified:
Notes:

Referrals:

Built on 19:31:19 12/08/16


GetNextNamespace in the NvmePassthru.c

Function : GetNextNamespace

File: NvmePassthru.c
Description:
API to get next valid NameSpace ID of the Nvme Device
Input:
IN    This         A pointer to the EFI_NVM_EXPRESS_PASS_THRU_PROTOCOL instance
IN    NamespaceId  A pointer to a valid Namespace ID on this NVM Express controller
Output:
EFI_STATUS
Modified:
Notes:

Referrals:

Built on 19:31:19 12/08/16


NvmePassThru in the NvmePassthru.c

Function : NvmePassThru

File: NvmePassthru.c
Description:
Sends an NVM Express Command Packet to an NVM Express controller or namespace
Input:
IN    This         A pointer to the EFI_NVM_EXPRESS_PASS_THRU_PROTOCOL instance
IN    NamespaceId  A 32 bit namespace ID as defined in the NVMe specification
         to which the NVM Express Command Packet will be sent.
IN    Packet       A pointer to the NVM Express Command Packet to send to
         the NVMe namespace specified by NamespaceId.
IN    Event        Event to be signaled when the NVM Express Command Packet completes
         and non-blocking I/O is supported
Output:
EFI_STATUS
Modified:
Notes:

Referrals:

Built on 19:31:20 12/08/16


SearchDevicePathNode in the NvmePassthru.c

Function : SearchDevicePathNode

File: NvmePassthru.c
Description:
Routine Searches device path by specific Type and SubType
Input:
IN   DevicePath  A pointer to the device path protocol
IN   Type       Device path Node Type
IN   SubType    Device path node subtype
Output:
EFI_DEVICE_PATH_PROTOCOL*
Modified:
Notes:

Referrals:

Built on 19:31:20 12/08/16


NvmePassthru.h

Description:
Header file for NvmePassthru.h file
Built on 19:31:20 12/08/16


NvmeSetup.c

Description:
Display the Nvme Controller and device information in the Setup

The following functions are used in the file: NvmeSetup.c.

Function | Description
InitNvmeStrings | This function initializes the SB related setup option values
UnicodeStrToAsciiStr | This function converts the content of the Unicode string Source to the ASCII string Destination by copying the lower 8 bits of each Unicode character and returns Destination

Built on 19:31:20 12/08/16


InitNvmeStrings in the NvmeSetup.c

Function : InitNvmeStrings

File: NvmeSetup.c
Description:
This function initializes the SB related setup option values
Input:
IN EFI_HII_HANDLE HiiHandle - Handle to HII database
IN UINT16 Class - Indicates the setup class
Output:
NONE
Modified:
Notes:
None
Referrals:
Built on 19:31:19 12/08/16


UnicodeStrToAsciiStr in the NvmeSetup.c

Function : UnicodeStrToAsciiStr

File: NvmeSetup.c
Description:
This function converts the content of the Unicode string Source
to the ASCII string Destination by copying the lower 8 bits of
each Unicode character and returns Destination
Input:
Source        A pointer to a Null-terminated Unicode string.
Destination   A pointer to a Null-terminated ASCII string.
Output:
NONE
Modified:
Notes:
None
Referrals:
Built on 19:31:20 12/08/16


NvmeSmm.c

Description:
Nvme SMM driver to handle the Nvme device access

The following functions are used in the file: NvmeSmm.c.

Function | Description
GetDevEntry | Get the Index# for the DeviceAddress
InSmmFunction | Nvme InSmmFunction
NvmeInitSmmData | Initialize NVMe SMM data area
NvmeMassAPIGetDeviceGeometry | Return Device Geometry
NvmeMassAPIGetDeviceInformation | Return Device information
NvmeMassAPINotSupported | Dummy handler to return NVME_NOT_SUPPORTED
NvmeMassAPIPass | Dummy handler to return NVME_SUCCESS
NvmeMassAPIReadDevice | Read data from the device
NvmeMassAPIResetDevice | Reset device
NvmeMassAPIWriteDevice | Write data to the device
NvmeSmmDriverEntryPoint | Loads NVMe SMM module into SMM and registers SMI handler
NvmeSWSMIHandler | Handle SWSMI generated from NVMe CSM16 module
ZeroMemorySmm | Clears input Buffer to zero

Built on 19:31:20 12/08/16


GetDevEntry in the NvmeSmm.c

Function : GetDevEntry

File: NvmeSmm.c
Description:
Get the Index# for the DeviceAddress
Input:
UINT8                   DeviceAddress,
ACTIVE_NAMESPACE_DATA   **ActiveNameSpace
Output:
NONE
Modified:
Notes:
None
Referrals:
Built on 19:31:19 12/08/16


InSmmFunction in the NvmeSmm.c

Function : InSmmFunction

File: NvmeSmm.c
Description:
Nvme InSmmFunction
Input:
IN  EFI_HANDLE       ImageHandle,
IN  EFI_SYSTEM_TABLE *SystemTable
Output:
EFI_STATUS
Modified:
Notes:
None
Referrals:
Built on 19:31:19 12/08/16


NvmeInitSmmData in the NvmeSmm.c

Function : NvmeInitSmmData

File: NvmeSmm.c
Description:
Initialize NVMe SMM data area
Input:

Output:

EFI_STATUS

Modified:

Notes:

None

Referrals:

Built on 19:31:19 12/08/16


NvmeMassAPIGetDeviceGeometry in the NvmeSmm.c

Function : NvmeMassAPIGetDeviceGeometry

File: NvmeSmm.c
Description:
Return Device Geometry
Input:
NVME_STRUC  *NvmeURP
Output:
NONE
Modified:
Notes:
None
Referrals:
Built on 19:31:19 12/08/16


NvmeMassAPIGetDeviceInformation in the NvmeSmm.c

Function : NvmeMassAPIGetDeviceInformation

File: NvmeSmm.c
Description:
Return Device information
Input:
NVME_STRUC  *NvmeURP
Output:
NONE
Modified:
Notes:
None
Referrals:
Built on 19:31:19 12/08/16


NvmeMassAPINotSupported in the NvmeSmm.c

Function : NvmeMassAPINotSupported

File: NvmeSmm.c
Description:
Dummy handler to return NVME_NOT_SUPPORTED
Input:
NVME_STRUC  *NvmeURP
Output:
NONE
Modified:
Notes:
None
Referrals:
Built on 19:31:19 12/08/16


NvmeMassAPIPass in the NvmeSmm.c

Function : NvmeMassAPIPass

File: NvmeSmm.c
Description:
Dummy handler to return NVME_SUCCESS
Input:
NVME_STRUC  *NvmeURP
Output:
NONE
Modified:
Notes:
None
Referrals:
Built on 19:31:19 12/08/16


NvmeMassAPIReadDevice in the NvmeSmm.c

Function : NvmeMassAPIReadDevice

File: NvmeSmm.c
Description:
Read data from the device
Input:
NVME_STRUC  *NvmeURP
Output:
NONE
Modified:
Notes:
None
Referrals:
Built on 19:31:19 12/08/16


NvmeMassAPIResetDevice in the NvmeSmm.c

Function : NvmeMassAPIResetDevice

File: NvmeSmm.c
Description:
Reset device
Input:
NVME_STRUC  *NvmeURP
Output:
NONE
Modified:
Notes:
None
Referrals:
Built on 19:31:19 12/08/16


NvmeMassAPIWriteDevice in the NvmeSmm.c

Function : NvmeMassAPIWriteDevice

File: NvmeSmm.c
Description:
Write data to the device
Input:
NVME_STRUC  *NvmeURP
Output:
NONE
Modified:
Notes:
None
Referrals:
Built on 19:31:19 12/08/16


NvmeSmmDriverEntryPoint in the NvmeSmm.c

Function : NvmeSmmDriverEntryPoint

File: NvmeSmm.c
Description:
Loads NVMe SMM module into SMM and registers SMI handler
Input:
IN  EFI_HANDLE       ImageHandle,
IN  EFI_SYSTEM_TABLE *SystemTable
Output:
EFI_STATUS
Modified:
Notes:
None
Referrals:
Built on 19:31:20 12/08/16


NvmeSWSMIHandler in the NvmeSmm.c

Function : NvmeSWSMIHandler

File: NvmeSmm.c
Description:
Handle SWSMI generated from NVMe CSM16 module
Input:

Output:

EFI_STATUS

Modified:

Notes:

None

Referrals:

Built on 19:31:20 12/08/16


ZeroMemorySmm in the NvmeSmm.c

Function : ZeroMemorySmm

File: NvmeSmm.c
Description:
Clears input Buffer to zero
Input:
void     *Buffer
UINTN    Size
Output:
NONE
Built on 19:31:20 12/08/16


NvmeSmm.dxs

Description:
This file is the dependency file for the NvmeSmm driver
Built on 19:31:20 12/08/16


NvmeSmm.h

Description:
Header file for the NvmeSmm
Built on 19:31:20 12/08/16


NvmeSmm.mak

Description:
Make file for NvmeSmm
Built on 19:31:20 12/08/16


Functions in Alphabetical Order

In Alphabetical Order

The following topics provide a list in alphabetical order.
For a list by file name, see By File Name.

  • A
  • B
  • C
  • D
  • E
  • G
  • I
  • N
  • P
  • R
  • S
  • T
  • U
  • W
  • Z
Built on 19:31:19 12/08/16


Functions in Alphabetical Order

A

Function | Description
AddToAdminSubmissionQueue | Submits the cmd to the Admin Submission queue
AddToQueue1SubmissionQueue | Submits the Nvme cmd to the Queue1 Submission queue

Built on 19:31:19 12/08/16


Functions in Alphabetical Order

B

Function | Description
BuildDevicePath | Used to allocate and build a device path node for an NVM Express namespace on an NVM Express controller

Built on 19:31:19 12/08/16


Functions in Alphabetical Order

C

Function | Description
CreateAdditionalSubmissionCompletionQueue | Creates Submission and Completion Queue
CreateBbsEntry | This function takes the device index within NVMEMASS_INT13_DEV list and prepares BBS entry for this device
CreateDeviceName | This function retrieves NVMe device name, copies it into lower memory and returns a pointer to the string
CreateNVMeDevicePath | Allocate memory and create a NVMe devicepath

Built on 19:31:19 12/08/16


Functions in Alphabetical Order

D

Function | Description
DetectActiveNameSpace | Issue GetIdentifyData cmd to get the list of active name space.

Built on 19:31:19 12/08/16


Functions in Alphabetical Order

E

Function | Description
EnumerateActiveNameSpace | Detects active Namespavce and adds it into a linked list
ExecuteNvmeCmd | Execute Admin and Nvme cmds

Built on 19:31:19 12/08/16


Functions in Alphabetical Order

G

Function | Description
GetActiveNameSpace | Routine to get the Active NameSpace
GetDevEntry | Get the Index# for the DeviceAddress
GetIdentifyData | Issue Nvme Admin Identify cmd
GetNamespace | Used to translate a device path node to a Namespace ID
GetNextNamespace | API to get next valid NameSpace ID of the Nvme Device
GetNvmeGeometryData | Get drive geometry data for INT13 support

Built on 19:31:19 12/08/16


Functions in Alphabetical Order

I

Function | Description
InitializeNvmeController | Initialize Nvme controller and ADMIN submission and Completion queues
InitInt13RuntimeImage | Initialization of data structures and placement of runtime
InitNvmeStrings | This function initializes the SB related setup option values
InSmmFunction | Nvme InSmmFunction
InstallBlockIoDiskInfo | Install BlockIo and DevicePath protocol for Active namespace
InstallNvmeLegacyDevice | Add the NVMe active partition as a legacy device

Built on 19:31:19 12/08/16


Functions in Alphabetical Order

N

Function | Description
NvmeBusEntryPoint | Installs gNvmeBusDriverBinding protocol
NvmeBusStart | Installs Nvme Block IO Protocol
NvmeBusStop | Uninstall all devices installed in start procedure.
NvmeBusSupported | Checks whether it is a Nvme controller or not. If 'yes', return SUCCESS else ERROR
NvmeDiskInfoIdentify | Return Identify Data
NvmeDiskInfoInquiry | Return Nvme device Inquiry data
NvmeDiskInfoSenseData | Return InfoSenseData.
NvmeDiskInfoWhichIde | Returns info about where the device is connected.
NvmeFlushBlocks | Flushes the data
NvmeInitSmmData | Initialize NVMe SMM data area
NvmeInstallLegacyDevice | This API is called by NVMe bus driver. The device is added into CSM16 data area for legacy boot
NvmeInt13EntryPoint | NVMe INT13 driver entry point. Installs call back notification on gAmiNvmeLegacyProtocolGuid installation.
NvmeMassAPIGetDeviceGeometry | Return Device Geometry
NvmeMassAPIGetDeviceInformation | Return Device information
NvmeMassAPINotSupported | Dummy handler to return NVME_NOT_SUPPORTED
NvmeMassAPIPass | Dummy handler to return NVME_SUCCESS
NvmeMassAPIReadDevice | Read data from the device
NvmeMassAPIResetDevice | Reset device
NvmeMassAPIWriteDevice | Write data to the device
NvmeMassUpdateCylinderInfo | This procedure updates cylinder parameter for device geometry. head and sector parameters are required before invoking this function.
NvmePassThru | Sends an NVM Express Command Packet to an NVM Express controller or namespace
NvmeReadBlocks | Reads data from the given LBA address
NvmeReadWriteBlocks | Read/Write data from the given LBA address
NvmeReset | Resets Nvme Controller
NvmeSetDefaultGeometry | This procedure sets the default geometry for mass storage devices
NvmeSmmDriverEntryPoint | Loads NVMe SMM module into SMM and registers SMI handler
NvmeSWSMIHandler | Handle SWSMI generated from NVMe CSM16 module
NvmeUpdateCHSFromBootRecord | This function parses the boot record and extract the CHS information of the formatted media from the boot record. This routine checks for DOS & NTFS formats only
NvmeValidatePartitionTable | This procedure checks whether the partition table is valid.
NvmeWriteBlocks | Write data from the given LBA address

Built on 19:31:19 12/08/16


Functions in Alphabetical Order

P

Function | Description
PrintCommandCompletionData | Prints the cmd completion status
PrintIdentifyDataStructure | Prints Identify data structure
PrintNvmeCapability | Prints Controller capabilities
PrintNvmeCmdWrapper | Prints Nvme cmd parameters
PrintNvmeMassDevInfo | Prints Nvme Mass Device Information
ProgramPRP2List | Programs PRP2 with the list of page address for data transfer

Built on 19:31:19 12/08/16


Functions in Alphabetical Order

R

Function | Description
ReadBlock | Read the Data from device
RecreateAllQueues | Delete Admin and other Completion/Submission queue and create it back again.
RecreateQueue1 | Delete Completion and Submission queue and create it back again.

Built on 19:31:19 12/08/16


Functions in Alphabetical Order

S

Function | Description
SearchDevicePathNode | Routine Searches device path by specific Type and SubType
SetNumberOfQueues | Issue Set feature cmd to set the # if queues to 1
SmmStall | Stall Function

Built on 19:31:19 12/08/16


Functions in Alphabetical Order

T

Function | Description
TransferNvmeDataToSmram | Transfer the Nvme Controller information to SMRAM area that would be used by the Nvme SMM driver

Built on 19:31:19 12/08/16


Functions in Alphabetical Order

U

Function | Description
UnicodeStrToAsciiStr | This function converts the content of the Unicode string Source to the ASCII string Destination by copying the lower 8 bits of each Unicode character and returns Destination
UnicodeStrToAsciiStr | This function converts the content of the Unicode string Source to the ASCII string Destination by copying the lower 8 bits of each Unicode character and returns Destination
UpdateDoorBellRegister | Update door bell register for the controller to start executing the cmd

Built on 19:31:19 12/08/16


Functions in Alphabetical Order

W

Function | Description
WaitForCompletionQueueUpdate | Checks for the completion queue for the correct PhaseTag, Queue Identified and Cmd Identifier

Built on 19:31:19 12/08/16


Functions in Alphabetical Order

Z

Function | Description
ZeroMemorySmm | Clears input Buffer to zero

Built on 19:31:19 12/08/16


General Information

Built on 19:31:20 12/08/16