1.9 事務(wù)順序

1.9.1 生產(chǎn)者/使用者模型

生產(chǎn)者/使用者模型可能是兩臺有請求能力的設(shè)備用來相互通信的常用方法。

1 一個網(wǎng)絡(luò)適配器開始通過網(wǎng)絡(luò)接收壓縮的視頻數(shù)據(jù)流泞边,并執(zhí)行一系列存儲器寫事務(wù)锐借,將這些壓縮的視頻數(shù)據(jù)流存入存儲器的數(shù)據(jù)緩沖區(qū)中问麸。

2 生產(chǎn)者將數(shù)據(jù)存入存儲器之后,它就執(zhí)行一次存儲器寫事務(wù)钞翔,在某一存儲器單元中設(shè)置一個標(biāo)志严卖,表示數(shù)據(jù)已經(jīng)準(zhǔn)備好,等待處理布轿。

3 使用者定期對標(biāo)志單元執(zhí)行存儲器讀哮笆,以便查看是否有數(shù)據(jù)要處理俺亮。

4 當(dāng)發(fā)現(xiàn)生產(chǎn)者已設(shè)置標(biāo)志時,它執(zhí)行一個存儲器寫清除標(biāo)志疟呐,然后執(zhí)行一次突發(fā)存儲器讀事務(wù),從存儲器的數(shù)據(jù)緩沖區(qū)中讀取壓縮的數(shù)據(jù)东且。

5 當(dāng)使用者使用完數(shù)據(jù)后启具,它將完成狀態(tài)寫入狀況單元。然后珊泳,它重新開始定期地讀取標(biāo)志單元鲁冯,以確定何時需要處理更多的數(shù)據(jù)。

6 與此同時色查,生產(chǎn)者也定期地讀取狀況單元薯演,查看其他請求者是否已經(jīng)完成數(shù)據(jù)處理、在生產(chǎn)者讀取狀況并發(fā)現(xiàn)使用者已經(jīng)完成數(shù)據(jù)處理時秧了,生產(chǎn)者接著執(zhí)行一個存儲器寫來清楚狀況單元跨扮。

7只要生產(chǎn)者還有數(shù)據(jù)要處理,此過程便重復(fù)验毡。

1.9.2 真正的PCIe順序規(guī)則

真正的PCIe順序規(guī)則可以概述為下面4條簡單的規(guī)則:

1. PCIe要求具有相同TC分配的事務(wù)按照強(qiáng)順序通過結(jié)構(gòu)衡创。因為分配了同一TC值的所有事務(wù)映射到一個給定的VC,因此這一規(guī)則也同樣適用于每個VC內(nèi)的事務(wù)晶通。

2. 不同TC分配的事物之間不存在順序關(guān)系璃氢。

3. 順序規(guī)則同樣適用于所有類型的事務(wù):存儲、IO狮辽、配置和消息一也。

4. 在有限的情況下,設(shè)置了“靈活的順序”屬性比特的事務(wù)能排在其他具有相同TC值的事務(wù)之前喉脖。

這些基本規(guī)則可以保證事務(wù)總是按照軟件計劃的順序完成椰苟。然而,這些規(guī)則非常保守动看,并且無法提供最佳的性能尊剔。在這種情況下,為了提高性能菱皆,可以應(yīng)用更冒險的規(guī)則须误。

1.9.3 靈活的順序

PCIe支持PCI-X引入的靈活的順序機(jī)制,但PCIe引入了一些變化仇轻。PCIe環(huán)境下靈活的順序概念允許請求者和完成者之間路徑上的交換器京痢,將剛收到的一些事務(wù)重新排在其他先前已入隊的事務(wù)之前。

支持生產(chǎn)者/使用者模型的順序規(guī)則可能導(dǎo)致事務(wù)阻塞篷店,事實上阻塞的事務(wù)與任何生產(chǎn)者/使用者事務(wù)序列無關(guān)祭椰。因此在某些情況下臭家,設(shè)置了靈活的順序?qū)傩员忍氐氖聞?wù)能重新排在其他事務(wù)之前。

