版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
PeripheralComponentInterconnect〔PCI化和可掌握的方式把系統(tǒng)中的外設(shè)組件連接起來的一個標(biāo)準(zhǔn)。標(biāo)準(zhǔn)的PCILocalBus標(biāo)準(zhǔn)描述了系統(tǒng)組件電氣連接的方法和它們行為的方法。本章探討LinuxPCI總線和設(shè)備。6.1PCIPCIPCI-PCI橋〔bridge〕是系統(tǒng)組件聯(lián)系在一起的粘合劑。CUPvideo設(shè)備連在主要的PCI總線,PCI總線0。一個特別的PCI設(shè)PCI-PCIPCIPCI1。依據(jù)PCIPCI1描PCI-PCIPCI0PCISCSI和以太網(wǎng)設(shè)備。物理上橋、次要PCI總線和這兩種設(shè)備可以在同一塊PCI卡上。系統(tǒng)中的PCI-ISA橋ISA設(shè)備,本圖顯示了一個超級I/O掌握芯片,掌握鍵盤、鼠標(biāo)和軟驅(qū)。PCIAddressSpace〔PCI地址空間〕CPUPCI設(shè)備需要訪問它們所共享的內(nèi)存PCI設(shè)備并在它們之間傳遞信息。一般地共享的內(nèi)存包括設(shè)備的掌握和狀態(tài)存放器。這些存放器用于掌握設(shè)備和PCISCSISCSI設(shè)備的狀態(tài)存放器,推斷它是否可SCSI磁盤寫一塊信息。或者它可以寫入掌握存放器讓它關(guān)閉的設(shè)備開頭運(yùn)行。CPU的使用的系統(tǒng)內(nèi)存可以用作這種共享內(nèi)存,但是假設(shè)這樣的話,每一次 PCI設(shè)備訪問內(nèi)存,CPU都不得不停頓,等待PCI設(shè)備完成。對于內(nèi)存的訪問通常有限制,同一時間只能有一個系統(tǒng)組件允許訪問。這會使得系統(tǒng)速度降低。允許系統(tǒng)的外部設(shè)備在一個不受控的方式下訪問主內(nèi)存也不是一個好方法。這會格外危急:一個惡意的設(shè)備會讓系統(tǒng)格外不穩(wěn)定。外部設(shè)備由它們自己的內(nèi)存空間。CPU可以訪問這些空間,但是設(shè)備對于系統(tǒng)內(nèi)存的訪問受到DMA〔DirectMemoryAccess直接內(nèi)存存取〕通道ISA設(shè)備可以訪問兩ISAI/O〔/輸出〕和ISAPCIPCII/OPCIPCI配置空間〔configurationspaceCPU可以訪問全部的地址空間其中PCII/OPCI內(nèi)存地址空間由PCILinuxPCI初始化代碼使用。AlphaAXP持芯片來訪問象PCI配置空間這樣的其他地址空間。它使用了一個地址空間的映射方案,從巨大的虛擬地址空間中偷出一局部映射到PCI地址空間。PCIConfigurationHeaders〔PCI配置頭〕系統(tǒng)中的每一個PCI設(shè)備,包括PCI-PCI橋都由一個配置數(shù)據(jù)構(gòu)造,位于PCI配置地址空間中。PCIPCI配置地址空間的精準(zhǔn)位置依靠于設(shè)備PCIPCPCIPCI顯示卡配置頭會在一個位置,而假設(shè)它被插到另一個PCI槽位則它的頭會消滅在PCI配置內(nèi)存中的另一個位置。但是不管這些PCIPCIPCI配置頭都有一個和它在板上的槽位相關(guān)的偏移量。所以,舉例來說,板上的第一個槽位的PCI0256〔全部的頭都一樣長度,256字節(jié),依此類推。定義了系統(tǒng)相關(guān)的硬件機(jī)制使得PCI配置代碼可以嘗試檢查一個給定的PCI總線上的全部可能的PCI配置頭,試圖讀取頭中的一個域〔通常是VendorIdentification域〕得到一些錯誤,從而知道那些設(shè)備存在而那些設(shè)備不存在。PCILocalBus標(biāo)準(zhǔn)描述了一種可能的錯誤信息:試圖讀取一個空的PCI槽位的VerdorIdentificationDeviceIndentification0xFFFFFFFF6.2256字節(jié)的PCI配置頭的布局。它包括以下域:include/linux/pci.hVendorIdentification唯一的數(shù)字,描述這個PCI設(shè)備的制造者。Digital的PCIVendor Identification是0x1011而Intel是0x8086。DeviceIdentificationDigital21141快速以太網(wǎng)設(shè)備的設(shè)備標(biāo)識0x0009。Status此域給除了設(shè)備的狀態(tài),它的位的含義由PCILocalBus標(biāo)準(zhǔn)規(guī)定。Command系統(tǒng)通過寫這個域掌握這個設(shè)備。例如:允許設(shè)備訪問PCII/O內(nèi)存。ClassCode標(biāo)識了設(shè)備的類型。對于每一種設(shè)備都有標(biāo)準(zhǔn)分類:顯示、SCSISCSI的0x0100。BaseAddressRegisters這些存放器用于確定和安排設(shè)備可以使用的PCII/OPCI小和位置。InterruptPinPCI卡的物理管腳中的4個用于向PCI總線傳遞中斷。標(biāo)準(zhǔn)中把它們標(biāo)記為A、B、C和D。InterruptPin域描述了這個PCI設(shè)備使用那個管腳。通常對于一個設(shè)備來說這時硬件打算的。就是說每一次系統(tǒng)啟動的時候,這個設(shè)備都使用同一個中斷管腳。這些信息允許中斷處理子系統(tǒng)治理這些設(shè)備的中斷。 InterruptLinePCI配置頭中的InterruptLine域用于在PCI初始化代碼、設(shè)備驅(qū)動程序和Linux的中斷處理子系統(tǒng)之間傳遞中斷掌握。寫在這里的數(shù)字對于設(shè)備驅(qū)動程序來講是沒有意義的但是它可以讓中斷處理程序正確地把一個中斷從PCI設(shè)備發(fā)送到Linux操作系統(tǒng)中正確的設(shè)備驅(qū)動程序的中斷處理代碼處。Linux如何處理中斷參看第7章。PCII/OandPCIMemoryAddress〔PCII/OPCI內(nèi)存地址〕這兩種地址空間用于設(shè)備和CPU上運(yùn)行的Linux核心的它們的設(shè)備驅(qū)動程序通訊。例如:DECchip21141快速以太網(wǎng)設(shè)備把它的內(nèi)部存放器映射到了PCII/OLinux設(shè)PCI內(nèi)存空間來放置顯示信息。直到PCIPCICommand域翻開了設(shè)備對于這些地PCI配置代碼讀寫PCI配置地LinuxPCII/OPCI內(nèi)存地址。PCI-ISABridges〔PCI-ISA橋〕這種橋把對于PCII/OPCI內(nèi)存地址空間的訪問轉(zhuǎn)換成為ISAI/OISA內(nèi)存訪問,用來支ISAISAPCI容的需要會不斷削減,將來會有只有PCIIntel8080PC時代,系統(tǒng)中ISAISA地址空間〔I/O和內(nèi)存〕S5000AlphaAXP根底的計算機(jī)系統(tǒng)的ISA軟驅(qū)驅(qū)動器的ISAI/O地址也會和第一臺IBMPC一樣。PCI標(biāo)準(zhǔn)保存了PCII/O和PCI內(nèi)存的地址空間中的較低的區(qū)域保存給系統(tǒng)中的ISA外設(shè)并使用一PCI-ISAPCIISA訪問。PCI-PCIBridges〔PCI-PCI橋〕PCI-PCI橋是特別的PCI設(shè)備把系統(tǒng)中的PCI總線粘和在一起簡潔系統(tǒng)中只有一個PCI總線,當(dāng)時單個PCI總線可以支持的PCI設(shè)備的數(shù)量有電氣限制使用PCI-PCI橋增加更多的PCI總線允許系統(tǒng)支持更多的PCI設(shè)備。這對于高性能的效勞器尤其重要。固然, Linux完全支持使用PCI-PCI橋的使用。PCI-PCIBridges:PCII/OandPCIMemoryWindowsPCI-PCIPCII/OPCI6.1SCSIPCI-PCIPCI0傳遞到總1,其余的都被無視。這種過濾阻擋了不必要的地址信息遍歷系統(tǒng)。為了到達(dá)這個目PCI-PCIPCII/OPCI內(nèi)存地址空間訪問的根底〔base〕和限制。一旦系統(tǒng)中的PCI-PCI橋設(shè)置好,只要Linux設(shè)備驅(qū)動程序只是通過這些窗口存取PCII/OPCI內(nèi)存空間,PCI-PCI橋是不行見的。這是個重要的特性,使LinuxPCILinuxPCI-PCI橋在肯定程度上需要技巧才能配置,我們不久就會看到。PCI-PCIBridges:PCIConfigurationCyclesandPCIBusNumbering〔PCI-PCIPCI配cyclePCI總線編號〕CPUPCIPCI總線上的設(shè)備,必需有一種機(jī)制使得橋可以打算是否把配置cycle從它的主接口傳遞到次接口上。一個cycle就是它顯示在PCI總線上的地PCIPCI016.36.4中顯示。0PCIcyclePCIPCIPCI地址配置。配置cycle的位32:11看作是設(shè)備選擇域。設(shè)計系統(tǒng)的一個方法是讓每一個位選擇一個不同的設(shè)備。這種狀況下為11可能選擇槽位0的PCI設(shè)備,位12選擇槽位1的PCI設(shè)備,依此類推。另一種方法是把設(shè)備的槽位號直接寫到位31:11中。一個系統(tǒng)使用哪一種機(jī)制依靠于系統(tǒng)的PCI內(nèi)存掌握器。類型1的PCI配置cycle包括一個PCI總線號,這種配置循環(huán)被除了PCI-PCI橋之外的全部PCI設(shè)備無視。全部看到了類型1的PCI配置cycle的PCI-PCI橋都可以把這些信息向它們的下游傳送。一個PCI-PCI橋是否無視PCI配置循環(huán)或者向它的下游傳遞,依靠于這個橋是如何配置的。每一個PCI-PCI橋都有一個主總線接口號和一個次總線接口號。主總線接口離CPU最近而次總線接口是離CPU最遠(yuǎn)的。每一個PCI-PCI橋都還有一個附屬總線編號,這是在其次個總線接口之外可以橋接的最大的 PCI總線數(shù)目?;蛘哒f,附屬總線編號是PCI-PCI橋下游的最大的PCI總線編號。當(dāng)PCI-PCI橋看到一個類型1的PCI配置cycle的時候,它做以下事情:假設(shè)指定的總線編號不在橋的次總線編號和總線的附屬編號之間就無視它。假設(shè)指定的總線編號和橋的次總線編號符合就把它轉(zhuǎn)變成為類型0的配置命令假設(shè)指定的總線編號大于次要總線編號而小于或等于附屬總線編號,就不轉(zhuǎn)變地傳遞到次要總線接口上。6.931CPU1的11230的配置命令,3,使設(shè)備1響應(yīng)它。每一個獨(dú)立的操作系統(tǒng)負(fù)責(zé)在PCI配置階段安排總線編號,但是不管使用哪一種編碼方案,對于系統(tǒng)中全部的PCI-PCI橋,以下陳述都必需是正確的:全部位于一個PCI-PCI橋后面的PCI總線的編碼都必需在次總線編號和附屬總線編號之間〔包含PCI-PCI1PCI配置cycle統(tǒng)無法成功地找到并初始化系統(tǒng)中的PCILinux依據(jù)特定的挨次配置這些特別設(shè)備。參看6.6.2LinuxPCI橋和總線編碼方案的描述以及一個可以工作的例子。LinuxPCIInitialization〔LinuxPCI初始化過程〕LinuxPCI初始化代碼分為三個規(guī)律局部:PCIDeviceDriver0PCIPCI設(shè)備和橋。它建立一鏈接的數(shù)據(jù)構(gòu)造的列表,描述系統(tǒng)的拓?fù)?。另外,它還為系統(tǒng)中全部的橋編碼。drivers/pci/pci.candinclude/linux/pci.hPCIBIOSPCIBIOSROMAlphaAXPBIOS效勞Linux核心也有供給了一樣的功能的等價代碼。參見arch/*/kernel/bios32.cPCIFixup系統(tǒng)相關(guān)的整理代碼,整理和系統(tǒng)相關(guān)的在PCI初始化最終的內(nèi)存疏松的狀況。參arch/*/kernel/bios32.cLinuxKernelPCIDataStructures〔LinuxPCI數(shù)據(jù)構(gòu)造〕LinuxPCIPCI6.5顯示了數(shù)據(jù)構(gòu)造之間的關(guān)系,它用來描述了圖6.1中例如的PCI系統(tǒng)。每一個PCI設(shè)備〔包PCI-PCI橋pci_devPCIpci_bus的數(shù)據(jù)構(gòu)造描述。結(jié)果是一個PCI總線的樹型構(gòu)造,每一個總線上有粘附著一些子PCI設(shè)備。由于一個PCI總線只能通過PCI-PCI橋到達(dá)〔除了主PCI總線,總線0,每一個pci_bus都包括一個它要通過PCI設(shè)備的指針〔PCI-PCI橋PCIPCI總線的父總線的一個子設(shè)備。6.5中沒有顯示的還有一個指向系統(tǒng)中全部的PCI設(shè)備的指針:pci_devices。系統(tǒng)中全部PCIpci_devLinux核心使用這個隊列快速查找系統(tǒng)中PCI設(shè)備。ThePCIDeviceDriver〔PCI設(shè)備驅(qū)動程序〕PCI設(shè)備驅(qū)動程序完全不是一個真正的設(shè)備驅(qū)動程序,只是系統(tǒng)初始化的時候操作系統(tǒng)調(diào)用的個函數(shù)。PCI初始化代碼必需掃描系統(tǒng)中全部的 PCI總線,查找系統(tǒng)中全部的PCI設(shè)備〔包括PCI-PCI橋接設(shè)備它使用PCIBIOS代碼來查看它當(dāng)前掃描的PCI總線上的每一個可能的槽位是否被占用。假設(shè)這個PCI槽位占用,它就建立一個描述這個設(shè)備的pci_dev數(shù)據(jù)構(gòu)造,并把它鏈接到PCI設(shè)備的列表中〔由pci_deivices指向。drivers/pci/pci.cScan_busPCI初始化代碼從PCI總線0開頭掃描。它試圖讀出每一個可能的 PCI槽位中每一個可能的PCI設(shè)備的VendorIdentification和DeviceIdentification域當(dāng)它找到了占用的槽位它就建立一個pci_dev數(shù)據(jù)構(gòu)造來描述它。PCI初始化代碼所建立的全部的pci_dev數(shù)據(jù)構(gòu)造〔包括全部的PCI-PCI橋〕都鏈接到一個鏈接表:pci_devices。PCI-PCIpci_buspci_root指向的pci_buspci_devPCIPCIPCI-PCI橋,由于它的分類編碼〔classcode〕0x060400LinuxPCI-PCI橋的PCI總線〔下游PCI-PCI橋,它們都一樣被配置。這個過程成為深度〔depthwize〕算法:系統(tǒng)在寬度搜尋之前先在深度開放??磮D6.1LinuxPCI總1SCSIPCI0上的顯示設(shè)備。LinuxPCIPCI-PCI橋的次總線和附屬總線編號。這些在下面的6.6.2節(jié)具體描述:ConfiguringPCI-PCIBridges–AssigningPCIBusNumbers〔配PCI-PCI-PCI總線編號PCII/O、PCIPCI配置地址空間的讀寫,PCI-PCI橋必需直到以下:PrimaryBusNumberPCI-PCI橋上游的總線SecondaryBusNumberPCI-PCISubordinateBusNumber從這個橋向下可以到達(dá)的全部總線中最高的總線編號。PCII/OandPCIMemoryWindows從這PCI-PCIPCII/OPCIbasesize。問題是當(dāng)你期望配置任何指定的PCI-PCI是否下游還有其他PCI-PCI橋。就算知道,你也不知道它們將會被安排什么編號。答案是使用一個深度遞歸算法〔depthwiserecursivealgorithm。在每一個總線上找到任何PCI-PCI橋的時候都就給它們安排編號。對于找到的每一個PCI-PCI橋,就給它的次總線安排編號,并給它安排臨時0xFF,并掃描它的下游全部的PCI-PCI橋并安排編號。這看起來相當(dāng)簡單,但是下面的實際例子能使這個過程更清楚。PCI-PCIBridgeNumbering:Step16.61〔Bridge1。1PCI1110xFF。這PCI11PCI1PCI110cycle,否則對于其他的總線編號就不變。這也LinuxPCI初始化代碼需要做的,這樣才能訪問并掃描PCI1。PCI-PCIBridgeNumberingStep2Linux使用深度算法,所以初始化代碼開頭掃描PCI1。PCI-PCI22PCI-PCI橋,所以它的附屬總線編號成為2,6.7PCI-PCI橋這時是如何編碼的。PCI-PCIBridgeNumbering:Step3PCI初始化代碼回來掃描PCI總線1,找到了另一PCI-PCI3130xFF。6.812或31PCIcycle現(xiàn)在PCI總線。PCIBIOSFunctions〔PCIBIOS函數(shù)〕PCIBIOS函數(shù)是通用的跨平臺的一系列標(biāo)準(zhǔn)例程。例如,它們對于IntelAlphaAXP系統(tǒng)都是CPUPCI地址空間的訪問。只有Linux核心和設(shè)備驅(qū)動程序需arch/*/kernel/bios32.cPCIFixupAlphaAXPPCIIntel〔根本不做任何事情〕Intel系BIOSPCILinux不需要做更多的事情,只是PCIIntel系統(tǒng),需要做更多的配置:arch/kernel/bios32.cPCII/OPCI內(nèi)存空間PCI-PCIPCII/OPCI內(nèi)存地址窗口InterruptLine值,這些掌握設(shè)備的中斷處理下面描述這些代碼如何工作。FindingOutHowMuchPCII/OandPCIMemorySpaceaDeviceNeeds〔PCII/OPCI內(nèi)存空間〕查詢找到的每一個PCI設(shè)備,找出它需要多少PCII/O和內(nèi)存地址空間。為此,把每一BaseAddressRegister1然后讀出來。設(shè)備會在不關(guān)心的地址位返回1,有效地指定了〔BaseAddressRegisterPCII/OPCI內(nèi)存空間必需在哪一個地址空間。這通過存放器的06.10顯PCIPCII/O的根底地址存放器的兩種形式。為了找出每一個給定的根底地址存放器需要多少地址空間,需要向全部的存放器寫并讀出來。設(shè)備會把不關(guān)心的地址位設(shè)為0,這樣就有效地指明白需要的地址空間。這種設(shè)計示意了使用的全部2DECChip21142PCI快速以太PCII/OPCI0x100字節(jié)的地址。初始化代碼為它21142的掌握和狀態(tài)存放器就可以在這些地址見到。AllocatingPCII/OandPCIMemorytoPCI-PCIBridgesandDevices〔為PCI-PCIPCII/OPCI內(nèi)存〕PCII/OPCI內(nèi)存空間是有限的,其中有一些相當(dāng)緊缺。對于非Intel系統(tǒng)PCI整理代碼〔和IntelBIOS代碼〕必需有效地為每一個設(shè)備安排它需要的內(nèi)存量。安排PCII/OPCI內(nèi)存的安排必需自然對齊。例如,假設(shè)一個設(shè)備懇求PCII/O地0xB0,那么安排的地址就必需是0xB0的倍數(shù)。另外,安排給任何橋的PCII/OPCI內(nèi)存地址的根底必需分別對齊4K1M的邊界。下游的設(shè)備給定的地址空間必需位于它全部的上游PCI-PCI橋的內(nèi)存范圍中間。所以有效地安排地址空間是有比較困難的問題。Linux使用的算法依靠于用PCI設(shè)備驅(qū)動程序建立的總線/設(shè)備樹所描述的每一個設(shè)備,它依據(jù)PCII/O內(nèi)存遞增的挨次安排地址空間。又是使用遞歸算法,遍歷 PCI初始化代碼所建立的pci_bus和pci_dev數(shù)據(jù)構(gòu)造。BIOS整理代碼從PCI總線的根〔pci_root所指〕開頭:分別把當(dāng)前的全局PCII
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年綠色施工安全生產(chǎn)文明工地綜合服務(wù)合同3篇
- 二零二五版養(yǎng)老機(jī)構(gòu)勞動合同管理規(guī)范及養(yǎng)老服務(wù)協(xié)議3篇
- 2025年度香菇食品企業(yè)信用評級與評估服務(wù)合同2篇
- 二零二五年櫥柜安裝及廚房設(shè)備更新合同2篇
- 年度老年人保健品競爭策略分析報告
- 二零二四年外債轉(zhuǎn)貸業(yè)務(wù)借款合同標(biāo)準(zhǔn)3篇
- 二零二五版商業(yè)地產(chǎn)項目股權(quán)借款抵押合同3篇
- 2024版新材料研發(fā)與技術(shù)轉(zhuǎn)讓合同
- 二零二五版體育賽事贊助合同協(xié)議范本下載3篇
- 二零二五版企業(yè)安全生產(chǎn)與環(huán)境保護(hù)培訓(xùn)合同2篇
- HG∕T 2058.1-2016 搪玻璃溫度計套
- 九宮數(shù)獨(dú)200題(附答案全)
- 泌尿科一科一品匯報課件
- 人員密集場所消防安全管理培訓(xùn)
- 白銅錫電鍍工藝
- 拜耳法氧化鋁生產(chǎn)工藝
- 2024年南京信息職業(yè)技術(shù)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 部編版二年級下冊道德與法治第二單元《我們好好玩》全部教案
- 幼兒園利劍護(hù)蕾專項行動工作方案總結(jié)與展望
- 合同信息管理方案模板范文
- 2024年大唐云南發(fā)電有限公司招聘筆試參考題庫含答案解析
評論
0/150
提交評論