Ahci controller(intel z790)2,Sata设备Identify

Ahci控制器Sata设备Identify命令发送
  1. 确认命令ATA还是ATAPI
    先看这个Ahci Port Register,这里记录了第一个D2H(Device to Host) Register FIS(Frame Information Structure)。
    PxSIG
    再看SATA 3.5a 11.2,不管是reset还是init,都要通过FIS send status,这就是第一个FIS了,且不管是good还是bad,Field LBA和Count都一致。所以,PxSIG对应的ATA是00000101h,ATAPI是EB140101h。
    DHR
    send
  2. Command - Identify (Packet) Device
    根据ATA/ATAPI Command Set - 3,Identify Device is for ATA and ATAPI,Identify Packet Device is for ATAPI。Identify数据包含有关可选功能和命令支持的信息,如果host发出一个不支持的命令,device应当返回已终止的命令。
    I D
    I P D
    接下来该发命令了,先了解一下相关内容。device和host有两种数据交互方式,PIO和DMA。PIO - Programmed Input/Output,指处理器参与数据搬运。DMA都很熟悉了,DMA控制器参与。然后就是这种数据结构称为FIS,这里只介绍使用到的FIS结构。Register Host to Device FIS(type 27h),根据描述可知 Identify Device属于Register Host to Device FIS类型。
    Register Host to Device FIS
    layout从右往左,地址从低到高。
    再结合ATA/ATATPI command set - 3中 input
    input
    FIS Type 27h。PM Port和Ahci CAP(00h) Supports Port Multiplier(bit17)有关,我这边不支持。R是Reserved,应该填0。C表示来自host command(1b)还是device control(0b)。Command ECh。Features Count和LBA全是N/A。Device bit4定义很模糊就不管了。其他ICC和Auxiliary如下都是not present,还有一个control在ATA/ATAPI command set 3里没有说明,不过这个是device control用的,host应该用不到。Command FIS 至此填充完毕。
    common input
  3. 利用Ahci发送Command
    再看看Ahci bar5内存空间
    HBA Mem space
    Port
    Received FIS
    Command List
    Command Table
    无处不在的指针,梳理一下。Ahci Pcie bar5地址中存放了Port Registers,最多支持32个,一般一个Port接一个SATA设备。Port Register中记录了Port x Command List Base Address和Port x FIS Base Address。Port x Command List有32个Command slot,command slot记录了command table base address。Port x FIS,详见Ahci 4.2.1。
    接下来就要填充这些区域了,Command FIS Length (CFL)以Dword为单位,从最上面图10.5.5.1中知道这边填5,Clear Busy upon R_OK ©置1,Physical Region Descriptor Byte Count (PRDBC)这个是要从device接收的字节数,Identify命令需要接受512个字节,一个Physical Region Descriptor Table (PRDT)最多4MB,所以Physical Region Descriptor Table Length (PRDTL)是1。Command Table Base Address用自己分配的地址。
    Command Table里CFIS用Identify Device FIS,ACMD用不到,PRDT只有一个,DBA是用来接收Device返回的Identify Data的,DBC是实际大小减一,I是Interrupt on Completion。
    把所有数据准备好后,在Port空闲时发送,最后等待发送完毕。

代码的话直接调用UEFI接口就好了,然后参照Spec解析。

 
AMD处理器的主板从IDE顺利切换为AHCI的方法和所需的驱动 压缩包内容: 说明.txt 1.reg ahcix86.cat ahcix86.inf ahcix86.sys install.bat 硬件条件:设计安装AMD处理器的、支持AHCI模式的主板 适用范围:windows xp到windows xp sp3之间的32位操作系统,从IDE模式顺利切换为AHCI模式。 安装步骤: 1、运行解压文件夹内的批处理文件(install.bat)2、在弹出的窗口“(注册表编辑器)是否确认要将...中的信息添加进注册表?”选择“是”; 3、重新启动操作系统,并在BIOS中开启AHCI模式并保存,然后重新启动操作系统即可。 驱动版本:DriverVer=03/17/2009, 3.1.1540.127 支持的设备ID: [ATI] %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4380&SUBSYS;_280A103C %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4380&SUBSYS;_2814103C %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4392 %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4391 %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4393 %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4380&SUBSYS;_101E1462 %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4380&SUBSYS;_10221462 %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4380&SUBSYS;_10201462 %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4380&SUBSYS;_305817AA %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4380&SUBSYS;_305717AA %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4380&SUBSYS;_2A89103C %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4380&SUBSYS;_00421B0A %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4380&SUBSYS;_00431B0A %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4380&SUBSYS;_3054103C %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4380&SUBSYS;_3055103C %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4380&SUBSYS;_0184107B %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4380&SUBSYS;_0FFF0FFF %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4380&SUBSYS;_B0051458 %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4380&SUBSYS;_B0031458 %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4380&SUBSYS;_02131025 %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4380&SUBSYS;_02111025 %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4380&SUBSYS;_02161025 %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4380&SUBSYS;_6B311462 %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4380&SUBSYS;_6B321462 %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4380&SUBSYS;_021D1025 %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4381&SUBSYS;_43811002 %NapaDesc%=Napa_Inst,PCI\VEN_1002&DEV;_4380&SUBSYS;_43821002 %NapaDesc%=Napa_Inst,PCI\
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值