如果設(shè)備驅(qū)動器允許方淤,設(shè)備就可以設(shè)置靈活的順序比特钉赁。

1.9.4 RO對存儲器寫和消息的影響

存儲器寫和消息事務(wù)都被當(dāng)作報告操作,兩者被接收到同一報告緩沖區(qū)携茂,兩者服從相同的順序要求你踩。當(dāng)設(shè)置了RO比特時,交換器處理這些事務(wù)的步驟如下:

允許交換器將剛報告的存儲器寫事務(wù)重新排在之前的報告存儲器寫事務(wù)或消息事務(wù)之前讳苦。同樣带膜,剛報告的消息事務(wù)也可以排在之前的報告存儲器寫或消息事務(wù)之前。交換器也必須不修改RO比特的轉(zhuǎn)發(fā)事務(wù)鸳谜。

允許根聯(lián)合體將剛報告的寫事務(wù)及時地排在早先接收的其他寫事務(wù)之前膝藕。同樣,在接收寫請求時咐扭,要求根聯(lián)合體將數(shù)據(jù)有效載荷寫入系統(tǒng)存儲器內(nèi)指定的地址單元芭挽,但允許以任意地址順序?qū)⒚總€字節(jié)寫入存儲器。

1.9.5 RO對存儲器讀事務(wù)的影響

設(shè)備發(fā)出設(shè)置了RO比特的存儲器讀請求時蝗肪,這個請求在到達(dá)完成者的路途中可能穿過一個或多個交換器览绿。完成者以一系列一個或多個分離的完成事務(wù)返回請求讀取的數(shù)據(jù),而且使用與請求相同的RO設(shè)置穗慕。

1.10 中斷

1.10.1 發(fā)送中斷的兩種方法

真正的PCIe中斷發(fā)送機(jī)制——PCIe使用消息信號中斷(MSI)消除了對邊帶信號的需要饿敲。消息信號中斷不是PCIe消息,而僅僅是存儲器寫事務(wù)逛绵。與MSI有關(guān)的存儲器寫與其他存儲器寫只能通過它們的目標(biāo)地址單元來區(qū)分怀各,與MSI有關(guān)的存儲器寫的目標(biāo)地址單元時系統(tǒng)專為中斷發(fā)送而保留的。

