專(zhuān)利名稱(chēng):在處理器與外部設(shè)備之間傳送指令和數(shù)據(jù)的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明一般地涉及改進(jìn)的數(shù)據(jù)處理系統(tǒng)和方法。更具體地說(shuō),本發(fā)明 涉及用于在處理器與外部設(shè)備之間傳送指令和數(shù)據(jù)的系統(tǒng)和方法。
背景技術(shù):
通常,在現(xiàn)有技術(shù)中,當(dāng)CPU或其他處理單元(PU)在等待程序外部的某一事件時(shí),操作系統(tǒng)或活動(dòng)程序?qū)⑦\(yùn)行輪詢(xún)循環(huán),它在此循環(huán)中將保持讀取PU以及程序使用的事件寄存器,直到它所等待的事件發(fā)生。當(dāng)程序 運(yùn)行時(shí),PU在輪詢(xún)事件寄存器并且未執(zhí)行有用的工作。典型的現(xiàn)代處理器通常使用虛擬存儲(chǔ)器以及外部設(shè)備的存儲(chǔ)器映射來(lái) 進(jìn)行此通信。另一方面, 一些處理器(尤其是在多處理器環(huán)境中)僅具有 訪(fǎng)問(wèn)本地存儲(chǔ)器的權(quán)限,而沒(méi)有訪(fǎng)問(wèn)虛擬存儲(chǔ)器的權(quán)限。本地存儲(chǔ)器是有 限的,并且在典型的多處理器配置中,加載和存儲(chǔ)操作無(wú)法訪(fǎng)問(wèn)此本地存 儲(chǔ)器外部的存儲(chǔ)器。因此,當(dāng)?shù)却齺?lái)自外部設(shè)備的響應(yīng)時(shí),限制了針對(duì)其他PU功能使用本地存儲(chǔ)器。如果一個(gè)PU同時(shí)等待來(lái)自若干設(shè)備的通信響應(yīng),甚至?xí)M(jìn)一步限制用于其他功能的可用存儲(chǔ)器。存儲(chǔ)器還可以用于跟蹤入站或出站寄存器中是否存在有效數(shù)據(jù)。有效 數(shù)據(jù)是已放置在寄存器中以供接收設(shè)備使用但接收設(shè)備尚未訪(fǎng)問(wèn)的數(shù)據(jù)。 因此,從以上可知,在多數(shù)現(xiàn)代計(jì)算設(shè)備中,存儲(chǔ)器資源存在許多損耗。發(fā)明內(nèi)容鑒于以上所述,具有一種用于在處理器與處理器外部的其他設(shè)備(例如,其他處理器、輸入/輸出(I/O)設(shè)備等)之間通信的系統(tǒng)和方法是有利的,其中此類(lèi)通信不會(huì)加重處理器的本地或虛擬存儲(chǔ)器的負(fù)擔(dān)。此外,具有一種允許在等待數(shù)據(jù)或事件時(shí)將處理器置于低功率狀態(tài)的系統(tǒng)和方法是有利的。本發(fā)明提供了 一種用于在處理器和外部設(shè)備之間傳送指令和數(shù)據(jù)的系 統(tǒng)和方法和/或一種用于與處理器事件i殳備通信的系統(tǒng)和方法。本發(fā)明的系 統(tǒng)和方法使用通道接口作為在處理器和存儲(chǔ)器流控制器之間通信的主要機(jī) 制。所述通道接口提供用于例如與處理器設(shè)備、存儲(chǔ)器流控制設(shè)備、機(jī)器 狀態(tài)寄存器以及外部處理器中斷設(shè)備進(jìn)行通信的通道。這些通道用于降低 處理器的本地存儲(chǔ)的負(fù)擔(dān)以及使總線(xiàn)通信量最小化。可以將這些通道指定為阻塞或非阻塞。對(duì)于阻塞通道,當(dāng)沒(méi)有可從相 應(yīng)寄存器讀取的數(shù)據(jù)時(shí),或沒(méi)有可供寫(xiě)入相應(yīng)寄存器的空間時(shí),將處理器 置于低功率"停止"狀態(tài)。當(dāng)數(shù)據(jù)變得可用或空間被^^放時(shí),通過(guò)跨阻塞 通道的通信自動(dòng)喚醒處理器。因此,本發(fā)明的通道允許將處理器保持在低 功率狀態(tài),而不是如現(xiàn)有技術(shù)系統(tǒng)那樣不斷輪詢(xún)或遍歷事件寄存器。本發(fā)明的這些和其他特征和優(yōu)點(diǎn)將在以下對(duì)本發(fā)明的示意性實(shí)施例的 詳細(xì)說(shuō)明中進(jìn)行描述,或者鑒于以下詳細(xì)說(shuō)明,本發(fā)明的這些和其他特征 和優(yōu)點(diǎn)將對(duì)本領(lǐng)域的技術(shù)人員變得顯而易見(jiàn)。
在所附權(quán)利要求中說(shuō)明了被認(rèn)為是本發(fā)明特性的新穎特征。但是,當(dāng) 結(jié)合附圖閱讀時(shí),通過(guò)參考以下對(duì)示例性實(shí)施例的詳細(xì)說(shuō)明,可以最佳地理解發(fā)明本身及其優(yōu)選使用方式、進(jìn)一步的目的和優(yōu)點(diǎn),這些附圖是圖1是才艮據(jù)本發(fā)明的示意性實(shí)施例的寬帶處理器體系結(jié)構(gòu)(BPA)的示 意性方塊圖;圖2是才艮據(jù)本發(fā)明的示意性實(shí)施例的典型MFC 200的示意性方塊圖; 圖3A是示出了根據(jù)本發(fā)明的示意性實(shí)施例的MFC命令的參數(shù)助記符的 示意圖;圖3B是示出了根據(jù)本發(fā)明的示意性實(shí)施例的DMA列表命令的詳細(xì)信息的示意圖;圖4是示出了根據(jù)美國(guó)專(zhuān)利申請(qǐng)公開(kāi)No. 2004/0264445中所述機(jī)制的 關(guān)于單對(duì)通道的通道電路的SPU發(fā)出和控制邏輯以及數(shù)據(jù)流的布置的示意 圖;圖5提供了示出根據(jù)本發(fā)明的示意性實(shí)施例的通道接口的示意性操作 的流禾呈圖;圖6A是示出了本發(fā)明的一個(gè)實(shí)施例使用通道的方式的示意圖; 圖6B和6C示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的列出SPU通道圖 的示意圖;圖7A是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的MFC命令操作碼通道 的詳細(xì)信息的示意圖;圖7B是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的MFC類(lèi)ID通道的詳 細(xì)信息的示意圖;圖7C示出了才艮據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的用于8路、成組相聯(lián) (set associative)高速緩存的典型RMT表項(xiàng);圖7D是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的MFC命令標(biāo)記標(biāo)識(shí)通 道的詳細(xì)信息的示意圖;圖7E是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的MFC傳輸大小或列表 大小通道的詳細(xì)信息的示意圖;圖7F是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的MFC本地存儲(chǔ)地址通 道的詳細(xì)信息的示意圖;圖7G是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的MFC有效低地址或列 表地址通道的詳細(xì)信息的示意圖;圖7H是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的MFC有效高地址通道的詳細(xì)信息的示意圖;圖8是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的用于寫(xiě)入MFC命令參 數(shù)的示意性操作的流程圖;圖9A是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的MFC寫(xiě)入標(biāo)記組查詢(xún)掩碼通道的詳細(xì)信息的示意圖;圖9B是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的MFC讀取標(biāo)記組查詢(xún) 掩碼通道的詳細(xì)信息的示意圖;圖9C是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的MFC寫(xiě)入標(biāo)記狀態(tài)更新請(qǐng)求通道的詳細(xì)信息的示意圖;圖9D是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的MFC讀取標(biāo)記組狀態(tài) 通道的詳細(xì)信息的示意圖;圖9E是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的MFC讀取列表停止和 通知標(biāo)記狀態(tài)通道的詳細(xì)信息的示意圖;圖9F是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的MFC寫(xiě)入列表停止和 通知標(biāo)記確認(rèn)通道的詳細(xì)信息的示意圖;圖9G是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的MFC讀取原子命令狀 態(tài)通道的詳細(xì)信息的示意圖;圖IO是示出了根據(jù)本發(fā)明的示意性實(shí)施例的用于輪詢(xún)一個(gè)MFC命令的 完成或一組MFC命令的完成的示意性操作的流程圖;圖11是示出了根據(jù)本發(fā)明的示意性實(shí)施例的用于等待標(biāo)記組更新或 等待事件(一個(gè)或多個(gè)標(biāo)記組完成)的示意性操作的流程圖;圖12是示出了根據(jù)本發(fā)明的示意性實(shí)施例的用于使用SPU事件設(shè)^ft 為備選方案以等待或輪詢(xún)條件標(biāo)記事件的示意性操作的流程圖;圖13是示出了根據(jù)本發(fā)明的示意性實(shí)施例的用于輪詢(xún)以判定MFC DMA 列表命令是否已到達(dá)設(shè)置了停止和通知標(biāo)志的列表元素的示意性操作的流程圖;圖14是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的用于等待MFC DMA 列表命令到達(dá)設(shè)置了停止和通知標(biāo)志的列表元素的示意性操作的流程圖;圖15是示出了根據(jù)本發(fā)明的示意性實(shí)施例的用于使用SPU事件設(shè)^ft 為備選方案以等待或輪詢(xún)列表停止和通知標(biāo)記組狀態(tài)的示意性操作的流程圖;圖16是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的MFC寫(xiě)入多源同步請(qǐng)求通道的詳細(xì)信息的示意圖;圖17A是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的SPU寫(xiě)入出站郵箱 通道的詳細(xì)信息的示意圖;圖17B是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的SPU寫(xiě)入出站中斷 郵箱通道的詳細(xì)信息的示意圖;圖17C是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的SPU讀取入站郵箱 通道的詳細(xì)信息的示意圖;圖18是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的SPU信號(hào)通知通道的 詳細(xì)信息的示意圖;圖19A是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的SPU寫(xiě)入遞減器通 道的詳細(xì)信息的示意圖;圖19B是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的SPU讀取遞減器通 道的詳細(xì)信息的示意圖;圖20A是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的SPU讀^L器狀態(tài) 通道的詳細(xì)信息的示意圖;圖20B是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的SPU寫(xiě)入狀態(tài)保存和恢復(fù)通道的詳細(xì)信息的示意圖;圖20C是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的SPU讀取狀態(tài)保存和恢復(fù)通道的詳細(xì)信息的示意圖;圖21是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的SPU事件設(shè)備的邏輯 表示的示意性方塊圖;圖22A是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的SPU讀取事件狀態(tài) 通道的詳細(xì)信息的示意圖;圖22B是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的SPU寫(xiě)入事件掩碼 通道的詳細(xì)信息的示意圖;圖22C是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的SPU讀取事件掩碼 通道的詳細(xì)信息的示意圖;圖22D是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的SPU寫(xiě)入事件確認(rèn)通道的詳細(xì)信息的示意圖;圖2 3是示出了根據(jù)本發(fā)明的 一個(gè)實(shí)施例的用于處理MFC DMA列表命令 停止和通知事件的示意性操作的流程圖;圖24是示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的用于處理MFC SPU命令隊(duì)列可用事件的示意性操作的流程圖;圖25是示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的用于處理SPU入站郵箱可用事件的示意性操作的流程圖;圖2 6是示出了才艮據(jù)本發(fā)明的 一個(gè)實(shí)施例的用于處理SPU遞減器事件的示意性操作的流程圖;圖27是示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的用于處理SPU出站中斷郵箱可用事件的示意性操作的流程圖;圖28是示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的用于處理SPU出站郵箱可用 事件的示意性操作的流程圖;圖29是示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的用于處理SPU信號(hào)通知2 可用事件的示意性操作的流程圖;圖30是示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的用于處理SPU信號(hào)通知1 可用事件的示意性操作的流程圖;圖31是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的用于處理鎖定線(xiàn)保 留丟失事件的示意性操作的流程圖;圖32是示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的用于處理特權(quán)關(guān)注 事件的示意性操作的流程圖;圖33是示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的用于處理多源同步事件的 示意性操作的流禾呈圖。
具體實(shí)施方式
圖1是其中可以實(shí)現(xiàn)本發(fā)明的各方面的數(shù)據(jù)處理系統(tǒng)的示意性方塊 圖。圖1所示的示意性數(shù)據(jù)處理系統(tǒng)是異構(gòu)寬帶處理器體系結(jié)構(gòu)(例如, 可從國(guó)際商業(yè)機(jī)器公司獲得的CELL寬帶引擎處理器)的實(shí)施方式的實(shí)例。雖然寬帶處理器體系結(jié)構(gòu)(BPA)將用于本發(fā)明的優(yōu)選實(shí)施例的描述,但是 如本領(lǐng)域的技術(shù)人員在閱讀以下說(shuō)明時(shí)將容易地理解的,本發(fā)明并不限于此。如圖l所示,BPA 100包括power處理器元件(PPE) 110的異構(gòu)布置, 所述power處理器元件具有處理器(PPU) 116及其Ll和L2高速緩存112 和114,以及多個(gè)協(xié)處理器元件(SPE) 120-134,每個(gè)協(xié)處理器元件都具 有其自己的處理器單元(SPU) 140-154、存儲(chǔ)器流控制(MFC) 155-162、 本地存儲(chǔ)器或存儲(chǔ)(LS) 163-170,以及總線(xiàn)接口單元(BIU單元)180-194 (其可以例如是組合直接存儲(chǔ)器訪(fǎng)問(wèn)(DMA)、存儲(chǔ)器管理單元(MMU)和 總線(xiàn)接口單元)。還提供了高寬帶內(nèi)部元件互連總線(xiàn)(EIB) 196、總線(xiàn)接 口控制器(BIC) 197和存儲(chǔ)器接口控制器(MIC) 198。寬帶引擎100可以 是片上系統(tǒng),以便可以在單個(gè)微處理器芯片上提供圖1中示出的每個(gè)元件。BPA 100可以是片上系統(tǒng),以便可以在單個(gè)微處理器芯片上提供圖1 中示出的每個(gè)元件。此外,BPA 100是每個(gè)SPU可在其中接收來(lái)自系統(tǒng)中 的每個(gè)其他SPU的不同指令的異構(gòu)處理環(huán)境。此外,用于SPU的指令集不 同于PPU的指令集,例如,PPU可以執(zhí)行基于精簡(jiǎn)指令集計(jì)算機(jī)(RISC) 的指令,而SPU執(zhí)行矢量化指令。SPE 120-134通過(guò)EIB 196相互連接并連接到L2高速緩存114。此外, SPE 120-134通過(guò)EIB 196連接到MIC 198和BIC 197。 MIC 198提供到共 享存儲(chǔ)器199的通信接口。 BIC 197在BPA 100與其他外部總線(xiàn)和i殳備之 間提供通信接口。PPE 110是雙線(xiàn)程PPE 110。此雙線(xiàn)程PPE 110和八個(gè)SPE 120-134 的組合使得BPA 100能夠處理10個(gè)同時(shí)發(fā)生的線(xiàn)程以;S^過(guò)128個(gè)未完成 的存儲(chǔ)器請(qǐng)求。PPE 110用作其他八個(gè)處理大多數(shù)計(jì)算工作負(fù)荷的SPE 120-134的控制器。例如,PPE 110可以用于運(yùn)行常規(guī)的操作系統(tǒng),而SPE 120-134執(zhí)行矢量化浮點(diǎn)代碼執(zhí)行。SPE 120-134包括協(xié)處理單元(SPU) 140-154、存儲(chǔ)器流控制單元 155-162、本地存儲(chǔ)器或存儲(chǔ)163-174以及接口單元180-194。在一個(gè)示意性實(shí)施例中,本地存儲(chǔ)器或存儲(chǔ)163-174包括一個(gè)對(duì)PPE 110可見(jiàn)并可由 軟件直接尋址的256 KB指令和數(shù)據(jù)存儲(chǔ)器。PPE IIO可以使用小程序或線(xiàn)程加載SPE 120-134,從而將SPE鏈接在 一起以處理復(fù)雜操作中的每個(gè)步驟。例如,集成了 BPA IOO的機(jī)頂盒可以 加載程序以便讀取DVD、進(jìn)行視頻和音頻解碼以及顯示,并且數(shù)據(jù)將從SPE 傳遞到SPE,直到它最終在輸出顯示器上顯示。存儲(chǔ)器流控制單元(MFC) 155-162用作SPU到系統(tǒng)的其余部分以及其 他元件的接口。 MFC 155-162提供了主存儲(chǔ)和本地存儲(chǔ)163-174之間的數(shù) 據(jù)傳輸、保護(hù)和同步的主要機(jī)制。對(duì)于處理器中的每個(gè)SPU,邏輯上都存 在一個(gè)MFC。某些實(shí)施方式可以在多個(gè)SPU之間共享單個(gè)MFC的資源。在 這種情況下,為此MFC定義的所有設(shè)備和命令都必須顯示為與每個(gè)SPU的 軟件的無(wú)關(guān)。共享MFC的效果限于與實(shí)施方式相關(guān)的^殳備和命令。存儲(chǔ)器流控制(MFC)單元圖2是根據(jù)本發(fā)明的示意性實(shí)施例的典型存儲(chǔ)器流控制(MFC)單元 200的示意性方塊圖。在此示意性實(shí)施例中,MFC 200具有兩個(gè)到SPU的接 口 210和212、兩個(gè)到總線(xiàn)接口單元(BIU) 220的接口 214和216,以及 兩個(gè)到可選SL1高速緩存230的接口 222和224。 SPU接口 210和212是 SPU通道接口 210和SPU本地存儲(chǔ)接口 212。 SPU通道接口 210允許SPU訪(fǎng) 問(wèn)MFC設(shè)備以^iL出MFC命令。SPU本地存儲(chǔ)接口 212由MFC 200使用以 訪(fǎng)問(wèn)SPU中的本地存儲(chǔ)。 一個(gè)到BIU 220的接口 214允許存儲(chǔ)器映射的I/O (腿IO)訪(fǎng)問(wèn)MFC設(shè)備。此接口 214還允許其他處理器發(fā)出MFC命令。使 用畫(huà)IO發(fā)出的命令被稱(chēng)為MFC代理命令。到SL1高速緩存的接口 222和224主要用于數(shù)據(jù)傳輸。 一個(gè)接口 222 由MFC 200使用以訪(fǎng)問(wèn)主存儲(chǔ)中的地址轉(zhuǎn)換表,另一個(gè)接口 224用于在主 存儲(chǔ)和本地存儲(chǔ)之間傳輸數(shù)據(jù)。如圖2所示,典型MFC中的主單元包括存儲(chǔ)器映射的輸入/輸出(醒10) 接口 240、 MFC寄存器250和DMA控制器260。醒IO接口 240將SPU的MFC設(shè)備映射到系統(tǒng)的實(shí)地址空間。這允許從系統(tǒng)中的任何處理器或任何設(shè)備訪(fǎng)問(wèn)MFC設(shè)備。此外,腿I0接口 240可以配置為將SPU的本地存儲(chǔ)映射到 實(shí)地址空間。這允許從系統(tǒng)中的任何處理器或任何設(shè)備直接訪(fǎng)問(wèn)本地存儲(chǔ), 從而能夠進(jìn)行本地存儲(chǔ)到本地存儲(chǔ)傳輸,并使1/0設(shè)備能夠直接訪(fǎng)問(wèn)SPU 的本地存儲(chǔ)域。MFC寄存器單元250包含多數(shù)MFC設(shè)備。某些設(shè)備包含在直接存儲(chǔ)器 訪(fǎng)問(wèn)控制器(DMAC) 260中。以下是MFC 200內(nèi)的設(shè)備的列表。用戶(hù)模式 環(huán)境設(shè)備(即,可從非特權(quán)應(yīng)用訪(fǎng)問(wèn)的環(huán)境設(shè)備)包括(1)郵箱設(shè)備、(2 ) SPU信號(hào)通知設(shè)備、(3 )代理標(biāo)記組完成設(shè)備、(4 ) MFC多源同步 設(shè)備、(5 ) SPU控制和狀態(tài)設(shè)備,以及(6 ) SPU隔離設(shè)備。特權(quán)模式環(huán)境 設(shè)備,即僅可由特權(quán)軟件(例如操作系統(tǒng))訪(fǎng)問(wèn)的設(shè)備,包括(l)MFC 狀態(tài)寄存器l、 (2) MFC邏輯分區(qū)ID寄存器、(3) MFC存儲(chǔ)描述寄存器、(4) MFC數(shù)據(jù)地址寄存器、(5) MFC數(shù)據(jù)存儲(chǔ)中斷狀態(tài)寄存器、(6 ) MFC 地址比較控制寄存器、(7 ) MFC本地存儲(chǔ)地址比較設(shè)備、(8)MFC命令錯(cuò) 誤寄存器、(9 ) MFC數(shù)據(jù)存儲(chǔ)中斷指針寄存器、(10 ) MFC控制寄存器、(11) MFC原子刷新(flush)寄存器、U2) SPU出站中斷郵箱寄存器、(13 ) SPU特權(quán)設(shè)備、(14 ) SPU特權(quán)控制寄存器、(15 ) SPU本地存儲(chǔ)限 制寄存器、(16 ) SPU配置寄存器,以及(l7 ) SPE上下文保存和恢復(fù)。下面將更詳細(xì)地描述對(duì)本發(fā)明的機(jī)制尤為重要的設(shè)備,即郵箱設(shè)備、 SPU信號(hào)通知設(shè)備、代理標(biāo)記組完成設(shè)備、MFC多源同步設(shè)備、SPU通道訪(fǎng) 問(wèn)設(shè)備、SPU事件設(shè)備以及中斷設(shè)備。通常,MFC 200內(nèi)的DMAC 260負(fù)責(zé)數(shù)據(jù)的同步和傳輸。DMAC 260可以 在SPU的本地存儲(chǔ)和主存儲(chǔ)區(qū)域之間移動(dòng)數(shù)據(jù)。可選地,數(shù)據(jù)可以緩存在 SL1高速緩存中。SPE和PPE通過(guò)借助命令隊(duì)列270和280之一將DMA命令請(qǐng)求排隊(duì)到 MFC來(lái)指示MFC 200執(zhí)行這些DMA操作。由SPE發(fā)出的命令被排隊(duì)到MFC SPU 命令隊(duì)列280。由PPE發(fā)出的命令被排隊(duì)到MFC代理命令隊(duì)列270。 MFC使 用存儲(chǔ)器l訪(fǎng)問(wèn)4呆護(hù)檢查。MFC命令提供了使得在SPU中執(zhí)行的代碼能夠訪(fǎng)問(wèn)主存儲(chǔ)以及維護(hù)與 系統(tǒng)中的其他處理器和設(shè)備的同步的主要方法。還提供了命令以管理可選 的高速緩存。MFC命令可以由在SPU上運(yùn)行的代碼發(fā)出,或者由在其他處 理器或設(shè)備(例如PPE)上運(yùn)行的代碼發(fā)出。在關(guān)聯(lián)的SPU上運(yùn)行的代碼 執(zhí)行一系列通道指令以發(fā)出MFC命令。在其他處理器或設(shè)備上運(yùn)行的代碼 執(zhí)行一系列存儲(chǔ)器映射的I/O (謹(jǐn)IO)傳輸以向SPE發(fā)出MFC命令。所發(fā) 出的命令被排隊(duì)到命令隊(duì)列270和280之一。通常,可以使用醒IO寄存器或通過(guò)由關(guān)聯(lián)SPU執(zhí)行的通道指令對(duì)命令 進(jìn)行排隊(duì)。醒IO方法旨在由PPE使用以便代表SPE控制主存儲(chǔ)與關(guān)聯(lián)的本 地存儲(chǔ)之間的數(shù)據(jù)傳輸。傳輸數(shù)據(jù)的MFC命令被稱(chēng)為MFC DMA命令。MFC DMA 命令的數(shù)據(jù)傳輸方向始終以SPE為參照。因此,將數(shù)據(jù)傳入SPE (從主存 儲(chǔ)到本地存儲(chǔ))的命令被視為get命令,而將數(shù)據(jù)傳出SPE (從本地存儲(chǔ) 到主存儲(chǔ))的命令被視為put命令。MFC命令使用多個(gè)影響命令操作的參數(shù)。圖3A是示出了根據(jù)本發(fā)明的 示意性實(shí)施例的用于MFC命令的參數(shù)助記符的示意圖。所有命令并不使用 所有參數(shù)。例如,EAH參數(shù)是可選的。當(dāng)未在命令中指定可選參數(shù)時(shí),硬 件將可選參數(shù)設(shè)置為"0"。MFC命令可以分為三類(lèi)定義的命令、非法命令和保留的命令。通過(guò) 檢查操作碼以及擴(kuò)展操作碼(如果存在)來(lái)確定命令的分類(lèi)。如果命令操 作碼或操作碼和擴(kuò)展操作碼的組合不是定義的或保留的命令的操作碼或操 作碼和擴(kuò)展操作碼的組合,則命令是非法的。定義的命令屬于三種類(lèi)別之一數(shù)據(jù)傳輸命令、SL1高速緩存管理命 令和同步命令。數(shù)據(jù)傳輸命令進(jìn)一步分為定義數(shù)據(jù)移動(dòng)方向(即到達(dá)或來(lái)自本地存儲(chǔ))的子類(lèi)別。Put命令是將數(shù)據(jù)從本地存儲(chǔ)移動(dòng)到主存儲(chǔ)的數(shù) 據(jù)傳輸命令。Get命令是將數(shù)據(jù)從主存儲(chǔ)移動(dòng)到本地存儲(chǔ)的數(shù)據(jù)傳輸命令。 應(yīng)用可以將數(shù)據(jù)傳輸命令放置在MFC代理命令隊(duì)列27 0中。除非另行說(shuō)明, 否則這些命令可以按任何順序(異步)執(zhí)行。"非法"類(lèi)命令指不在定義的類(lèi)或保留的類(lèi)中的命令。"保留"類(lèi)命 令旨在用于與實(shí)施方式相關(guān)的用途。SL1存儲(chǔ)控制命令是用于控制有關(guān)SL1高速緩存的操作的命令。這些 存儲(chǔ)控制命令例如包括用于通知SLl高速緩存可能要發(fā)出特定類(lèi)型的數(shù)據(jù) 傳輸命令(例如get或put命令)的"提示,,命令、地址范圍操作命令和 刷新命令。MFC同步命令用于控制相對(duì)于其他MFC、處理器和其他設(shè)備來(lái)執(zhí)行存儲(chǔ) 訪(fǎng)問(wèn)的順序。MFC同步命令包括用于強(qiáng)制按順序執(zhí)行的命令、用于相對(duì)于 DMA命令隊(duì)列中位于屏障命令之前的所有命令來(lái)排序所有后續(xù)命令的屏障 命令,以及用于在目標(biāo)信號(hào)通知寄存器中邏輯地設(shè)置信號(hào)位的發(fā)送信號(hào)命 令等。MFC命令可以是單個(gè)DMA命令或者可以是DMA列表命令。圖3B中示出 了根據(jù)本發(fā)明的示意性實(shí)施例的DMA列表命令的詳細(xì)信息。DMA列表命令 使用存儲(chǔ)在本地存儲(chǔ)中的有效地址和傳輸大小對(duì)的列表或列表元素作為 DMA傳輸?shù)膮?shù)。這些參數(shù)用于MFC代理命令隊(duì)列不支持的SPU啟動(dòng)的DMA 列表命令。每個(gè)列表元素的第 一個(gè)字包含傳輸大小以及停止和通知標(biāo)志。 第二個(gè)字包含有效地址的低32位。雖然為列表中的每個(gè)傳輸元素指定了開(kāi) 始有效地址,但是主要列表命令中僅指定了傳輸中涉及的本地存儲(chǔ)地址(術(shù) 語(yǔ)"主要"指由圖3A中所示的參數(shù)指定的列表命令)。本地存儲(chǔ)地址根據(jù)列表中的每個(gè)元素傳輸?shù)臄?shù)據(jù)量在內(nèi)部遞增。但是, 由于對(duì)齊限制,如果本地存儲(chǔ)地址沒(méi)有在列表元素傳輸?shù)?6字節(jié)邊界上開(kāi) 始,則硬件自動(dòng)將本地存儲(chǔ)地址遞增到下一個(gè)16字節(jié)邊界。僅當(dāng)使用小于 16字節(jié)的傳輸大小時(shí)才會(huì)發(fā)生此情況。傳輸大小小于16字節(jié)的列表元素 在由有效地址的4個(gè)最低位定義的當(dāng)前四倍長(zhǎng)字(16字節(jié))內(nèi)使用本地存 儲(chǔ)偏移。在列表元素中指定的有效地址是相對(duì)于由基本DMA列表命令中指定的 有效地址的高32位定義的4GB區(qū)域的。雖然DMA列表開(kāi)始地址是相對(duì)于單 個(gè)4GB區(qū)域的,但是列表元素內(nèi)的傳輸可以跨4GB邊界。設(shè)置"S,,(停止和通知)位會(huì)使DMA操作在當(dāng)前列表元素已被處理之 后掛起此列表的執(zhí)行,并針對(duì)SPU設(shè)置停止和通知事件狀態(tài)。在MFC從SPU 程序接收到停止和通知確認(rèn)之前,已停止的列表不會(huì)重新開(kāi)始執(zhí)行。使用 關(guān)聯(lián)的命令標(biāo)記組標(biāo)識(shí)符將停止和通知事件發(fā)布到SPU程序。當(dāng)同一標(biāo)記 組中存在多個(gè)具有停止和通知元素的DMA列表命令時(shí),軟件將確保使用標(biāo) 記特定的屏障或全局屏障來(lái)強(qiáng)制有序執(zhí)行DMA列表命令以免產(chǎn)生不定性。將保證DMA列表命令內(nèi)的所有DMA列表元素都按順序啟動(dòng)和發(fā)出。DMA 列表命令內(nèi)的所有元素都具有固有的本地排序。單個(gè)DMA列表命令可以包 含最多2048個(gè)元素,占用16 KB的本地存儲(chǔ)。通道接口在BPA中,通道用作協(xié)處理單元(SPU)和存儲(chǔ)器流控制(MFC)單元 之間的主要接口。 SPU通道訪(fǎng)問(wèn)設(shè)備用于配置、保存和恢復(fù)SPU通道。SPU 指令集體系結(jié)構(gòu)(ISA )提供一組通道指令以便通過(guò)通道接口 (或SPU通道) 與外部設(shè)備通信。表1列出了這些指令通道指令指令助記符操作描述讀取通道rdch導(dǎo)致存儲(chǔ)在已尋址通道 中的數(shù)據(jù)的讀取被加載 到選定的通用寄存器 (GPR)中寫(xiě)入通道wrch導(dǎo)致從選定的GPR讀取 數(shù)據(jù)并將其存儲(chǔ)在已尋 址通道中讀取通道計(jì)數(shù)rchciit導(dǎo)致與已尋址通道關(guān)聯(lián) 的計(jì)數(shù)被存儲(chǔ)在選定的 GPR中表1 -通道指令在體系結(jié)構(gòu)上,SPU通道可以配置為具有只讀或只寫(xiě)的訪(fǎng)問(wèn)類(lèi)型。通道不能配置為讀取和寫(xiě)入。除了訪(fǎng)問(wèn)類(lèi)型之外,每個(gè)通道可以配置為非阻塞或阻塞。配置為阻塞的通道使SPU在讀取通道計(jì)數(shù)為"0"的通道或?qū)懭霛M(mǎn)通道(即,通道計(jì)數(shù)為"0"的通道)時(shí)停止。"讀取"通*示只有讀取通道指令(rdch)可以被發(fā)出到此通道并始終返回?cái)?shù)據(jù)。"寫(xiě)入"通道 表示只有寫(xiě)入通道指令(wrch)可以被發(fā)出到此通道且通道始終接受數(shù)據(jù)。"讀取阻塞"通道表示只有讀取通道指令(rdch)可以械發(fā)出到此通 道。僅當(dāng)通道計(jì)數(shù)不為零時(shí),發(fā)送到讀取阻塞通道的讀取通道指令(rdch ) 才會(huì)完成。通道計(jì)數(shù)為"0"表示通道為空。對(duì)計(jì)數(shù)為"0"的讀取阻塞通 道執(zhí)行通道讀取(rdch)會(huì)導(dǎo)致SPU停止,直到通道中的數(shù)據(jù)可用。"寫(xiě)入阻塞"通道表示只有寫(xiě)入通道指令(wrch)可以4皮發(fā)出到此通 道。僅當(dāng)通道計(jì)數(shù)不為零時(shí),發(fā)送到寫(xiě)入阻塞通道的寫(xiě)入通道指令(wrch) 才會(huì)完成。通道計(jì)數(shù)為"0"表示通道是滿(mǎn)的。對(duì)計(jì)數(shù)為"0"的寫(xiě)入阻塞 通道執(zhí)行寫(xiě)入通道指令(wrch)會(huì)導(dǎo)致SPU停止,直到已尋址的通道中的 表項(xiàng)變得可用。應(yīng)當(dāng)指出,發(fā)出不適用于通道配置的通道指令會(huì)導(dǎo)致無(wú)效的通道指令 中斷。例如,向配置為寫(xiě)入或?qū)懭胱枞ǖ赖耐ǖ腊l(fā)出讀取通道指令(rdch) 會(huì)導(dǎo)致無(wú)效的通道指令中斷。每個(gè)通道都具有相應(yīng)的計(jì)數(shù)(即,深度),所述計(jì)數(shù)表示可以針對(duì)此 通道發(fā)出的未完成操作的數(shù)量。通道深度(即,未完成傳輸?shù)淖畲髷?shù)量) 與實(shí)施方式相關(guān)。當(dāng)在SPU中建立新的上下文時(shí),或者繼續(xù)現(xiàn)有上下文時(shí), 軟件必須初始化通道計(jì)數(shù)。在標(biāo)題為"External Message Passing Method and Apparatus"(申 請(qǐng)?jiān)粸?003年6月26日,在此引入作為參考)的共同未決和共同受讓的 美國(guó)專(zhuān)利申請(qǐng)公開(kāi)No. 2004/0264445中說(shuō)明了通道和通道接口的操作。圖 4是示出了才艮據(jù)美國(guó)專(zhuān)利申請(qǐng)^^開(kāi)No. 2004/0264445中所述機(jī)制的關(guān)于單 對(duì)通道的通道電路的SPU發(fā)出和控制邏輯以及數(shù)據(jù)流的布置的示意圖?,F(xiàn) 在將參考圖4中示出的各個(gè)方塊來(lái)描述通道接口的操作。如圖4所示,方塊430表示SPU的外部設(shè)備指令發(fā)出和控制邏輯。方塊432表示到達(dá)和來(lái)自SPU的數(shù)據(jù)流。如所公知的,處理器可以同時(shí)與許 多不同的外部設(shè)備通信。在現(xiàn)在的處理器中,通過(guò)通道寄存器完成通信。 每個(gè)通道僅在一個(gè)方向上工作,并且根據(jù)SPU可以對(duì)通道執(zhí)行的操作而稱(chēng) 為讀取通道或?qū)懭胪ǖ?。方塊434表示由方塊435表示的單個(gè)外部設(shè)備的 一組通道的通道邏輯。如將在以下更詳細(xì)討論的,此外部設(shè)備435可以是 MFC (例如MFC 200 )、機(jī)器狀態(tài)寄存器或任何其他類(lèi)型的外部設(shè)備。具體 地說(shuō),在通道接口的此一般描述之后,將在其后描述使用通道接口與MFC、 機(jī)器狀態(tài)寄存器、事件設(shè)備、郵箱設(shè)備以及信號(hào)通知設(shè)備進(jìn)行通信。在方塊434內(nèi),示出了讀取通道計(jì)數(shù)器436、讀取寄存器438、寫(xiě)入通 道計(jì)數(shù)器440、寫(xiě)入寄存器442、 MUX (多路復(fù)用器)444和MUX 446。通道 指令在總線(xiàn)448上從SPU發(fā)出和控制邏輯430傳遞到讀取計(jì)數(shù)器和寫(xiě)入計(jì) 數(shù)器436和440以及傳遞到MUX 444和446的門(mén)輸入。這些指令還在通道 輸出線(xiàn)450上提供給相應(yīng)的外部設(shè)備(例如435 )。數(shù)據(jù)輸入線(xiàn)452將數(shù) 據(jù)從外部設(shè)備435提供給讀取寄存器438。通道計(jì)數(shù)輸入信號(hào)在通道輸入 線(xiàn)454上從外部設(shè)備435提供給計(jì)數(shù)器436,表示數(shù)據(jù)已輸入到寄存器并 運(yùn)行以便以單位值或單個(gè)位來(lái)改變計(jì)數(shù)器436中的計(jì)數(shù)。在數(shù)據(jù)輸出線(xiàn)456上提供要從寫(xiě)入寄存器442輸出到外部設(shè)備435的 數(shù)據(jù)。當(dāng)外部設(shè)備435已完成滿(mǎn)意的數(shù)據(jù)接收并運(yùn)行以便以單位值或單個(gè) 位來(lái)改變計(jì)數(shù)器440中的計(jì)數(shù)時(shí),通道確認(rèn)信號(hào)在通道確認(rèn)線(xiàn)458上從外 部設(shè)備435返回寫(xiě)入通道計(jì)數(shù)器440。在本發(fā)明的優(yōu)選實(shí)施例中,總線(xiàn)448 上的信號(hào)將遞減相應(yīng)讀取計(jì)數(shù)器或?qū)懭胗?jì)數(shù)器的計(jì)數(shù),而線(xiàn)454或458上 的信號(hào)將遞增相應(yīng)讀取計(jì)數(shù)器或?qū)懭胗?jì)數(shù)器的計(jì)數(shù)。如所示出的,計(jì)數(shù)器436和440的計(jì)數(shù)在通道停止線(xiàn)460上通過(guò)MUX 4 4 4提供給SPU發(fā)出和控制邏輯4 3 0 。通道寫(xiě)入數(shù)據(jù)在通道寫(xiě)入數(shù)據(jù)線(xiàn)4 6 2 上從SPU數(shù)據(jù)流方塊432提供給寫(xiě)入寄存器442。來(lái)自方塊436、 438和440 的輸出在總線(xiàn)464上返回?cái)?shù)據(jù)流方塊432。非通道指令通過(guò)總線(xiàn)466在方 塊430和432之間傳送。圖5提供了示出根據(jù)本發(fā)明的示意性實(shí)施例的通道接口的示意性操作的流程圖。將理解的是,圖5中的流程圖以及此后描述的后續(xù)圖中的流程 圖的每個(gè)方塊以及方塊組合可以通過(guò)計(jì)算機(jī)程序指令實(shí)現(xiàn)??梢韵蛱幚砥?或其他可編程數(shù)據(jù)處理裝置提供這些計(jì)算機(jī)程序指令以產(chǎn)生機(jī)器,以使在 所述處理器或其他可編程數(shù)據(jù)處理裝置上執(zhí)行的指令創(chuàng)建用于實(shí)現(xiàn)一個(gè)或 多個(gè)流程圖方塊中指定的功能的裝置。這些計(jì)算機(jī)程序指令還可以存儲(chǔ)在 引導(dǎo)處理器或其他可編程數(shù)據(jù)處理裝置以特定方式運(yùn)行的計(jì)算機(jī)可讀存儲(chǔ) 器或存儲(chǔ)介質(zhì)中,以使存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)器或存儲(chǔ)介質(zhì)中的指令生成 包括實(shí)現(xiàn)一個(gè)或多個(gè)流程圖方塊中指定的功能的指令裝置的制品。相應(yīng)地,流程圖的方塊支持用于執(zhí)行指定功能的裝置組合、用于執(zhí)行 指定功能的步驟組合,以及用于執(zhí)行指定功能的程序指令裝置。還將理解 的是,流程圖的每個(gè)方塊以及流程圖中的方塊組合可以通過(guò)執(zhí)行指定功能 或步驟的基于專(zhuān)用硬件的計(jì)算機(jī)系統(tǒng)來(lái)實(shí)現(xiàn),或者通過(guò)專(zhuān)用硬件和計(jì)算機(jī) 指令的組合來(lái)實(shí)現(xiàn)。如圖5所示,通道讀取或?qū)懭胫噶畹陌l(fā)出將導(dǎo)致判定指定的通道是否 為已經(jīng)實(shí)現(xiàn)如上所述的控制機(jī)制的通道(步驟576 )。如果否,則判定是 否啟用了通道錯(cuò)誤邏輯(步驟578 )。如果啟用,則處理器將停止(步驟 580 )。如果未啟用,則判定命令是讀取命令還是寫(xiě)入命令(步驟582 )。如果未實(shí)現(xiàn)的命令是寫(xiě)入命令,則不會(huì)針對(duì)此命令進(jìn)一步執(zhí)行任何操 作(步驟584 )。另一方面,如果未實(shí)現(xiàn)的命令是讀取命令,則向數(shù)據(jù)處 理器數(shù)據(jù)流返回零(步驟586 )。在這兩種情況下,過(guò)程都將返回到等待 下一個(gè)讀取或?qū)懭胫噶畹臓顟B(tài)。在示出的優(yōu)選實(shí)施例中,所有有效的讀取 指令都必須返回值。如在此定義的,到未實(shí)現(xiàn)的通道的通道讀取指令將返 回均為零的值。要指出的是,對(duì)于特定實(shí)施方式,并非必須定義所有通道。每個(gè)通道 將具有唯一的數(shù)字標(biāo)識(shí)符。在優(yōu)選實(shí)施例中,此通道標(biāo)識(shí)符的范圍為O到 127。但是,因?yàn)椴恍枰x所有通道,所以可能不會(huì)使用所有標(biāo)識(shí)符。因 此,如果有一個(gè)到未定義通道的指令,則過(guò)程將沿上面引用的未實(shí)現(xiàn)路徑 繼續(xù)。在某些實(shí)施方式中,可能需要將到未實(shí)現(xiàn)通道的通道讀取或?qū)懭朊钜暈榉欠ú僮鳌_M(jìn)一步的操作可能是強(qiáng)制處理器停止,如上述步驟580 中所示。返回圖5,如果在步驟576中判定已經(jīng)實(shí)現(xiàn)指定的通道,則進(jìn)行檢查 以查看指定的通道是否為阻塞通道(步驟588 )。如果否,則遞減此通道 的計(jì)數(shù),但不允許小于零(步驟590 )。如果判定通道為阻塞通道,則進(jìn) 行檢查以確定此通道的計(jì)數(shù)是否大于零(步驟592 )。如果是,則過(guò)程返 回步驟590。如果計(jì)數(shù)已經(jīng)為零,如在步驟592中判定的那樣,則SPU停止,直到 外部設(shè)備提供與此通道相關(guān)的輸入并且因此從零更改計(jì)數(shù)(步驟594和 595 )。因此,將定期處理步驟594和595的循環(huán),直到此通道的計(jì)氣l生 更改。 一旦計(jì)數(shù)更改,過(guò)程將從步驟595繼續(xù)到步驟590。此后,將判定通道是主動(dòng)的還是被動(dòng)的(步驟596 )。如果通道是被 動(dòng)的,則進(jìn)行檢查以查看命令是寫(xiě)入指令還是讀取指令(步驟598 )。如 果命令是寫(xiě)入指令,則將數(shù)據(jù)存儲(chǔ)在本地以供外部讀取(步驟600 )。如 果命令是讀取指令,則通過(guò)圖4的SPU數(shù)據(jù)流432將數(shù)據(jù)返回SPU (步驟 602 )。應(yīng)當(dāng)指出的是,在,皮動(dòng)通道的情況下,SPU依賴(lài)于外部過(guò)程來(lái)完成操 作。作為一個(gè)實(shí)例,讀取通道可以依賴(lài)于外部設(shè)備來(lái)加載數(shù)據(jù)。另一方面, 在主動(dòng)通道中,SPU主動(dòng)地完成執(zhí)行讀取或?qū)懭氩僮鞯牟僮鳌_B接的硬件 針對(duì)主動(dòng)讀取通道中的數(shù)據(jù)發(fā)出外部請(qǐng)求是此類(lèi)型操作的一個(gè)實(shí)例。當(dāng)在步驟596中判定通道是主動(dòng)通道時(shí),將進(jìn)行檢查以查看命令是讀 取命令還是寫(xiě)入命令(步驟604 )。如果命令是寫(xiě)入命令,則將寫(xiě)入數(shù)據(jù) 向外輸出到SPU或內(nèi)部寄存器(步驟606 )。如果命令是讀取命令,則將 讀取請(qǐng)求發(fā)送到相應(yīng)的外部設(shè)備(步驟608 )。將等待請(qǐng)求數(shù)據(jù)的輸入(步驟610)。將定期地判定是否已接收到讀 取數(shù)據(jù)(步驟612 )。如果否,則過(guò)程返回步驟610,直到進(jìn)行下次檢查時(shí)。 當(dāng)接收到數(shù)據(jù)時(shí),過(guò)程完成(步驟602 )。根據(jù)上述內(nèi)容,使用特定的通道讀取或?qū)懭胫噶?其中在指令中指定了通道號(hào))訪(fǎng)問(wèn)每個(gè)通道將是顯而易見(jiàn)的。每個(gè)通道都具有為其指定的計(jì) 數(shù)。此計(jì)數(shù)4吏用讀取通道計(jì)數(shù)指令(其中在指令中指定了感興趣的通道) 來(lái)讀取。通道命令不是推測(cè)性的,并且不能在外部接口處被亂序處理。通道體系結(jié)構(gòu)不要求SPU外部的設(shè)備按順序處理通道命令,但是可能會(huì)根據(jù)處理器和外部設(shè)備實(shí)施方式而執(zhí)行此操作。此計(jì)數(shù)寄存器中的值將跟蹤對(duì) 此寄存器的訪(fǎng)問(wèn)次數(shù)與已針對(duì)此寄存器發(fā)生的外部確認(rèn)次數(shù)。在操作中,經(jīng)由通過(guò)外部接口(多個(gè))的訪(fǎng)問(wèn)更改通道計(jì)數(shù)的方式是 基于實(shí)施方式的。在優(yōu)選實(shí)施例中,對(duì)于每個(gè)到達(dá)或來(lái)自寄存器的成功數(shù)據(jù)傳輸,計(jì)數(shù)以1為單位遞增。對(duì)于每個(gè)通道,SPU訪(fǎng)問(wèn)可以被定義為讀 取或?qū)懭胪ǖ?。進(jìn)而,在優(yōu)選實(shí)施例中,當(dāng)通道^L定義或?qū)崿F(xiàn)為"阻塞" 通道時(shí),使用"0"計(jì)數(shù)停止進(jìn)一步的操作。當(dāng)通道寄存器定義為具有為"1" 的隊(duì)列深度時(shí),"0"計(jì)數(shù)可以用于指示此通道中的數(shù)據(jù)無(wú)效。通道還可以 定義為停止在讀取或?qū)懭胪ǖ烂顣r(shí)的SPU操作(在此命令時(shí),如果計(jì)數(shù) 為"0"),直到計(jì)數(shù)不再為"0"。在優(yōu)選實(shí)施例中,對(duì)于每個(gè)SPU啟動(dòng)的讀取或?qū)懭胪ǖ烂?,?jì)數(shù)器值遞減,對(duì)于每個(gè)外部啟動(dòng)的讀取或?qū)懭?帶有或不帶有數(shù)據(jù))訪(fǎng)問(wèn),計(jì) 數(shù)器值遞增。換言之,計(jì)數(shù)器保持輸入與輸出的指示。因此,對(duì)于寫(xiě)入,為"0"的值或計(jì)數(shù)指示沒(méi)有更多的外部寫(xiě)入槽可用。另一方面,對(duì)于讀取, 為"0"的計(jì)數(shù)值指示沒(méi)有有效的數(shù)據(jù)。當(dāng)計(jì)數(shù)為零時(shí),如果發(fā)出其他SPU 讀取或?qū)懭胪ǖ烂?,并且通道定義為非阻塞,則計(jì)數(shù)將保持為"0"并且寄存器中的數(shù)據(jù)將丟失。如優(yōu)選實(shí)施例中實(shí)現(xiàn)的,此寄存器中的先前最新 數(shù)據(jù)將丟失。如果對(duì)于此通道寄存器實(shí)施方式的位數(shù),計(jì)數(shù)處于最大值, 并且發(fā)生其他將導(dǎo)致計(jì)數(shù)超范圍遞增的事務(wù),則計(jì)數(shù)將停留在此最大值。 初始化計(jì)數(shù)值的方法與實(shí)施方式相關(guān),并且一種方法是通過(guò)外部接口 進(jìn)行初始化。此計(jì)數(shù)可用于寫(xiě)入隊(duì)列的流控制??梢詫⒂?jì)數(shù)預(yù)先設(shè)置為外 部隊(duì)列的深度。計(jì)數(shù)寄存器中的零值表示此外部隊(duì)列中沒(méi)有更多的空間。對(duì)于為'T,的外部隊(duì)列深度,計(jì)數(shù)應(yīng)預(yù)先^L置為'T,。當(dāng)SPU寫(xiě)入此通 道時(shí),計(jì)數(shù)將轉(zhuǎn)到"0"。當(dāng)外部設(shè)備從此通道中讀取時(shí),計(jì)數(shù)將遞增到"1",由此指示通道已準(zhǔn)備好其他寫(xiě)入操作。如上所述,對(duì)于通道寄存器的讀取,這允許計(jì)數(shù)指示有效數(shù)據(jù)。如果計(jì)數(shù)寄存器預(yù)先設(shè)置為"o",這指示數(shù)據(jù)無(wú)效。當(dāng)外部設(shè)備向此通道寫(xiě)入 時(shí),計(jì)數(shù)將遞增到'T,,指示數(shù)據(jù)對(duì)于SPU讀取有效。當(dāng)SPU從此通道中 讀取時(shí),計(jì)數(shù)將遞減回"0",指示可以發(fā)生其他外部寫(xiě)入。在本發(fā)明的優(yōu)選實(shí)施例中,計(jì)算機(jī)代碼通道計(jì)數(shù)讀取指令被發(fā)送到計(jì) 數(shù)器以確定讀取和寫(xiě)入通道的計(jì)數(shù)。當(dāng)外部設(shè)備為智能設(shè)備(例如多處理 器環(huán)境中的其他SPU或計(jì)算設(shè)備)時(shí),外部設(shè)備還可以將通道計(jì)數(shù)讀取指 令發(fā)送到計(jì)數(shù)器以確定計(jì)數(shù)。通過(guò)此方式,外部設(shè)備可以確定通道何時(shí)在含讀取通道的處理器。使用本發(fā)明,讀取和寫(xiě)入通道可以為非累積或累積的。累積通道是累 積多個(gè)寫(xiě)入的通道。即,將入站數(shù)據(jù)邏輯地添加到已包含在寄存器或其他 存儲(chǔ)裝置中的數(shù)據(jù),直到讀取該通道。讀取該通道時(shí),通常將累積寄存器 重置為"0",并且通道將再次開(kāi)始累積。此操作可以用于讀取或?qū)懭胪ǖ?。進(jìn)而,累積通道可以為阻塞或非阻塞的。通常,累積通道將僅具有為 "1"的計(jì)數(shù)深度,而非累積通道可用于對(duì)向此通道執(zhí)行的每個(gè)寫(xiě)入計(jì)數(shù)。概括地說(shuō),通道接口使用已定義的通道來(lái)釋放存儲(chǔ)器,但仍提供有關(guān) 寄存器中的數(shù)據(jù)何時(shí)有效(換言之,先前尚未,皮讀取)的易于訪(fǎng)問(wèn)的信息。 通過(guò)向計(jì)數(shù)機(jī)制發(fā)送通道計(jì)數(shù)讀取指令來(lái)獲取此信息。當(dāng)智能外部設(shè)備連 接到給定通道時(shí),外部設(shè)備可以使用類(lèi)似指令向給定通道發(fā)送數(shù)據(jù)或從給 定通道接收數(shù)據(jù)。當(dāng)指定的通道定義為非阻塞通道時(shí),通道接口還可通過(guò) 使用通道計(jì)數(shù)讀取指令進(jìn)一步防止意外覆蓋寄存器中的數(shù)據(jù)。及由此類(lèi)外部設(shè)備提供的設(shè)備傳送指令和數(shù)據(jù)。例如,本發(fā)明提供了用于 使用SPU的通道接口與MFC、機(jī)器狀態(tài)寄存器和中斷設(shè)備傳送指令和數(shù)據(jù) 的機(jī)制。此外,通道接口用于與BPA的事件設(shè)備、郵箱設(shè)備、多源同步設(shè) 備、代理標(biāo)記組完成設(shè)備、信號(hào)通知設(shè)備等傳送指令和數(shù)據(jù)。圖6A是示出了本發(fā)明的一個(gè)實(shí)施例使用通道的方式的示意圖。如圖 6A所示,通道接口 620提供多個(gè)通道,SPU 622可以通過(guò)這些通道與MFC 624、機(jī)器狀態(tài)寄存器634和中斷設(shè)備636通信。每個(gè)通道可以包括類(lèi)似于 上面圖4中所述元素的元素,并且其操作類(lèi)似于圖5A和5B中所述的操作。 在本發(fā)明的一個(gè)示意性實(shí)施例中,通道接口 620可以對(duì)應(yīng)于由圖4中的方 塊434表示的所有通道對(duì)的聚合。SPU 622可以對(duì)應(yīng)于圖4中的方塊430 和432的組合,例如,圖6中的其他所有方塊對(duì)應(yīng)于圖4中的方塊435。如圖6A所示,通道631、 633和635提供與SPU 622關(guān)聯(lián)的通信路徑, SPU事件設(shè)備630和遞減器632可以通過(guò)此路徑與MFC 通信。SPU事件 設(shè)備630提供用于處理在BPA內(nèi)生成的事件的機(jī)制。通道633提供用于標(biāo) 識(shí)感興趣事件以及獲取有關(guān)這些感興趣事件的信息的機(jī)制,如將在以下更 詳細(xì)討論的。遞減器632提供了 SPU上運(yùn)行的軟件可以借助其測(cè)量時(shí)間進(jìn) 度或被通知經(jīng)過(guò)的給定測(cè)量時(shí)間的機(jī)制。遞減器632可以通過(guò)通道631設(shè) 置其值以及讀取狀態(tài)。SPU (發(fā)出和控制邏輯、處理器數(shù)據(jù)流)622提供用于與外部設(shè)備通信 的指令、數(shù)據(jù)和設(shè)備。例如,SPU 622提供了 SPU通道訪(fǎng)問(wèn)設(shè)備,此設(shè)備 是初始化、保存和恢復(fù)SPU通道的特權(quán)設(shè)備。所述設(shè)備包括三個(gè)醒IO寄存 器SPU通道索引寄存器、SPU通道計(jì)數(shù)寄存器和SPU通道數(shù)據(jù)寄存器。SPU 通道索引寄存器是指向其計(jì)數(shù)和數(shù)據(jù)分別由SPU通道計(jì)數(shù)寄存器和SPU通 道數(shù)據(jù)寄存器訪(fǎng)問(wèn)的通道的指針。SPU通道索引寄存器選擇使用SPU通道 計(jì)數(shù)寄存器或SPU通道數(shù)據(jù)寄存器訪(fǎng)問(wèn)的SPU通道。SPU通道數(shù)據(jù)寄存器 用于讀取或初始化由SPU通道索引寄存器選擇的SPU通道數(shù)據(jù)。除了用于與SPU 622的設(shè)備通信的通道631、 633和635之外,通道 637提供了與機(jī)器狀態(tài)寄存器634關(guān)聯(lián)的通信路徑。機(jī)器狀態(tài)寄存器634 包含當(dāng)前機(jī)器隔離狀態(tài)和中斷狀態(tài)。隔離狀態(tài)指示是否已將SPU隔離。BPA 的隔離設(shè)^f吏得特權(quán)軟件和應(yīng)用能夠?qū)⒋a映像隔離和加載到一個(gè)或多個(gè) SPU中。SPU隔離設(shè)備確保加栽到關(guān)聯(lián)的SPU本地存儲(chǔ)的代碼映像尚未被任 何裝置改變。當(dāng)支持嵌套的中斷時(shí),與中斷狀態(tài)相關(guān)的機(jī)器狀態(tài)寄存器用于保存和恢復(fù)中斷狀態(tài)信息。此外,通道639提供與中斷設(shè)備636關(guān)聯(lián)的通信路徑。中斷設(shè)備636 用于將中斷和中斷狀態(tài)信息路由到PPE或外部設(shè)備、將提供給PPE的中斷 按照優(yōu)先順序排序,并生成處理器間中斷。此外,通道641提供與郵箱設(shè)備638關(guān)聯(lián)的通信路徑。郵箱設(shè)備638 用于將信息發(fā)送到外部設(shè)備(例如其他SPU、 PPE等)或用于從其接收信息。通道643提供與SPU信號(hào)通知設(shè)備640關(guān)聯(lián)的通信路徑。SPU信號(hào)通 知設(shè)備640用于將信號(hào)(例如緩沖區(qū)完成標(biāo)志)從系統(tǒng)中的其他處理器和 設(shè)備發(fā)送到SPU。通道645提供與代理標(biāo)記組完成設(shè)備642關(guān)聯(lián)的通信路徑。代理標(biāo)記 組完成設(shè)備642是用于確定何時(shí)完成一組類(lèi)似標(biāo)記指令的處理的設(shè)備。通道647提供與MFC多源同步設(shè)備644關(guān)聯(lián)的通信路徑。MFC多源同 步設(shè)備644實(shí)現(xiàn)跨本地存儲(chǔ)和主存儲(chǔ)地址域的累積排序。由多個(gè)源(即, 兩個(gè)或更多個(gè)處理器或單元)相對(duì)于其他處理器或單元執(zhí)行的存儲(chǔ)訪(fǎng)問(wèn)的 排序被稱(chēng)為累積排序。圖6B和6C示出了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的列出SPU通道圖 的示意圖。如圖6所示,SPU通道接口支持各種類(lèi)型的用于傳送指令和數(shù) 據(jù)的通道。這些通道包括SPU事件通道650、 SPU信號(hào)通知通道652、 SPU 遞減器通道654、 MFC多源同步通道656、 SPU保留通道658、掩碼讀取通 道660、 SPU狀態(tài)管理通道662、 MFC命令參數(shù)通道664、 MFC標(biāo)記狀態(tài)通道 666以及SPU郵箱通道668。這些"通道"本質(zhì)上是存儲(chǔ)器映射的寄存器以 及用于寫(xiě)入這些寄存器的相應(yīng)電路。因此,術(shù)語(yǔ)"通道"在此還可以用于 指存儲(chǔ)與指定的"通道"對(duì)應(yīng)的數(shù)據(jù)值的一個(gè)或多個(gè)寄存器。將在以下描 述這些通道中的每個(gè)通道的操作。在PPE、 SPU和MFC中提供了各種用于使 用這些通道的設(shè)備。將在以下詳細(xì)描述這些類(lèi)型的通道中的每種通道,從 用于與MFC通信的這些通道開(kāi)始。MFC命令參數(shù)通道MFC命令參數(shù)通道664是用于將數(shù)據(jù)寫(xiě)入MFC SPU命令隊(duì)列的MFC命 令參數(shù)寄存器的通道(參見(jiàn)以上的圖2和表1) 。 MFC命令參數(shù)通道664 是非阻塞的并且沒(méi)有與其關(guān)聯(lián)的通道計(jì)數(shù)。因此,執(zhí)行發(fā)送到這些通道中 的任何通道的讀取通道計(jì)數(shù)(rchcnt)指令將返回計(jì)數(shù)'T,。MFC命令參數(shù)通道664包括MFC本地存儲(chǔ)地址通道、MFC有效高地址通 道、MFC有效低地址或列表地址通道、MFC傳輸大小或列表大小通道、MFC 命令標(biāo)記標(biāo)識(shí)通道、MFC命令操作碼通道以及MFC類(lèi)ID通道。將在以下詳 細(xì)描述這些通道中的每個(gè)通道。MFC命令操作碼通道圖7A中提供了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的MFC命令操作碼通道 的詳細(xì)信息。MFC命令操作碼通道根據(jù)操作碼標(biāo)識(shí)要執(zhí)行的操作。將相對(duì) 于指令流異步地檢查此操作碼的有效性。如果MFC命令或任何命令參數(shù)無(wú) 效,則MFC命令隊(duì)列處理將掛起并生成無(wú)效的MFC命令中斷。使用單個(gè)通道指令將MFC命令和類(lèi)ID參數(shù)寫(xiě)入MFC SPU命令隊(duì)列。如 圖7A所示,在優(yōu)選實(shí)施例中,MFC命令操作碼參數(shù)是32位字的低16位。 此字段的高8位被保留,低8位標(biāo)識(shí)了 MFC命令操作碼。MFC類(lèi)ID通道MFC類(lèi)ID通道用于指定每個(gè)MFC命令的替換類(lèi)ID和傳輸類(lèi)ID,如圖 7B所示。SPU和軟件使用這些ID來(lái)提高系統(tǒng)的整體性能。具體地說(shuō),替換 類(lèi)ID (RclassID)與替換管理表(RMT) —起使用以控制高速緩存替換。 可以例如從PPE操作的加栽和存儲(chǔ)地址來(lái)生成替換類(lèi)ID (PPE包括地址范 圍設(shè)備,此設(shè)備提供了 一種將用于PPE加載和存儲(chǔ)以及指令取回的有效地 址或?qū)嵉刂酚成涞礁咚倬彺嫣鎿Q管理設(shè)備的類(lèi)ID的方法)。RclassID用于生成用于控制替換策略的特權(quán)軟件管理的表(即替換管 理表(RMT))的索引。RMT的格式與實(shí)施方式相關(guān)。RMT包括數(shù)量與實(shí)施 方式相關(guān)的表項(xiàng),這些表項(xiàng)應(yīng)包含成組啟用位、有效位以及其他控制信息。可選地, 一種實(shí)施方式還可以提供高速緩存旁路位和算法位。RMT表中的 表項(xiàng)數(shù)以及每個(gè)表項(xiàng)的大小與實(shí)施方式相關(guān)。圖7C示出了用于8路、成組相聯(lián)高速緩存的典型RMT表項(xiàng)。RMT表位 于系統(tǒng)的實(shí)地址空間中。特權(quán)軟件應(yīng)將這些RMT表映射為特權(quán)頁(yè)。 一種實(shí) 施方式應(yīng)為每個(gè)主要的高速緩存結(jié)構(gòu)提供RMT。返回圖7B,傳輸類(lèi)ID(TclassID)用于標(biāo)識(shí)對(duì)具有不同特征的存儲(chǔ)的 訪(fǎng)問(wèn)。TclassID旨在用于允許實(shí)施方式根據(jù)存儲(chǔ)位置的特征來(lái)優(yōu)化對(duì)應(yīng)于 MFC命令的傳輸。TclassID的設(shè)置和使用與實(shí)施方式相關(guān)。RclassID和TclassID (此后稱(chēng)為"類(lèi)ID參數(shù)")的內(nèi)容不是永久性 的,并且必須針對(duì)每個(gè)MFC命令入隊(duì)序列寫(xiě)入。無(wú)論與從PPE還是從SPU 命令隊(duì)列的SPU側(cè)發(fā)出的命令一起使用,類(lèi)ID參數(shù)都執(zhí)行相同的功能。類(lèi) ID參數(shù)用于控制與SPE關(guān)聯(lián)的資源,并且對(duì)與其他SPE或PPE關(guān)聯(lián)的資源 沒(méi)有任何影響。不會(huì)驗(yàn)證類(lèi)ID參數(shù)的有效性。所支持的類(lèi)ID參數(shù)的數(shù)量 與實(shí)施方式相關(guān)。MFC命令標(biāo)記標(biāo)識(shí)通道MFC命令標(biāo)記標(biāo)識(shí)通道用于為每個(gè)命令或一組命令指定標(biāo)識(shí)符。圖7D 示出了 MFC命令標(biāo)記標(biāo)識(shí)通道的詳細(xì)信息。例如,標(biāo)識(shí)標(biāo)記是x' 0'與x 'IF'之間的任何值。標(biāo)識(shí)標(biāo)記在硬件中具有純本地范圍。因此,可以在 不同的SPE或PPE中使用同 一標(biāo)記。可以4吏用同 一標(biāo)識(shí)來(lái)標(biāo)記任何數(shù)量的MFC命令。使用同一標(biāo)識(shí)標(biāo)記的 MFC命令被稱(chēng)為標(biāo)記組。標(biāo)記與寫(xiě)入特定隊(duì)列的命令關(guān)聯(lián)。提供給MFCSPU 命令隊(duì)列的標(biāo)記獨(dú)立于提供給MFC代理命令隊(duì)列的標(biāo)記。MFC命令標(biāo)記標(biāo) 識(shí)參數(shù)的內(nèi)容不是永久性的,并且必須針對(duì)每個(gè)MFC命令入隊(duì)序列寫(xiě)入。 將相對(duì)于指令流異步地檢查此參數(shù)的有效性。如果高位(例如位Q到10) 沒(méi)有設(shè)置為0,則MFC命令隊(duì)列處理被掛起并將生成中斷。MFC傳輸大小或列表大小通道MFC傳輸大小或列表大小通道用于指定MFC傳輸?shù)拇笮』騇FC DMA傳 輸列表(即一系列DMA傳輸命令的列表)的大小。圖7E中提供了 MFC傳輸 大小或列表大小通道的詳細(xì)信息。在示意性實(shí)施例中,傳輸大小可以具有 值l、 2、 4、 8、 16或16字節(jié)的倍數(shù),最大值為16KB。 MFCDMA傳輸列表 大小可以具有值8或8的倍數(shù),最大值為16 KB。 MFC傳輸大小或列表大小 通道的內(nèi)容不是永久性的,并且必須針對(duì)每個(gè)MFC命令入隊(duì)序列寫(xiě)入。將 相對(duì)于指令流異步地檢查此參數(shù)的有效性。如果大小無(wú)效,則MFC命令隊(duì) 列處理被掛起并將生成MFC DMA對(duì)齊中斷。MFC本地存儲(chǔ)地址通道MFC本地存儲(chǔ)地址通道用于提供與要排隊(duì)的MFC命令關(guān)聯(lián)的SPU本地 存儲(chǔ)地址。MFC本地存儲(chǔ)地址用作MFC傳輸?shù)脑椿蚰康牡?,如MFC命令中 所定義的。圖7F中提供了 MFC本地存儲(chǔ)地址通道的詳細(xì)信息。MFC本地存儲(chǔ)地址通道的內(nèi)容不是永久性的,并且必須針對(duì)每個(gè)MFC 命令入隊(duì)序列寫(xiě)入。將相對(duì)于指令流異步地檢查MFC本地存儲(chǔ)地址參數(shù)的 有效性。如果地址未對(duì)齊,則MFC命令隊(duì)列處理被掛起并將生成MFC DMA 對(duì)齊異常。例如,為了^皮看作對(duì)齊,本地存儲(chǔ)地址的4個(gè)最低位必須與有 效地址的最低的4個(gè)位相匹配。MFC有效低地址或列表地址通道MFC有效低地址或列表地址通道用于為MFC命令或指向MFC DMA列表 命令的列表元素的本地存儲(chǔ)指針指定有效低地址。如果在MFC狀態(tài)寄存器 中啟用轉(zhuǎn)換,則PPE的地址轉(zhuǎn)換設(shè)備將有效地址轉(zhuǎn)換為實(shí)地址。圖7G提供 了 MFC有效低地址或列表地址通道的詳細(xì)信息。MFC有效低地址或列表地址通道的內(nèi)容不是永久性的,并且必須針對(duì) 每個(gè)MFC命令入隊(duì)序列寫(xiě)入。對(duì)于小于16字節(jié)的傳輸大小,此參數(shù)的位 28到31必須根據(jù)傳輸大小提供自然對(duì)齊。對(duì)于等于或大于16字節(jié)的傳輸 大小,位28到31必須為"0"。如果禁用轉(zhuǎn)換,此參數(shù)必須在主存儲(chǔ)域的實(shí)地址空間限制內(nèi)。對(duì)于MFC列表命令,列表地址的位29到31必須為"0"。 如果沒(méi)有滿(mǎn)足這些條件中的任一條件,則參數(shù)無(wú)效并被視為未對(duì)齊。將相對(duì)于指令流異步地檢查MFC有效低地址或列表地址參數(shù)的有效 性。如果地址無(wú)效,例如由于段錯(cuò)誤、映射錯(cuò)誤、保護(hù)違反或因?yàn)榈刂肺?對(duì)齊,則MFC命令隊(duì)列處理被掛起并將生成中斷。可以生成的中斷的類(lèi)型 包括MFC數(shù)據(jù)段中斷、MFC數(shù)據(jù)存儲(chǔ)中斷和DMA對(duì)齊中斷。MFC有效高地址通道MFC有效高地址通道用于指定MFC命令的有效地址。如果在MFC狀態(tài) 寄存器中啟用轉(zhuǎn)換,則地址轉(zhuǎn)換設(shè)備將有效地址轉(zhuǎn)換為實(shí)地址。圖7H示出 了 MFC有效高地址通道的詳細(xì)信息。MFC有效高地址通道的內(nèi)容不是永久性的,并且必須針對(duì)每個(gè)MFC命 令入隊(duì)序列寫(xiě)入。如果沒(méi)有寫(xiě)入高32位,則硬件設(shè)置EAH,高地址位被設(shè) 置為Q,即地址位于Q和4GB之間。將相對(duì)于指令流異步地檢查此參數(shù)的 有效性。如果地址無(wú)效,例如由于段錯(cuò)誤、映射錯(cuò)誤或保護(hù)違反,則MFC 命令隊(duì)列處理被掛起并將生成中斷??梢陨傻闹袛嗟念?lèi)型包括MFC數(shù)據(jù) 段中斷和MFC數(shù)據(jù)存儲(chǔ)中斷。應(yīng)當(dāng)指出,將在傳輸過(guò)程中檢查有效地址的 有效性??梢栽谟龅綗o(wú)效地址并生成異常之前執(zhí)行部分傳輸。使用上述MFC命令參數(shù)通道從SPU排隊(duì)MFC命令時(shí),必須首先將MFC 命令參數(shù)寫(xiě)入MFC命令參數(shù)通道。這可以按任何順序執(zhí)行,但MFC命令操 作碼和類(lèi)ID參數(shù)必須最后寫(xiě)入。因此,為了寫(xiě)入MFC命令參數(shù),將執(zhí)行圖 8中示出的操作。如圖8所示,所述操作包括將本地存儲(chǔ)地址參數(shù)寫(xiě)入MFC本地存儲(chǔ)地 址通道(步驟810)。將有效高地址參數(shù)寫(xiě)入MFC有效高地址通道(步驟 820 )。將有效低地址或列表地址參數(shù)寫(xiě)入MFC有效低或列表地址通道(步 驟830 )。將MFC傳輸或列表大小參數(shù)寫(xiě)入MFC傳輸大小或列表大小通道 (步驟840 )。將MFC命令標(biāo)記參數(shù)寫(xiě)入MFC命令標(biāo)記標(biāo)識(shí)符通道(步驟 850 )。在將上述所有參數(shù)都寫(xiě)入其各自的通道之后,將MFC命令操作碼和類(lèi)ID參數(shù)寫(xiě)入MFC操作碼和MFC類(lèi)ID通道(步驟860 ),然后操作結(jié)束。 應(yīng)當(dāng)理解,步驟810-850可以按任何順序執(zhí)行,步驟860在其他參數(shù)寫(xiě)入 其各自的通道之后執(zhí)行。MFC命令參數(shù)保留在MFC命令參數(shù)通道中,直到MFC處理了 MFC命令 操作碼和類(lèi)ID參數(shù)的寫(xiě)入。到MFC命令操作碼通道和MFC類(lèi)ID通道的寫(xiě) 入通道(wrch)指令導(dǎo)致將MFC命令參數(shù)通道中保存的參數(shù)發(fā)送到MFC命 令隊(duì)列。在將MFC命令本身發(fā)出到MFC命令隊(duì)列之前,可以按任何順序?qū)?入MFC命令參數(shù)。將在入隊(duì)操作中使用最后寫(xiě)入MFC命令參數(shù)通道的參數(shù) 的值。在將MFC命令排隊(duì)之后,MFC參數(shù)的值變得無(wú)效,并且必須為下一個(gè) MFC命令排隊(duì)請(qǐng)求重新指定值。未指定所有所需的MFC參數(shù)(即,除了可 選EAH之外的所有參數(shù))會(huì)導(dǎo)致MFC命令隊(duì)列的操作不正確。硬件將MFC命令操作碼通道和MFC類(lèi)ID通道的最大計(jì)數(shù)配置為硬件所 支持的MFC隊(duì)列命令數(shù)。軟件必須將MFC命令操作碼通道的通道計(jì)數(shù)初始MFC代理命令隊(duì)列槽的數(shù)量。還必須在SPE搶占式上下文切換時(shí)保存和恢 復(fù)MFC命令操作碼通道的通道計(jì)數(shù)。MFC標(biāo)i己組狀態(tài)通道如上所述,每個(gè)命令都可以使用標(biāo)識(shí)符(例如5位標(biāo)識(shí)符,稱(chēng)為MFC 命令標(biāo)記)進(jìn)行標(biāo)記。可以為多個(gè)MFC命令使用同一標(biāo)識(shí)符。將具有同一 標(biāo)識(shí)符的一組命令定義為標(biāo)記組。軟件可以使用MFC命令標(biāo)記來(lái)檢查或等 待每個(gè)標(biāo)記組的所有排隊(duì)的命令的完成。此外,軟件使用MFC命令標(biāo)記來(lái) 檢查或等待MFC DMA列表命令到達(dá)設(shè)置了停止和通知標(biāo)志的元素,以及確 認(rèn)列表元素以重新開(kāi)始MFC DMA列表命令。首先將描述MFC標(biāo)記組狀態(tài)通道,然后將提供用于確定標(biāo)記組狀態(tài)以 及確定MFC DMA列表命令完成的過(guò)程的描述。MFC標(biāo)記組狀態(tài)通道包括MFC寫(xiě)入標(biāo)記組查詢(xún)掩碼通道、MFC讀取標(biāo)記組查詢(xún)掩碼通道、MFC寫(xiě)入標(biāo)記狀態(tài)更新請(qǐng)求通道、MFC讀取標(biāo)記組狀態(tài)通 道、MFC讀取列表停止和通知標(biāo)記狀態(tài)通道、MFC寫(xiě)入列表停止和通知標(biāo)記 確認(rèn)通道,以及MFC讀取原子命令狀態(tài)通道。將在以下詳細(xì)描述這些通道 中的每個(gè)通道。MFC寫(xiě)入標(biāo)記組查詢(xún)掩碼通道MFC寫(xiě)入標(biāo)記組查詢(xún)掩碼通道用于選擇要包括在查詢(xún)或等待操作中的 標(biāo)記組。圖9A中示出了 MFC寫(xiě)入標(biāo)記組查詢(xún)掩碼通道的詳細(xì)信息。此通道提供的數(shù)據(jù)由MFC保留,直到被向此通道發(fā)出的后續(xù)寫(xiě)入通道 (wrch)指令所更改。因此,無(wú)需為每個(gè)狀態(tài)查詢(xún)或等待重新指定數(shù)據(jù)。 如果軟件在MFC標(biāo)記狀態(tài)更新請(qǐng)求未決時(shí)修改了此掩碼,則結(jié)果的含義將 不確定。應(yīng)始終在修改此掩碼之前取消未決的MFC標(biāo)記狀態(tài)更新請(qǐng)求。可 以通過(guò)向MFC寫(xiě)入標(biāo)記狀態(tài)更新請(qǐng)求通道寫(xiě)入值"0"(即,立即更新)來(lái) 取消MFC標(biāo)記狀態(tài)更新請(qǐng)求??梢酝ㄟ^(guò)讀取(rdch) MFC讀取標(biāo)記組查詢(xún) 掩碼通道來(lái)訪(fǎng)問(wèn)此通道的當(dāng)前內(nèi)容。此通道為非阻塞的并且沒(méi)有關(guān)聯(lián)的計(jì) 數(shù)。如果向此通道發(fā)送讀取通道計(jì)數(shù)(rchcnt)指令,則計(jì)數(shù)將始終返回 為T(mén) 。MFC讀取標(biāo)記組查詢(xún)掩碼通道MFC讀取標(biāo)記組查詢(xún)掩碼通道用于讀取代理標(biāo)記組查詢(xún)掩碼寄存器的 當(dāng)前值。圖9B中提供了 MFC讀取標(biāo)記組查詢(xún)掩碼通道的詳細(xì)信息。讀取此 通道將始終返回最后寫(xiě)入MFC寫(xiě)入標(biāo)記組查詢(xún)掩碼通道的數(shù)據(jù)。此通道可 以用于避免代理標(biāo)記組查詢(xún)掩碼的軟件影子復(fù)制以及進(jìn)行SPE上下文保存 和恢復(fù)操作。此通道為非阻塞的并且沒(méi)有關(guān)聯(lián)的計(jì)數(shù)。因此,如果向此通 il^送讀取通道計(jì)數(shù)(rchcnt)指令,則計(jì)數(shù)將始終返回為'T,。MFC寫(xiě)入標(biāo)i己狀態(tài)更新請(qǐng)求通道MFC寫(xiě)入標(biāo)記狀態(tài)更新請(qǐng)求通道控制何時(shí)在MFC讀取標(biāo)記組狀態(tài)通道中更新MFC標(biāo)記組狀態(tài)。圖9C中示出了 MFC寫(xiě)入標(biāo)記狀態(tài)更新請(qǐng)求通道的詳細(xì)信息。MFC寫(xiě)入標(biāo)記狀態(tài)更新請(qǐng)求通道可以指定立即更新?tīng)顟B(tài)或在出現(xiàn)條件 時(shí)更新?tīng)顟B(tài),例如,當(dāng)任何啟用的MFC標(biāo)記組完成具有"沒(méi)有未完成的操 作,,狀態(tài)時(shí)更新,或僅當(dāng)所有啟用的MFC標(biāo)記組都具有"沒(méi)有未完成的操 作"狀態(tài)時(shí)才進(jìn)行更新。到此通道的寫(xiě)入通道(wrch)指令必須在來(lái)自MFC 讀取標(biāo)記組狀態(tài)通道的讀取通道(rdch)發(fā)生之前發(fā)生。MFC寫(xiě)入標(biāo)記狀態(tài)更新請(qǐng)求應(yīng)在設(shè)置標(biāo)記組掩碼之后以及在針對(duì)感興 趣的標(biāo)記組發(fā)出命令之后執(zhí)行。如果針對(duì)標(biāo)記組的命令在發(fā)出MFC寫(xiě)入標(biāo) 記狀態(tài)更新請(qǐng)求之前完成,由此滿(mǎn)足更新?tīng)顟B(tài)條件,則無(wú)需等待即可返回 狀態(tài)。如果沒(méi)有首先通過(guò)寫(xiě)入MFC寫(xiě)入標(biāo)記狀態(tài)更新請(qǐng)求通道來(lái)請(qǐng)求狀態(tài) 更新就從讀取MFC讀取標(biāo)記組狀態(tài)通道,則會(huì)導(dǎo)致軟件引起的死鎖??梢酝ㄟ^(guò)向MFC寫(xiě)入標(biāo)記狀態(tài)更新請(qǐng)求通道發(fā)出立即更新?tīng)顟B(tài)請(qǐng)求, 讀取與MFC寫(xiě)入標(biāo)記狀態(tài)更新請(qǐng)求通道關(guān)聯(lián)的計(jì)數(shù)直到返回值"1",然后 從讀取MFC讀取標(biāo)記組狀態(tài)通道以確定并丟棄不需要的結(jié)果,來(lái)取消先前的MFC標(biāo)記狀態(tài)更新請(qǐng)求。兩個(gè)不帶有中間狀態(tài)讀取請(qǐng)求的條件更新請(qǐng)求會(huì)導(dǎo)致返回不可預(yù)測(cè)的標(biāo)記狀態(tài)。為了避免不可預(yù)測(cè)的結(jié)果,軟件將針對(duì)標(biāo)記狀態(tài)更新的請(qǐng)求與 對(duì)標(biāo)記狀態(tài)的讀取配對(duì),除非通過(guò)立即更新請(qǐng)求執(zhí)行請(qǐng)求取消。特權(quán)軟件將此通道的計(jì)數(shù)初始化為"1"。當(dāng)向此通道發(fā)出寫(xiě)入通道 (wrch)指令時(shí),此通道的計(jì)數(shù)被設(shè)置為"0"。當(dāng)MFC接收到標(biāo)記狀態(tài)更 新請(qǐng)求時(shí),計(jì)數(shù)凈皮設(shè)置為"1"。此通道啟用了寫(xiě)入阻塞且最大計(jì)數(shù)為'T,。MFC讀取標(biāo)i己組狀態(tài)通道MFC讀取標(biāo)記組狀態(tài)通道包含來(lái)自上一個(gè)標(biāo)記組狀態(tài)更新請(qǐng)求的標(biāo)記 組的狀態(tài)。圖9D中提供了 MFC讀取標(biāo)記組狀態(tài)通道的詳細(xì)信息。只有在標(biāo)記組狀態(tài)更新時(shí)啟用的標(biāo)記組的狀態(tài)有效。與在標(biāo)記組狀態(tài) 更新時(shí)禁用的標(biāo)記組對(duì)應(yīng)的位位置^f皮i殳置為"0"。必須在從MFC寫(xiě)入標(biāo)記狀態(tài)更新請(qǐng)求通道讀取之前請(qǐng)求此通道。未執(zhí) 行此操作會(huì)導(dǎo)致軟件引起的死鎖條件。這被視為編程錯(cuò)誤,并且需要特權(quán) 軟件刪除死鎖條件。如果狀態(tài)尚不可用,則發(fā)送到MFC讀取標(biāo)記組狀態(tài)通道的讀取通道計(jì) 數(shù)(rchcnt)指令將返回"0",或者如果狀態(tài)可用,則返回T 。此指 令可用于避免在讀取MFC讀取標(biāo)記組狀態(tài)通道時(shí)停止SPU。軟件將此通道 的計(jì)數(shù)初始化為值"0"。此通道啟用了讀取阻塞,并且最大計(jì)數(shù)為"1"。MFC讀取列表停止和通知標(biāo)記狀態(tài)通道圖9E中提供了 MFC讀取列表^f亭止和通知標(biāo)記狀態(tài)通道的詳細(xì)信息。如 上所述,MFC列表命令的列表元素包含停止和通知標(biāo)志。如果在列表元素 上設(shè)置此標(biāo)記,則MFC將停止執(zhí)行MFC列表命令(即DMA列表命令),并 設(shè)置與此通道中的MFC列表命令的標(biāo)記組對(duì)應(yīng)的位。還將與此通道關(guān)聯(lián)的 計(jì)數(shù)設(shè)置為"1" 。 MFC列表命令保持停止,直到通過(guò)向MFC寫(xiě)入列表停止 和通知標(biāo)記確認(rèn)通道寫(xiě)入標(biāo)記值進(jìn)行確認(rèn)。如果希望在DMA列表執(zhí)行已到達(dá)特定點(diǎn)時(shí)通知程序,則MFC列表停止 和通知設(shè)備纟艮有用。當(dāng)應(yīng)用希望動(dòng)態(tài)更改已停止列表元素之后的列表元素 (傳輸大小或有效地址)時(shí),此設(shè)備也很有用。還可以通過(guò)將列表元素的 傳輸大小設(shè)置為"0"來(lái)跳過(guò)這些元素。不允許硬件預(yù)取停止和通知元素之 后的列表元素。特權(quán)軟件應(yīng)將MFC讀取列表停止和通知標(biāo)記狀態(tài)通道的計(jì)數(shù)初始化為標(biāo)記組具有已停止的命令。向此通道發(fā)出讀取通道(rdch)指令會(huì)將所有 位重置為O并將對(duì)應(yīng)于此通道的計(jì)數(shù)i殳置為"0"。因此,如果在沒(méi)有包含 設(shè)置為'T,的停止和通知標(biāo)志的未完成列表元素并且沒(méi)有已停止命令的情 況下發(fā)出讀取通道(rdch)指令,則會(huì)導(dǎo)致軟件引起的死鎖。當(dāng)沒(méi)有標(biāo)記組停止時(shí)在此通道上發(fā)出讀取通道(rdch)指令會(huì)導(dǎo)致SPU 執(zhí)行停止,直到遇到設(shè)置了停止和通知標(biāo)志的列表元素。軟件還可以讀取(rchcnt)與此通道關(guān)聯(lián)的計(jì)數(shù)以便與SPU事件設(shè)備一起使用,從而確定 何時(shí)遇到設(shè)置了停止和通知標(biāo)志的MFC列表元素。如果自上次讀取此通道 以來(lái)沒(méi)有新的已停止MFC列表命令,則發(fā)送到MFC讀取列表停止和通知標(biāo) 記狀態(tài)通道的讀取通道計(jì)數(shù)(rchcnt)指令將返回"0"。此通道為讀取阻 塞的,并且最大計(jì)數(shù)為"1"。MFC寫(xiě)入列表停止和通知標(biāo)記確^人通道圖9F中示出了 MFC寫(xiě)入列表停止和通知標(biāo)記確認(rèn)通道的詳細(xì)信息。MFC 寫(xiě)入列表停止和通知標(biāo)記確認(rèn)通道用于確認(rèn)包含在設(shè)置了停止和通知標(biāo)志 的列表元素上停止的MFC列表命令的標(biāo)記組。通過(guò)將MFC標(biāo)記組寫(xiě)入此通 道來(lái)確i人標(biāo)記組。在寫(xiě)入之后,將重新啟動(dòng)與寫(xiě)入此通道的值相匹配的標(biāo) 記組的所有已停止MFC列表命令。如果希望在DMA列表執(zhí)行已到達(dá)特定點(diǎn)時(shí)通知程序,則MFC列表停止 和通知設(shè)備很有用。當(dāng)應(yīng)用希望動(dòng)態(tài)更改已停止列表元素之后的列表元素 (傳輸大小或有效地址)時(shí),此設(shè)備也4艮有用。還可以通過(guò)將列表元素的 傳輸大小設(shè)置為0來(lái)跳過(guò)這些元素。不允許硬件預(yù)取停止和通知元素之后 的列表元素。未定義確認(rèn)當(dāng)前由于停止和通知條件而未停止的標(biāo)記組。這樣做會(huì)導(dǎo) 致MFC讀取列表停止和通知標(biāo)記狀態(tài)通道中的狀態(tài)無(wú)效。為保持一致性, 將此條件視為無(wú)操作(no-op)。此通道為非阻塞通道,并且沒(méi)有關(guān)聯(lián)的計(jì)數(shù)。每當(dāng)向此通道發(fā)送讀取 通道計(jì)數(shù)(rchcnt)指令時(shí),計(jì)數(shù)都始終返回為"1"。MFC讀取原子命令狀態(tài)通道圖9G中提供了 MFC讀取原子命令狀態(tài)通道的詳細(xì)信息。MFC讀取原子 命令狀態(tài)通道包含上一個(gè)已完成的立即MFC原子更新命令的狀態(tài)。原子命 令是無(wú)需等待MFC SPU隊(duì)列中的其他命令而執(zhí)行以及獨(dú)立于MFC SPU隊(duì)列 中的其他命令而執(zhí)行的命令。MFC支持四個(gè)原子命令getllar(獲取鎖定線(xiàn)并保留)、putllc (有條件地放置鎖定線(xiàn))、putlluc (無(wú)條件地放置鎖 定線(xiàn)),以及putqlluc (無(wú)條件地放置排隊(duì)鎖定線(xiàn))。這些命令執(zhí)行與可 緩存存儲(chǔ)指令類(lèi)似的功能,通常由軟件使用以釋放"鎖定"。putlluc和 putqlluc命令之間的差別在于putqlluc命令帶有標(biāo)記并且在MFC SPU命 令隊(duì)列中排在其他MFC命令之后,而putlluc命令則被立即執(zhí)行。由于putqlluc命令帶有標(biāo)記并具有隱含的標(biāo)記特定的屏障,因此相對(duì) 于已在MFC SPU命令隊(duì)列內(nèi)的同一標(biāo)記組中的所有其他命令進(jìn)行排序。 getllar、 putl lc和putl luc命令沒(méi)有標(biāo)記;因此它們被立即執(zhí)行。盡管 get 1 lar 、 put 1 lc和putl luc命令被立即執(zhí)行,但是這些命令仍需要MFC SPU 命令隊(duì)列中的可用槽。應(yīng)假設(shè)與MFC SPU命令隊(duì)列中的其他命令沒(méi)有順序 關(guān)系。在發(fā)出每個(gè)getllar、 putl lc或putlluc命令之后,軟件必須從MFC 讀取原子命令狀態(tài)通道發(fā)出讀取以^i命令的完成。在發(fā)出立即原子命令 之前向此通道發(fā)出通道讀取(rdch)指令會(huì)導(dǎo)致軟件引起的死鎖。軟件可以讀取與此通道關(guān)聯(lián)的通道計(jì)數(shù)(rchcnt )以判定立即原子MFC 命令是否已完成。如果返回值"0",則立即原子MFC命令尚未完成。如果 返回值"1",則立即原子MFC命令已經(jīng)完成,并且可通過(guò)讀取(rdch)此 通道來(lái)獲取狀態(tài)。應(yīng)始終在立即原子MFC命令之后從MFC讀取原子命令狀態(tài)通道讀取 (rdch)。無(wú)需中間讀取而從MFC讀取原子命令狀態(tài)通道執(zhí)行多個(gè)原子MFC 命令會(huì)導(dǎo)致不正確的狀態(tài)。特權(quán)軟件將此通道的計(jì)數(shù)初始化為"0"。此通道為讀取阻塞通道,并 且最大計(jì)數(shù)為"1"。讀取時(shí)會(huì)清除此通道的內(nèi)容。后續(xù)的立即MFC原子更 新命令的完成會(huì)覆蓋較早MFC命令的狀態(tài)。上述MFC標(biāo)記組狀態(tài)通道用于促進(jìn)確定標(biāo)記組狀態(tài)以及確定MFC DMA 列表命令完成。支持三個(gè)用于確定標(biāo)記組狀態(tài)的基本過(guò)程輪詢(xún)MFC讀取 標(biāo)記組狀態(tài)通道、等待標(biāo)記組更新,或等待事件并在標(biāo)記組狀態(tài)更新事件 時(shí)中斷。對(duì)于輪詢(xún)一個(gè)MFC命令的完成或一組MFC命令的完成,圖10中示如圖10所示,將清除任何未決的標(biāo)記狀態(tài)更新請(qǐng)求(步驟1010)。 這例如可以通過(guò)以下操作完成向MFC寫(xiě)入標(biāo)記狀態(tài)更新請(qǐng)求通道寫(xiě)入 "0",讀取與MFC寫(xiě)入標(biāo)記狀態(tài)更新請(qǐng)求通道關(guān)聯(lián)的通道計(jì)數(shù)直到返回值 "1",以及讀取MFC讀取標(biāo)記組狀態(tài)通道并丟棄標(biāo)記狀態(tài)數(shù)據(jù)。然后,通過(guò)向MFC寫(xiě)入標(biāo)記組查詢(xún)掩碼通道寫(xiě)入適當(dāng)掩碼數(shù)據(jù)來(lái)啟用 感興趣的標(biāo)記組(步驟1020 )。隨后,例如通過(guò)向MFC寫(xiě)入標(biāo)記狀態(tài)更新 請(qǐng)求通道寫(xiě)入值"0"來(lái)請(qǐng)求立即標(biāo)記狀態(tài)更新(步驟1030 )。然后,執(zhí)行MFC讀取標(biāo)記組狀態(tài)通道的讀取(步驟1040 )。返回的數(shù) 據(jù)是每個(gè)應(yīng)用了標(biāo)記組掩碼的標(biāo)記組的當(dāng)前狀態(tài)。判定是否存在其他感興 趣的標(biāo)記組(步驟1050 )。如果是,則操作返回步驟1030。否則,操作結(jié) 束。對(duì)于等待標(biāo)記組更新,或等待事件(一個(gè)或多個(gè)標(biāo)記組完成),圖11 中示出了基本過(guò)程。如所示出的,操作以清除任何未決的標(biāo)記狀態(tài)更新請(qǐng) 求來(lái)開(kāi)始(步驟1110)。這例如可以通過(guò)以下操作完成向MFC寫(xiě)入標(biāo)記 狀態(tài)更新請(qǐng)求通道寫(xiě)入"0",讀取與MFC寫(xiě)入標(biāo)記狀態(tài)更新請(qǐng)求通道關(guān)聯(lián) 的通道計(jì)數(shù)直到返回值"1",以及讀取MFC讀取標(biāo)記組狀態(tài)通道并丟棄標(biāo) 記狀態(tài)數(shù)據(jù)。通過(guò)向MFC寫(xiě)入標(biāo)記狀態(tài)更新請(qǐng)求通道寫(xiě)入值"01"或"10"來(lái)請(qǐng)求 條件標(biāo)記狀態(tài)更新(步驟1120)。值"01"指定任何已啟用標(biāo)記組的完成 將導(dǎo)致標(biāo)記組更新。值"10"指定所有已啟用標(biāo)記組都必須完成以導(dǎo)致SPU 標(biāo)i己組狀態(tài)更新。此后,讀取MFC讀取標(biāo)記組狀態(tài)通道以等待在步驟1120中指定的特定 標(biāo)記事件(步驟1130 )。此讀取將停止SPU的執(zhí)行,直到滿(mǎn)足在步驟1120 中指定的條件。備選地,可以執(zhí)行與MFC讀取標(biāo)記組狀態(tài)通道關(guān)聯(lián)的計(jì)數(shù) 的讀取以輪詢(xún)或等待特定的標(biāo)記事件(步驟1132 )。判定返回的計(jì)數(shù)是否具有值'T,(步驟1140)。如果否,則操作返 回步驟1132。如果計(jì)數(shù)為"1",則讀取MFC讀取標(biāo)記組狀態(tài)通道以判定 哪個(gè)或哪些標(biāo)記組完成(步驟1150)。然后操作結(jié)束。等待或輪詢(xún)條件標(biāo)記事件的備選方案是使用SPU事件設(shè)備。通常,當(dāng)應(yīng)用等待多個(gè)事件中的一個(gè)事件發(fā)生或者可以在等待命令完成時(shí)執(zhí)行其他操作時(shí),將4吏用此過(guò)程。所述過(guò)程如圖12所示。如圖12所示,將清除任何未決的標(biāo)記狀態(tài)更新請(qǐng)求(步驟1210)。 如上所述,這例如可以通過(guò)以下操作完成向MFC寫(xiě)入標(biāo)記狀態(tài)更新請(qǐng)求 通道寫(xiě)入"0",讀取與MFC寫(xiě)入標(biāo)記狀態(tài)更新請(qǐng)求通道關(guān)聯(lián)的通道計(jì)數(shù)直 到返回值"1",以及讀取MFC讀取標(biāo)記組狀態(tài)通道并丟棄標(biāo)記狀態(tài)數(shù)據(jù)。選擇一個(gè)或多個(gè)標(biāo)記組(步驟1220 )。通過(guò)向SPU寫(xiě)入事件確認(rèn)通道 寫(xiě)入(wrch)值'T,來(lái)清除任何未決的標(biāo)記狀態(tài)更新事件(步驟1230 )。 通過(guò)向SPU寫(xiě)入事件掩碼通道寫(xiě)入"1"來(lái)取消MFC標(biāo)記組狀態(tài)更新事件的 掩碼(步驟1240 )。然后,讀取SPU讀取事件狀態(tài)通道以等待發(fā)生已啟用 的事件(步驟1250 )。此讀取將停止SPU的執(zhí)行,直到發(fā)生已啟用的事件。 備選地,可以讀取與SPU讀取事件狀態(tài)通道關(guān)聯(lián)的計(jì)數(shù)以輪詢(xún)或等待特定 的標(biāo)記事件,直到計(jì)數(shù)返回為"1"。讀取SPU讀取事件狀態(tài)通道并判定是否發(fā)生已啟用的事件(步驟 1260 )。如果否,則操作返回步驟1250。如果發(fā)生已啟用的事件,則讀取 MFC讀取標(biāo)記組狀態(tài)通道以判定哪個(gè)或哪些標(biāo)記組導(dǎo)致此事件(步驟 1270 )。然后操作結(jié)束。支持三個(gè)用于判定MFC DMA列表命令是否已到達(dá)設(shè)置了停止和通知標(biāo) 志的列表元素的基本過(guò)程輪詢(xún)MFC讀取列表停止和通知標(biāo)記狀態(tài)通道、 等待MFC DMA列表命令停止和通知事件,以及在MFC DMA列表命令停止和 通知事件時(shí)中斷。對(duì)于輪詢(xún)以判定MFC DMA列表命令是否已到達(dá)設(shè)置了停 止和通知標(biāo)志的列表元素,圖13中示出了基本過(guò)程。如圖13所示,操作開(kāi)始,將發(fā)出具有設(shè)置了停止和通知標(biāo)志的列表元 素的MFC DMA列表命令(步驟1310 )。讀取(rchcnt)與MFC讀取列表停 止和通知標(biāo)記狀態(tài)通道關(guān)聯(lián)的計(jì)數(shù)直到返回值"1"(步驟1320 )。如果 返回值'T,(步驟1330 ),則讀取(rdch) MFC讀取列表停止和通知標(biāo)記 狀態(tài)通道(步驟1340 )。返回的數(shù)據(jù)是自上次讀取此通道以來(lái)每個(gè)已到達(dá)設(shè)置了停止和通知標(biāo)志的列表元素的標(biāo)記組的當(dāng)前狀態(tài)。判定一個(gè)或多個(gè)感興趣的標(biāo)記組是否已到達(dá)i殳置了停止和通知標(biāo)志的列表元素(步驟1350 )。如果否,則操作返回步驟1340,直到一個(gè)或多個(gè) 感興趣的標(biāo)記組已到達(dá)設(shè)置了停止和通知標(biāo)志的列表元素。如果一個(gè)或多個(gè)感興趣的標(biāo)記組已到達(dá)設(shè)置了停止和通知標(biāo)志的列表 元素,則向MFC寫(xiě)入列表停止和通知標(biāo)記確認(rèn)通道寫(xiě)入(wrch)與已停止 的標(biāo)記組對(duì)應(yīng)的標(biāo)記組號(hào)以重新開(kāi)始MFC DMA列表命令(步驟1360 )。然 后操作結(jié)束。圖14中示出了用于等待MFCDMA列表命令到達(dá)設(shè)置了停止和通知標(biāo)志 的列表元素的基本過(guò)程。如所示出的,操作開(kāi)始,將發(fā)出具有設(shè)置了停止 和通知標(biāo)志的列表元素的MFC DMA列表命令(步驟1410 )。執(zhí)行MFC讀取 列表停止和通知標(biāo)記狀態(tài)通道的讀取(rdch)(步驟1420 )。返回的數(shù)據(jù) 是自上次讀取此通道以來(lái)每個(gè)已到達(dá)設(shè)置了停止和通知標(biāo)志的列表元素的 標(biāo)記組的當(dāng)前狀態(tài)。此讀取將停止SPU,直到MFC DMA列表命令已到達(dá)設(shè) 置了停止和通知標(biāo)志的列表元素。判定一個(gè)或多個(gè)感興趣的標(biāo)記組是否已到達(dá)i殳置了停止和通知標(biāo)志的 列表元素(步驟1430 )。將在返回?cái)?shù)據(jù)中設(shè)置相應(yīng)位。由于針對(duì)每個(gè)讀取 重置位,因此軟件必須在等待多個(gè)標(biāo)記組停止時(shí)執(zhí)行標(biāo)記組的累積。如果否,操作將返回步驟1420,直到一個(gè)或多個(gè)感興趣的標(biāo)記組已到 達(dá)設(shè)置了停止和通知標(biāo)志的列表元素。否則,將向MFC寫(xiě)入列表停止和通 知標(biāo)記確i人通道寫(xiě)入(wrch)與已停止的標(biāo)記組對(duì)應(yīng)的標(biāo)記組號(hào)以重新啟 動(dòng)MFC DMA列表命令(步驟l440 )。等待或輪詢(xún)列表停止和通知標(biāo)記組狀態(tài)的備選方案是使用SPU事件設(shè) 備。通常,當(dāng)MFC DMA列表命令執(zhí)行時(shí)SPU程序可以執(zhí)行其他操作時(shí),使 用此過(guò)程。所述過(guò)程例如在圖15中示出。如圖15所示,過(guò)程開(kāi)始,將清除任何未決的MFCDMA列表命令停止和 通知事件(步驟1510)。這例如可以通過(guò)向SPU寫(xiě)入事件確認(rèn)通道寫(xiě)入 (wrch)值"1"完成。通過(guò)向SPU寫(xiě)入事件掩碼通道的Sn位寫(xiě)入"1"來(lái)啟用MFC DMA列表命令停止和通知事件(1520 )。發(fā)出具有設(shè)置了停止和 通知標(biāo)志的列表元素的MFC DMA列表命令(步驟1530 )??梢詮腟PU讀取事件狀態(tài)通道進(jìn)行讀取(rdch)以等待發(fā)生已啟用的 事件(步驟1540 )。此讀取將停止SPU的執(zhí)行直到發(fā)生已啟用的事件。備 選地,可以讀取(rchcnt)與SPU讀取事件狀態(tài)通道關(guān)聯(lián)的計(jì)數(shù)以輪詢(xún)特 定的標(biāo)記事件,直到計(jì)數(shù)返回為"1"。判定是否已發(fā)生已啟用的事件(步驟1550 )。如果否,則操作返回步 驟1540。如果發(fā)生已啟用的事件,則判定是否已發(fā)生DMA列表停止和通知 事件(步驟1560 )。如果尚未發(fā)生DMA列表停止和通知事件,則操作返回 步驟1540。如果發(fā)生DMA列表停止和通知事件,則執(zhí)行從MFC讀取列表停止和通 知標(biāo)記狀態(tài)通道讀取(rdch)以判定哪個(gè)或哪些標(biāo)記組導(dǎo)致此事件(步驟 1570 )。然后,向MFC寫(xiě)入列表停止和通知標(biāo)記確認(rèn)通道寫(xiě)入(wrch)與 已停止的標(biāo)記組對(duì)應(yīng)的標(biāo)記組號(hào)以重新開(kāi)始MFC DMA列表命令(步驟 1580)。MFC寫(xiě)入多源同步請(qǐng)求通道圖16中提供了 MFC寫(xiě)入多源同步請(qǐng)求通道的詳細(xì)信息。MFC寫(xiě)入多源 同步請(qǐng)求通道是MFC多源同步設(shè)備的一部分并導(dǎo)致MFC開(kāi)始跟蹤發(fā)送到關(guān) 聯(lián)MFC的未完成傳輸。MFC多源同步i殳備包括MFC多源同步寄存器(它允 許處理器或設(shè)備從主存儲(chǔ)地址域控制同步),以及MFC寫(xiě)入多源同步請(qǐng)求 通道(MFC—WrMSSyncReq)(它允許SPU從本地存儲(chǔ)地址域控制同步)??梢酝ㄟ^(guò)向MFC寫(xiě)入多源同步請(qǐng)求通道進(jìn)行寫(xiě)入來(lái)請(qǐng)求同步。當(dāng)請(qǐng)求 的同步完成時(shí),通道計(jì)數(shù),皮設(shè)置回"1"并且忽略寫(xiě)入此通道的數(shù)據(jù)。再次 向此通道寫(xiě)入會(huì)導(dǎo)致SPU停止,直到由第一次寫(xiě)入跟蹤的未完成傳輸完成。要使用MFC寫(xiě)入多源同步請(qǐng)求通道,程序?qū)⑾騇FC寫(xiě)入多源同步請(qǐng)求 通道進(jìn)行寫(xiě)入,然后等待MFC寫(xiě)入多源同步請(qǐng)求通道變得可用,即當(dāng)通道 計(jì)數(shù)設(shè)置回'T,時(shí)。軟件將此通道的計(jì)數(shù)初始化為值"1"。此通道啟用了寫(xiě)入阻塞,并且最大計(jì)數(shù)為"1"。 郵箱設(shè)備除了用于與MFC通信的通道之外,本發(fā)明的通道接口進(jìn)一步提供了用 于與SPU中提供的郵箱設(shè)備通信的通道。MFC在SPU與其他處理器及設(shè)備 之間提供了一組郵箱隊(duì)列。每個(gè)郵箱隊(duì)列都具有指定的SPU通道以及相應(yīng) 的薩I0寄存器。SPU軟件通過(guò)使用SPU通道指令來(lái)訪(fǎng)問(wèn)郵箱隊(duì)列。其他處 理器和設(shè)備通過(guò)使用個(gè)醒IO寄存器之一來(lái)訪(fǎng)問(wèn)郵箱隊(duì)列。除了隊(duì)列之外, MFC還提供了隊(duì)列狀態(tài)、郵箱中斷,以及郵箱的SPU事件通知。MMI0寄存 器、通道、狀態(tài)、中斷、郵箱隊(duì)列以及事件統(tǒng)稱(chēng)為"郵箱設(shè)備"。如上所 述,圖2中的MFC寄存器單元240中提供了郵箱設(shè)備。MFC提供了兩個(gè)郵箱隊(duì)列用于將信息從SPU發(fā)送到其他處理器或其他 設(shè)備SPU出站郵箱隊(duì)列和SPU出站中斷郵箱隊(duì)列。這些郵箱隊(duì)列旨在將 短消息發(fā)送到PPE (例如,返回代碼或狀態(tài))。通過(guò)讀糾目應(yīng)的醒IO寄存 器,任何處理器或設(shè)備都可使用由SPU使用寫(xiě)入通道(wrch)指令寫(xiě)入這 些隊(duì)列之一的數(shù)據(jù)。發(fā)送到SPU寫(xiě)入出站中斷郵箱通道的寫(xiě)入通道(wrch)指令還可導(dǎo)致 將中斷發(fā)送到系統(tǒng)中的處理器或其他設(shè)備。從這些隊(duì)列(SPU出站郵箱或 SPU出站中斷郵箱寄存器)中的任一隊(duì)列進(jìn)行的醒10讀取可以設(shè)置SPU事 件,而SPU事件又導(dǎo)致SPU中斷。為外部處理器或其他設(shè)備提供了 一個(gè)郵箱隊(duì)列以將信息發(fā)送到SPU, 即SPU入站郵箱隊(duì)列。此郵箱隊(duì)列旨在由PPE寫(xiě)入。但是,其他處理器、 SPU或其他設(shè)備也可以使用此郵箱隊(duì)列。通過(guò)讀取SPU讀取入站郵箱通道, SPU可使用由處理器或其他設(shè)務(wù)使用MMIO寫(xiě)入向此隊(duì)列寫(xiě)入的數(shù)據(jù)。向SPU 入站郵箱寄存器進(jìn)行的醒IO寫(xiě)入可以設(shè)置SPU事件,而SPU事件又導(dǎo)致 SPU中斷。SPU出站郵箱寄存器用于從相應(yīng)的SPU出站郵箱隊(duì)列讀取32位數(shù)據(jù)。 SPU出站郵箱寄存器具有相應(yīng)的SPU寫(xiě)入出站郵箱通道,以便將數(shù)據(jù)寫(xiě)入SPU出站郵箱隊(duì)列。發(fā)送到SPU出站郵箱隊(duì)列的寫(xiě)入通道(wrch)指令將 指令中指定的32位數(shù)據(jù)加載到SPU出站郵箱隊(duì)列,以供其他處理器或其他 設(shè)備讀取。如果SPU出站郵箱隊(duì)列已滿(mǎn),則SPU將在發(fā)送到此隊(duì)列的寫(xiě)入 通道(wrch)指令上停止,直到從此郵箱寄存器發(fā)生匪10讀取。對(duì)此寄存器進(jìn)行的醒IO讀取返回的信息始終采用SPU寫(xiě)入信息的順 序。沒(méi)有定義從空SPU出站郵箱隊(duì)列進(jìn)行讀取而返回的信息。SPU出站郵 箱隊(duì)列中的表項(xiàng)數(shù)(或隊(duì)列深度)與實(shí)施方式相關(guān)。對(duì)SPU郵箱狀態(tài)寄存器進(jìn)行的醒IO讀取將返回郵箱隊(duì)列的狀態(tài)。SPU 出站郵箱隊(duì)列中的有效隊(duì)列表項(xiàng)數(shù)在SPU郵箱狀態(tài)寄存器的 SPU-Out—Mbox_Count字段中給出。對(duì)SPU出站郵箱寄存器進(jìn)行的醒IO讀 取將設(shè)置未決SPU出站郵箱可用事件。如果郵箱隊(duì)列中剩余的數(shù)據(jù)量低于 與實(shí)施方式相關(guān)的閾值并且啟用此條件(即,將SPU-WrEventMask[Le]設(shè) 置為"1"),則會(huì)更新SPU讀取事件狀態(tài)通道(即,將SPU—RdEventStat [Le] 設(shè)置為'T,),并將其通道計(jì)數(shù)設(shè)置為"1"。這將導(dǎo)致SPU出站中斷郵 箱可用事件。SPU入站郵箱寄存器用于將32位數(shù)據(jù)寫(xiě)入相應(yīng)的SPU入站郵箱隊(duì)列。 SPU入站郵箱隊(duì)列具有相應(yīng)的SPU讀取入站郵箱通道,用于從隊(duì)列讀取數(shù) 據(jù)。SPU讀取入站郵箱通道的讀取通道(rdch)指令將32位數(shù)據(jù)從SPU入 站郵箱隊(duì)列加載到由讀取通道(rdch)指令指定的SPU寄存器。SPU不能 從空郵箱進(jìn)行讀取。如果SPU入站郵箱隊(duì)列為空,則SPU將在到達(dá)此通道 的讀取通道(rdch)指令上停止,直到將數(shù)據(jù)寫(xiě)入郵箱。到達(dá)此通道的讀 取通道(rdch)指令返回的信息始終采用PPE或其他處理器和設(shè)備寫(xiě)入信 息的順序。隊(duì)列中的表項(xiàng)數(shù)(或隊(duì)列深度)與實(shí)施方式相關(guān)。對(duì)SPU郵箱狀態(tài)寄 存器進(jìn)行的應(yīng)IO讀取將返回郵箱隊(duì)列的狀態(tài)。SPU郵箱隊(duì)列中的可用隊(duì)列 位置數(shù)在SPU郵箱狀態(tài)寄存器(即SPU-Mbox—Stat [SPU-In—Mbox-Count]) 的SPU—In—Mbox—Count字段中給出。在寫(xiě)入SPU—In-Mbox之前,軟件將檢查SPU郵箱狀態(tài)寄存器以避免SPU郵箱溢出。對(duì)SPU入站郵箱寄存器進(jìn)行的醒IO寫(xiě)入將設(shè)置未決SPU郵箱事 件。如果啟用(即,SPU-WrEventMask[Mbox]- T ),則會(huì)更新SPU讀取 事件狀態(tài)通道,并將其通道計(jì)數(shù)設(shè)置為'T,,這將導(dǎo)致SPU入站郵箱可用事件。SPU郵箱狀態(tài)寄存器包含相應(yīng)SPE中的SPU和PPE之間的郵箱隊(duì)列的 當(dāng)前狀態(tài)。讀取此寄存器對(duì)郵箱隊(duì)列的狀態(tài)沒(méi)有任何影響。SPU郵箱通道如上所述,MFC提供的郵箱設(shè)備包括多個(gè)SPU郵箱通道,其中包括SPU 寫(xiě)入出站郵箱通道、SPU寫(xiě)入出站中斷郵箱通道,以及SPU讀取入站郵箱 通道。這些SPU郵箱通道^L定義為阻塞通道,即它們將在通道滿(mǎn)時(shí)(寫(xiě)入 阻塞)或數(shù)據(jù)不可用時(shí)(讀取阻塞)停止SPU。當(dāng)應(yīng)用沒(méi)有其他要執(zhí)行的 操作時(shí),通道的阻塞方法非常有利于節(jié)約功率。實(shí)際上,處理器可以置于 低功率狀態(tài),直到釋放空間或數(shù)據(jù)變得可用。雖然這些通道為阻塞通道,并且因此獲得了節(jié)約功率的利益,但是訪(fǎng) 問(wèn)這些通道可能會(huì)導(dǎo)致SPU無(wú)限期停止。軟件可以通過(guò)使用此后討論的SPU 事件設(shè)備,或通過(guò)讀取與郵箱通道關(guān)聯(lián)的通道計(jì)數(shù)來(lái)避免停止SPU。SPU寫(xiě)入出站郵箱通道圖17A提供了根據(jù)本發(fā)明的示意性實(shí)施例的SPU寫(xiě)入出站郵箱通道的 詳細(xì)信息。發(fā)送到此通道的寫(xiě)入通道指令(wrch)將數(shù)據(jù)寫(xiě)入SPU寫(xiě)入出 站郵箱隊(duì)列。SPU寫(xiě)入此通道的數(shù)據(jù)可用于SPU出站郵箱寄存器的腿10讀 取。到達(dá)此通道的寫(xiě)入通道(wrch)還導(dǎo)致關(guān)聯(lián)的通道計(jì)數(shù)遞減'T,。向 已滿(mǎn)的SPU寫(xiě)入出站郵箱隊(duì)列進(jìn)行寫(xiě)入會(huì)導(dǎo)致SPU執(zhí)行停止,直到讀取SPU 出站郵箱寄存器,從而在SPU寫(xiě)入出站郵箱隊(duì)列中釋放位置。為避免停止條件,在發(fā)出通道寫(xiě)入之前,可以讀取與此通道關(guān)聯(lián)的通 道計(jì)數(shù)以確保SPU寫(xiě)入出站郵箱隊(duì)列中存在槽。備選地,可以使用SPU出 站郵箱可用事件來(lái)發(fā)信號(hào)通知SPU寫(xiě)入出站郵箱隊(duì)列(如果確定此隊(duì)列已滿(mǎn))中的槽的可用性。當(dāng)SPU寫(xiě)入出站郵箱隊(duì)列已滿(mǎn)時(shí),讀取與此通道關(guān)聯(lián)的通道計(jì)數(shù)將返 回值"0"。非零值指示了 SPU寫(xiě)入出站郵箱隊(duì)列中的可用32位字?jǐn)?shù)。特權(quán)軟件將SPU寫(xiě)入出站郵箱通道的計(jì)數(shù)初始化為SPU寫(xiě)入出站郵箱 隊(duì)列的深度。此通道為寫(xiě)入阻塞通道。此通道的最大計(jì)數(shù)與實(shí)施方式相關(guān), 并且應(yīng)為SPU寫(xiě)入出站郵箱隊(duì)列的深度(即,可用槽數(shù))。SPU寫(xiě)入出站中斷郵箱通道圖17B提供了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的SPU寫(xiě)入出站中斷郵 箱通道的詳細(xì)信息。到達(dá)此通道的寫(xiě)入通道(wrch)指令將數(shù)據(jù)寫(xiě)入SPU 寫(xiě)入出站中斷郵箱隊(duì)列。SPU寫(xiě)入此通道的數(shù)據(jù)可用于SPU出站中斷郵箱 寄存器的醒10讀取。到達(dá)此SPU寫(xiě)入出站郵箱通道的寫(xiě)入通道(wrch)指令還導(dǎo)致關(guān)聯(lián)的 計(jì)數(shù)遞減"1"。向已滿(mǎn)的SPU寫(xiě)入出站中斷郵箱隊(duì)列進(jìn)行寫(xiě)入會(huì)導(dǎo)致SPU 執(zhí)行停止,直到讀取SPU出站中斷郵箱寄存器,從而在SPU寫(xiě)入出站中斷 郵箱隊(duì)列中釋放位置。為避免停止條件,在發(fā)出通道寫(xiě)入之前,可以讀取與此通道關(guān)聯(lián)的通 道計(jì)數(shù)以確保SPU寫(xiě)入出站中斷郵箱隊(duì)列中存在槽。備選地,可以使用SPU 出站中斷郵箱可用事件來(lái)發(fā)信號(hào)通知SPU寫(xiě)入出站中斷郵箱隊(duì)列(如果此 隊(duì)列先前已滿(mǎn))中的槽的可用性。到達(dá)SPU寫(xiě)入出站中斷郵箱通道的寫(xiě)入 通道(wrch)指令還導(dǎo)致將中斷發(fā)送到處理器或其他設(shè)備。中斷和先前發(fā) 出的MFC命令沒(méi)有順序關(guān)系。當(dāng)SPU寫(xiě)入出站中斷郵箱隊(duì)列已滿(mǎn)時(shí),讀取與此通道關(guān)聯(lián)的計(jì)數(shù)將返 回值"0"。非零計(jì)數(shù)值具有此隊(duì)列中的可用32位字?jǐn)?shù)。特權(quán)軟件將此通道的計(jì)數(shù)初始化為SPU寫(xiě)入出站中斷郵箱隊(duì)列的深 度。此通道為寫(xiě)入阻塞通道。此通道的最大計(jì)數(shù)與實(shí)施方式相關(guān),并且應(yīng) 為SPU寫(xiě)入出站中斷郵箱隊(duì)列的深度(即,可用槽數(shù))。SPU讀取入站郵箱通道圖17C提供了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的SPU讀取入站郵箱通 道的詳細(xì)信息。從此通道讀取將返回SPU讀取入站郵箱隊(duì)列中的下一個(gè)數(shù) 據(jù)。向SPU入站郵箱寄存器發(fā)出寫(xiě)入的處理器或設(shè)備將數(shù)據(jù)放置在SPU讀取入站郵箱隊(duì)列中。從SPU讀取入站郵箱通道讀取會(huì)導(dǎo)致關(guān)聯(lián)的計(jì)數(shù)遞減"1"。讀取空郵 箱會(huì)導(dǎo)致SPU執(zhí)行停止,直到寫(xiě)入SPU入站郵箱寄存器,從而將數(shù)據(jù)項(xiàng)放 置在SPU讀取入站郵箱隊(duì)列中。為避免停止M,在發(fā)出通道讀取之前,據(jù)。備選地,可以使用SPU入站郵箱可用事件來(lái)發(fā)信號(hào)通知SPU讀取入站郵箱隊(duì)列中的數(shù)據(jù)的可用性。如果郵箱為空,則讀取通道計(jì)數(shù)(rchcnt )會(huì)返回值"0"。如果rchcnt 的結(jié)果為非零,則郵箱包含信息,此信息已經(jīng)由PPE寫(xiě)入,但尚未由SPU讀取。特權(quán)軟件將SPU讀取入站郵箱通道的通道計(jì)數(shù)初始化為"0"。最大計(jì) 數(shù)與實(shí)施方式相關(guān)。此通道為讀取阻塞通道。SPU信號(hào)通知設(shè)備MFC提供了 SPU信號(hào)通知設(shè)備,用于將信號(hào)(例如緩沖區(qū)完成標(biāo)志) 從系統(tǒng)中的其他處理器和設(shè)備發(fā)送到SPU。例如,可以在圖2的MFC寄存 器單元250中提供此信號(hào)通知設(shè)備。BPA提供了兩個(gè)獨(dú)立的信號(hào)通知i殳備SPU信號(hào)通知1和SPU信號(hào)通知 2。每個(gè)設(shè)備都包括一個(gè)寄存器和一個(gè)通道SPU信號(hào)通知1寄存器和SPU 信號(hào)通知1通道;以及SPU信號(hào)通知2寄存器和SPU信號(hào)通知2通道。SPU使用一組發(fā)送信號(hào)命令以及與將信號(hào)發(fā)送到其的SPU關(guān)聯(lián)的信號(hào) 通知寄存器的有效地址來(lái)發(fā)出信號(hào)。不支持發(fā)送信號(hào)命令的PPE和其他設(shè) 備通過(guò)向與將信號(hào)發(fā)送到其的SPU關(guān)聯(lián)的SPU信號(hào)通知寄存器執(zhí)行MMIO 寫(xiě)入來(lái)模擬發(fā)送信號(hào)命令。設(shè)備編程為覆寫(xiě)模式(用于一對(duì)一信令環(huán)境中)或者邏輯'或,模式(用于多對(duì)一信令環(huán)境中)。在SPU配置寄存器中設(shè)置每個(gè)通道的模式。執(zhí)行發(fā)送信號(hào)命令或醒io (以編程為覆寫(xiě)模式的信令寄存器為目標(biāo))會(huì)將關(guān)聯(lián)通道的內(nèi)容設(shè)置為信令操作的數(shù)據(jù)。它還將相應(yīng)的通道計(jì)數(shù)設(shè)置 為"r,。在邏輯'或,模式中,將信令操作的數(shù)據(jù)與通道的當(dāng)前內(nèi)斜目'或,, 并將相應(yīng)的計(jì)數(shù)i殳置為值"r'。此外,當(dāng)執(zhí)行隔離的加載時(shí),將信號(hào)通知寄存器用作映像的有效地址。在這些情況下,SPU信號(hào)通知1寄存器包含64位有效地址的高32位,而 SPU信號(hào)通知2寄存器包含最低的32位。在設(shè)置有效地址之前,軟件必須 將SPU信號(hào)通知設(shè)備置于覆寫(xiě)模式,以便隔離的加載請(qǐng)求正確操作。SPU信令通道SPU信令通道是SPU信號(hào)通知設(shè)備的PPE部分。它們用于從系統(tǒng)中的 其他處理器和其他設(shè)備讀取信號(hào)。信令通道被配置為讀取阻塞通道,并且 最大計(jì)數(shù)為'T,。當(dāng)向這些通道之一發(fā)送讀取通道(rdch)指令并且關(guān)聯(lián) 的通道計(jì)數(shù)為"1"時(shí),會(huì)將通道的當(dāng)前內(nèi)容和關(guān)聯(lián)的計(jì)數(shù)重置為"0"。 當(dāng)向這些通道之一發(fā)送讀取通道(rdch)指令,并且通道計(jì)數(shù)為"0"時(shí), SPU將停止,直到處理器或設(shè)備向關(guān)聯(lián)的寄存器執(zhí)行醒IO寫(xiě)入。SPU信號(hào)通知通道圖18提供了根據(jù)本發(fā)明的示意性實(shí)施例的SPU信號(hào)通知通道的詳細(xì)信 息。信號(hào)通知通道可以是SPU信號(hào)通知1或2通道。發(fā)送到SPU信號(hào)通知 通道的讀取通道(rdch)指令將返回信號(hào)控制字1的32位值,并自動(dòng)重置 讀取時(shí)設(shè)置的任何位。如果沒(méi)有信號(hào)未決,則從此通道進(jìn)行讀取將停止 SPU,直到發(fā)出信號(hào)。如果沒(méi)有信號(hào)未決,則發(fā)送到此通道的讀取通道計(jì)數(shù) (rchcnt)指令將返回"0"。如果未讀取的信號(hào)未決,則它將返回T 。特權(quán)軟件將此通道的計(jì)數(shù)初始化為值"0"。此通道啟用了讀取阻塞,并且最大計(jì)數(shù)為"1"。SPU遞減器每個(gè)SPU都包含一個(gè)32位遞減器。如果在MFC控制寄存器中啟用,則 會(huì)向此寄存器寫(xiě)入設(shè)置為"0"的MFC—CNTL[Dh]。當(dāng)向SPU寫(xiě)入遞減器通 道發(fā)出寫(xiě)入通道(wrch)指令時(shí),將啟動(dòng)SPU遞減器。通過(guò)執(zhí)行此后所述 的程序序列,或者當(dāng)向MFC控制寄存器寫(xiě)入設(shè)置為"1"的MFC-CNTL[Dh] 時(shí),將停止遞減器。在MFC控制寄存器中提供了遞減器的當(dāng)前運(yùn)行狀態(tài)(即, MFC-CNTL [Ds])。無(wú)需使遞減器事件未決以便停止遞減器。指定了兩個(gè)通道用于管理遞減器 一個(gè)用于設(shè)置遞減器值, 一個(gè)用于 讀取遞減器的當(dāng)前內(nèi)容。當(dāng)最高位(位0)從"0"更改為"1"時(shí),將發(fā) 生遞減器事件。SPU寫(xiě)入遞減器通道圖19A提供了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的SPU寫(xiě)入遞減器通道 的詳細(xì)信息。SPU寫(xiě)入遞減器通道用于將32位值加載到遞減器。加載到遞 減器的值將確定寫(xiě)入通道(wrch)指令與遞減器事件之間的經(jīng)過(guò)的時(shí)間。 當(dāng)遞減器的最高位(msb)從"0"更改為"1"時(shí),〗更會(huì)發(fā)生事件。如果加 載到遞減器的值導(dǎo)致msb從"0"更改為'T,,則立即發(fā)信號(hào)通知事件。 將遞減器設(shè)置為值"0"將在單個(gè)遞減器間隔之后導(dǎo)致事件。為了正確保存和恢復(fù)遞減器的狀態(tài),必須在更改遞減器值之前停止遞 減器。以下序列示出了設(shè)置新的遞減器值的過(guò)程1. 寫(xiě)入SPU寫(xiě)入事件掩碼通道以禁用遞減器事件。2. 寫(xiě)入SPU寫(xiě)入事件確認(rèn)通道以確認(rèn)任何未決的事件并停止遞減器。 遞減器停止,因?yàn)橐言诓襟El中禁用遞減器事件。3. 寫(xiě)入SPU寫(xiě)入遞減器通道以設(shè)置新的遞減器計(jì)數(shù)值。(注遞減器 啟動(dòng),因?yàn)椴襟E2已停止遞減器。)4. 寫(xiě)入SPU寫(xiě)入事件掩碼通道以啟用遞減器事件。5.等待計(jì)時(shí)器到期。此通道為非阻塞通道,并且沒(méi)有關(guān)聯(lián)的計(jì)數(shù)。每當(dāng)向此通道發(fā)送讀取 通道計(jì)數(shù)(rchcnt)指令時(shí),計(jì)數(shù)將始終返回為"1"。SPU讀取遞減器通道圖19B提供了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的SPU讀取遞減器通道 的詳細(xì)信息。SPU讀取遞減器通道用于讀取32位遞減器的當(dāng)前值。讀取遞 減器計(jì)數(shù)對(duì)遞減器的準(zhǔn)確性沒(méi)有任何影響。對(duì)遞減器的相繼讀取將返回相 同的值。此通道為非阻塞通道,并且沒(méi)有關(guān)聯(lián)的計(jì)數(shù)。每當(dāng)向此通道發(fā)送讀取 通道計(jì)數(shù)(rchcnt)指令時(shí),計(jì)數(shù)將始終返回為'T,。SPU狀態(tài)管理通道除了上述通道之外,還提供了 SPU狀態(tài)管理通道。這些SPU狀態(tài)管理 通道包括SPU讀取機(jī)器狀態(tài)通道和兩個(gè)中斷相關(guān)狀態(tài)通道。中斷相關(guān)狀態(tài) 通道包括SPU寫(xiě)入狀態(tài)保存和恢復(fù)通道以及SPU讀取狀態(tài)保存和恢復(fù)通道。SPU讀取機(jī)器狀態(tài)通道圖20A提供了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的SPU讀取^幾器狀態(tài)通 道的詳細(xì)信息。SPU讀取機(jī)器狀態(tài)通道包含當(dāng)前SPU機(jī)器狀態(tài)信息。此通 道包含兩個(gè)狀態(tài)位隔離狀態(tài)和SPU中斷狀態(tài)。此隔離狀態(tài)反映SPU的當(dāng) 前運(yùn)行狀態(tài),即隔離或非隔離。SPU中斷啟用狀態(tài)反映SPU中斷啟用的當(dāng)前狀態(tài)。如果啟用,則當(dāng)存 在任何已啟用的SPU事件時(shí)將生成SPU中斷。此通道為非阻塞通道,并且沒(méi)有關(guān)聯(lián)的計(jì)數(shù)。每當(dāng)向此通道發(fā)送讀取 通道計(jì)數(shù)(rchcnt)指令時(shí),計(jì)數(shù)將始終返回為"1"。SPU寫(xiě)入狀態(tài)保存和恢復(fù)通道圖20B提供了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的SPU寫(xiě)入狀態(tài)保存和 恢復(fù)通道的詳細(xì)信息。向此通道進(jìn)行寫(xiě)入會(huì)更新SPU中的狀態(tài)保存和恢復(fù) 寄存器0 (SRRO)的內(nèi)容。當(dāng)支持嵌套的中斷時(shí),向此通道進(jìn)行寫(xiě)入通常用于恢復(fù)中斷狀態(tài)信息。當(dāng)啟用SPU中斷時(shí),不應(yīng)向此通道進(jìn)行寫(xiě)入。這樣做會(huì)導(dǎo)致SRRO的內(nèi)容不確定。必須在寫(xiě)入此通道之后并在執(zhí)行依賴(lài)于SRRO內(nèi)容的指令之前發(fā) 出通道形式的同步指令。此通道為非阻塞通道,并且沒(méi)有關(guān)聯(lián)的計(jì)數(shù)。每當(dāng)向此通道發(fā)送讀取 通道計(jì)數(shù)(rchcnt)指令時(shí),計(jì)數(shù)將始終返回為"1"。SPU讀取狀態(tài)保存和恢復(fù)通道圖20C提供了 SPU讀取狀態(tài)保存和恢復(fù)通道的詳細(xì)信息。對(duì)此通道進(jìn) 行讀取會(huì)返回SPU中的狀態(tài)保存和恢復(fù)寄存器0 (SRRO)的內(nèi)容。當(dāng)支持 嵌套的中斷時(shí),對(duì)此通道進(jìn)行讀取通常用于保存中斷狀態(tài)信息。此通道為非阻塞通道,并且沒(méi)有關(guān)聯(lián)的計(jì)數(shù)。每當(dāng)向此通道發(fā)送讀取 通道計(jì)數(shù)(rchcnt)指令時(shí),計(jì)數(shù)將始終返回為"1"。SPU事件設(shè)備圖21是示出了 SPU事件設(shè)備的邏輯表示的示意性方塊圖。如圖21所 示,邊沿觸發(fā)的事件將SPU未決事件寄存器2110中的相應(yīng)位設(shè)置為"1"。 通過(guò)使用通道指令向SPU寫(xiě)入事件確認(rèn)通道2120中的相應(yīng)位寫(xiě)入"1", 來(lái)確認(rèn)或重置SPU未決事件寄存器2110中的事件。SPU未決事件寄存器(Pend—Event )2110是內(nèi)部寄存器??梢允褂肧PU 通道訪(fǎng)問(wèn)設(shè)備來(lái)讀取SPU未決事件寄存器2110。使用通道讀取(rdch)指令讀取SPU讀取事件狀態(tài)通道2130將返回與 SPU寫(xiě)入事件掩碼通道2140中的值進(jìn)行邏輯'與,的SPU未決事件寄存器 的值。此功能僅向SPU程序提供已啟用事件的狀態(tài),而SPU未決事件寄存 器2110允許特權(quán)軟件查看所有已發(fā)生的事件。SPE上下文保存和恢復(fù)操作需要訪(fǎng)問(wèn)所有事件。當(dāng)向SPU寫(xiě)入事件掩碼通道2140寫(xiě)入新值,或者當(dāng)在SPU未決事件寄 存器2110中記錄了新事件時(shí),SPU讀取事件狀態(tài)通道2130的內(nèi)容將更改。 SPU讀取事件狀態(tài)通道2130中的任何位從"0"更改為'T,都會(huì)使SPU讀 取事件狀態(tài)通道計(jì)數(shù)遞增"1"。如果向SPU寫(xiě)入事件確認(rèn)通道212G發(fā)送 寫(xiě)入之后仍在SPU讀取事件狀態(tài)通道2130中設(shè)置事件,則計(jì)數(shù)也會(huì)遞增。 當(dāng)使用通道讀取(rdch)指令讀取SPU讀取事件狀態(tài)通道2130時(shí),計(jì)數(shù)將 遞減"1"。計(jì)數(shù)在值"1"時(shí)飽和,并且不會(huì)遞減到低于值"0"。當(dāng)SPU 讀取事件狀態(tài)通道計(jì)數(shù)為非零時(shí),會(huì)將中斷條件(如果啟用)發(fā)送到SPU。SPU事件通道SPU程序可以使用多個(gè)SPU事件通道來(lái)監(jiān)視事件。這些SPU事件通道 包括SPU讀取事件狀態(tài)通道、SPU寫(xiě)入事件掩碼通道、SPU讀取事件掩碼通 道,以及SPU寫(xiě)入事件確認(rèn)通道。SPU讀取事件狀態(tài)通道包含SPU寫(xiě)入事 件掩碼通道中啟用的所有事件的狀態(tài)。SPU寫(xiě)入事件確認(rèn)通道用于重置事 件的狀態(tài),此狀態(tài)通常是SPU程序已處理或記錄的事件的指示。如果沒(méi)有 任何已啟用的事件,則從SPU讀取事件狀態(tài)通道進(jìn)行讀取將停止SPU程序。當(dāng)各個(gè)事件具有類(lèi)似的用于停止SPU程序的方法時(shí),如果尚未發(fā)生事 件,則SPU事件設(shè)備為軟件提供了用于查找多個(gè)事件以及導(dǎo)致SPU程序中斷的方法。SPU讀取事件狀態(tài)通道圖22A提供了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的SPU讀取事件狀態(tài)通 道的詳細(xì)信息。SPU讀取事件狀態(tài)通道包含讀取此通道時(shí)SPU寫(xiě)入事件掩 碼通道啟用的所有事件的當(dāng)前狀態(tài)。如果SPU寫(xiě)入事件掩碼通道指定某個(gè) 事件不是查詢(xún)的一部分,則在報(bào)告的狀態(tài)中此事件的對(duì)應(yīng)位置為"0"。從通道計(jì)數(shù)為"0"的SPU讀取事件狀態(tài)通道進(jìn)^f^取會(huì)導(dǎo)致SPU停止,從而提供"等待事件"功能。從通道計(jì)數(shù)為"r的此通道進(jìn)行讀取會(huì)返回任何已啟用的未決事件的狀態(tài),并將通道計(jì)數(shù)設(shè)置為"o"。針對(duì)以下條件將通道計(jì)數(shù)i殳置為"r :.發(fā)生事件并且SPU寫(xiě)入事件掩碼通道中的相應(yīng)掩碼為'T,;.向SPU寫(xiě)入事件掩碼通道中與SPU未決事件寄存器中的"1"對(duì)應(yīng)的位位置寫(xiě)入"1"; 向SPU寫(xiě)入事件確認(rèn)通道寫(xiě)入之后已啟用的事件未決;以及 .特權(quán)軟件使用SPU通道訪(fǎng)問(wèn)設(shè)備將通道計(jì)數(shù)設(shè)置為"1"。 如果尚未發(fā)生任何已啟用的事件,則SPU讀取事件狀態(tài)通道的讀取通 道計(jì)數(shù)(rchcnt)指令將返回零。當(dāng)從SPU讀取事件狀態(tài)通道讀取事件狀 態(tài)時(shí),讀取通道計(jì)數(shù)(rchcnt)指令可用于避免停止SPU。特權(quán)軟件必須將SPU讀取事件狀態(tài)通道的計(jì)數(shù)值初始化為"0"。將 使用SPU通道訪(fǎng)問(wèn)設(shè)備中的SPU通道計(jì)數(shù)寄存器來(lái)初始化通道計(jì)數(shù)。如果 啟用SPU中斷(SPU-RdMachStat[IE]設(shè)置為T(mén) ),則非零的SPU讀取事 件狀態(tài)通道計(jì)數(shù)會(huì)導(dǎo)致向SPU發(fā)出中斷。應(yīng)當(dāng)指出,軟件可以在兩種情況下導(dǎo)致幻像事件1. 如果在事件使SPU讀取事件狀態(tài)通道計(jì)數(shù)遞增之后并在從SPU讀取 事件狀態(tài)通道讀取事件狀態(tài)之前,軟件對(duì)事件進(jìn)行確認(rèn)或掩碼。在此 情況下,讀取SPU讀取事件狀態(tài)通道將返回指示事件不再存在或已禁 用的數(shù)據(jù)。2. 如果在讀取SPU讀取事件狀態(tài)通道之前并在確認(rèn)事件之前,軟件重 置已啟用事件的中斷條件(例如從郵箱進(jìn)行讀取)。在此情況下,即 使生成事件的條件不再存在,讀取事件狀態(tài)寄存器仍將返回指示事件 仍然未決的數(shù)據(jù)。在此情況下,仍然必須確認(rèn)事件。 為避免生成幻像事件,應(yīng)按以下方式處理事件.讀取SPU讀取事件狀態(tài)通道。.對(duì)于所有要處理的事件,通過(guò)向SPU寫(xiě)入事件確認(rèn)通道寫(xiě)入相應(yīng)位 來(lái)確認(rèn)事件。.處理事件(例如,讀取郵箱、重置或停止計(jì)時(shí)器,或讀取信號(hào)通知寄存器)。SPU寫(xiě)入事件掩碼通道圖22B提供了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的SPU寫(xiě)入事件掩碼通 道的詳細(xì)信息。SPU寫(xiě)入事件掩碼通道選擇哪些未決事件將影響SPU讀取 事件狀態(tài)通道的狀態(tài)。此通道的內(nèi)容被保留,直到發(fā)生后續(xù)通道寫(xiě)入或SPU 通道訪(fǎng)問(wèn)??梢酝ㄟ^(guò)讀取SPU讀取事件掩碼通道訪(fǎng)問(wèn)此通道的當(dāng)前內(nèi)容。無(wú)論SPU事件掩碼設(shè)置為何都將在SPU未決事件寄存器中記錄所有事 件。事件保持未決,直到被到達(dá)SPU寫(xiě)入事件確認(rèn)通道的寫(xiě)入通道(wrch) 指令清除或者特權(quán)軟件使用SPU通道訪(fǎng)問(wèn)設(shè)備向SPU未決事件寄存器加載 新值。未決事件將被清除,即使其已被禁用。已禁用并隨后清除的未決事件不會(huì)反映在SPU讀取事件狀態(tài)通道中。 啟用未決事件會(huì)導(dǎo)致更新SPU讀取事件狀態(tài)通道和SPU中斷(如果啟用)。此通道為非阻塞通道并且沒(méi)有關(guān)聯(lián)的計(jì)數(shù)。此通道的讀取通道計(jì)數(shù) (rchcnt)指令將始終返回'T,。圖22C提供了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的SPU讀取事件掩碼通 道的詳細(xì)信息。SPU讀取事件掩碼通道用于讀取事件狀態(tài)掩碼的當(dāng)前值。 讀取此通道將始終返回由SPU寫(xiě)入事件掩碼通道寫(xiě)入的最后數(shù)據(jù)。此通道 可用于避免事件狀態(tài)掩碼的軟件影子復(fù)制以及進(jìn)行SPE上下文保存和恢復(fù) 操作。此通道為非阻塞通道,并且沒(méi)有關(guān)聯(lián)的計(jì)數(shù)。每當(dāng)向此通il^送讀 取通道計(jì)數(shù)(rchcnt)指令時(shí),計(jì)數(shù)將始終返回為"1"。SPU寫(xiě)入事件確認(rèn)通道圖22D提供了根據(jù)本發(fā)明的一個(gè)示意性實(shí)施例的SPU寫(xiě)入事件確認(rèn)通 道的詳細(xì)信息。向設(shè)置了特定事件位的SPU寫(xiě)入事件確認(rèn)通道進(jìn)行寫(xiě)入將 確認(rèn)軟件是否處理相應(yīng)事件。已確認(rèn)的事件被重置和重新取樣。已報(bào)告但未確認(rèn)的事件將繼續(xù)被報(bào)告,直到被確認(rèn)或直到由特權(quán)軟件使用SPU通道訪(fǎng)問(wèn)設(shè)備清除。不會(huì)在SPU讀取事件狀態(tài)通道中報(bào)告已禁用的事件,但是事件會(huì)保持 未決,直到通過(guò)向SPU寫(xiě)入事件確認(rèn)通道中的相應(yīng)位寫(xiě)入'T,來(lái)清除這些 事件。確認(rèn)已禁用的事件會(huì)清除此事件,即使尚未報(bào)告此事件也會(huì)如此。 在事件發(fā)生之前清除事件會(huì)導(dǎo)致軟件引起的死鎖。此通道為非阻塞通道,并且沒(méi)有關(guān)聯(lián)的計(jì)數(shù)。每當(dāng)向此通道發(fā)送讀取 通道計(jì)數(shù)(rchcnt)指令時(shí),計(jì)數(shù)將始終返回為"1"。SPU事件硬件通過(guò)檢測(cè)相應(yīng)的通道計(jì)數(shù)、遞減器計(jì)數(shù)或SPU通道訪(fǎng)問(wèn)操作來(lái)確 定事件。上述的BPA支持許多不同類(lèi)型的事件。例如,當(dāng)MFC讀取標(biāo)記組 狀態(tài)通道的計(jì)數(shù)從Q更改為非零值時(shí),將設(shè)置MFC標(biāo)記組狀態(tài)更新事件。 當(dāng)MFC讀取列表停止和通知標(biāo)記狀態(tài)通道的計(jì)數(shù)從0更改為非零值時(shí),將 設(shè)置MFC DMA列表命令停止和通知事件。當(dāng)排隊(duì)的MFC命令操作碼寄存器 的計(jì)數(shù)從0 (已滿(mǎn))更改為非零值(未滿(mǎn))時(shí),將設(shè)置MFC SPU命令隊(duì)列 可用事件。當(dāng)SPU讀取入站郵箱通道的計(jì)數(shù)從0更改為非零值時(shí),將設(shè)置 SPU入站郵箱可用事件。同樣,當(dāng)遞減器計(jì)數(shù)的最高位從0更改為1時(shí),將設(shè)置SPU遞減器事 件。如果加載到遞減器的值導(dǎo)致最高位從0更改為1,則立即發(fā)信號(hào)通知 事件。將遞減器值設(shè)置為O會(huì)在單個(gè)遞減器間隔之后導(dǎo)致事件。此外,當(dāng)SPU寫(xiě)入出站中斷郵箱通道計(jì)數(shù)從O更改為非零值時(shí),將設(shè) 置SPU出站郵箱可用事件。當(dāng)相應(yīng)SPU信號(hào)通知通道的計(jì)數(shù)從0更改為非 零值時(shí),將設(shè)置SPU信號(hào)通知1或2可用事件。當(dāng)原子保留丟失時(shí),將設(shè) 置鎖定線(xiàn)保留事件(參見(jiàn)以下的"鎖定線(xiàn)保留丟失事件,, 一節(jié))。當(dāng)向SPU 特權(quán)控制寄存器進(jìn)行寫(xiě)入且關(guān)注事件請(qǐng)求位被設(shè)置為1時(shí),將設(shè)置特權(quán)關(guān) 注事件(參見(jiàn)以下的"特權(quán)關(guān)注事件,, 一節(jié))。當(dāng)MFC寫(xiě)入多源同步請(qǐng)求 通道計(jì)數(shù)從值0更改為值1時(shí),將設(shè)置多源同步事件。現(xiàn)在將更詳細(xì)地描述這些事件。MFC標(biāo)記組狀態(tài)更新事件MFC標(biāo)記組狀態(tài)更新事件用于通知SPU程序一個(gè)或多個(gè)標(biāo)記組已完成, 以及MFC讀取標(biāo)記組狀態(tài)通道已更新并可被讀取而不會(huì)停止SPU (參見(jiàn)以 上的"MFC標(biāo)記組狀態(tài)通道" 一節(jié))。當(dāng)MFC讀取標(biāo)記組狀態(tài)通道的通道 計(jì)數(shù)從"0"更改為'T,時(shí),將發(fā)生事件。事件的發(fā)生會(huì)將Pend—Event [Tg] 設(shè)置為T(mén) 。如果啟用事件(即,將SPU-RdEventStat[Tg]設(shè)置為T(mén) ), 則將SPU事件狀態(tài)通道的計(jì)數(shù)設(shè)置為"1"。當(dāng)向SPU未決事件寄存器發(fā)出通道寫(xiě)入(wrch),或者當(dāng)特權(quán)軟件使 用SPU通道訪(fǎng)問(wèn)設(shè)備更新SPU未決事件寄存器且相應(yīng)位設(shè)置為"0"時(shí),會(huì) 將Pend—Event [Tg]位設(shè)置為"0"。在針對(duì)一個(gè)或多個(gè)標(biāo)記組發(fā)出任何命 令之前必須清除此事件。MFC DMA列表命令停止和通知事件MFC DMA列表命令停止和通知事件用于通知SPU程序MFC DMA列表命 令內(nèi)的某個(gè)列表元素已完成,以及MFC讀取列表停止和通知標(biāo)記狀態(tài)通道 已更新并可凈皮讀取而不會(huì)停止SPU。當(dāng)MFC讀取列表停止和通知標(biāo)記狀態(tài) 通道的通道計(jì)數(shù)從"0"更改為'T,時(shí),會(huì)發(fā)生此事件。當(dāng)設(shè)置了停止和通知標(biāo)志的列表元素的所有傳輸,以及MFC DMA列表 命令中的所有先前列表元素的傳輸都已相對(duì)于關(guān)聯(lián)的SPE完成時(shí),會(huì)將計(jì) 數(shù)設(shè)置為"1"。當(dāng)發(fā)生此事件時(shí),它將Pend-Event[Sn]設(shè)置為"1"。如 果啟用事件(即,將PU-RdEventStat[Sn]設(shè)置為"1"),則會(huì)將SPU讀 取事件狀態(tài)通道的計(jì)數(shù)設(shè)置為"1"。當(dāng)向標(biāo)記位設(shè)置為'T,的SPU寫(xiě)入 事件確認(rèn)通道發(fā)出通道寫(xiě)入(wrch) (SPU—WrEventAck[Sn]),或者當(dāng)特 權(quán)軟件使用相應(yīng)位設(shè)置為"0"的SPU通道訪(fǎng)問(wèn)設(shè)備更新SPU未決事件寄存 器時(shí),會(huì)將Pend-Event[Sn]位設(shè)置為"0"。圖23中示出了用于處理MFCDMA列表命令停止和通知事件的過(guò)程。如圖23所示,過(guò)程開(kāi)始,將對(duì)SPU讀取事件掩碼通道執(zhí)行讀取通道(rdch) 指令并將數(shù)據(jù)保存在"掩碼"中(步驟2310 )。通過(guò)向SPU-WrEventMask [Sn] 設(shè)置為"0"的SPU寫(xiě)入事件掩碼通道發(fā)出寫(xiě)入通道指令來(lái)對(duì)事件進(jìn)行掩碼 (步驟2320 )。通過(guò)向SPU-WrEventAck[Sn]設(shè)置為1的SPU寫(xiě)入事件確認(rèn) 通道執(zhí)行寫(xiě)入通道(wrch)指令來(lái)確認(rèn)事件(步驟2330 )。然后,向MFC讀取列表停止和通知標(biāo)記狀態(tài)通道MFC—StallStat [gn] 發(fā)送讀取通道(rdch)指令(步驟2340 )。返回的信息用于判定哪個(gè)或哪 些標(biāo)記組具有處于停止和通知狀態(tài)的DMA列表元素(步驟2350 )。然后, 針對(duì)每個(gè)具有已停止DMA列表元素的標(biāo)記組執(zhí)行應(yīng)用特定的操作(步驟 2360)。通過(guò)向列表停止和通知標(biāo)記確認(rèn)通道MFC一StallAck[MFC標(biāo)記](méi)(其中 提供的MFC標(biāo)記是要重新開(kāi)始的標(biāo)記組的編碼標(biāo)記ID)發(fā)出寫(xiě)入通道 (wrch)指令來(lái)確認(rèn)和重新開(kāi)始每個(gè)已停止的DMA列表命令(步驟2370 )。 然后退出DMA列表停止和通知處理機(jī)(步驟2380 )。應(yīng)當(dāng)指出,如果應(yīng)用 軟件沒(méi)有確認(rèn)MFC—StallStat[gn]通道中指示的所有已停止標(biāo)記組,則不 會(huì)針對(duì)未確認(rèn)的標(biāo)記組發(fā)生第二個(gè)停止和通知事件。通過(guò)向具有SPU—WrEvent Mask[掩碼]的SPU寫(xiě)入事件掩碼通iOL出寫(xiě) 入通道(wrch)指令來(lái)恢復(fù)"掩碼"(步驟2390 )。然后退出通用事件處 理機(jī)(步驟2395 )。應(yīng)當(dāng)指出,當(dāng)DMA列表包含多個(gè)設(shè)置了停止和通知標(biāo)志的列表元素, 以及/或者當(dāng)標(biāo)記組具有多個(gè)排隊(duì)有設(shè)置了停止和通知標(biāo)志的元素的DMA 列表命令時(shí),應(yīng)用軟件將在為標(biāo)記組排隊(duì)DMA列表命令之前將標(biāo)記組特定 的停止計(jì)數(shù)器初始化為0。此外,當(dāng)為具有停止和通知元素的標(biāo)記組排隊(duì) 多個(gè)DMA列表命令時(shí),將借助標(biāo)記特定的防護(hù)、屏障或命令屏障強(qiáng)制實(shí)施 排序。每次指示標(biāo)記組的停止和通知狀態(tài)時(shí),都應(yīng)遞增相應(yīng)的計(jì)數(shù)器。然 后,應(yīng)用軟件可以使用此計(jì)數(shù)器來(lái)確定將在列表中的哪個(gè)點(diǎn)發(fā)生停止。應(yīng)用軟件使用停止和通知來(lái)更新由于動(dòng)態(tài)更改條件而停止的列表元素 之后的列表元素地址和傳輸大小??梢酝ㄟ^(guò)將其傳輸大小設(shè)置為O來(lái)跳過(guò)已停止列表元素之后的列表元素。但是,不能更改排隊(duì)的DMA列表命令中 的列表元素?cái)?shù)。MFC SPU命令隊(duì)列可用事件MFC SPU命令隊(duì)列可用事件用于通知SPU程序MFC SPU命令隊(duì)列中的 某個(gè)表項(xiàng)可用以及可以寫(xiě)入MFC命令操作碼通道而不會(huì)停止SPU。當(dāng)MFC 命令操作碼通道的通道計(jì)數(shù)從"0"(已滿(mǎn))更改為非零(未滿(mǎn))值時(shí),會(huì)發(fā)生此事件。當(dāng)MFC SPU命令隊(duì)列中的一個(gè)或多個(gè)MFC DMA命令完成時(shí),會(huì)將計(jì)數(shù) 設(shè)置為T(mén) 。當(dāng)發(fā)生此事件時(shí),它將Pend一Event[Qv]設(shè)置為T(mén) 。如果 啟用事件(即,SPU—RdEventMask [Qv]為T(mén) ),則會(huì)將SPU—R犯ventStat [Qv] 設(shè)置為'T,并將SPU讀取事件狀態(tài)通道的計(jì)數(shù)設(shè)置為"1"。當(dāng)向SPU寫(xiě) 入事件確認(rèn)通ii^出通道寫(xiě)入(wrch)(即,將SPU—WrEventAck[Qv]設(shè)置 為"1"),或者當(dāng)特權(quán)軟件使用相應(yīng)位設(shè)置為"0"的SPU通道訪(fǎng)問(wèn)設(shè)備 來(lái)更新SPU未決事件寄存器時(shí),會(huì)將Pend—Event [Qv]位設(shè)置為"0"。圖24中示出了用于處理MFC SPU命令隊(duì)列可用事件的過(guò)程。如圖24 所示,過(guò)程開(kāi)始,將對(duì)SPU讀取事件掩碼通il^送讀取通道(rdch)指令 并將數(shù)據(jù)保存在"掩碼,,中(步驟2410)。通過(guò)向SPU-WrEventMask[Qv] 設(shè)置為"0"的SPU寫(xiě)入事件掩碼通道發(fā)出寫(xiě)入通道指令來(lái)對(duì)事件進(jìn)行掩碼 (步驟2420 )。通過(guò)向PU—WrEventAck[Qv]設(shè)置為T(mén)的SPU寫(xiě)入事件確 認(rèn)通道執(zhí)行寫(xiě)入通道(wrch)指令來(lái)確認(rèn)事件(步驟2430 )。通過(guò)向MFC命令操作碼通道(MFC—CMD)發(fā)出讀取通道計(jì)數(shù)(rchcnt) 指令來(lái)獲取通道計(jì)數(shù)(步驟2440 )。判定通道計(jì)數(shù)是否為"0"(步驟2450 )。 如果否,則將DMA命令入隊(duì)到MFC命令隊(duì)列中(步驟2460 )。然后,判定 隊(duì)列中是否剩下其他命令(步驟2470 )。如果是,則過(guò)程返回步驟2430。 如果沒(méi)有剩下的其他命令,或如果通道計(jì)數(shù)為"0",則退出SPU命令隊(duì)列 處理機(jī)(步驟2480 )。然后,通過(guò)向SPU寫(xiě)入事件掩碼通道發(fā)出寫(xiě)入通道 (wrch)指令來(lái)恢復(fù)掩碼(步驟2490 )。然后退出通用事件處理機(jī)(步驟SPU入站郵箱可用事件SPU入站郵箱可用事件用于通知SPU程序PPE或其他i殳備已寫(xiě)入空SPU 郵箱以及可讀取SPU讀取入站郵箱通道(參見(jiàn)124頁(yè))而不停止SPU。如 果啟用此事件(即,SPU—RdEventStat[Mb]為T(mén) ),則會(huì)將SPU讀取事 件狀態(tài)通道的計(jì)數(shù)"i殳置為'T'。當(dāng)SPU讀取入站郵箱通道的通道計(jì)數(shù)從"0"(空)更改為非零(非空) 值時(shí),會(huì)發(fā)生此事件。事件的發(fā)生會(huì)將Pend—Event [Mb]設(shè)置為"1"。當(dāng) 向SPU寫(xiě)入事件確認(rèn)通道發(fā)出通道寫(xiě)入(wrchX即,將SPU—WrEventAck[Mb] 設(shè)置為'T,),或者當(dāng)特權(quán)軟件使用相應(yīng)位設(shè)置為"0"的SPU通道訪(fǎng)問(wèn) 設(shè)備來(lái)更新SPU未決事件寄存器時(shí),會(huì)將Pend-Event[Mb]位設(shè)置為"0"。圖25中示出了用于處理SPU入站郵箱可用事件的過(guò)程。如圖25所示, 過(guò)程開(kāi)始,將對(duì)SPU讀取事件掩碼通道發(fā)送讀取通道(rdch)指令并將數(shù) 據(jù)保存在"掩碼,,中(步驟2510)。然后,通過(guò)向SPU—WrEvent [Masking] 設(shè)置為"0"的SPU寫(xiě)入事件掩碼通道發(fā)出寫(xiě)入通道指令來(lái)對(duì)事件進(jìn)行掩碼 (步驟2520 )。通過(guò)向SPU—WrEventAck[Sn]設(shè)置為T(mén)的SPU寫(xiě)入事件 確認(rèn)通道執(zhí)行寫(xiě)入通道(wrch)指令來(lái)確認(rèn)事件(步驟2530 )。通過(guò)向SPU讀取入站郵箱通道發(fā)出讀取通道計(jì)數(shù)(rchcnt)指令來(lái)獲 取通道計(jì)數(shù)(步驟2540 )。判定通道計(jì)數(shù)是否為"0"(步驟2550 )。如 果否,則通過(guò)向SPU讀取入站郵箱通道(SPU-RdlnMbox)發(fā)出讀取通道 (rdch)指令來(lái)讀取下一個(gè)郵箱數(shù)據(jù)表項(xiàng)(步驟2560 )。然后過(guò)程返回步 驟2530。如果通道計(jì)數(shù)為"0",則退出SPU入站郵箱處理機(jī)(步驟2570 )。 通過(guò)向具有SPU-WrEventMask[掩碼]的SPU寫(xiě)入事件掩碼通道發(fā)出寫(xiě)入通 道(wrch)指令來(lái)恢復(fù)"掩碼,,(步驟2580 )。然后退出通用事件處理機(jī) (步驟2590 )。SPU遞減器事件SPU遞減器事件用于通知SPU程序遞減器已到達(dá)"0"。如果啟用事件 (即,將SPU-RdEventStat[Tm]設(shè)置為T(mén) )并將SPU讀取事件狀態(tài)通道 的計(jì)數(shù)設(shè)置為"1",則當(dāng)遞減器的最高位從"0"更改為'T,(負(fù)數(shù))值 時(shí)將發(fā)生此事件。此事件的發(fā)生會(huì)將Pend-Event[Tm]設(shè)置為'T,。當(dāng)向 SPU寫(xiě)入事件確認(rèn)通道發(fā)出通道寫(xiě)入(wrch)(將SPU—WrEventAck[Tm〗設(shè) 置為"1"),或者當(dāng)特權(quán)軟件使用相應(yīng)位設(shè)置為"0"的SPU通道訪(fǎng)問(wèn)設(shè) 備來(lái)更新SPU未決事件寄存器時(shí),會(huì)將Pend-Event[Tm]位設(shè)置為"0"。圖26中示出了用于處理SPU遞減器事件的過(guò)程。如圖26所示,過(guò)程 開(kāi)始,將對(duì)SPU讀取事件掩碼通道執(zhí)行讀取通道(rdch)指令并將數(shù)據(jù)保 存在"掩碼"中(步驟2610)。通過(guò)向SPU—WrEventMask[Tm]設(shè)置為"0" 的SPU寫(xiě)入事件掩碼通il^出寫(xiě)入通道(wrch )指令來(lái)對(duì)事件進(jìn)行掩碼(步 驟2620 )。通過(guò)向SPU寫(xiě)入事件確認(rèn)通道發(fā)出寫(xiě)入通道(wrch)指令(將 SPU—WrEventAck[Tm]設(shè)置為'T,)來(lái)確認(rèn)事件(步驟2630 )。通過(guò)向SPU讀取遞減器通道發(fā)出讀取通道(rdch)指令來(lái)讀取遞減器 值(步驟2640 )。如果此值為負(fù)數(shù),則它可以用于確定自所需間隔起所經(jīng) 歷的額外時(shí)間。判定是否需要新的計(jì)時(shí)器事件(步驟2650 )。如果需要新 的計(jì)時(shí)器事件,則向SPU寫(xiě)入遞減器通道寫(xiě)入(wrch)新的遞減器值(步 驟2660 )。此后,或者如果不需要新的計(jì)時(shí)器事件,則退出SPU遞減器事 件處理機(jī)(步驟2670 )。通過(guò)向具有SPU—WrEventMask[掩碼]的SPU寫(xiě)入 事件掩碼通道發(fā)出寫(xiě)入通道(wrch)指令來(lái)恢復(fù)"掩碼"(步驟2680 )。 然后退出通用事件處理機(jī)(步驟2690 )。SPU出站中斷郵箱可用事件SPU出站中斷郵箱可用事件用于通知SPU程序PPE或其他設(shè)備已讀取 滿(mǎn)的SPU出站中斷郵箱寄存器以及可寫(xiě)入SPU寫(xiě)入出站中斷郵箱通道而不 停止SPU。如果啟用此事件(即,SPU—RdEventStat[Me]設(shè)置為T(mén) )并 將SPU讀取事件狀態(tài)通道的計(jì)數(shù)設(shè)置為"1",則當(dāng)SPU寫(xiě)入出站中斷郵箱通道的通道計(jì)數(shù)從"0"(已滿(mǎn))更改為非零(未滿(mǎn))值時(shí)將發(fā)生此事件。 此事件將Pend—Event[Me]設(shè)置為"1"。當(dāng)向Me位設(shè)置為"1"的SPU寫(xiě) 入事件確認(rèn)通道發(fā)出通道寫(xiě)入(wrch)(即,將SPU—WrEventAck[Me]設(shè)置 為1),或者當(dāng)特權(quán)軟件使用相應(yīng)位設(shè)置為"0"的SPU通道訪(fǎng)問(wèn)設(shè)備來(lái)更 新SPU未決事件寄存器時(shí),會(huì)將Pend-Event[Me]位設(shè)置為"0"。圖27中示出了用于處理SPU出站中斷郵箱可用事件的過(guò)程。如圖27 所示,過(guò)程開(kāi)始,將對(duì)SPU讀取事件掩碼通it^送讀取通道(rdch)指令 并將數(shù)據(jù)保存在"掩碼,,中(步驟2710)。通過(guò)向SPU—WrEventMask[Me〗 設(shè)置為"0"的SPU寫(xiě)入事件掩碼通道發(fā)出寫(xiě)入通道(wrch)指令來(lái)對(duì)事件 進(jìn)行掩碼(步驟2720 )。通過(guò)向SPU—WrEventAck [Me]設(shè)置為1的SPU寫(xiě)入 事件確認(rèn)通道執(zhí)行寫(xiě)入通道(wrch)指令來(lái)確認(rèn)事件(步驟2730 )。通過(guò)向SPU寫(xiě)入出站中斷郵箱通il^出讀取通道計(jì)數(shù)(rchcnt)指令 來(lái)獲取通道計(jì)數(shù)(步驟2740 )。判定通道計(jì)數(shù)是否為"0"(步驟2750 )。 如果通道計(jì)數(shù)不為"0",則通過(guò)向SPU寫(xiě)入出站中斷郵箱通道發(fā)出寫(xiě)入通 道(wrch)指令來(lái)寫(xiě)入新的郵箱數(shù)據(jù)表項(xiàng)(步驟2760 )。如果通道計(jì)數(shù)為 "0",則再次讀取通道計(jì)數(shù)(步驟2740 )。此后,將退出SPU出站中斷 郵箱可用處理機(jī)(步驟2770 )。通過(guò)向具有SPU-WrEventMask[掩碼]的SPU 寫(xiě)入事件掩碼通it^出寫(xiě)入通道(wrch)指令來(lái)恢復(fù)"掩碼"(步驟2780 )。 然后退出通用事件處理機(jī)(步驟2790 )。SPU出站郵箱可用事件SPU出站郵箱可用事件用于通知SPU程序處理器或其他設(shè)備已讀取滿(mǎn) 的SPU出站郵箱寄存器以及可寫(xiě)入SPU寫(xiě)入出站郵箱通道而不會(huì)停止SPU。 當(dāng)SPU寫(xiě)入出站郵箱通道的通道計(jì)數(shù)從"0"(已滿(mǎn))更改為非零(未滿(mǎn)) 值時(shí),會(huì)發(fā)生此事件。事件的發(fā)生將Pend-Event[Le]設(shè)置為"1"。如果 啟用事件(即,將SPU-RdEventStat[Le]設(shè)置為T(mén) ),則會(huì)將SPU讀取 事件狀態(tài)通道的計(jì)數(shù)設(shè)置為'T,。當(dāng)向Le位設(shè)置為"1"的SPU寫(xiě)入事件 確認(rèn)通道發(fā)出通道寫(xiě)入(wrch)(參見(jiàn)144頁(yè))(即,將SPU-WrEventAck[Le]設(shè)置為1),或者當(dāng)特權(quán)軟件使用相應(yīng)位設(shè)置為"0"的SPU通道訪(fǎng)問(wèn)設(shè)備 更新SPU未決事件寄存器時(shí),會(huì)將Pend一Event[Le]位設(shè)置為"0"。圖28中示出了用于處理SPU出站郵箱可用事件的過(guò)程。如圖28所示, 過(guò)程開(kāi)始,將對(duì)SPU讀取事件掩碼通道發(fā)送讀取通道(rdch)指令并將數(shù) 據(jù)保存在"掩碼"中(步驟2810)。通過(guò)向SPU—WrEventMask [Le]設(shè)置為"0"的SPU寫(xiě)入事件掩碼通道發(fā)出寫(xiě)入通道指令來(lái)對(duì)事件進(jìn)行掩碼(步驟 2820 )。通過(guò)向SPU—WrEventAck[Le]設(shè)置為T(mén)的SPU寫(xiě)入事件確認(rèn)通 道執(zhí)行寫(xiě)入通道(wrch)指令來(lái)確認(rèn)事件(步驟2830 )。通過(guò)向SPU寫(xiě)入出站郵箱通it^出讀取通道計(jì)數(shù)(rchcnt)指令來(lái)獲 取通道計(jì)數(shù)(步驟2840 )。然后,判定通道計(jì)數(shù)是否為"0"(步驟2850)。 如果通道計(jì)數(shù)不為"0",則通過(guò)向SPU寫(xiě)入出站郵箱通道發(fā)出寫(xiě)入通道(wrch)指令來(lái)寫(xiě)入新的郵箱數(shù)據(jù)表項(xiàng)(步驟2860 )。如果通道計(jì)數(shù)為"0", 則再次讀取通道計(jì)數(shù)(步驟2840 )。此后,將退出SPU出站郵箱處理機(jī)(步 驟2870 )。通過(guò)向具有SPU-WrEventMask [掩碼]的SPU寫(xiě)入事件掩碼通道 發(fā)出寫(xiě)入通道(wrch)指令來(lái)恢復(fù)"掩碼"(步驟2880 )。然后退出通用 事件處理機(jī)(步驟2890 )。SPU信號(hào)通知2可用事件SPU信號(hào)通知2可用事件用于通知SPU程序其他處理器或i殳備已寫(xiě)入 空SPU信號(hào)通知2寄存器,以及可讀取SPU信號(hào)通知2通道而不會(huì)停止SPU。 當(dāng)SPU信號(hào)通知2通道的通道計(jì)數(shù)從"0"(空)更改為"1"(有效)值 時(shí),會(huì)發(fā)生此事件。如果啟用事件(即,SPU—RdEventStat[S2]為T(mén) ) 并將SPU讀取事件狀態(tài)通道的計(jì)數(shù)設(shè)置為'T,,則此事件將Pend—Event [S2] 設(shè)置為"1"。當(dāng)向S2位設(shè)置為'T,的SPU寫(xiě)入事件確認(rèn)通道發(fā)出通道寫(xiě) 入(wrch) (SPU一WrEventAck[S2]),或者當(dāng)特權(quán)軟件使用相應(yīng)位設(shè)置為 "0"的SPU通道訪(fǎng)問(wèn)設(shè)備來(lái)更新SPU未決事件寄存器時(shí),會(huì)將 Pend—Event [S2]位設(shè)置為"0"。圖29中示出了用于處理SPU信號(hào)通知2可用事件的過(guò)程。如圖29所示,過(guò)程開(kāi)始,將對(duì)SPU讀取事件掩碼通道發(fā)送讀取通道(rdch)指令并 將數(shù)據(jù)保存在"掩碼"中(步驟2910)。通過(guò)向SPU-WrEventMask [S2]設(shè) 置為"0"的SPU寫(xiě)入事件掩碼通道發(fā)出寫(xiě)入通道指令來(lái)對(duì)事件進(jìn)行掩碼(步 驟2920 )。通過(guò)向SPU-WrEventAck[S2]設(shè)置為T(mén)的SPU寫(xiě)入事件確認(rèn) 通道執(zhí)行寫(xiě)入通道(wrch)指令來(lái)確認(rèn)事件(步驟2930 )。通過(guò)向SPU信號(hào)通知2通道發(fā)出讀取通道計(jì)數(shù)(rchcnt)指令來(lái)獲取 通道計(jì)數(shù)(步驟2940 )。判定通道計(jì)數(shù)是否為"0"(步驟2950 )。如果 通道計(jì)數(shù)不為"0",則通過(guò)向SPU信號(hào)通知2通道發(fā)出讀取通道指令來(lái)讀 取信號(hào)數(shù)據(jù)(步驟2960 )。此后,或者如果通道計(jì)數(shù)為"0",則退出信 號(hào)通知2處理機(jī)(步驟2970 )。通過(guò)向具有SPU-WrEventMask [掩碼]的SPU 寫(xiě)入事件掩碼通道發(fā)出寫(xiě)入通道(wrch )指令來(lái)恢復(fù)"掩碼"(步驟2980 )。 然后退出通用事件處理機(jī)(步驟2990 )。SPU信號(hào)通知1可用事件SPU信號(hào)通知1可用事件用于通知SPU程序其他處理器或設(shè)備已寫(xiě)入 空SPU信號(hào)通知1寄存器,以及可讀取SPU信號(hào)通知1通道而不會(huì)停止SPU。 當(dāng)SPU信號(hào)通知1通道的通道計(jì)數(shù)從"0"(空)更改為"1"(有效)值 時(shí),會(huì)發(fā)生此事件。如果啟用事件(即,SPU—RdEventStat[Sl]為T(mén) ) 并將SPU讀取事件狀態(tài)通道的計(jì)數(shù)設(shè)置為"1",則此事件會(huì)將 Pend-Event[Sl]設(shè)置為'T,。當(dāng)向S1位設(shè)置為T(mén)的SPU寫(xiě)入事件確認(rèn) 通道發(fā)出通道寫(xiě)入(wrch) (SPU-WrEventAck[Sl]),或者當(dāng)特權(quán)軟件使 用相應(yīng)位設(shè)置為"0"的SPU通道訪(fǎng)問(wèn)設(shè)備來(lái)更新SPU未決事件寄存器時(shí), 會(huì)將Pend—Event [Sl]位設(shè)置為"0"。圖30中示出了用于處理SPU信號(hào)通知1可用事件的過(guò)程。如圖30所 示,過(guò)程開(kāi)始,將對(duì)SPU讀取事件掩碼通道發(fā)送讀取通道(rdch)指令并 將數(shù)據(jù)保存在"掩碼,,中(步驟3010)。通過(guò)向SPU-WrEventMask [Sl]設(shè) 置為"0,,的SPU寫(xiě)入事件掩碼通道發(fā)出寫(xiě)入通道指令來(lái)對(duì)事件進(jìn)行掩碼(步 驟302Q)。通過(guò)向SPU-WrEventAck[Sl]設(shè)置為T(mén)的SPU寫(xiě)入事件確認(rèn)通道執(zhí)行寫(xiě)入通道(wrch)指令來(lái)確認(rèn)事件(步驟3030 )。通過(guò)向SPU信號(hào)通知1通道發(fā)出讀取通道計(jì)數(shù)(rchcnt)指令來(lái)獲取 通道計(jì)數(shù)(步驟3040 )。判定通道計(jì)數(shù)是否為"0"(步驟3050 )。如果通道計(jì)數(shù)不為"0",則通過(guò)向SPU信號(hào)通知1通道發(fā)出讀取通道 指令來(lái)讀取信號(hào)數(shù)據(jù)(步驟3060 )。此后,或者如果通道計(jì)數(shù)為"0", 則退出信號(hào)通知1處理機(jī)(步驟3070 )。通過(guò)向具有SPU一WrEventMask[掩 碼]的SPU寫(xiě)入事件掩碼通道發(fā)出寫(xiě)入通道(wrch)指令來(lái)恢復(fù)"掩碼"(步 驟3080 )。然后退出通用事件處理機(jī)(步驟3090 )。鎖定線(xiàn)保留丟失事件鎖定線(xiàn)保留丟失事件用于通知SPU程序已導(dǎo)致高速緩存線(xiàn)上的保留丟 失的總線(xiàn)操作。SPU程序通過(guò)發(fā)出獲取鎖定線(xiàn)并保留(getllar)命令來(lái)獲 取保留。當(dāng)其他處理器或設(shè)備修改具有保留的高速緩存線(xiàn)時(shí),保留會(huì)丟失。如果特權(quán)軟件寫(xiě)入MFC原子刷新寄存器中的刷新位(將 MFC—Atomic-Flush[F]設(shè)置為'T,),保留也會(huì)丟失。當(dāng)保留丟失時(shí)會(huì)發(fā) 生事件。此事件的發(fā)生將Pend-Event[Lr]設(shè)置為'T,。如果啟用事件(即, 將SPU-RdEventStat[Lr]設(shè)置為T(mén) ),則將SPU讀取事件狀態(tài)通道的計(jì) 數(shù)設(shè)置為'T'。當(dāng)向Lr位設(shè)置為"1"的SPU寫(xiě)入事件確認(rèn)通il^出通道 寫(xiě)入(wrch) (SPU—WrEventAck[Lr]),或者當(dāng)特權(quán)軟件使用相應(yīng)位設(shè)置 為"0"的SPU通道訪(fǎng)問(wèn)設(shè)備來(lái)更新SPU未決事件寄存器時(shí),會(huì)將 Pend—Event [Lr]位設(shè)置為"0"。圖31中示出了用于處理鎖定線(xiàn)保留丟失事件的過(guò)程。如圖31所示, 操作開(kāi)始,將對(duì)SPU讀取事件掩碼通道發(fā)出讀取通道(rdch)指令并將數(shù) 據(jù)保存在"掩碼,,中(步驟3110)。通過(guò)向SPU-WrEventMask[Lr]設(shè)置為 "0"的SPU寫(xiě)入事件掩碼通道發(fā)出寫(xiě)入通道(wrch)指令來(lái)對(duì)事件進(jìn)行掩 碼(步驟3120)。通過(guò)向SPU—WrEventAck[Lr]設(shè)置為T(mén)的SPU寫(xiě)入事 件確認(rèn)通道執(zhí)行寫(xiě)入通道(wrch)指令來(lái)確認(rèn)事件(步驟3130)。執(zhí)行應(yīng)用特定的功能以響應(yīng)系統(tǒng)修改鎖定線(xiàn)區(qū)域中的數(shù)據(jù)(步驟查存儲(chǔ)器中的軟件結(jié)構(gòu)以判定鎖定線(xiàn)是否仍被監(jiān)視 開(kāi)始。如果它仍在"等待",則下一步通常包括向被修改的同一鎖定線(xiàn)區(qū) 域發(fā)出ge 111 a r命令以獲取新數(shù)據(jù)并對(duì)此數(shù)據(jù)執(zhí)行操作。然后,退出鎖定線(xiàn)保留丟失事件處理機(jī)(步驟3150)。通過(guò)向具有 SPU—WrEventMask [掩碼]的SPU寫(xiě)入事件掩碼通ii^C出寫(xiě)入通道(wrch)指 令來(lái)恢復(fù)"掩碼"(步驟3160)。然后退出通用事件處理才幾(步驟3170) 并且過(guò)程結(jié)束。特權(quán)關(guān)注事件特權(quán)關(guān)注事件用于通知SPU程序特權(quán)軟件正在從SPU程序請(qǐng)求關(guān)注。 特權(quán)軟件通過(guò)向SPU特權(quán)控制寄存器的關(guān)注事件所需位寫(xiě)入'T,(即,將 SPU—PrivCntl[A]設(shè)置為"1")來(lái)請(qǐng)求關(guān)注。如果啟用事件(即, SPU-RdEventStat [A]為"l")并將SPU讀取事件狀態(tài)通道的計(jì)數(shù)設(shè)置為"1", 則此事件將Pend-Event[A]設(shè)置為'T,。當(dāng)向設(shè)置了 A位的SPU寫(xiě)入事件 確認(rèn)通道發(fā)出通道寫(xiě)入(wrch)(即,SPU—WrEventAck[A]為"1"),或 者當(dāng)特權(quán)軟件使用相應(yīng)位設(shè)置為"0"的SPU通道訪(fǎng)問(wèn)設(shè)備更新SPU未決事 件寄存器時(shí),會(huì)將Pend—Event[A]位設(shè)置為"0"。圖32中示出了用于處理特權(quán)關(guān)注事件的過(guò)程。如圖32所示,過(guò)程開(kāi) 始,將對(duì)SPU讀取事件掩碼通道發(fā)出讀取通道(rdch)指令并將數(shù)據(jù)保存 在"掩碼,,中(步驟3210)。通過(guò)向SPU—WrEventMask[A]設(shè)置為"0"的 SPU寫(xiě)入事件掩碼通道發(fā)出寫(xiě)入通道指令來(lái)對(duì)事件進(jìn)行掩碼(步驟3220 )。 通過(guò)向SPU—WrEventAck[A]設(shè)置為'T,的SPU寫(xiě)入事件確認(rèn)通道執(zhí)行寫(xiě)入 通道(wrch)指令來(lái)確認(rèn)事件(步驟3230 )。執(zhí)行應(yīng)用特定的功能以響應(yīng)特權(quán)關(guān)注事件(步驟3240 )。這可以例如 用于發(fā)信號(hào)通知正在請(qǐng)求使用SPU,或者某種其他操作。應(yīng)發(fā)出對(duì)特權(quán)關(guān) 注事件的應(yīng)用或操作系統(tǒng)特定的響應(yīng),例如停止和發(fā)信號(hào)通知、SPU入站 郵箱寫(xiě)入、SPU出站中斷郵箱寫(xiě)入,或更新系統(tǒng)或1/0存儲(chǔ)器空間中的狀 態(tài)。退出特權(quán)關(guān)注事件處理機(jī)(步驟3250 )。通過(guò)向具有SPU-WrEvent Mask [掩碼]的SPU寫(xiě)入事件掩碼通道發(fā)出寫(xiě)入通道(wrch )指令來(lái)恢復(fù)"掩 碼"(步驟3260 )。然后退出通用事件處理機(jī)(步驟3270 )。多源同步事件多源同步事件用于通知SPU程序多源同步請(qǐng)求已經(jīng)完成。通過(guò)向MFC 寫(xiě)入多源同步請(qǐng)求通道(MFC—WrMSSyncReq)進(jìn)行寫(xiě)入(wrch)來(lái)請(qǐng)求多源 同步。當(dāng)MFC寫(xiě)入多源同步請(qǐng)求通道(MFC-WrMSSyncReq)的通道計(jì)數(shù)從"O" 更改為T(mén)時(shí),會(huì)發(fā)生此事件。如果啟用事件(即,SPU-RdEventStat[Ms〗 為"1")并將SPU讀取事件狀態(tài)通道的計(jì)數(shù)設(shè)置為"1",則此事件將 Pend—Event[Ms]設(shè)置為"1"。當(dāng)向設(shè)置了 Ms位的SPU寫(xiě)入事件確認(rèn)通道 發(fā)出通道寫(xiě)入(wrch)(即,將SPlLWrEventAck[Ms]i殳置為"1"),或 者當(dāng)特權(quán)軟件使用相應(yīng)位設(shè)置為"0"的SPU通道訪(fǎng)問(wèn)設(shè)備更新SPU未決事 件寄存器時(shí),會(huì)將Pend-Event[Ms]位設(shè)置為"0"。必須在發(fā)出多源同步 請(qǐng)求之前清除多源同步事件。圖33中示出了用于處理多源同步事件的過(guò)程。如圖33所示,過(guò)程開(kāi) 始,將對(duì)SPU讀取事件掩碼通道發(fā)送讀取通道(rdch)指令并將數(shù)據(jù)保存 在"掩碼,,中(步驟3310)。通過(guò)向SPU—WrEventMask[Tm]設(shè)置為"0"的 SPU寫(xiě)入事件掩碼通it^出寫(xiě)入通道指令來(lái)對(duì)事件進(jìn)行掩碼(步驟3320 )。 通過(guò)向SPU—WrEvenUck[Ms]設(shè)置為'T,的SPU寫(xiě)入事件確認(rèn)通道執(zhí)行寫(xiě) 入通道(wrch)指令來(lái)確認(rèn)事件(步驟3330 )。執(zhí)行應(yīng)用特定的功能以響應(yīng)未決多源同步操作的完成(步驟3340 )。 例如,這將通常是特定緩沖區(qū)中的數(shù)據(jù)已經(jīng)完全更新,或者緩沖區(qū)域不再 處于使用中的指示。退出多源同步事件處理機(jī)(步驟3350 )。通過(guò)向具有 SPU—WrEventMask [掩碼]的SPU寫(xiě)入事件掩碼通ii^出寫(xiě)入通道(wrch)指 令來(lái)恢復(fù)"掩碼,,(步驟3360 )。然后退出通用事件處理機(jī)(步驟3370 )。概括地說(shuō),本發(fā)明提供了一種用于促進(jìn)處理器與外部設(shè)備之間的通信 的機(jī)制,所述機(jī)制降低了本地存儲(chǔ)的負(fù)擔(dān),并允許處理器在等待數(shù)據(jù)、釋放空間或事件發(fā)生時(shí)保持在低功率狀態(tài)。本發(fā)明的機(jī)制提供了多個(gè)通道, 用于與處理器、存儲(chǔ)器流控制器、機(jī)器狀態(tài)寄存器的設(shè)備以及外部處理器 中斷設(shè)備進(jìn)行通信。這些通道可用于提供指令、指令參數(shù)、處理器間信息、 信號(hào)通知、機(jī)器隔離信息、機(jī)器中斷狀態(tài)信息、生成事件,以及執(zhí)行事件處理。重要的是指出,雖然在完整功能的數(shù)據(jù)處理系統(tǒng)的上下文中說(shuō)明了本 發(fā)明,但是本領(lǐng)域的技術(shù)人員將理解,可以以指令的計(jì)算機(jī)可讀介質(zhì)的形 式和各種形式來(lái)發(fā)布本發(fā)明的諸過(guò)程,并且本發(fā)明均可等同地適用而與實(shí) 際用于執(zhí)行發(fā)布的信號(hào)承載介質(zhì)的特定類(lèi)型無(wú)關(guān)。計(jì)算機(jī)可讀介質(zhì)的實(shí)例包括可記錄型介質(zhì),諸如軟盤(pán)、硬盤(pán)驅(qū)動(dòng)器、RAM、 CD-ROM、 DVD -ROM以及傳輸型介質(zhì),諸如數(shù)字和模擬通信鏈路、使用諸如例如射頻和 光波傳輸之類(lèi)的傳輸形式的有線(xiàn)或無(wú)線(xiàn)通信鏈路。所述計(jì)算機(jī)可讀介質(zhì)可 以采取編碼格式的形式,可以對(duì)其解碼以1更在特定的數(shù)據(jù)處理系統(tǒng)中實(shí)際 使用。出于示例和i兌明目的給出了對(duì)本發(fā)明的描述,并且所述描述并非旨在 是窮舉的或是將本發(fā)明限于所公開(kāi)的形式。對(duì)于本領(lǐng)域的技術(shù)人員來(lái)說(shuō), 許多修改和變化都將是顯而易見(jiàn)的。實(shí)施例的選擇和描述是為了最佳地解 釋本發(fā)明的原理、實(shí)際應(yīng)用,并且當(dāng)適合于所構(gòu)想的特定使用時(shí),使得本 領(lǐng)域的其他技術(shù)人員能夠理解本發(fā)明的具有各種修改的各種實(shí)施例。
權(quán)利要求
1.一種在數(shù)據(jù)處理系統(tǒng)中用于在處理器與存儲(chǔ)器流控制MFC單元之間傳送指令和數(shù)據(jù)的方法,所述方法包括在所述處理器與MFC單元之間建立一個(gè)或多個(gè)通道以便在所述處理器與所述MFC單元之間傳輸數(shù)據(jù);通過(guò)所述一個(gè)或多個(gè)通道在所述MFC單元中接收數(shù)據(jù);在與所述一個(gè)或多個(gè)通道關(guān)聯(lián)的一個(gè)或多個(gè)寄存器中存儲(chǔ)所述數(shù)據(jù);以及根據(jù)存儲(chǔ)在所述一個(gè)或多個(gè)寄存器中的數(shù)據(jù)來(lái)處理命令隊(duì)列中的一個(gè)或多個(gè)命令。
2. 根據(jù)權(quán)利要求1的方法,其中所述一個(gè)或多個(gè)通道包括用于與 MFC代理標(biāo)記組完成設(shè)備通信的一個(gè)或多個(gè)MFC標(biāo)記組狀態(tài)通道,所述數(shù) 據(jù)為MFC標(biāo)記組數(shù)據(jù),以及所述一個(gè)或多個(gè)寄存器為MFC標(biāo)記寄存器。
3. 根據(jù)權(quán)利要求2的方法,其中所述一個(gè)或多個(gè)MFC標(biāo)記組狀態(tài)通 道包括MFC寫(xiě)入標(biāo)記組查詢(xún)掩碼通道,并且其中所述MFC標(biāo)記組數(shù)據(jù)包括 通過(guò)所述MFC寫(xiě)入標(biāo)記組查詢(xún)掩碼通道接收的標(biāo)識(shí)符,所述標(biāo)識(shí)符標(biāo)識(shí)了 關(guān)聯(lián)的查詢(xún)MFC命令的標(biāo)記組。
4. 根據(jù)權(quán)利要求2的方法,其中所述一個(gè)或多個(gè)MFC標(biāo)記組狀態(tài)通 道包括MFC讀取標(biāo)記組查詢(xún)掩碼通道,并且其中發(fā)送到所述MFC讀取標(biāo)記 組查詢(xún)掩碼通道的讀取通道指令用于讀取代理標(biāo)記組查詢(xún)掩碼寄存器中存 儲(chǔ)的當(dāng)前值,所述當(dāng)前值是最后寫(xiě)入MFC寫(xiě)入標(biāo)記組查詢(xún)掩碼通道的數(shù)據(jù)。
5. 根據(jù)權(quán)利要求2的方法,其中所述一個(gè)或多個(gè)MFC標(biāo)記組通道包 括MFC寫(xiě)入標(biāo)記狀態(tài)更新請(qǐng)求通道,并且其中發(fā)送到所述MFC寫(xiě)入標(biāo)記狀 態(tài)更新請(qǐng)求通道的寫(xiě)入通道指令將更新MFC標(biāo)記組狀態(tài)值。
6. 根據(jù)權(quán)利要求5的方法,其中發(fā)送到所述MFC寫(xiě)入標(biāo)記狀態(tài)更新 請(qǐng)求通道的所述寫(xiě)入通道指令指定將立即執(zhí)行所述更新或在發(fā)生條件時(shí)執(zhí) 行所述更新。
7. 根據(jù)權(quán)利要求6的方法,其中所述條件是任何已啟用的MFC標(biāo)記 組完成具有"沒(méi)有未完成的操作"狀態(tài)或所有已啟用的MFC標(biāo)記組具有"沒(méi) 有未完成的操作"狀態(tài)中的一項(xiàng)。
8. 根據(jù)權(quán)利要求2的方法,其中所述一個(gè)或多個(gè)MFC標(biāo)記組狀態(tài)通 道包括MFC讀取標(biāo)記組狀態(tài)通道,并且其中發(fā)送到所述MFC讀取標(biāo)記組狀 態(tài)通道的讀取通道指令將返回已啟用的標(biāo)記組的當(dāng)前狀態(tài)。
9. 根據(jù)權(quán)利要求2的方法,其中所述一個(gè)或多個(gè)MFC標(biāo)記組狀態(tài)通 道包括MFC讀取列表停止和通知標(biāo)記狀態(tài)通道,并且其中發(fā)送到所述MFC 讀取列表停止和通知標(biāo)記狀態(tài)通道的讀取通道指令標(biāo)識(shí)了哪些標(biāo)記組具有 已停止的命令。
10. 根據(jù)權(quán)利要求2的方法,其中所述一個(gè)或多個(gè)MFC標(biāo)記組狀態(tài)通 道包括MFC寫(xiě)入列表停止和通知標(biāo)記確認(rèn)通道,并且其中發(fā)送到所述MFC 寫(xiě)入列表停止和通知標(biāo)記確認(rèn)通道的寫(xiě)入通道指令確i人標(biāo)記組包含已停止 的命令。
11. 根據(jù)權(quán)利要求2的方法,其中所述一個(gè)或多個(gè)MFC標(biāo)記組狀態(tài)通 道包括MFC讀取原子命令狀態(tài)通道,并且其中發(fā)送到所述MFC讀取原子命 令狀態(tài)通道的讀取通道指令將返回最后完成的立即MFC原子更新命令的狀態(tài)。
12. 根據(jù)權(quán)利要求2的方法,還包括使用所述一個(gè)或多個(gè)MFC標(biāo)記 組狀態(tài)通道來(lái)確定標(biāo)記組的狀態(tài)。
13. 根據(jù)權(quán)利要求12的方法,其中使用所述一個(gè)或多個(gè)MFC標(biāo)記組狀態(tài)通道包括通過(guò)將標(biāo)識(shí)感興趣的標(biāo)記組的標(biāo)記組掩碼數(shù)據(jù)寫(xiě)入MFC寫(xiě)入標(biāo)記組查 詢(xún)掩碼通道來(lái)啟用所述感興趣的標(biāo)記組;通過(guò)將值寫(xiě)入MFC寫(xiě)入標(biāo)記狀態(tài)更新請(qǐng)求通道來(lái)請(qǐng)求立即標(biāo)記狀態(tài)更 新;以及將讀取通道指令發(fā)送到MFC讀取標(biāo)記組狀態(tài)通道以便應(yīng)用所述標(biāo)記組 掩碼數(shù)據(jù)和獲取所述感興趣的標(biāo)記組的當(dāng)前狀態(tài)。
14. 根據(jù)權(quán)利要求12的方法,其中使用所述一個(gè)或多個(gè)MFC標(biāo)記組 狀態(tài)通道包括通過(guò)將值寫(xiě)入MFC寫(xiě)入標(biāo)記狀態(tài)更新請(qǐng)求通道來(lái)請(qǐng)求有條件的標(biāo)記狀 態(tài)更新;以及讀取MFC讀取標(biāo)記組狀態(tài)通道以判定是否已發(fā)生狀態(tài)更新以及標(biāo)識(shí)已 完成其處理的標(biāo)記組。
15. 根據(jù)權(quán)利要求12的方法,其中使用所述一個(gè)或多個(gè)MFC標(biāo)記組 狀態(tài)通道包括通過(guò)將標(biāo)識(shí)感興趣的標(biāo)記組的標(biāo)記組掩碼數(shù)據(jù)寫(xiě)入MFC寫(xiě)入標(biāo)記組查 詢(xún)掩碼通道來(lái)選擇所述感興趣的標(biāo)記組;通過(guò)將值寫(xiě)入處理器寫(xiě)入事件掩碼通道來(lái)啟用MFC標(biāo)記組狀態(tài)更新事件;將讀取通道指令發(fā)送到處理器讀取事件狀態(tài)通道;根據(jù)將所述讀取通道指令發(fā)送到所述處理器讀取事件狀態(tài)通道的結(jié)果 來(lái)判定是否已發(fā)生所述MFC標(biāo)記組狀態(tài)更新事件;以及讀取MFC讀取標(biāo)記組狀態(tài)通道以標(biāo)識(shí)如果所述MFC標(biāo)記組狀態(tài)更新事 件已發(fā)生,則哪個(gè)標(biāo)記組導(dǎo)致了所述事件。
16. 根據(jù)權(quán)利要求2的方法,還包括使用所述一個(gè)或多個(gè)MFC標(biāo)記組狀態(tài)通道來(lái)判定MFC直接存儲(chǔ)器訪(fǎng)問(wèn) DMA列表命令是否已到達(dá)"i殳置了停止和通知標(biāo)志的列表元素。
17. 根據(jù)權(quán)利要求16的方法,其中使用所述一個(gè)或多個(gè)MFC標(biāo)記組 通道包括讀取MFC讀取列表停止和通知標(biāo)記狀態(tài)通道以標(biāo)識(shí)設(shè)置了停止和通知標(biāo)志的每個(gè)標(biāo)記組的當(dāng)前狀態(tài);判定感興趣的標(biāo)記組是否已到達(dá)設(shè)置了停止和通知標(biāo)志的列表元素; 如果所述感興趣的標(biāo)記組已到達(dá)設(shè)置了停止和通知標(biāo)志的列表元素,將寫(xiě)入通道指令發(fā)送到具有與所述感興趣的標(biāo)記組對(duì)應(yīng)的標(biāo)記組標(biāo)識(shí)符的MFC寫(xiě)入列表停止和通知標(biāo)記確認(rèn)通道。
18. 根據(jù)權(quán)利要求16的方法,其中使用所述一個(gè)或多個(gè)MFC標(biāo)記組 通道包括清除任何未決的MFC直接存儲(chǔ)器訪(fǎng)問(wèn)DMA列表命令停止和通知事件; 讀取處理器讀取事件狀態(tài)通道;根據(jù)讀取所述處理器讀取事件狀態(tài)通道的結(jié)果來(lái)判定是否已發(fā)生已啟用的事件;如果發(fā)生已啟用的事件,則判定所述已啟用的事件是否為DMA列表停止和通知事件;如果所述已啟用的事件是DMA列表停止和通知事件,則將讀取通道指 令發(fā)送到MFC讀取列表停止和通知標(biāo)記狀態(tài)通道,以標(biāo)識(shí)哪個(gè)標(biāo)記組導(dǎo)致 了所述DMA列表停止和通知事件;以及將寫(xiě)入通道指令發(fā)送到具有與導(dǎo)致所述DMA列表停止和通知事件的標(biāo) 記組對(duì)應(yīng)的標(biāo)記組標(biāo)識(shí)符的MFC寫(xiě)入列表停止和通知標(biāo)記確認(rèn)通道。
19. 根據(jù)權(quán)利要求l的方法,其中所述一個(gè)或多個(gè)通道包括一個(gè)或多 個(gè)用于與所述處理器中提供的郵箱設(shè)備通信的郵箱通道,其中所述郵箱設(shè) 備包括一組郵箱隊(duì)列,其中所述郵箱隊(duì)列組中的每個(gè)郵箱隊(duì)列都具有關(guān)聯(lián) 的郵箱通道和存儲(chǔ)器映射的輸入/輸出薩IO寄存器。
20. 根據(jù)權(quán)利要求19的方法,其中所述處理器使用處理器通道指令 來(lái)訪(fǎng)問(wèn)與所述郵箱隊(duì)列關(guān)聯(lián)的郵箱通道,并且其中外部設(shè)務(wù)使用與所述郵 箱通道關(guān)聯(lián)的固IO寄存器來(lái)訪(fǎng)問(wèn)與所述郵箱隊(duì)列關(guān)聯(lián)的郵箱通道。
21. 根據(jù)權(quán)利要求19的方法,其中所述郵箱隊(duì)列組包括用于將指令 或數(shù)據(jù)從所述處理器發(fā)送到外部設(shè)備的處理器出站郵箱隊(duì)列和處理器出站 中斷郵箱隊(duì)列。
22. 根據(jù)權(quán)利要求21的方法,其中所述一個(gè)或多個(gè)郵箱通道包括用 于將數(shù)據(jù)寫(xiě)入所述處理器出站郵箱隊(duì)列的處理器寫(xiě)入出站郵箱通道,其中 將寫(xiě)入通道指令發(fā)送到所述處理器出站郵箱通道將在所述寫(xiě)入通道指令中 指定的數(shù)據(jù)載入所述處理器出站郵箱隊(duì)列以供外部設(shè)備讀取。
23. 根據(jù)權(quán)利要求22的方法,其中如果所述處理器出站郵箱隊(duì)列已 滿(mǎn),則處理器在所述寫(xiě)入通道指令上停止,直到執(zhí)行與所述處理器寫(xiě)入出站郵箱通道關(guān)聯(lián)的腿IO寄存器的MMIO讀取。
24. 根據(jù)權(quán)利要求19的方法,其中所述郵箱隊(duì)列組包括用于為所述 處理器從外部設(shè)備接收指令或數(shù)據(jù)的處理器入站郵箱隊(duì)列,并且其中所述 處理器入站郵箱隊(duì)列具有用于從所述處理器入站郵箱隊(duì)列讀取數(shù)據(jù)的關(guān)聯(lián) 的處理器讀取入站郵箱通道,其中發(fā)送到所述處理器讀取入站郵箱通道的 讀取通道指令將數(shù)據(jù)從所述處理器入站郵箱隊(duì)列載入所述讀取通道指令所 指定的寄存器。
25. 根據(jù)權(quán)利要求24的方法,其中如果所述處理器入站郵箱隊(duì)列為 空,則處理器在所述讀取通道指令上停止,直到數(shù)據(jù)^皮寫(xiě)入所述郵箱。
26. 根據(jù)權(quán)利要求19的方法,其中所述郵箱設(shè)備進(jìn)一步包括存儲(chǔ)所 述郵箱隊(duì)列的狀態(tài)的處理器郵箱狀態(tài)寄存器,并且其中所述郵箱隊(duì)列的狀 態(tài)包括所述郵箱隊(duì)列中的多個(gè)有效隊(duì)列表項(xiàng)。
27. 根據(jù)權(quán)利要求1的方法r其中所述一個(gè)或多個(gè)通道包括一個(gè)或多 個(gè)用于與信號(hào)通知設(shè)備通信的信號(hào)通知通道,其中所述信號(hào)通知設(shè)備包括 與所述一個(gè)或多個(gè)信號(hào)通知通道中的每個(gè)通道關(guān)聯(lián)的信號(hào)通知寄存器。
28. 根據(jù)權(quán)利要求27的方法,其中所述處理器通過(guò)使用一組發(fā)送信 號(hào)命令連同與要將信號(hào)發(fā)送到其的外部設(shè)備關(guān)聯(lián)的信號(hào)通知寄存器的有效 地址,經(jīng)由所述一個(gè)或多個(gè)信號(hào)通知通道將信號(hào)發(fā)送到外部設(shè)備。
29. 根據(jù)權(quán)利要求27的方法,其中所述信號(hào)通知設(shè)備被編程為工作 在其中將覆寫(xiě)信號(hào)通知寄存器的當(dāng)前內(nèi)容的覆寫(xiě)模式。
30. 根據(jù)權(quán)利要求27的方法,其中所述信號(hào)通知設(shè)備被編程為工作 在邏輯'或,模式,在所述邏輯'或,模式中,將信號(hào)通知寄存器的當(dāng)前 內(nèi)容與傳輸?shù)剿鲂盘?hào)通知設(shè)備的數(shù)據(jù)進(jìn)行邏輯'或,并將結(jié)果存儲(chǔ)在所 述信號(hào)通知寄存器中。
31. 根據(jù)權(quán)利要求27的方法,其中所述一個(gè)或多個(gè)信號(hào)通知通道是 讀取阻塞通道。
32. 才艮據(jù)權(quán)利要求l的方法,其中所述一個(gè)或多個(gè)通道包括一個(gè)或多 個(gè)用于與所述處理器中提供的遞減器通信的遞減器通道。
33. 根據(jù)權(quán)利要求32的方法,其中所述一個(gè)或多個(gè)遞減器通道包括 處理器寫(xiě)入遞減器通道,并且其中發(fā)出到所述處理器寫(xiě)入遞減器通道的寫(xiě) 入通道指令標(biāo)識(shí)了所述遞減器的值,并且其中所述值指示了所述寫(xiě)入通道 指令與生成遞減器事件之間經(jīng)過(guò)的時(shí)間。
34. 根據(jù)權(quán)利要求32的方法,還包括使用所述一個(gè)或多個(gè)遞減器通道來(lái)設(shè)置遞減器值。
35. 根據(jù)權(quán)利要求34的方法,其中設(shè)置遞減器值包括將寫(xiě)入通道指令發(fā)送到處理器寫(xiě)入事件掩碼通道以禁用遞減器事件; 將寫(xiě)入通道指令發(fā)送到處理器寫(xiě)入事件確認(rèn)通道以確認(rèn)任何未決的事 件以及停止所述遞減器;將寫(xiě)入通道指令發(fā)送到處理器寫(xiě)入遞減器通道以設(shè)置新的遞減器值;以及將寫(xiě)入通道指令發(fā)送到處理器寫(xiě)入事件掩碼通道以啟用遞減器事件。
36. 根據(jù)權(quán)利要求33的方法,其中所述一個(gè)或多個(gè)遞減器通道包括 用于讀取所述遞減器的當(dāng)前值的讀取遞減器通道。
37. 根據(jù)權(quán)利要求1的方法,其中所述一個(gè)或多個(gè)通道包括一個(gè)或多 個(gè)用于與^i器狀態(tài)寄存器通信的狀態(tài)管理通道。
38. 根據(jù)權(quán)利要求37的方法,其中所述一個(gè)或多個(gè)狀態(tài)管理通道包 括處理器讀取^L器狀態(tài)通道,并且其中所述處理器讀取才幾器狀態(tài)通道用于 標(biāo)識(shí)隔離狀態(tài)和處理器中斷狀態(tài)。
39. 根據(jù)權(quán)利要求37的方法,其中所述一個(gè)或多個(gè)狀態(tài)管理通道包 括寫(xiě)入狀態(tài)保存和恢復(fù)通道,所述寫(xiě)入狀態(tài)保存和恢復(fù)通道具有關(guān)聯(lián)的狀 態(tài)保存和恢復(fù)寄存器,并且其中發(fā)出到所述寫(xiě)入狀態(tài)保存和恢復(fù)通道的寫(xiě) 入通道指令將恢復(fù)中斷狀態(tài)。
40. 根據(jù)權(quán)利要求37的方法,其中所述一個(gè)或多個(gè)狀態(tài)管理通道包 括讀取狀態(tài)保存和恢復(fù)通道,所述讀取狀態(tài)保存和恢復(fù)通道具有關(guān)聯(lián)的狀 態(tài)保存和恢復(fù)寄存器,并且其中發(fā)出到所述讀取狀態(tài)保存和恢復(fù)通道的讀 取通道指令將中斷狀態(tài)保存到所述狀態(tài)保存和恢復(fù)寄存器。
41. 一種在數(shù)據(jù)處理系統(tǒng)中用于傳送與處理器中的事件關(guān)聯(lián)的指令 和數(shù)據(jù)的方法,所述方法包括使用所述處理器的事件設(shè)備建立一個(gè)或多個(gè)用于傳送事件數(shù)據(jù)的通道;通過(guò)所述一個(gè)或多個(gè)通道在所述事件設(shè)備中接收數(shù)據(jù);在與所述一個(gè)或多個(gè)通道關(guān)聯(lián)的 一個(gè)或多個(gè)寄存器中存儲(chǔ)所述數(shù)據(jù);以及根據(jù)所述一個(gè)或多個(gè)寄存器中存儲(chǔ)的所述數(shù)據(jù)來(lái)處理一個(gè)或多個(gè)事件。
42. 根據(jù)權(quán)利要求41的方法,其中所述事件設(shè)備包括未決事件寄存 器,并且其中邊沿觸發(fā)的事件將在與所述邊沿觸發(fā)的事件對(duì)應(yīng)的未決事件 寄存器中設(shè)置位。
43. 根據(jù)權(quán)利要求42的方法,其中通過(guò)將值寫(xiě)入到寫(xiě)入事件確認(rèn)通 道中的相應(yīng)位來(lái)確認(rèn)所述未決事件寄存器中的事件。
44. 根據(jù)權(quán)利要求42的方法,其中將讀取通道指令發(fā)出到讀取事件 狀態(tài)通道會(huì)返回與寫(xiě)入事件掩碼通道中的值進(jìn)行邏輯'與,的所述未決事 件寄存器的值,從而僅提供所述寫(xiě)入事件掩碼通道中標(biāo)識(shí)的已啟用事件的 事件狀態(tài)信息。
45. 根據(jù)權(quán)利要求44的方法,其中在將新值寫(xiě)入到所述寫(xiě)入事件掩 碼通道時(shí)或在所述未決事件寄存器中記錄新事件時(shí),將更改所述讀取事件 狀態(tài)通道的內(nèi)容。
46. 根據(jù)權(quán)利要求44的方法,其中更改所述讀取事件狀態(tài)通道中的 位將使讀取事件狀態(tài)通道計(jì)數(shù)遞增1,并且其中在將寫(xiě)入通道指令發(fā)送到 寫(xiě)入事件確認(rèn)通道之后在所述讀取事件狀態(tài)通道中設(shè)置事件時(shí),所述讀取 事件狀態(tài)通道計(jì)數(shù)將遞增1。
47. 根據(jù)權(quán)利要求46的方法,其中當(dāng)使用通道讀取指令讀取所述讀 取事件狀態(tài)通道時(shí),所述讀取事件狀態(tài)通道計(jì)數(shù)將遞減1。
48. 根據(jù)權(quán)利要求46的方法,其中當(dāng)所述讀取事件狀態(tài)通道計(jì)數(shù)不是o時(shí),將中斷發(fā)送到所述處理器。
49. 根據(jù)權(quán)利要求41的方法,其中所述一個(gè)或多個(gè)通道包括處理器 讀取事件狀態(tài)通道,并且其中所述處理器讀取事件狀態(tài)通道包含由處理器寫(xiě)入事件掩碼通道啟用的所有事件的當(dāng)前狀態(tài)。
50. 根據(jù)權(quán)利要求49的方法,其中如果與所述處理器讀取事件狀態(tài) 通道關(guān)聯(lián)的通道計(jì)數(shù)為0,將讀取通道指令發(fā)送到所述處理器讀取事件狀 態(tài)通道會(huì)停止所述處理器。
51. 根據(jù)權(quán)利要求49的方法,其中如果發(fā)生事件并且所述事件在處 理器寫(xiě)入事件掩碼通道中的相應(yīng)位為1,則與所述處理器讀取事件狀態(tài)通道關(guān)聯(lián)的通道計(jì)數(shù)被設(shè)置為1。
52. 才艮據(jù)權(quán)利要求49的方法,其中如果將1寫(xiě)入處理器寫(xiě)入事件掩 碼通道中與處理器未決事件寄存器中的l對(duì)應(yīng)的位位置,則與所述處理器 讀取事件狀態(tài)通道關(guān)聯(lián)的通道計(jì)數(shù)被設(shè)置為1。
53. 4艮據(jù)權(quán)利要求49的方法,其中如果在將寫(xiě)入通道指令發(fā)送到處 理器寫(xiě)入事件確^人通道之后已啟用的事件未決,則與所述處理器讀取事件狀態(tài)通道關(guān)聯(lián)的通道計(jì)數(shù)被設(shè)置為1。
54. 根據(jù)權(quán)利要求49的方法,其中如果特權(quán)軟件使用處理器通道訪(fǎng) 問(wèn)設(shè)備將與所述處理器讀取事件狀態(tài)通道關(guān)聯(lián)的通道計(jì)數(shù)設(shè)置為1,則所 述通道計(jì)數(shù)凈皮i殳置為1。
55. 根據(jù)權(quán)利要求49的方法,其中處理一個(gè)或多個(gè)事件包括 將讀取通道指令發(fā)出到所述處理器讀取事件狀態(tài)通道以標(biāo)識(shí)已發(fā)生的事件;發(fā)出寫(xiě)入通道指令以便針對(duì)要處理的所有事件在處理器寫(xiě)入事件確認(rèn) 通道中寫(xiě)入相應(yīng)的位;以及 處理所述事件。
56. 才艮據(jù)權(quán)利要求41的方法,其中所述一個(gè)或多個(gè)通道包括處理器 寫(xiě)入事件掩碼通道,并且其中所述處理器寫(xiě)入事件掩碼通道包含處理器事 件掩碼,所述處理器事件掩碼標(biāo)識(shí)了影響處理器讀取事件狀態(tài)通道的狀態(tài)的事件。
57. 才艮據(jù)權(quán)利要求56的方法,其中發(fā)出到所述處理器寫(xiě)入事件掩碼 通道的寫(xiě)入通道指令將啟用所述處理器事件掩碼中的相應(yīng)事件并更新處理 器讀取事件狀態(tài)通道的狀態(tài)。
58. 根據(jù)權(quán)利要求41的方法,其中所述一個(gè)或多個(gè)通道包括用于讀 取事件狀態(tài)掩碼的當(dāng)前值的處理器讀取事件掩碼通道。
59. 根據(jù)權(quán)利要求58的方法,其中發(fā)出到所述處理器讀取事件掩碼 通道的讀取通道指令將返回最后寫(xiě)入處理器寫(xiě)入事件掩碼通道的數(shù)據(jù)。
60. 根據(jù)權(quán)利要求41的方法,其中所述一個(gè)或多個(gè)通道包括用于確 認(rèn)已發(fā)生的事件的處理器寫(xiě)入事件確認(rèn)通道。
61. 根據(jù)權(quán)利要求60的方法,其中將寫(xiě)入通道指令發(fā)出到設(shè)置了特 定事件位的處理器寫(xiě)入事件確認(rèn)通道將確認(rèn)由軟件處理相應(yīng)的事件。
62. 根據(jù)權(quán)利要求41的方法,其中根據(jù)所述一個(gè)或多個(gè)寄存器中存 儲(chǔ)的數(shù)據(jù)來(lái)處理一個(gè)或多個(gè)事件包括通過(guò)檢測(cè)與所述一個(gè)或多個(gè)通道關(guān)聯(lián)的通道計(jì)數(shù)、檢測(cè)與所述處理器 的遞減器關(guān)聯(lián)的遞減器計(jì)數(shù),或檢測(cè)處理器通道訪(fǎng)問(wèn)操作中的至少一項(xiàng)來(lái) 標(biāo)識(shí)事件。
63. 根據(jù)權(quán)利要求62的方法,其中在MFC讀取標(biāo)記組狀態(tài)通道的通 道計(jì)數(shù)從0更改為非0值時(shí),將設(shè)置存儲(chǔ)器流控制器MFC標(biāo)記組狀態(tài)更新 事件,并且其中所述MFC標(biāo)記組狀態(tài)更新事件通知在所述處理器上運(yùn)行的 程序標(biāo)記組已完成處理并且MFC讀取標(biāo)記組狀態(tài)通道已更新,從而可以讀 取所述MFC讀取標(biāo)記組狀態(tài)通道而不停止所述處理器。
64. 根據(jù)權(quán)利要求62的方法,其中在MFC讀取列表停止和通知標(biāo)記 狀態(tài)通道的通道計(jì)數(shù)從0更改為非0值時(shí),將設(shè)置存儲(chǔ)器流控制器MFC直 接存儲(chǔ)器訪(fǎng)問(wèn)DMA列表命令停止和通知事件,并且其中所述MFC DMA列表 命令停止和通知事件通知在所述處理器上運(yùn)行的程序MFC DMA列表命令內(nèi) 的列表元素已完成處理,并且MFC讀取列表停止和通知標(biāo)記狀態(tài)通道而不停止所述處理器。
65. 根據(jù)權(quán)利要求62的方法,其中在排隊(duì)的MFC命令操作碼寄存器 的通道計(jì)數(shù)從0更改為非0值時(shí),將設(shè)置存儲(chǔ)器流控制器MFC處理器命令 隊(duì)列可用事件,并且其中所述MFC處理器命令隊(duì)列可用事件通知在所述處 理器上運(yùn)行的程序MFC處理器命令隊(duì)列中的表項(xiàng)可用,并且發(fā)送到所述MFC 命令操作碼通道的寫(xiě)入通道指令不會(huì)停止所述處理器。
66. 根據(jù)權(quán)利要求62的方法,其中在處理器讀取入站郵箱通道的通 道計(jì)數(shù)從0更改為非O值時(shí),將設(shè)置處理器入站郵箱可用事件,并且其中 所述處理器入站郵箱可用事件通知在所述處理器上運(yùn)行的程序外部設(shè)備已 寫(xiě)入空的處理器郵箱寄存器,并且發(fā)出到處理器讀取入站郵箱通道的讀取 通道指令不會(huì)停止所述處理器。
67. 根據(jù)權(quán)利要求62的方法,其中在所述遞減器計(jì)數(shù)的最高位從0 更改為1時(shí),將設(shè)置處理器遞減器事件,并且其中所述處理器遞減器事件 通知在所述處理器上運(yùn)行的程序所述遞減器已到達(dá)0值。
68. 根據(jù)權(quán)利要求62的方法,其中在處理器寫(xiě)入出站中斷郵箱通道 計(jì)數(shù)從O更改為非O值時(shí),將設(shè)置處理器出站中斷郵箱可用事件,并且其 中所述處理器出站中斷郵箱事件通知在所述處理器上運(yùn)行的程序外部設(shè)備 已讀取滿(mǎn)的處理器出站中斷郵箱寄存器,并且發(fā)送到處理器寫(xiě)入出站中斷 郵箱通道的寫(xiě)入通道指令不會(huì)停止所述處理器。
69. 根據(jù)權(quán)利要求62的方法,其中在相應(yīng)處理器信號(hào)通知通道的通 道計(jì)數(shù)從O更改為非O值時(shí),將設(shè)置處理器信號(hào)通知可用事件,并且其中 所述處理器信號(hào)通知可用事件通知在所述處理器上運(yùn)行的程序外部設(shè)備已 寫(xiě)入空的處理器信號(hào)通知寄存器,并且發(fā)出到處理器信號(hào)通知通道的讀取 通道指令不會(huì)停止所述處理器。
70. 根據(jù)權(quán)利要求62的方法,其中在原子保留丟失時(shí)將設(shè)置鎖定線(xiàn) 保留事件,并且其中所述鎖定線(xiàn)保留事件通知在所述處理器上運(yùn)行的程序 總線(xiàn)操作已導(dǎo)致高速緩存線(xiàn)上的保留丟失。
71. 根據(jù)權(quán)利要求62的方法,其中在寫(xiě)入處理器特權(quán)控制寄存器且關(guān)注事件請(qǐng)求位設(shè)置為1時(shí)將設(shè)置特權(quán)關(guān)注事件,并且其中所述特權(quán)關(guān)注 事件通知在所述處理器上運(yùn)行的程序特4又軟件正在請(qǐng)求來(lái)自在所述處理器 上運(yùn)行的程序的關(guān)注。
72. 根據(jù)權(quán)利要求62的方法,其中在MFC寫(xiě)入多源同步請(qǐng)求通道計(jì) 數(shù)從0值更改為非0值時(shí),將設(shè)置多源同步事件,并且其中所述多源同步 事件通知在所述處理器上運(yùn)行的程序多源同步請(qǐng)求的處理已完成。
73. 根據(jù)權(quán)利要求64的方法,其中根據(jù)所述一個(gè)或多個(gè)寄存器中存 儲(chǔ)的數(shù)據(jù)來(lái)處理一個(gè)或多個(gè)事件進(jìn)一步包括將讀取通道指令發(fā)出到處理器讀取事件掩碼通道;將所述讀取通道指令的返回結(jié)果存儲(chǔ)為掩碼數(shù)據(jù);將寫(xiě)入通道指令發(fā)出到處理器寫(xiě)入事件掩碼通道以啟用所述MFC DMA 列表命令停止和通知事件;將寫(xiě)入通道指令發(fā)出到處理器寫(xiě)入事件確認(rèn)通道以確認(rèn)所述MFC DMA 列表命令停止和通知事件;將讀取通道指令發(fā)出到MFC讀取列表停止和通知標(biāo)記狀態(tài)通道以標(biāo)識(shí) 哪個(gè)標(biāo)記組具有DMA列表命令的處于停止和通知狀態(tài)的DMA列表元素; 針對(duì)具有已停止的DMA列表元素的每個(gè)標(biāo)記組執(zhí)行應(yīng)用特定的操作;以及將寫(xiě)入通道指令發(fā)出到具有標(biāo)記組標(biāo)識(shí)符的列表停止和通知標(biāo)記確認(rèn) 通道以由此確認(rèn)和重新開(kāi)始已停止的DMA列表命令。
74. 才艮據(jù)權(quán)利要求65的方法,其中根據(jù)所述一個(gè)或多個(gè)寄存器中存 儲(chǔ)的數(shù)據(jù)來(lái)處理一個(gè)或多個(gè)事件進(jìn)一步包括將讀取通道指令發(fā)出到處理器讀取事件掩碼通道;將所述讀取通道指令的返回結(jié)果存儲(chǔ)為掩碼數(shù)據(jù);將寫(xiě)入通道指令發(fā)出到處理器寫(xiě)入事件掩碼通道以啟用所述MFC處理 器命令隊(duì)列可用事件;將寫(xiě)入通道指令發(fā)出到處理器寫(xiě)入事件確認(rèn)通道以確認(rèn)所迷MFC處理 器命令隊(duì)列可用事件;將讀取通道計(jì)數(shù)指令發(fā)出到所述MFC命令操作碼通道以獲取與所述 MFC命令操作碼通道關(guān)聯(lián)的通道計(jì)數(shù); 判定所述通道計(jì)數(shù)是否為0;以及如果所述通道計(jì)數(shù)不為0,則將DMA命令排隊(duì)到所述MFC命令隊(duì)列。
75. 根據(jù)權(quán)利要求66的方法,其中根據(jù)所述一個(gè)或多個(gè)寄存器中存 儲(chǔ)的數(shù)據(jù)來(lái)處理一個(gè)或多個(gè)事件進(jìn)一步包括將讀取通道指令發(fā)出到處理器讀取事件掩碼通道; 將所述讀取通道指令的返回結(jié)果存儲(chǔ)為掩碼數(shù)據(jù); 將寫(xiě)入通道指令發(fā)出到處理器寫(xiě)入事件掩碼通道以啟用所述處理器入站郵箱事件;將寫(xiě)入通道指令發(fā)出到處理器寫(xiě)入事件確認(rèn)通道以確認(rèn)所述處理器入 站郵箱事件;將讀取通道計(jì)數(shù)指令發(fā)出到所述處理器讀取入站郵箱通道以獲取與所 述處理器讀取入站郵箱通道關(guān)聯(lián)的通道計(jì)數(shù);判定所述通道計(jì)數(shù)是否為0;以及如果所述通道計(jì)數(shù)不為0,則將讀取通道指令發(fā)出到所述處理器讀取 入站郵箱通道以讀取下一個(gè)郵箱數(shù)據(jù)表項(xiàng)。
76. 根據(jù)權(quán)利要求67的方法,其中根據(jù)所述一個(gè)或多個(gè)寄存器中存 儲(chǔ)的數(shù)據(jù)來(lái)處理一個(gè)或多個(gè)事件進(jìn)一步包括將讀取通道指令發(fā)出到處理器讀取事件掩碼通道; 將所述讀取通道指令的返回結(jié)果存儲(chǔ)為掩碼數(shù)據(jù); 將寫(xiě)入通道指令發(fā)出到處理器寫(xiě)入事件掩碼通道以啟用所述處理器遞 減器事件;將寫(xiě)入通道指令發(fā)出到處理器寫(xiě)入事件確認(rèn)通道以確認(rèn)所述處理器遞 減器事件;將讀取通道指令發(fā)出到處理器讀取遞減器通道以獲取當(dāng)前遞減器值; 判定是否要生成新的計(jì)時(shí)器事件;以及如果要生成新的計(jì)時(shí)器事件,則將寫(xiě)入通道指令發(fā)出到具有新的遞減器值的處理器寫(xiě)入遞減器通道。
77. 根據(jù)權(quán)利要求68的方法,其中根據(jù)所述一個(gè)或多個(gè)寄存器中存 儲(chǔ)的數(shù)據(jù)來(lái)處理一個(gè)或多個(gè)事件進(jìn)一步包括將讀取通道指令發(fā)出到處理器讀取事件掩碼通道; 將所述讀取通道指令的返回結(jié)果存儲(chǔ)為掩碼數(shù)據(jù); 將寫(xiě)入通道指令發(fā)出到處理器寫(xiě)入事件掩碼通道以啟用所述處理器出 站中斷郵箱事件;將寫(xiě)入通道指令發(fā)出到處理器寫(xiě)入事件確認(rèn)通道以確認(rèn)所述處理器出 站中斷郵箱事件;將讀取通道計(jì)數(shù)指令發(fā)出到處理器寫(xiě)入出站中斷郵箱通道以獲取與所 述處理器寫(xiě)入出站中斷郵箱通道關(guān)聯(lián)的通道計(jì)數(shù); 判定所述通道計(jì)數(shù)是否為0;以及如果所述通道計(jì)數(shù)不為0,則將寫(xiě)入通道指令發(fā)出到具有新的郵箱數(shù) 據(jù)表項(xiàng)的處理器寫(xiě)入出站中斷郵箱通道。
78. 根據(jù)權(quán)利要求62的方法,其中在處理器寫(xiě)入出站郵箱通道計(jì)數(shù) 從0更改為非0值時(shí),將設(shè)置處理器出站郵箱可用事件,并且其中所述處 理器出站郵箱事件通知在所述處理器上運(yùn)行的程序外部設(shè)備已讀取滿(mǎn)的處 理器出站郵箱寄存器,并且發(fā)送到處理器寫(xiě)入出站郵箱通道的寫(xiě)入通道指 令不會(huì)停止所述處理器。
79. 根據(jù)權(quán)利要求78的方法,其中根據(jù)所述一個(gè)或多個(gè)寄存器中存 儲(chǔ)的數(shù)據(jù)來(lái)處理一個(gè)或多個(gè)事件進(jìn)一步包括將讀取通道指令發(fā)出到處理器讀取事件掩碼通道; 將所述讀取通道指令的返回結(jié)果存儲(chǔ)為掩碼數(shù)據(jù); 將寫(xiě)入通道指令發(fā)出到處理器寫(xiě)入事件掩碼通道以啟用所述處理器出 站郵箱事件;將寫(xiě)入通道指令發(fā)出到處理器寫(xiě)入事件確認(rèn)通道以確認(rèn)所述處理器出 站郵箱事件;將讀取通道計(jì)數(shù)指令發(fā)出到處理器寫(xiě)入出站郵箱通道以獲取與所述處理器寫(xiě)入出站郵箱通道關(guān)聯(lián)的通道計(jì)數(shù); 判定所述通道計(jì)數(shù)是否為0;以及如果所述通道計(jì)數(shù)不為0,則將寫(xiě)入通道指令發(fā)出到具有新的郵箱數(shù) 據(jù)表項(xiàng)的處理器寫(xiě)入出站郵箱通道。
80.根據(jù)權(quán)利要求69的方法,其中根據(jù)所述一個(gè)或多個(gè)寄存器中存 儲(chǔ)的數(shù)據(jù)來(lái)處理一個(gè)或多個(gè)事件進(jìn)一步包括將讀取通道指令發(fā)出到處理器讀取事件掩碼通道;將所述讀取通道指令的返回結(jié)果存儲(chǔ)為掩碼數(shù)據(jù);將寫(xiě)入通道指令發(fā)出到處理器寫(xiě)入事件掩碼通道以啟用所述處理器信 號(hào)通知可用事件;將寫(xiě)入通道指令發(fā)出到處理器寫(xiě)入事件確認(rèn)通道以確認(rèn)所述處理器信 號(hào)通知可用事件;將讀取通道計(jì)數(shù)指令發(fā)出到處理器信號(hào)通知通道以獲取與所述處理器 信號(hào)通知通道關(guān)聯(lián)的通道計(jì)數(shù);判定所述通道計(jì)數(shù)是否為0;以及如果所述通道計(jì)數(shù)不為0,則將讀取通道指令發(fā)出到所述處理器信號(hào) 通知通道以從所述處理器信號(hào)通知通道讀取信號(hào)數(shù)據(jù)。
81,根據(jù)權(quán)利要求70的方法,其中根據(jù)所述一個(gè)或多個(gè)寄存器中存 儲(chǔ)的數(shù)據(jù)來(lái)處理一個(gè)或多個(gè)事件進(jìn)一步包括將讀取通道指令發(fā)出到處理器讀取事件掩碼通道;將所述讀取通道指令的返回結(jié)果存儲(chǔ)為掩碼數(shù)據(jù);將寫(xiě)入通道指令發(fā)出到處理器寫(xiě)入事件掩碼通道以啟用所述鎖定線(xiàn)保 留事件;將寫(xiě)入通道指令發(fā)出到處理器寫(xiě)入事件確認(rèn)通道以確認(rèn)所述鎖定線(xiàn)保 留事件;以及執(zhí)行應(yīng)用特定的功能以響應(yīng)鎖定線(xiàn)區(qū)域中的數(shù)據(jù)的系統(tǒng)修改。
82.根據(jù)權(quán)利要求71的方法,其中根據(jù)所述一個(gè)或多個(gè)寄存器中存 儲(chǔ)的數(shù)據(jù)來(lái)處理一個(gè)或多個(gè)事件進(jìn)一步包括將讀取通道指令發(fā)出到處理器讀取事件掩碼通道; 將所述讀取通道指令的返回結(jié)果存儲(chǔ)為掩碼數(shù)據(jù); 將寫(xiě)入通道指令發(fā)出到處理器寫(xiě)入事件掩碼通道以啟用所述特權(quán)關(guān)注 事件;將寫(xiě)入通道指令發(fā)出到處理器寫(xiě)入事件確認(rèn)通道以確認(rèn)所述特權(quán)關(guān)注事件;以及執(zhí)行應(yīng)用特定的功能以響應(yīng)所述特權(quán)關(guān)注事件。
83. 根據(jù)權(quán)利要求72的方法,其中根據(jù)所述一個(gè)或多個(gè)寄存器中存 儲(chǔ)的數(shù)據(jù)來(lái)處理一個(gè)或多個(gè)事件進(jìn)一步包括將讀取通道指令發(fā)出到處理器讀取事件掩碼通道; 將所述讀取通道指令的返回結(jié)果存儲(chǔ)為掩碼數(shù)據(jù); 將寫(xiě)入通道指令發(fā)出到處理器寫(xiě)入事件掩碼通道以啟用所述多源同步事件;將寫(xiě)入通道指令發(fā)出到處理器寫(xiě)入事件確認(rèn)通道以確認(rèn)所述多源同步事件;以及執(zhí)行應(yīng)用特定的功能以響應(yīng)所述多源同步事件。
84. —種包括具有計(jì)算機(jī)可讀程序的計(jì)算機(jī)可用介質(zhì)的計(jì)算機(jī)程序 產(chǎn)品,其中當(dāng)所述計(jì)算機(jī)可讀程序在計(jì)算設(shè)備上執(zhí)行時(shí),將導(dǎo)致所述計(jì)算 設(shè)備執(zhí)行根據(jù)權(quán)利要求1至83中的任一權(quán)利要求的步驟。
85. —種裝置,所述裝置包括 處理器;以及與所述處理器相連的存儲(chǔ)器,其中所述存儲(chǔ)器包括指令,當(dāng)所述指令 由處理器執(zhí)行時(shí),將導(dǎo)致所述處理器執(zhí)行根據(jù)權(quán)利要求1至83中的任一權(quán) 利要求的步驟。
全文摘要
本發(fā)明提供了一種用于在處理器和外部設(shè)備之間傳送指令和數(shù)據(jù)的系統(tǒng)和方法。所述系統(tǒng)和方法使用通道接口作為在處理器和存儲(chǔ)器流控制器之間通信的主要機(jī)制。所述通道接口提供用于例如與處理器設(shè)備、存儲(chǔ)器流控制設(shè)備、機(jī)器狀態(tài)寄存器以及外部處理器中斷設(shè)備進(jìn)行通信的通道??梢詫⑦@些通道指定為阻塞或非阻塞。對(duì)于阻塞通道,當(dāng)沒(méi)有可從相應(yīng)寄存器讀取的數(shù)據(jù)時(shí),或沒(méi)有可供寫(xiě)入相應(yīng)寄存器的空間時(shí),將處理器置于低功率“停止”狀態(tài)。當(dāng)數(shù)據(jù)變得可用或空間被釋放時(shí),通過(guò)跨阻塞通道的通信自動(dòng)喚醒所述處理器。因此,本發(fā)明的通道允許將處理器保持在低功率狀態(tài)。
文檔編號(hào)H04Q3/545GK101243421SQ200680030145
公開(kāi)日2008年8月13日 申請(qǐng)日期2006年8月16日 優(yōu)先權(quán)日2005年8月19日
發(fā)明者C·R·約翰斯, J·S·利伯蒂, M·N·戴, T·Q·特呂翁, T·斯旺森 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司