9. Port Multiplier Support[譯自AHCI1.0]
支援Port Multiplier(PM)對於HBA是非必要的,以及它的支援指示藉由CAP.SPM到系統軟體。如果在HBA中有支援Port Multiplier,它必須支援基本命令的切換。這個章節必須去使得Port Multiplier運作,在描述硬體和軟體的差異性。
9.1 Command Based Switching
在這個操作模式,開啟一條通訊路徑在HBA經由Port Multiplier到Device之間。從Port Multiplier意圖成為單體,在AHCI軟體製造連接上的負擔,去確保在Port Multiplier之後的不同Device中多重Command沒有未完成。
9.1.1 Non-Queued Operation
當執行non-queued commands ,這命令列可能填上任何的port組合,和其他命令列欄位會指到不同的Port。在Port Multiplier裝置與數個裝置之間命令數量的分配不是固定關係。例如,29 commands可能是分配到在PM 之後port #0連接的裝置與3 Commands屬於剩下裝置,如果那是由系統軟體要求。
由於Command是non-queued,在命令列中HBA將執行每個命令欄位的全部在移除對下一個欄位以前,這些包含一個命令對一個不相同的Port。
這地方額外的負擔在系統軟體對於額外的命令。由於HBA操作依順序在它的命令列,系統軟體將不填這列表在連續的次序跟Commands對單一裝置;另一個裝置可能會變的飢餓。取得接下來範例:
- 4裝置附屬於在PM後面的Port
- 作業系統目前的Command數
- 4個Command到PM後面的Port#0的裝置
- 2個Command到PM後面的Port#1的裝置
- 1個Command到PM後面的Port#2的裝置
如果AHCI軟體在這裡的Command是採用連續的方式,開始在Command的Slot 0,這個列表將在下面看到:
- Slot #0: PM Port #0, Command 1
- Slot #1: PM Port #0, Command 2
- Slot #2: PM Port #0, Command 3
- Slot #3: PM Port #0, Command 4
- Slot #4: PM Port #1, Command 1
- Slot #5: PM Port #1, Command 2
- Slot #6: PM Port #2, Command 1
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |
Port0 | 1 | 1 | 1 | 1 | ||||||||||||||||||||||||||||
Port1 | 1 | 1 | ||||||||||||||||||||||||||||||
Port2 | 1 |
這將造成PM後面的Port#2的裝置在非常久的時間不能去執行它的命令。造成最差的情況下,31 Commands對其他後面不同Port的裝置可去執行之前這Command被允許去執行。
在公平的使用下,較佳Command的配置結果如下:
- Slot #0: PM Port #0, Command 1
- Slot #1: PM Port #2, Command 1
- Slot #2: PM Port #1, Command 1
- Slot #8: PM Port #0, Command 2
- Slot #9: PM Port #1, Command 2
- Slot #16: PM Port #0, Command 3
- Slot #24: PM Port #0, Command 4
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |
Port0 | 1 | 1 | 1 | 1 | ||||||||||||||||||||||||||||
Port1 | 1 | 1 | ||||||||||||||||||||||||||||||
Port2 | 1 |
映射Command在這方式幫助下確保PM後面的Port#2的裝置有一個公平執行的可能性。前述的演算法在輪詢Command運作的結果。許多演算法關於公平是否存在,與說明它執行方式相關領域在後面會說明。
下一個Command為了找到最佳Slot,軟體將使用PxCMD.CCS去尋找正確Slot讓HBA使用,與這裡Command在適合Slot被要求需公平的演算法。此外,Tag的使用必須吻合Command slot的欄位。
9.1.2 Queued Operation
由於佇列命令在兩個不同運作的結果(命令發怖,清除BSY,然後資料傳輸),如果命令被送到不同的port,在從不同Port以插入的方式讓PM發出FIS回到HBA。這將中止HBA只支援command-based切換。因此,當執行native command queuing的命令,系統軟體必須只加入命令到命令列的目的為單一PM後面的Port,等待命令完成(PxSACT位元全部被清除),然後對不同port加入命令。
9.2 Port Multiplier Enumeration
為了列舉一個Port Multiplier的動作細目,在Port Multiplier對Port 0fh(control port)發佈一個軟體的reset命令。如果回傳的識別碼符合這個Port Mutiplier,然後這個Port Mutiplier就被連接上了。如果回傳的識別碼符合其他裝置型態,然後這個Port Mutiplier就不被連接上了。
去列舉一個Port Multiplier的動作細目,在Port Multiplier裝置port0不管目前存在的裝置,經HBA,如果命令列手動裝置這特性被支援(指示CAP.SCLO被設成’1’),這PxCMD.CLO(Command List Override命令列手動裝置) bit 將被使用。軟體將確保PxCMD.ST bit是0。當軟體對於Software Reset在Command List將建構這兩個FIS暫存器區塊的需求。在FIS暫存器傳進這PM的Port區域值被設為0Fh。之後在Command list建構這FIS,軟體將設定PxCMD.CLO為1去強迫清除在Status暫存器中的BSY與DRQ bits。當軟體將PxCMD.ST bit設定成1與設定適當的PxCI bits為了開始Software Reset Command的執行。
如果CAP.SCLO bit被清除為0,Port Multiplier只能被列舉,在Port Multiplier的Port 0後之裝置送一個FIS暫存器給host清除PxTFD.STS.BSY和PxTFDSTSDQR為0。
9.3 FIS-based Switching
將定義在將來的AHCI說明手冊。
以下為Revision 1_070.doc
9.3 FIS-based Switching
大部份效率高與高效能的Port Miltiplier都使用FIS-based方式做切換。在FIS-based切換,那或許Commands突顯在相同時間中對所有裝置連結Port Miltiplier。去支援這操作Port Miltiplier的方式,主控端必須能去處理從Port Miltiplier的任何Port收進來的FIS;FIS可能會是任何一種方式插入。
FIS-based切換需求在HBA每個Port都必須去保有附加目的詳細指示背景的路徑。當在Port中,還有Commands顯著對其他的目標時,HBA必須能夠去發佈Commands到另一個目標。在行動時,HBA必須必須能夠去切換DMA的背景。例如:一個資料FIS從目標x被接收,接著是一個資料FIS從目標x+1。下章節描述從正常的操作一個FIS-based被不同的切換。
9.3.1 Command List
當使用FIS-based切換,軟體將去配置一個命令列面積,它的面積比一般的大16倍。配置命令列面積將是1K bytes x 16 = 16KB的容量。
對於每個支援PM目標,HBA將保有PxCI(命令發送)與PxTFD.STS(工作檔案狀態)暫存器。HBA將不停的尋找新命令的發送對於支援任何PM的目標。如果PxTFD.STS.BSY、PxTFD.STS.DRQ、還有PxTFD.STS.ERR全部都為’0’,對於一個特定的目標和一個被設定在PxCI暫存器的bit對應此目標;然後在下ㄧ次的機會中,HBA將發布一個命令對應於此目標(假設這是在一個沒有錯誤未完成的Prot)。如果”PM Target”是下一個PM的目標對它送一個Command,當PxCLB/U[PM Target x 1KB]將是基本區域接Commands至目標(來自發送到選擇的目標)。這基本區域被索引到PxCI命令發怖。
以線上的方式,HBA將處理每個獨立的命令列,如同在ㄧ般的範例在外部FIS-based切換類似的描述在5.2節。 HBA會執行一種演算法去避免任何一個目標飢餓。如果一個命令還沒準備好去發佈經由HBA從下一個被選擇的目標,HBA繼續對接下來的目標依職發布命令直到被發現到。
圖18. 對於FIS-based切換的命令列
9.3.2 FIS Receive Area
當使用FIS-based切換,軟體將去配置一個FIS接收面積,它的面積比一般的大16倍。配置FIS接收面積將是256 bytes x 16 = 4KB的容量。當一個非資料FIS被接收,將是複製在FIS接收面積中,它將複製到在FIS接收面積的適當位置基於兩種FIS型態和在接收FIS之PM的Port區域。在PM的Port之FIS區域將使用如同索引到FIS接收面積PxFB/U[PM的Port區域 x 256bytes],這是FIS接收面積基本的區域,FIS將複製到這裡。ㄧ但基本的目標FIS接收面積區域被識別,FIS被複製到合適的偏移位置,基於詳細的偏移說明在4.2.1節。
圖19. 對於FIS-based切換的FIS接收面積
沒有留言:
張貼留言