傳統(tǒng)的PCI中斷發(fā)送機(jī)制——這一機(jī)制必須使用為PCI總線定義的PCI兼容中斷信號(INITA#术浪、INITB#瓢对、INITC#、INITD#)的設(shè)備胰苏。傳統(tǒng)中斷設(shè)備使用這些中斷線之一發(fā)出中斷信號硕蛹。首先聲明INITx#信號請求中斷服務(wù),接下來當(dāng)服務(wù)中斷服務(wù)程序訪問設(shè)備專用寄存器時硕并,再取消聲明INITx#信號法焰,表示該中斷正在被服務(wù)。PCIe定義了其作用相當(dāng)于虛擬INITx#線的帶內(nèi)消息倔毙。這些消息以位于根聯(lián)合體內(nèi)的中斷控制器為目標(biāo)埃仪。

1.10.2 消息信號中斷

消息信號中斷(MSI)通過存儲器寫事務(wù)被發(fā)送到根聯(lián)合體。MSI功能寄存器提供設(shè)備發(fā)送MSI信號需要的所有信息陕赃。該寄存器由配置軟件設(shè)置卵蛉,包括如下信息:

目標(biāo)存儲器地址颁股;

要寫入指定單元的數(shù)值;

可以編碼成數(shù)據(jù)的消息樹傻丝。

1.10.2.1 MSI功能寄存器組

真正的PCIe功能必須在其自己的配置空間內(nèi)實現(xiàn)單獨的MSI寄存器組甘有。PCIe規(guī)范定義了兩種寄存器格式:

64位存儲器尋址格式;

32位存儲器尋址格式葡缰。



下面介紹MSI寄存器中的每個字段梧疲。

功能ID:標(biāo)志MSI寄存器組的功能ID是05h。這是一個硬連線运准、只讀的值。

下一新功能寄存器的指針:寄存器組的第二個字節(jié)若不是指向下一新功能寄存器組缭受,就是包含00h胁澳,如果這是新功能列表的結(jié)尾。它是一個硬連線米者、只讀的值韭畸。如果是非0值,則必須是一個雙字對齊的值蔓搞。

消息控制寄存器:

比特字段名描述

15:8保留只讀胰丁,總為0

764位地址能力只讀

0=功能未實現(xiàn)消息地址寄存器的高32位,不能產(chǎn)生64位寄存器地址

1=功能實現(xiàn)消息地址寄存器的高32位喂分,能產(chǎn)生64位存儲器地址

6:4多消息允許讀/寫锦庸。系統(tǒng)軟件讀取多消息能力字段,從而確定設(shè)備請求多少消息之后蒲祈,對這個字段編程甘萧,賦一個3位的值,表明分配給設(shè)備的消息實際數(shù)目梆掸。所分配的消息數(shù)目可以等于或小于實際請求的數(shù)目扬卷。這個字段的狀態(tài)在復(fù)位時為000b

3:1多消息能力只讀。系統(tǒng)軟件讀取這個字段確定設(shè)備分配了多少消息

0MSI允許讀/寫酸钦。復(fù)位后的狀態(tài)為0怪得,表明設(shè)備的MSI功能是禁用的。0=禁止功能使用MSI卑硫,必須使用INTx消息發(fā)送中斷徒恋;1=允許使用MSI請求服務(wù),禁止使用其中斷引腳

消息地址寄存器:低兩位硬連線到0欢伏。消息控制寄存器的bit7是1時因谎,高32位才出現(xiàn)。

消息數(shù)據(jù)寄存器:系統(tǒng)軟件通過將基消息數(shù)據(jù)寫入該16位讀/寫寄存器颜懊,從而分配設(shè)備一個基消息數(shù)據(jù)模式财岔。當(dāng)設(shè)備必須產(chǎn)生中斷請求時风皿,它將32位值寫入消息地址寄存器指定的寄存器地址。寫入的數(shù)據(jù)具有如下格式:

高16位總為0匠璧;

低16位由消息數(shù)據(jù)寄存器提供桐款。如果分配給設(shè)備的消息多于一個,則設(shè)備修改消息數(shù)據(jù)寄存器的低位夷恍,為它希望報告給驅(qū)動程序的事件形成適當(dāng)?shù)南ⅰ?/p>

1.10.2.2 MSI配置基礎(chǔ)

軟件配置PCIe設(shè)備的MSI中斷采取的步驟如下:

1. 啟動時魔眨,配置軟件掃描PCI總線并發(fā)現(xiàn)設(shè)備(執(zhí)行配置讀,讀取有效的供應(yīng)商ID)酿雪。在發(fā)現(xiàn)PCIe功能時遏暴,配置軟件讀取功能列表指針(Capabilities List Pointer),獲得寄存器鏈中第一個功能寄存器的地址指黎。

2. 然后軟件搜索功能寄存器組朋凉,知道發(fā)現(xiàn)MSI功能寄存器組(功能ID位05h)。

3. 軟件將一個雙字對齊的存儲器地址分配給設(shè)備的消息地址寄存器醋安。這是發(fā)送中斷請求時使用的存儲器寫的目的地址杂彭。

4. 軟件檢查設(shè)備消息控制寄存器的多消息能力字段,以確定設(shè)備將分配多少事件特定的消息給它吓揪。

5. 然后軟件向設(shè)備分配等于或小于設(shè)備請求設(shè)備數(shù)的消息亲怠。最少分配一條消息給設(shè)備。

