SAS驱动中PHY和PORT的介绍

来源:互联网 发布:手机短信修改软件 编辑:程序博客网 时间:2024/06/03 05:07

SAS驱动中PHY和PORT的介绍

v0.1 20170412 Felix: Init

这篇文档是基于内核Linux-v4.10, hisi_sas驱动,介绍phy,port,及其之间的关系。

1、PHY的介绍

1.1、整体理解PHY

SAS协议共有6层,从上到下依次为: 应用层(application layer), 传输层(transport layer),端口层(port layer), 链路层(link layer), phy层(phy layer), 物理层(physical layer)。

PHY层定义了8b10b编码和解码方式、组成dwords、OOB信号、PHY reset以及速率协商等过程。PHY层的主要作用是实现phy reset系列以及dword的同步。

8b10b编解码:目的是”直流平衡”,为的是不出现大量连续的0和1.
Dwords: 有4个字符组成。
OOB信号:是一个不出现在数据帧中的低速信号。包括COMMINIT、COMSAS、COMWAKE三种信号。其中COMWAKE用于SATA与SATA设备、SATA与SAS设备,COMSAS用于SAS设备之间的交互,COMMINIT则是通用语言。

1.2、软件是怎么定义PHY

libsas层的phy定义成struct asd_sas_phy。
LLDD层的phy则是对libsas phy做了封装,定义成struct hisi_sas_phy。

SAS控制器一般支持8个PHY,放在hisi_hba中,HBA初始化的时候统一分配内存,并初始化。在phyup中断后,会找一个port进行绑定。phydown之后,则与port解绑定。
8个PHY对应的asd_sas_phy及hisi_sas_phy内存是固定的,PHY的下标(0~7)就存在asd_sas_phy中。

小窍门:所有libsas接口用到的phy,都是struct asd_sas_phy,对port也适用。

2.PORT的介绍

1.1、整体理解PORT

端口层实际上起从传输层到链路层的承接作用。一个或多个phy可以构成一个端口。
硬盘挂是在port上的,可以共享port下面所有的phy资源。还没弄清楚,一次传输具体是使用哪个phy,或者是说phy的选择是在逻辑上实现的?

2.2、软件是怎么定义PORT

与phy的定义类似:
libsas层的port定义成struct asd_sas_port。
LLDD层的port则是对libsas port做了封装,定义成struct hisi_sas_port。

HBA初始化的时候也分配了8个port的内存,都标记为未使用,sas_form_port会为新上来的phy分配port,并调用lldd_port_form()进行绑定。

0 0
原创粉丝点击