日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Linux 核心--7.PCI設(shè)備( 五 )







圖6.8 配置PCI系統(tǒng):第三部分


PCI-PCI 橋接器序號分配:步驟三
PCI初始化代碼將繼續(xù)掃描總線1并發(fā)現(xiàn)另外一個PCI-PCI橋接器 , 橋3 。橋3的主干總線接口序號被設(shè)置成1 , 二級總線接口序號為3,同時從屬總線序號為0xff 。圖6.8給出了系統(tǒng)現(xiàn)在的配置情況 。帶總線序號1、2或者3的類型1 PCI配置循環(huán)將被發(fā)送到正確的PCI總線 。





圖6.9 配置PCI系統(tǒng):第四部分


PCI-PCI 橋接器序號分配:步驟四
Linux開始沿PCI總線3向下掃描PCI-PCI橋接器 。PCI總線3上有另外一個PCI-PCI橋接器(橋4) ,  橋4的主干總線序號被設(shè)置成3 , 二級總線序號為4 。由于它是此分支上最后一個橋接器所以它的從屬總線接口序號為4 。初始化代碼將重新從PCI-PCI橋接器3開始并將其從屬總線序號設(shè)為4 。最后PCI初始化代碼將PCI-PCI橋接器1的從屬總線序號設(shè)置為4 。圖6.9給出了最后的總線序號分配情況 。

6.6.3PCI BIOS 函數(shù)
PCI BIOS函數(shù)是一組適用于所有平臺的標(biāo)準(zhǔn)過程 。在Intel和Alpha AXP系統(tǒng)上沒有區(qū)別 。雖然在CPU控制下可以用它們對所有PCI地址空間進行訪問 。但只有Linux核心代碼和設(shè)備驅(qū)動才能使用它們 。




6.6.4PCI 補丁代碼
在Alpha AXP平臺上的PCI補丁代碼所作工作量要大于Intel平臺 。

基于Intel的系統(tǒng)在系統(tǒng)啟動時就已經(jīng)由系統(tǒng)BIOS完成了PCI系統(tǒng)的配置 。Linux只需要完成簡單的映射配置. 非Intel系統(tǒng)將需要更多的配置:


為每個設(shè)備分配PCI I/O及PCI內(nèi)存空間 。
為系統(tǒng)中每個PCI-PCI橋接器配置PCI I/O和PCI內(nèi)存地址窗口 。
為這些設(shè)備產(chǎn)生中斷連線值;用來控制設(shè)備的中斷處理 。
下一節(jié)將描敘這些代碼的工作過程 。


確定設(shè)備所需PCI I/O和PCI內(nèi)存空間的大小
系統(tǒng)要查詢每個PCI設(shè)備需要多少PCI I/O于PCI內(nèi)存地址空間 。為了完成這項工作 , 每個基地址寄存器將被寫上全1并讀取出來 。設(shè)備將把不必要的地址位設(shè)為0從而有效的定義所需地址空間 。





圖6.10 PCI配置頭:基地址寄存器

有兩類基本的基地址寄存器 , 一類標(biāo)識設(shè)備寄存器必須駐留的地址空間;另一類是PCI I/O或PCI內(nèi)存空間 。此寄存器的0位來進行類型的區(qū)分 。圖6.10給出了對應(yīng)于PCI內(nèi)存和PCI I/O兩種不同類型的基地址寄存器 。

確定某個基地址寄存器所需地址空間大小時,先向此寄存器寫入全1再讀取此寄存器,設(shè)備將在某些位填上0來形成一個二進制數(shù)表示所需有效地址空間 。

以初始化DEC 21142 PCI快速以太設(shè)備為例 , 它將告訴系統(tǒng)需要0x100字節(jié)的PCI I/O空間或者PCI內(nèi)存空間 。于是初始化代碼為其分配空間 ??臻g分配完畢后 , 就可以在那些地址上看到21142的控制與狀態(tài)寄存器 。


為PCI-PCI橋接器與設(shè)備分配PCI I/O與PCI內(nèi)存
象所有內(nèi)存一樣 , PCI I/O和PCI內(nèi)存空間是非常有限甚至匱乏 。非Intel系統(tǒng)的PCI補丁代碼(或者Intel 系統(tǒng)的BIOS代碼)必須為每個設(shè)備分配其所要求的內(nèi)存 。PCI I/O和PCI內(nèi)存必須以自然對齊方式分配給每個設(shè)備 。比如如果一個設(shè)備要求0xB0大小的PCI I/O空間則它必須和一個0xB0倍數(shù)的地址對齊 。除此以外 , 對于任何指定橋接器 , 其PCI I/O和PCI內(nèi)存基址必須以在1M字節(jié)邊界上以4K字節(jié)方式對齊 。所以在橋接器下方的設(shè)備的地址空間必須位于任意指定設(shè)備上方的PCI-PCI橋接器的內(nèi)存范圍內(nèi) 。進行有效的空間分配是一件比較困難的工作 。
Linux使用的算法依賴于由PCI設(shè)備驅(qū)動程序建立的描敘PCI設(shè)備的總線/設(shè)備樹 , 每個設(shè)備的地址空間按照PCI I/O內(nèi)存順序的升序來分配 。同時再次使用遍歷算法來遍歷由PCI初始化代碼建立的pci_bus和 pci_dev結(jié)構(gòu) 。從根PCI總線開始(由pci_boot指向)PCI補丁代碼將完成下列工作:

推薦閱讀