国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

PCI

2019-11-17 05:40:28
字體:
來源:轉載
供稿:網友

  Peripheral Component Interconnect(PCI),似乎它的名字暗示的一樣,是描述如何通過一個結構化和可控制的方式把系統中的外設組件連接起來的一個標準。標準的PCI Local Bus規范描述了系統組件電氣連接的方法和它們行為的方法。本章探討linux核心如何初始化系統的PCI總線和設備。



圖6.1是一個PCI基礎的系統的邏輯圖。PCI總線和PCI-PCI橋(bridge)是系統組件聯系在一起的粘合劑。CUP和video設備連在主要的PCI總線,PCI總線0。一個非凡的PCI設備,PCI-PCI橋把主總線連接到次PCI總線,PCI總線1。按照PCI規范的術語,PCI總線1描述成為PCI-PCI橋的下游而PCI總線0是橋的上游。連接在次PCI總線上的是系統的SCSI和以太網設備。物理上橋、次要PCI總線和這兩種設備可以在同一塊PCI卡上。系統中的PCI-ISA橋支持老的、遺留的ISA設備,本圖顯示了一個超級I/O控制芯片,控制鍵盤、鼠標和軟驅。

 

6.1 PCI Address Space(PCI地址空間)

 

CPU和PCI設備需要訪問它們所共享的內存。這些內存讓設備驅動程序控制這些PCI設備并在它們之間傳遞信息。一般地共享的內存包括設備的控制和狀態寄存器。這些寄存器用于控制設備和讀取它的狀態。例如:PCI SCSI設備驅動程序可以讀取SCSI設備的狀態寄存器,判定它是否可以向SCSI磁盤寫一塊信息。或者它可以寫入控制寄存器讓它關閉的設備開始運行。

 

CPU的使用的系統內存可以用作這種共享內存,但是假如這樣的話,每一次PCI設備訪問內存,CPU都不得不停頓,等待PCI設備完成。對于內存的訪問通常有限制,同一時間只能有一個系統組件答應訪問。這會使得系統速度降低。答應系統的外部設備在一個不受控的方式下訪問主內存也不是一個好主意。這會非常危險:一個惡意的設備會讓系統非常不穩定。

 

外部設備由它們自己的內存空間。CPU可以訪問這些空間,但是設備對于系統內存的訪問受到嚴格的控制,必須通過DMA(Direct Memory access直接內存存取)通道。ISA設備可以訪問兩種地址空間:ISA I/O(輸入/輸出)和ISA內存。PCI由三中:PCI I/O、PCI內存和PCI配置空間(configuration space)。CPU可以訪問所有的地址空間其中PCI I/O和PCI內存地址空間由設備驅動程序使用而PCI配置空間由Linux和心中的PCI初始化代碼使用。

 

Alpha AXP處理器沒有對于除了系統地址空間之外的地址空間的天生的訪問模式。它需要使用支持芯片來訪問象PCI配置空間這樣的其他地址空間。它使用了一個地址空間的映射方案,從巨大的虛擬地址空間中偷出一部分映射到PCI地址空間。

 

6.2 PCI Configuration Headers(PCI配置頭)

 

系統中的每一個PCI設備,包括PCI-PCI橋都由一個配置數據結構,位于PCI配置地址空間中。PCI配置頭答應系統識別和控制設備。這個頭位于PCI配置地址空間的確切位置依靠于設備使用的PCI拓撲。例如,插在PC主板一個PCI槽位的一個PCI顯示卡配置頭會在一個位置,而假如它被插到另一個PCI槽位則它的頭會出現在PCI配置內存中的另一個位置。但是不管這些PCI設備和橋在什么位置,系統都可以發現并使用它們配置頭中的狀態和配置寄存器來配置它們。

 

通常,系統的設計使得每一個PCI槽位的PCI配置頭都有一個和它在板上的槽位相關的偏移量。所以,舉例來說,板上的第一個槽位的PCI配置可能位于偏移0而第二個槽位的在偏移256(所有的頭都一樣長度,256字節),依此類推。定義了系統相關的硬件機制使得PCI配置代碼可以嘗試檢查一個給定的PCI總線上的所有可能的PCI配置頭,試圖讀取頭中的一個域(通常是Vendor Identification 域)得到一些錯誤,從而知道那些設備存在而那些設備不存在。PCI Local Bus規范描述了一種可能的錯誤信息:試圖讀取一個空的PCI槽位的Verdor Identification和Device Indentification域時候返回0xFFFFFFFF。



圖6.2顯示了256字節的PCI配置頭的布局。它包括以下域:

參見include/linux/pci.h

 

Vendor Identification 唯一的數字,描述這個PCI設備的發明者。Digital的PCI Vendor Identification 是0x1011而Intel是0x8086。


Device Identification 描述設備自身的唯一數字。例如Digital的21141快速以太網設備的設備標識符是0x0009。

Status 此域給除了設備的狀態,它的位的含義由PCI Local Bus規范規定。

Command 系統通過寫這個域控制這個設備。例如:答應設備訪問PCI I/O內存。

Class Code 標識了設備的類型。對于每一種設備都有標準分類:顯示、SCSI等等。對于SCSI的類型編碼是0x0100。

Base Address Registers 這些寄存器用于確定和分配設備可以使用的PCI I/O和PCI內存的類型、大小和位置。

