NVMe1.3a_Spec解读(一)---控制器初始化

标签: 通信原理
12人阅读 评论(0) 收藏 举报

NVMe1.3a控制器初始化和关闭流程(Controller Initialization and Shutdown Processing)

1.初始化

主控需要按如下顺序执行指令来完成初始化:

1.  根据系统配置设置PCIe寄存器,包括电源管理设置。基于pin的单中断,单MSI或者单MSI-X应该被一直使用指导IO队列被确认;

2.  主控需要等到控制器表明此前的重置已经完成,即等待CSTS.RDY=0;

3.  需要配置Admin队列。包括Admin Queue Attributes (AQA), Admin Submission Queue Base Address(ASQ), and Admin Completion Queue Base Address (ACQ);

4.  控制器设置需要被配置,包括:①在CC.AMS中选择仲裁机制;②在CC.MPS中初始化内存页的大小;③在CC.CSS中选择IO Command的设置;

5.  需要设置控制器的使能,即配置CC.EN=1;

6.  主控需要等待控制器表明已经准备好处理命令,也就是CSTS.RDY=1;

7.  主控应用发布识别指令和指定控制器数据结构来决定控制器的配置。主控应通过发布识别指令和指定命名空间数据结构决定每个命名空间来确定每一个命名空间的配置;

8.  主控应通过设置队列功能标识符数量的功能指令和决定IO SQ和IO CQ的数量。决定之后再配置MSI和MSI-X寄存器;

9.  主控需要根据系统配置需求和控制器的数量需求来分配IO CQ的数量。用创建IO CQ指令来分配IO CQ;

10.主控需要根据系统配置需求和控制器的数量需求来分配IO SQ的数量。用创建IO SQ指令来分配IO SQ;

11.如果主控需要异步告知自选项目,主控应发行一个控制命令来说明指定使能的事项;

在执行完上述指令后,控制器可能被用作IO指令。

 

Software Progress Marker

    时间预启动软件的数量被优先读进了系统以保证系统加载成功。如果预启动软件的加载计数变大,那么由于系统驱动软件仍未将这一区域置0可能会使它在NVM内以缓存数据的形式被发布。在这种情况下,系统驱动软件需要更加谨慎的选择NVM。

2.关机

推荐主机有序地执行控制器的关机指令,其步骤如下所示:

①  停止向控制器提交任何新的IO指令,也不允许任何outstanding指令完成;

②  主机使用IO SQ删除指令来删除所有IO SQ。成功完成IO SQ删除命令导致的结果就是任何剩余的outstanding指令会被终止。

③  主机要使用IO CQ删除指令来删除所有IO CQ;

④  主机要讲关机标志位(CC.SHN)置为01b来声明一个关机操作。关机过程一旦完成,主控需要将关机状态置为10b(CSTS.SHST=10b);

当进入D3电源状态时,关机流程如下所示:

①  停止向控制器提交任何新的IO指令;

②  主机要讲关机标志位(CC.SHN)置为10b来声明一个强制关机操作。关机过程一旦完成,主控需要将关机状态置为10b(CSTS.SHST=10b);

建议主控为关机操作完成等待RTD3 EntryLantency在识别控制器数据结构中得到报告。如果上报值为0h,主控则需要等待一秒的最小值。通过CC.EN区域取消主控使能是不被推荐的。这将会造成主控被重置,从而影响关机操作流程的时间。

在CSTS.SHST表明关机过程已经完成后让主控掉电是安全的(无视CC.EN的值)。直到CC.EN从“0”到“1”都可以安全的关闭主控电源。

为了让主控在一次关机操作后重新开始工作,需要进行主控重置(即让CC.EN从“1”置“0”)。

 

 

 

查看评论

IOS初始化控制器的两种方法

题记生活很简单,只不过就是忘记了知识,再去学习知识。 笔录一 ViewControllViewController方式 #import "AppDelegate.h" #import "ViewCo...
  • zl18603543572
  • zl18603543572
  • 2017-07-25 08:02:35
  • 586

关于视图控制器的初始化 viewController

视图控制器在进行初始化的时候,一定要采用其提供的方法, ViewController *fileController = [[[ViewController alloc]initWithNib...
  • reylen
  • reylen
  • 2013-01-14 16:50:39
  • 2425

初始化一个控制器时需要注意的事情

问题一:看到很多刚开始写iOS的人,喜欢在控制器的init方法里写一些像:self.navigationItem.title = @"xxx";self.view.backgrou...
  • wei_zhenwei
  • wei_zhenwei
  • 2017-09-12 14:48:08
  • 101

yii初始化控制器的两种方法

①public function __construct($id, $module, $config = []) { parent::__construct($id, $module, $co...
  • lingchen__
  • lingchen__
  • 2017-10-30 11:08:49
  • 185

yii2 控制器初始化和对象初始化

控制器初始化 public function __construct($id, $module, $config = []) { //do something ...
  • buyueliuying
  • buyueliuying
  • 2016-11-11 23:13:06
  • 1431

控制器初始化方法_initialize

如果你的控制器类继承了\think\Controller类的话,可以定义控制器初始化方法_initialize,在该控制器的方法调用之前首先执行。 例如: namespace app\index\...
  • zjhwqx
  • zjhwqx
  • 2016-09-29 13:02:44
  • 1220

SpringMVC学习(01)--前端控制器DispatcherServlet的初始化

一、DispatcherServlet的初始化过程 DispatcherServlet,也就是我们的前端控制器,它是SpringMVC的核心,那么,Spring容器在初始化DispatcherSer...
  • Mr_Errol
  • Mr_Errol
  • 2017-02-13 17:21:10
  • 317

RYU控制器代码解析-Hub

我们的目标是用Python程序实现一个Hub,Hub的主要功能是把收到的数据包进行泛洪,Hub的算法有很多,这里以官方给出的一个来说明。OpenFlow 交换机可以根据控制器(如RYU)的指令来进行以...
  • manml
  • manml
  • 2017-09-20 07:58:57
  • 492

IOS中用UIStoryBoard类初始化/跳转控制器

IOS中用UIStoryBoard类初始化/跳转控制器 1. 空工程中通过创建storyboard文件加载页面 2. 其他控制器中设置StoryBoard的初始控制器为window的根控制器 3 .跳...
  • sinat_19587549
  • sinat_19587549
  • 2014-12-21 13:56:45
  • 2160

Laravel5.3使用学习笔记---控制器

看完了laravel V5.3的路由和中间件部分,接着就是看控制器部分了。 参考官方英文文档,laravel 5.3控制器部分: https://laravel-china.org/docs/en/...
  • Gavin_new
  • Gavin_new
  • 2016-12-10 13:02:22
  • 1514
    个人资料
    持之以恒
    等级:
    访问量: 6342
    积分: 310
    排名: 25万+
    最新评论