6. 軟件將基消息數(shù)據(jù)模式寫入設(shè)備的消息數(shù)據(jù)寄存器柠辞。

7. 最后团秽,軟件設(shè)置設(shè)備的消息控制寄存器中的MSI允許比特,從而允許它使用MSI存儲器寫來生成中斷叭首。


當(dāng)設(shè)備必須生成中斷請求時徙垫,它將消息數(shù)據(jù)寄存器內(nèi)容寫入消息地址寄存器所指定的存儲器格式。下圖顯示了存儲器寫事務(wù)頭和數(shù)據(jù)字段中的內(nèi)容放棒。關(guān)鍵點包括:

格式字段必須是11b姻报,表明是帶數(shù)據(jù)的4DW頭,傳統(tǒng)端點的格式字段可以是10b间螟。

頭屬性比特(不偵測和靈活的順序)必須是零吴旋。

長度字段必須是01h,表明最大1DW的數(shù)據(jù)有效載荷厢破。

第一個BE字段必須是0011b荣瑟,表明有效數(shù)據(jù)在低16位中。

最后一個BE字段必須是0000b摩泪,表明是單個DW的事務(wù)笆焰。

頭中的地址字段直接來自于MSI功能寄存器的地址字段。


如果系統(tǒng)軟件向設(shè)備分配多個消息见坑,就允許它修改所分配的消息數(shù)據(jù)值的低位嚷掠,為每個設(shè)備特定的事件類型發(fā)送不同的消息捏检,通過設(shè)備驅(qū)動程序要求服務(wù)。

例如不皆,4個消息已分配給設(shè)備贯城,數(shù)據(jù)值0500h以復(fù)制給設(shè)備的消息數(shù)據(jù)寄存器,存儲器地址0A000000h已寫入設(shè)備的消息地址寄存器霹娄。當(dāng)4個不同的設(shè)備特定事件之一發(fā)生時能犯,設(shè)備生成一個請求,通過執(zhí)行雙字寫將數(shù)據(jù)值00000500h犬耻、00000501h踩晶、00000502h或00000503h寫入存儲器地址0A000000h。

1.10.3 傳統(tǒng)的PCI中斷發(fā)送機(jī)制

1.10.3.1 設(shè)備的INTx#引腳

每個物理PCI組件可以實現(xiàn)最多4個INTx#信號(INITA#枕磁、INITB#渡蜻、INITC#、INITD#)透典。由于PCI設(shè)備最多能支持8個功能,如果實現(xiàn)最多8個功能并且所有功能都要求中斷顿苇,則必須共享INTx#信號峭咒。不允許一個功能使用多于一個的INTx#信號。

每一PCI功能通過標(biāo)準(zhǔn)配置頭來表明支持INTx#信號纪岁。下圖展示了只讀中斷引腳寄存器凑队,它含有配置軟件用于確定是佛支持INTx#信號,并且如果支持幔翰,這個功能使用哪個INTx#信號所必需的信息漩氨。


1.10.3.2 中斷路由

需要系統(tǒng)設(shè)計者確定來自設(shè)備的INTx#引腳的路由∫旁觯可以用多種方式路由每臺設(shè)備使用的INTx#信號叫惊,以便每個INTx#引腳最終到達(dá)中斷控制器的一個輸入。下例中做修,所有PCI INTx信號被路由到4個輸入之一霍狰。所有路由到給定輸入的INTx信號將定向到中斷控制器的特定輸入,因此每個路由到共同輸入端的INTx也將具有平臺軟件分配給它的同一種中斷線編號饰及。IRQ15有3個來自不同設(shè)備的PCI INTx輸入——INTB#蔗坯、INTA#、INTA#燎含。因此宾濒,使用這些INTx#線的功能將共享IRQ15以及與之相關(guān)的中斷向量。