Interrupt Pin PCI卡的物理管腳中的4個用于向PCI總線傳遞中斷。標準中把它們標記為A、B、C和D。Interrupt Pin域描述了這個PCI設備使用那個管腳。通常對于一個設備來說這時硬件決定的。就是說每一次系統啟動的時候,這個設備都使用同一個中斷管腳。這些信息答應中斷處理子系統治理這些設備的中斷。

Interrupt Line PCI配置頭中的Interrupt Line域用于在PCI初始化代碼、設備驅動程序和Linux的中斷處理子系統之間傳遞中斷控制。寫在這里的數字對于設備驅動程序來講是沒有意義的,但是它可以讓中斷處理程序正確地把一個中斷從PCI設備發送到Linux操作系統中正確的設備驅動程序的中斷處理代碼處。Linux如何處理中斷參看第7章。

 

6.3 PCI I/O and PCI Memory Address(PCI I/O和PCI內存地址)

 

這兩種地址空間用于設備和CPU上運行的Linux核心的它們的設備驅動程序通訊。例如:DECchip 21141快速以太網設備把它的內部寄存器映射到了PCI I/O空間。然后它的Linux設備驅動程序通過讀寫這些寄存器來控制設備。顯示驅動程序通常使用大量的PCI內存空間來放置顯示信息。

 

直到PCI系統建立起來并使用PCI配置頭中的Command域打開了設備對于這些地址空間的訪問為止,設備都無法訪問這些空間。應該注重的是只有PCI配置代碼讀寫PCI配置地址,Linux的設備驅動程序只是讀寫PCI I/O和PCI內存地址。

 

6.4 PCI-ISA Bridges(PCI-ISA橋)

 

這種橋把對于PCI I/O和PCI內存地址空間的訪問轉換成為ISA I/O和ISA內存訪問,用來支持ISA設備。現在銷售的多數系統都包括幾個ISA總線插槽和幾個PCI總線插槽。這種向后的兼容的需要會不斷減少,將來會有只有PCI的系統。在早期的Intel 8080基礎的PC時代,系統中的ISA設備的ISA 地址空間(I/O和內存)就被固定下來。甚至一個S5000 Alpha AXP基礎的計算機系統的ISA軟驅驅動器的ISA I/O地址也會和第一臺IBM PC一樣。PCI規范保留了PCI I/O和PCI內存的地址空間中的較低的區域保留給系統中的ISA外設并使用一個PCI-ISA橋把所有對于這些區域的PCI內存訪問轉換為ISA訪問。

 



6.5 PCI-PCI Bridges(PCI-PCI橋)

 

PCI-PCI橋是非凡的PCI設備,把系統中的PCI總線粘和在一起。簡單系統中只有一個PCI總線,當時單個PCI總線可以支持的PCI設備的數量有電氣限制。使用PCI-PCI橋增加更多的PCI總線答應系統支持更多的PCI設備。這對于高性能的服務器尤其重要。當然,Linux完全支持使用PCI-PCI橋的使用。

 

6.5.1 PCI-PCI Bridges: PCI I/O and PCI Memory Windows

 

PCI-PCI橋只向下游傳遞對于PCI I/O和PCI內存讀和寫的一個子集。例如在圖6.1中,只有讀和寫的地址屬于SCSI或者以太網設備的時候PCI-PCI橋才會把讀寫的地址從PCI總線0傳遞到總線1,其余的都被忽略。這種過濾阻止了不必要的地址信息遍歷系統。為了達到這個目的,PCI-PCI橋必須編程設置它們必須從主總線向次總線通過的PCI I/O和PCI內存地址空間訪問的基礎(base)和限制。一旦系統中的PCI-PCI橋設置好,只要Linux設備驅動程序只是通過這些窗口存取PCI I/O和PCI內存空間,PCI-PCI橋是不可見的。這是個重要的特性,使得Linux的PCI設備驅動程序的作者的日子好過了。但是它也讓Linux下的PCI-PCI橋在一定程度上需要技巧才能配置,我們不久就會看到。

 

6.5.2 PCI-PCI Bridges: PCI Configuration Cycles and PCI Bus Numbering(PCI-PCI橋:PCI配置cycle和PCI總線編號)

 

既然CPU的PCI初始化代碼可以定位不在主PCI總線上的設備,必須有一種機制使得橋可以決定是否把配置cycle從它的主接口傳遞到次接口上。一個cycle就是它顯示在PCI總線上的地址。PCI規范定義了兩種PCI地址配置格式:類型0和類型1,分別在圖6.3和圖6.4中顯示。類型0的PCI配置cycle不包含總線號,被這個PCI總線上的所有的PCI設備解釋用于PCI地址配置。配置cycle的位32:11看作是設備選擇域。設計系統的一個方法是讓每一個位選擇一個不同的設備。這種情況下為11可能選擇槽位0的PCI設備,位12選擇槽位1的PCI設備,依此類推。另一種方法是把設備的槽位號直接寫到位31:11中。一個系統使用哪一種機制依靠于系統的PCI內存控制器。


 

類型1的

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绥棱县| 宜州市| 轮台县| 辽宁省| 久治县| 东源县| 双流县| 武乡县| 斗六市| 兰溪市| 汶上县| 邵阳市| 扶沟县| 蛟河市| 通辽市| 新蔡县| 皮山县| 修文县| 喀什市| 沈阳市| 乡城县| 泸溪县| 宝坻区| 曲麻莱县| 迭部县| 偃师市| 临汾市| 湄潭县| 尉犁县| 清苑县| 漳平市| 武宣县| 洛隆县| 土默特左旗| 宽城| 綦江县| 高邮市| 治多县| 成安县| 嫩江县| 佛山市|