專利名稱:驅(qū)動程序透明的消息信號中斷的制作方法
背景2002年3月29日修訂版2.3的PCI局部總線規(guī)范(PCI Local Bus Specification)為PCI設備定義了基于引腳的中斷和消息信號中斷(MSI)行為。特別地,PCI設備可通過在PCI設備的中斷引腳上斷言和保持中斷信號來生成基于引腳的中斷。相反,PCI設備可通過向MSI地址寫入MSI數(shù)據(jù)來生成MSI。因此,PCI局部總線規(guī)范將基于引腳的中斷定義為電平觸發(fā)事件,而將MSI定義為邊緣觸發(fā)事件。
附圖簡述這里描述的發(fā)明在附圖中作為例子而不是局限來示出。為了簡單和清楚地說明起見,圖中示出的元素不一定按比例繪制。例如,為了清楚起見,一些元素的尺寸相對于其它元素可能被擴大。此外,在認為適當?shù)牡胤?,在各圖中重復參考標號以指示相應或類似元素。
圖1示出了包含生成消息信號中斷的裝置的計算設備的一個實施例。
圖2示出了其中用信號表示中斷狀態(tài)改變的MSI方法的一個實施例。
圖3示出了其中輪詢中斷狀態(tài)改變的MSI方法的一個實施例。
詳細描述下文描述了用于服務消息信號中斷的技術。在下面的描述中,陳述了諸如邏輯實現(xiàn)、操作碼、指定操作數(shù)的手段、資源劃分/共享/復制實現(xiàn)、系統(tǒng)組件的類型和相互關系、以及邏輯劃分/集成選擇等眾多具體細節(jié),以提供對本發(fā)明更加全面的理解。然而,本領域的技術人員可以理解,本發(fā)明可不采用這些具體細節(jié)來實踐。在其它情況下,未詳細示出控制結構、門電平電路和完整的軟件指令序列,以便不使本發(fā)明模糊。本領域的技術人員在閱讀了所包含的描述之后,無需過度的實驗即可實現(xiàn)適當?shù)墓δ堋?br>
說明書中對“一個實施例”、“實施例”、“示例實施例”等的引用表明所描述的實施例可能包括一種特定的特征、結構或特性,但未必每個實施例都包括這種特定的特征、結構或特性。此外,這些短語不一定指的是同一個實施例。此外,當結合一個實施例來描述特定的特征、結構、或特性時,認為無論是否明確描述,實現(xiàn)與其它實施例有關的特征、結構或特性都在本領域的技術人員的知識范圍內(nèi)。
本發(fā)明的實施例可用硬件、固件、軟件、或其任何組合來實現(xiàn)。本發(fā)明的實施例也可以被實現(xiàn)為存儲在機器可讀介質(zhì)中的指令,該指令可由一個或多個處理器讀取和執(zhí)行。機器可讀介質(zhì)可包括用于以機器(例如,計算設備)可讀的形式存儲或傳輸信息的任何機制。例如,機器可讀介質(zhì)可包括只讀存儲器(ROM);隨機存取存儲器(RAM);磁盤存儲介質(zhì);光學存儲介質(zhì);閃存器件;電、光、聲或其它形式的傳播信號(例如載波、紅外信號、數(shù)字信號等)等等。此外,固件、軟件、例程、指令在這里可被描述為執(zhí)行某些動作。然而,應該意識到,這些描述只是為了方便,并且這些動作事實上是來自于計算設備、處理器、控制器、或執(zhí)行該固件、軟件、例程、指令等的其它設備的結果。
現(xiàn)在參照圖1,示出了支持消息信號中斷(MSI)的計算設備的一個實施例。該計算設備可包含處理器100、芯片組102、存儲器104和裝置106。處理器100可從存儲器104檢索和執(zhí)行指令。此外,處理器100可從存儲器104讀取數(shù)據(jù)并向存儲器104寫入數(shù)據(jù)。在一個實施例中,處理器100可執(zhí)行操作系統(tǒng)108,以初始化和控制計算設備的組件,并且還可執(zhí)行裝置驅(qū)動程序110,以服務裝置106的MSI事件。
芯片組102可以包含將處理器100耦合到存儲器104和裝置106的一個或多個集成電路封裝或芯片。芯片組102可包括存儲器控制器112,用于響應于處理器100和裝置106的讀和寫請求,從存儲器104讀取數(shù)據(jù)和/或向存儲器104寫入數(shù)據(jù)。存儲器104可以包括提供可尋址存儲位置的一個或多個存儲器件,可從該可尋址存儲位置讀取數(shù)據(jù)和指令和/或向該可尋址存儲位置寫入數(shù)據(jù)和指令。存儲器104也可包括一種或多種不同類型的存儲器件,諸如DRAM(動態(tài)隨機存取存儲器)器件、SDRAM(同步DRAM)器件、DDR(雙數(shù)據(jù)率)SDRAM器件、或其它易失性和/或非易失性存儲器件。
芯片組102還可以包括在操作上將裝置106與芯片組102接口的一個或多個裝置接口114。在一個實施例中,裝置接口114可包括PCI局部總線接口、PCIExpress總線接口、和/或某一其它類型的裝置接口。關于PCI Express總線的細節(jié)可以在PCI Express基礎規(guī)范(PCI Express Base Specification)修訂本1.0a中找到。
如所描述的,存儲器104可包括服務裝置106的中斷事件的裝置驅(qū)動程序110。在一個實施例中,可編寫裝置驅(qū)動程序110,以服務作為電平觸發(fā)事件的PCI基于引腳的中斷。因此,裝置驅(qū)動程序110可用電平敏感語義來編寫,該語義利用了這一事實如果沒有服務所有的中斷,則裝置驅(qū)動程序110將會被再次調(diào)用。因此,驅(qū)動程序110在退出前可不檢查其他中斷是否需要服務。
因此,在一個實施例中,裝置106可以按與裝置驅(qū)動程序110兼容的方式來生成MSI事件,盡管MSI事件是邊緣觸發(fā)事件而驅(qū)動程序110是為電平觸發(fā)事件編寫的。如所描述的,裝置106可包括核心邏輯116和裝置接口118,以將裝置106與芯片組102接口。在一個實施例中,裝置接口118可包括PCI局部總線接口、PCI Express總線接口、和/或某一其它類型的裝置接口。核心邏輯116可以為裝置106提供核心功能。例如,硬盤控制器的核心邏輯116可包含控制硬盤驅(qū)動器的核心功能,音頻控制器的核心邏輯116可包含生成適合于揚聲器的音頻信號的核心功能等。
裝置106還可包括中斷狀態(tài)寄存器120和中斷啟用寄存器122。中斷狀態(tài)寄存器120可指示一個或多個中斷的狀態(tài),而中斷啟用寄存器122可選擇性地啟用中斷。在一個實施例中,中斷狀態(tài)寄存器120可包括一個或多個位,并且每一位可指示一個中斷的狀態(tài)。例如,中斷狀態(tài)寄存器120可包括八(8)位以知識八種單獨的中斷的狀態(tài)。在一個實施例中,中斷狀態(tài)寄存器120的一個位可被置位成指示與該位相關聯(lián)的中斷是活動的,并可被清零以指示與該位相關聯(lián)的中斷是非活動的。類似地,在一個實施例中,中斷啟用寄存器122可包括一個或多個位,并且每一位可指示一個中斷是否被啟用。例如,中斷啟用寄存器122可包括八(8)位以選擇性地啟用/禁用八種單獨的中斷。在一個實施例中,中斷啟用寄存器120的一個位可被置位以指示與該位相關聯(lián)的中斷被啟用,并可被清零以指示與該位相關聯(lián)的中斷被禁用。
裝置106也可包括MSI能力結構124和MSI生成器126。MSI能力結構124可包括用于構成MSI消息的消息地址128和消息數(shù)據(jù)130。在一個實施例中,操作系統(tǒng)108可在裝置初始化的過程中設置消息地址128和消息數(shù)據(jù)130,以配置MSI生成器126來發(fā)送適當?shù)腗SI消息。特別地,MSI生成器126可通過將由MSI能力結構124提供的消息數(shù)據(jù)130寫到由MSI能力結構124標識的消息地址128來發(fā)送MSI消息。在一個實施例中,MSI生成器126可通過改變消息數(shù)據(jù)130的一或多個較低,并將改變的消息數(shù)據(jù)130寫入消息地址128,來生成不同的MSI消息。
此外,MSI生成器126可用仿真與基于引腳的中斷相關聯(lián)的電平觸發(fā)中斷信號的方式來生成MSI消息。在一個實施例中,MSI生成器126可響應于中斷狀態(tài)寄存器120或中斷啟用寄存器122的更新,來確定是否發(fā)出另一個新的MSI消息。特別地,響應于中斷狀態(tài)寄存器120和中斷啟用寄存器122指示在檢測中斷狀態(tài)寄存器120或中斷啟用寄存器122的任一個的更新后沒有一個啟用的中斷是活動的,MSI生成器126可禁止發(fā)出另一MSI消息。此外,響應于中斷狀態(tài)寄存器120和中斷啟用寄存器122指示在檢測中斷狀態(tài)寄存器120或中斷啟用寄存器122的任一個的更新后至少有一個啟用的中斷是活動的,MSI生成器126可發(fā)出另一MSI消息。
例如,核心邏輯116激活一個或多個中斷,來為核心功能請求中斷服務。特別地,核心邏輯116可將與中斷啟用寄存器122啟用的中斷相關聯(lián)的中斷狀態(tài)寄存器120的一個或多個位置位。響應于中斷狀態(tài)寄存器120的更新,MSI生成器126可通過向消息地址128寫入消息數(shù)據(jù)130來發(fā)出MSI消息。
在另一個例子中,中斷狀態(tài)寄存器120可包括活動的一個或多個啟用的中斷。核心邏輯116可激活一個或多個中斷,來為核心功能請求中斷服務。特別地,核心邏輯116可將與中斷啟用寄存器122啟用的中斷相關聯(lián)的中斷狀態(tài)寄存器120的一個或多個位置位。響應于中斷狀態(tài)寄存器120的更新,MSI生成器126可發(fā)出MSI消息以請求活動中斷的服務。
作為另一個例子,軟件(例如,操作系統(tǒng)108或裝置驅(qū)動程序110)可將狀態(tài)寄存器120的一些但并非全部啟用的且先前為活動的中斷清零。響應于中斷狀態(tài)寄存器120的更新,MSI生成器126可以再次發(fā)出MSI消息,因為中斷狀態(tài)寄存器120和中斷啟用寄存器122仍指示至少有一個正在請求服務的中斷。
在又一個例子中,軟件(例如,操作系統(tǒng)108或裝置驅(qū)動程序110)可將中斷狀態(tài)寄存器120的所有中斷清零。MSI生成器126響應于中斷狀態(tài)寄存器120的更新,可禁止發(fā)出另一MSI消息,因為中斷狀態(tài)寄存器120沒有正在請求服務的中斷。
作為再一個例子,軟件(例如,操作系統(tǒng)108或裝置驅(qū)動程序110)可將中斷狀態(tài)寄存器120的所有中斷清零。然而,在同一時間段內(nèi)(例如,時鐘周期、輪詢間隔等),核心邏輯116可將中斷狀態(tài)寄存器120一個啟用中斷置位。因此,MSI生成器126響應于中斷狀態(tài)寄存器120的更新,可發(fā)出另一MSI消息,因為中斷狀態(tài)寄存器120仍有至少一個活動的啟用中斷,盡管軟件將所有啟用的中斷清零。
此外,在另一個例子中,軟件(例如,操作系統(tǒng)108或裝置驅(qū)動程序110)可將中斷啟用寄存器122的一位置位,來啟用中斷狀態(tài)寄存器的一個先前禁用但活動的中斷。MSI生成器126響應于中斷啟用寄存器122的更新,可發(fā)出另一MSI消息,因為啟用了先前禁用但活動的中斷。
現(xiàn)在參照圖2,描述了用信號表示中斷狀態(tài)變化的MSI方法的一個實施例。在框200中,裝置106的核心邏輯116,、操作系統(tǒng)108或裝置驅(qū)動程序110可更新中斷狀態(tài)寄存器120和/或中斷啟用寄存器122。在一個實施例中,核心邏輯116、操作系統(tǒng)108或驅(qū)動程序110可將一個值寫入中斷狀態(tài)寄存器120,該值將中斷狀態(tài)寄存器120的一個或多個位置位,以激活與該置位的位相關聯(lián)的中斷;和/或?qū)⒅袛酄顟B(tài)寄存器120的一個或多個位清零,以停用與清零的位相關聯(lián)的中斷。此外,核心邏輯116、操作系統(tǒng)108或驅(qū)動程序110可將一個值到中斷啟用寄存器122,該值將中斷啟用寄存器122的一個或多個位置位,以啟用與置位的位相關聯(lián)的中斷;和/或?qū)⒅袛鄦⒂眉拇嫫?22的一個或多個位清零,以禁用與清零的位相關聯(lián)的中斷。
框202中的MSI生成器126可檢測中斷狀態(tài)更新。在一個實施例中,每當核心邏輯116和/或裝置接口118檢測到對中斷狀態(tài)寄存器120和/或中斷啟用寄存器122的寫,核心邏輯116和/或裝置接口118就可發(fā)信號通知MSI生成器126。MSI生成器126因此可基于核心邏輯116或裝置接口118是否發(fā)信號通知中斷狀態(tài)變化,來檢測中斷狀態(tài)的更新或變化。
響應于中斷狀態(tài)變化,MSI生成器126在框204中可確定是否發(fā)出MSI消息,來為正在請求服務的一個或多個中斷請求服務。在一個實施例中,MSI生成器126可響應于中斷狀態(tài)寄存器120和中斷啟用寄存器122指示至少有一個啟用的中斷是活動的,來確定發(fā)出MSI消息。
響應于至少有一個啟用的中斷是活動的,MSI生成器126在框206中可以發(fā)出MSI消息,來為正在請求服務的一個或多個中斷請求服務。特別地,在一個實施例中,MSI生成器126可將MSI能力結構124的消息數(shù)據(jù)130寫入由MSI能力結構124指示的消息地址128。
另外,如果中斷狀態(tài)寄存器120和中斷啟用寄存器122指示沒有啟用的中斷是活動的,則MSI生成器126響應于檢測的中斷狀態(tài)變化,禁止發(fā)出MSI消息,因為沒有中斷正在請求服務。
現(xiàn)在參照圖3,描述了輪詢中斷狀態(tài)變化的MSI方法的一個實施例。在框300中,裝置106的核心邏輯116、操作系統(tǒng)108或裝置驅(qū)動程序110可更新中斷狀態(tài)寄存器120和/或中斷啟用寄存器122。在一個實施例中,核心邏輯116、操作系統(tǒng)108或驅(qū)動程序110可將一個值寫到中斷狀態(tài)寄存器120,該值將中斷狀態(tài)寄存器120的一個或多個位置位,以激活與置位的位相關聯(lián)的中斷;和/或?qū)⒅袛酄顟B(tài)寄存器120的一個或多個位清零,以停用與清零的位相關聯(lián)的中斷。此外,核心邏輯116、操作系統(tǒng)108或驅(qū)動程序110可以將一個值寫到中斷啟用寄存器122,該值將中斷啟用寄存器122的一個或多個位置位,以啟用與置位的位相關聯(lián)的中斷;和/或?qū)⒅袛鄦⒂眉拇嫫?22的一個或多個位清零,以禁用與清零的位相關聯(lián)的中斷。
MSI生成器126在框302中可確定中斷狀態(tài)是否已經(jīng)改變。在一個實施例中,MSI生成器126可包括跟蹤中斷狀態(tài)寄存器120和中斷啟用寄存器122的前一中斷狀態(tài)的一個或多個寄存器(未示出)。在這一實施例中,如果中斷狀態(tài)寄存器120或中斷啟用寄存器122的內(nèi)容與這些寄存器120、122先前的內(nèi)容不同,則MSI生成器126可檢測中斷狀態(tài)變化。在另一個實施例中,MSI生成器126可包括跟蹤哪個中斷在前一時間段(例如,時鐘周期、輪詢間隔)內(nèi)是啟用且活動的一個或多個寄存器(未示出)。在這一實施例中,MSI生成器126可響應于中斷狀態(tài)寄存器120和/或中斷啟用寄存器122指示中斷請求服務的變化(例如,哪個中斷是活動且激活的),來檢測中斷狀態(tài)變化。
響應于確定沒有中斷狀態(tài)變化,MSI生成器126可在一指定的時間段(例如,時鐘周期、輪詢間隔等)后返回到框302。否則,MSI生成器126在304中可確定是否發(fā)出MSI消息,來為請求服務的一個或多個中斷請求服務。在一個實施例中,MSI生成器126可響應于中斷狀態(tài)寄存器120和中斷啟用寄存器122指示至少有一個請求服務的啟用中斷,來確定發(fā)出MSI消息。
響應于至少一個中斷請求服務,MSI生成器126在框306中可以發(fā)出MSI消息,來請求一個或多個中斷的服務。特別地,在一個實施例中,MSI生成器126可通過將MSI能力結構124的消息數(shù)據(jù)130寫入由MSI能力結構124指示的消息地址128,來發(fā)出MSI消息。
否則,如果中斷狀態(tài)寄存器120和中斷啟用寄存器122指示沒有中斷請求服務,則MSI生成器126可禁止發(fā)出MSI消息,因為沒有中斷請求服務。
本發(fā)明的某些特征已參考示例實施例來描述。然而,該描述不應在限制的意義上解釋。本發(fā)明所屬領域的技術人員可以清楚,示例實施例的各種修改以及本發(fā)明的其它實施例都被認為落入本發(fā)明的精神和范圍之內(nèi)。
權利要求
1.一種方法,包括將第一中斷狀態(tài)更新到第二中斷狀態(tài),所述第一中斷狀態(tài)指示至少有一個中斷請求服務,以及如果所述第二中斷狀態(tài)指示在更新后至少有一個中斷請求服務,則發(fā)出消息信號中斷以請求中斷服務。
2.如權利要求1所述的方法,其特征在于,更新包括更新中斷狀態(tài)寄存器。
3.如權利要求1所述的方法,其特征在于,更新包括更新中斷啟用寄存器。
4.如權利要求1所述的方法,其特征在于,更新包括更新中斷狀態(tài)寄存器和中斷啟用寄存器。
5.如權利要求1所述的方法,其特征在于,更新包括更新中斷寄存器的值,以從所述第一中斷狀態(tài)改變?yōu)樗龅诙袛酄顟B(tài),所述方法還包括響應于輪詢所述中斷寄存器,檢測從所述第一中斷狀態(tài)到所述第二中斷狀態(tài)的變化,響應于檢測變化發(fā)出所述消息信號中斷。
6.如權利要求1所述的方法,其特征在于,更新包括向中斷寄存器寫一個值,以從所述第一中斷狀態(tài)改變?yōu)樗龅诙袛酄顟B(tài),所述方法還包括響應于寫所述值,檢測從所述第一中斷狀態(tài)到所述第二中斷狀態(tài)的變化,以及響應于檢測變化,發(fā)出所述消息。
7.如權利要求1所述的方法,其特征在于,發(fā)出所述消息信號中斷包括向消息地址寫入消息數(shù)據(jù)。
8.如權利要求1所述的方法,其特征在于,更新包括激活一個或多個啟用的中斷,來為所述一個或多個啟用的中斷請求服務。
9.如權利要求1所述的方法,其特征在于,更新包括啟用一個或多個活動中斷,來為所述一個或多個活動中斷請求服務。
10.如權利要求1所述的方法,其特征在于,更新包括停用所有請求服務的中斷,以不為任何中斷請求服務。
11.如權利要求1所述的方法,其特征在于,更新包括停用多個請求服務的中斷中的一個,來停止為所述一個停用的中斷請求服務。
12.如權利要求1所述的方法,其特征在于,更新包括停用一個或多個中斷,來停止為所述停用的中斷請求服務,以及激活一個或多個中斷,來為所述激活的中斷請求服務。
13.一種裝置,包括中斷啟用寄存器,用于啟用一個或多個中斷,中斷狀態(tài)寄存器,用于激活一個或多個中斷,消息信號中斷生成器,用于每當所述中斷狀態(tài)寄存器被更新并且所述中斷啟用寄存器和所述中斷狀態(tài)寄存器指示至少有一個中斷請求服務時,發(fā)出消息信號中斷。
14.如權利要求13所述的裝置,其特征在于,還包括裝置接口,用于響應于對所述中斷狀態(tài)寄存器的寫,發(fā)信號通知所述消息信號中斷生成器所述中斷狀態(tài)寄存器被更新。
15.如權利要求13所述的裝置,其特征在于,還包括核心邏輯,用于提供核心功能、更新所述中斷狀態(tài)寄存器來為所述核心功能請求中斷服務、以及響應于更新所述中斷狀態(tài)寄存器發(fā)信號通知所述消息信號中斷生成器。
16.如權利要求13所述的裝置,其特征在于,所述消息信號中斷生成器還在每當所述中斷啟用寄存器被更新并且所述中斷啟用寄存器和所述中斷狀態(tài)寄存器指示至少有一個中斷請求服務的時候發(fā)出所述消息信號中斷。
17.如權利要求16所述的裝置,其特征在于,還包括裝置接口,用于響應于對所述中斷啟用寄存器的寫,發(fā)消息通知所述消息信號中斷生成器所述中斷啟用寄存器被更新。
18.如權利要求16所述的裝置,其特征在于,還包括核心邏輯,用于提供核心功能、更新所述中斷啟用寄存器來為所述核心功能啟用一個或多個中斷、以及響應于更新所述中斷狀態(tài)寄存器,發(fā)信號通知所述消息信號中斷生成器。
19.如權利要求13所述的裝置,其特征在于,所述消息信號中斷生成器輪詢所述中斷狀態(tài)寄存器和所述中斷啟用寄存器,來檢測其更新。
20.一種系統(tǒng),包括每當中斷狀態(tài)被更新并且所述中斷狀態(tài)指示至少有一個中斷請求服務時發(fā)出消息信號中斷的裝置,響應于執(zhí)行引起處理器服務請求服務的裝置的中斷的裝置驅(qū)動程序。
21.如權利要求20所述的系統(tǒng),其特征在于,所述裝置驅(qū)動程序還導致處理器基于電平敏感語句來服務中斷。
22.如權利要求20所述的系統(tǒng),其特征在于,所述裝置驅(qū)動程序還導致處理器停用所述裝置的一個中斷,以及所述裝置響應于處理器停用所述中斷并且至少有一個中斷仍在請求服務,發(fā)出消息信號中斷。
23.如權利要求20所述的系統(tǒng),其特征在于,所述裝置驅(qū)動程序還引起處理器停用請求服務的所述裝置的所有中斷,以及所述裝置響應于盡管處理器停用了請求服務的所述裝置的所有中斷,至少有一個中斷還在請求服務,發(fā)出消息信號中斷。
24.如權利要求20所述的系統(tǒng),其特征在于,所述裝置驅(qū)動程序還引起處理器啟用所述裝置的一個活動中斷,以及所述裝置響應于處理器啟用所述裝置的活動中斷,發(fā)出消息信號中斷。
全文摘要
描述了用于發(fā)出消息信號中斷的機器可讀介質(zhì)、方法和裝置。在某一公開的實施例中,一種裝置以盡管是邊緣觸發(fā)特性的消息發(fā)信號通知中斷,但仍允許用電平敏感的語句編寫的裝置驅(qū)動程序的方式,來生成消息信號中斷。
文檔編號G06F13/20GK1894680SQ200480037044
公開日2007年1月10日 申請日期2004年12月8日 優(yōu)先權日2003年12月19日
發(fā)明者J·貝內(nèi)特 申請人:英特爾公司