根據(jù)與每一功能相關(guān)的INTx#引腳的路由情況屏箍,配置軟件報告中斷線號绘梦。當(dāng)來自這一功能的中斷出現(xiàn)時橘忱,這個值最終告訴功能的設(shè)備驅(qū)動程序報告哪個中斷向量。因此谚咬,當(dāng)這個功能產(chǎn)生中斷時鹦付,CPU將收到與中斷線寄存器指定的IRQ有關(guān)的向量號。CPU使用這個向量號索引中斷服務(wù)表择卦,以讀取該功能的相關(guān)設(shè)備驅(qū)動程序的中斷服務(wù)入口指針敲长。傳遞該信息所使用的方法是操作系統(tǒng)特有的。


1.10.3.3 INTx#信令

當(dāng)設(shè)備發(fā)送中斷信號時秉继,它也在設(shè)備專用寄存器中設(shè)置某個比特來表明有一個中斷等待處理祈噪。可將該寄存器映射在存儲器或I/O地址空間中尚辑,由設(shè)備專用軟件讀取辑鲤,以便驗證有一個中斷待完成。當(dāng)此比特被清除時杠茬,取消聲明INTx信號月褥。

設(shè)備也必須設(shè)置位于配置寄存器的中斷狀況比特。系統(tǒng)軟件可以讀取這一比特瓢喉,以便得知目前是否有一個中斷待完成宁赤。

禁用中斷:PCI2.3規(guī)范在配置命令寄存器中增加了禁用中斷比特(比特10),如下圖所示栓票。復(fù)位時决左,該比特被清除,允許產(chǎn)生INTx信號走贪。軟件可以設(shè)置該比特佛猛,從而禁止生成INTx信號。


中斷狀況:PCI2.3規(guī)范在配置狀態(tài)寄存器中增加了中斷狀態(tài)比特坠狡,如下圖所示继找。當(dāng)中斷待處理時,功能必須設(shè)置該狀況比特逃沿。另外码荔,如果配置命令寄存器中的禁用中斷比特被清除(即允許中斷),則僅在中斷狀況比特置1后感挥,才能聲明該功能的INTx#信號缩搅。該比特不受禁用中斷比特狀態(tài)的影響。同時是只讀的触幼。


1.10.3.4 INTx消息的格式



設(shè)備可以同時支持兩種中斷硼瓣,但任何給定的時刻只允許使用一種機(jī)制。設(shè)置MSI允許比特可以禁止設(shè)備使用INTx消息,并允許發(fā)送MSI堂鲤。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末亿傅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子瘟栖,更是在濱河造成了極大的恐慌葵擎,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件半哟,死亡現(xiàn)場離奇詭異酬滤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)寓涨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門盯串,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人戒良,你說我怎么就攤上這事体捏。” “怎么了糯崎?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵几缭,是天一觀的道長。 經(jīng)常有香客問我沃呢,道長年栓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任樟插,我火速辦了婚禮韵洋,結(jié)果婚禮上竿刁,老公的妹妹穿的比我還像新娘黄锤。我一直安慰自己,他們只是感情好食拜,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布鸵熟。 她就那樣靜靜地躺著,像睡著了一般负甸。 火紅的嫁衣襯著肌膚如雪流强。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天呻待,我揣著相機(jī)與錄音打月,去河邊找鬼。 笑死蚕捉,一個胖子當(dāng)著我的面吹牛奏篙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼秘通,長吁一口氣:“原來是場噩夢啊……” “哼为严!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起肺稀,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤第股,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后话原,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體夕吻,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年稿静,在試婚紗的時候發(fā)現(xiàn)自己被綠了梭冠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡改备,死狀恐怖控漠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情悬钳,我是刑警寧澤盐捷,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站默勾,受9級特大地震影響碉渡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜母剥,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一滞诺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧环疼,春花似錦习霹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至伪阶,卻和暖如春煞檩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背栅贴。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工斟湃, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人檐薯。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓凝赛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子哄酝,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355