AHCI sata设备初始化流程
检测sata设备:
- 检测hba的存在
- 根据hba的port挨个检测是否连接。根据intel文档,需要检测的项有:pxssts.det=03h,pxssts.ipm=02h或06h
- 检测signature,0101的就是sata了
初始化sata设备:
- 关闭指令执行。设置pxcmd.st=0,pxcmd.fre=0。
- 将command list重新定位。要注意:command list对齐是1k的,received fis是256对齐,command table则是128对齐。由于command table的长度是128+16*n,n是prdt的项数。所以,一般来说,n应取8的倍数。尤其需要注意的是,每个prdt虽然可以支持4mb,但sata标准对dma读取最大只支持8k,因此若你需要使用dma一次读取很多扇区,则用于command list的存储空间会相当的大。
- 启用指令执行。设置pxcmd.fre=1,pxcmd.st=1。
读取/写入sata设备
- 通过pxsaac和pxci找到空闲的command slot。
- 将这个slot的prdt顺序指向缓冲区,注意设置每个prdt的byte count,这是从0开始的,0表示1。
- 设置command header的prdtl,注意这是从1开始的,1表示1。根据读取/写入设置command header的w。
- 设置command header的fis为h2d register fis。视乎所用的具体指令,设置fis的command和c。设置起始扇区和操作扇区数,具体参考sata标准。注意不同的fis,对不同字段的使用方式不同。
- 先设置pxsaac,然后设置pxci,让hba开始传输指令。
- 检测pxsaac,看这个slot是否空闲。如果空闲,则说明传输已经完成。查看各个错误寄存器,是否有错误发生。
总体来说,初始化过程非常麻烦,而且8k的读取限制对prdt的内存需求太高。但使用起来并不麻烦。另外,无法得知设备的扇区大小,只能假定为512字节。
AHCI sata设备初始化流程相关推荐
- DPDK — L2 Forwarding 与网卡设备初始化流程
目录 文章目录 目录 L2 Forwarding Application 安装部署 部署拓扑 编译运行 L2fwd 测试 L2 转发功能 实现分析 L2 转发原理 代码注释 函数调用关系图 网卡设备初 ...
- coreboot学习9:ramstage阶段之设备初始化流程
本文对ramstage阶段的设备初始化过程进行跟踪.设备初始化是在dev_initialize函数中完成的,代码如下: void dev_initialize(void) {struct bus *l ...
- Linux内核网络栈1.2.13-网卡设备的初始化流程
参考资料 <<linux内核网络栈源代码情景分析>> 网卡设备的初始化 本文主要描述一下网卡设备的整个初始化的过程,该过程主要就是根据设备的硬件信息来获取与传输网络数据,注册相 ...
- linux内核ufs设备树,Linux内核初始化流程笔记
Linux内核初始化流程笔记 分类: LINUX 作者:gfree.wind@http://www.doczj.com/doc/fc580419c1c708a1294a4409.html 博客:htt ...
- android6.0源码分析之Camera API2.0下的初始化流程分析
1.Camera2初始化的应用层流程分析 Camera2的初始化流程与Camera1.0有所区别,本文将就Camera2的内置应用来分析Camera2.0的初始化过程.Camera2.0首先启动的是C ...
- Ethercat解析(十四)之初始化流程
一.EtherCAT入口 源代码执行命令sudo /etc/init.d/ethercat start,将会从文件module.c文件中的ec_init_module函数中开始往下执行初始化流程. 二 ...
- linux中流设备_[快速上手Linux设备驱动]之块设备驱动流程详解一
[快速上手Linux设备驱动]之块设备驱动流程详解一 walfred已经在[快速上手Linux设备驱动]之我看字符设备驱动一 文中详细讲解了linux下字符设备驱动,并紧接着用四篇文章描述了Linux ...
- 【SPRD CAMERA】1 HAL层初始化流程
一.前言 根据我的理解以前android在启动camera service 会直接去操作hal层,这样hal层和framework就耦合在一起了.现在 Android O 中,加入了Camera Pr ...
- SD/eMMC初始化流程、读写流程(dwc mshc)
目录 1.芯片简介 1.1 模块与接口 1.2 SD/eMMC初始化流程 1.3 SD/eMMC数据传输流程 1.3.1 传输模式 2.调试问题 2.1 uboot 2.1.1 连续读4个以上bloc ...
最新文章
- php $this self,php this self 用法与区别
- jdk javac运行不了_Intellij IDEA搭建jdk源码阅读环境
- vc6.0 点击鼠标获取mysql数据库所在行_VC6.0连接到mysql数据库
- 算法设计与分析男女匹配问题C语言,C语言解决新郎和新娘配对问题代码解析
- 病毒在网络上传播的基本途径分析
- hdu 1022 Train Problem I 解题报告
- javascipt很有用的代码,实现全选与反选,还可以与struts2或sevelet交互使用
- 迅雷前CEO陈磊涉嫌职务侵占罪已被立案侦查,股价周四下跌超7%
- 《如何搭建小微企业风控模型》第七节 准入规则节选
- 酒店客房管理系统(C语言)
- 2021-03-03-Beamforming algorithms - beamformers
- html ol标签用罗马数字,HTML重点标签总结
- 40岁后学习编程是否太晚了?7点技巧让学习变得轻松有趣
- 鸿蒙 什么意思,鸿蒙是什么意思和拼音怎么读
- ios安装fiddler证书
- “一把梭:REST API 全用 POST”
- 头脑王者小程序开发源码分析
- 5G网络入门基础--5G网络的实现流程
- 2022前端面试(一面面试题)
- Keras中predict()方法和predict_classes()方法和evaluate()方法
热门文章
- 哪些东西做引流产品比较好?哪些商品是每天比较受欢迎的?
- XP与Win7默认下时间分隔符不同
- obs多推流地址_OBS下载、安装、使用(腾讯)推流直播教程
- python判断火车票座位_Python3 实现火车票查询工具
- 乐器php毕业论文,打击乐器在音乐课堂教学中的应用
- 共享店铺系统如何设计?具体如何做?
- 发表Nature等杂志四十多篇论文老师带您学单细胞测序数据挖掘和课题设计 2020年1月11-12日 上海...
- CSDN下载资源报错:This XML file does not appear to have any style information associated with it.
- 无线抄表火热,ZigBee暂输于专用协议[转]
- 地面气象观测数据-A文件转excel方法