【我所認知的BIOS】—PCI 的中斷(PIC下)

news/2024/11/22 13:22:58/

【我所認知的BIOS—>PCI 的中斷(PIC下)

LightSeed     

2009-5-13     

1PCI中斷概述

注:整篇都是討論在PIC8259)下的中斷過程。當PCI設備插到主板上後(本來南橋裏含有的當然就不用插啦),它要和其他設備通信,或者讓CPU幫它做這般這般,或者CPU讓它做那般那般等等。。。那麼他們究竟是怎麼通信的呢?這就是PCI中斷在中間起的強大作用。PCI中斷,有一個很大的特點,它可以共用。這個特點我先提出來,對於後面講做個鋪墊。

2PCI中斷的HW

在談到PCI設備的時候,我要首先說明一下。我們平時用程式去scan的那個device是邏輯上的device。比如說BUS#0DEV#31FUN0中說的device是邏輯device。而平時我們說一個PCI顯卡,PCI網卡設備,他們都是物理device。一個物理device可能會有多個邏輯device。這裡其實就是function的意思。邏輯device其實是function。這裡要搞清楚。圖2.1是對PCI設備中斷的抽象圖。

PCI設備用INTA~INTD pin連接到8259來傳送中斷信號。需要說明的是,單functionPCI設備只能用INTA

 

 

2.1 PCI設備中斷的抽象圖

正如圖2.1所示,設備引出的INTx連接經過中斷路由後連接到8259PIRQA~D

3INTx的繞線

細心的人肯定會發現,上面圖2.1中的連線是有繞的。那麼爲什麽HW要這樣做呢?這就牽涉到“loading balance”的概念。以下是引用程式設計俱樂部的帖子,原作者liaoo

 

Interrupt pin為出廠時就決定的,不能改變. Ex. 使用 SE or ru check PCI Reg3Dh = 01/02/03/04 for INT#A/B/C/D. interrupt line則是BIOS知道了 "routing"後去填的.例如,BIOS知道

INT#A最終會接到 PIC mode 8259 IRQ 11, PCI Reg3Ch PCI scan 階段會被填成 "0Bh". 至於你說的如何接,PCI spec有提到,為了 "loading balance", board designer可以決定.Ex. 2 PCI devices, 都是利用 INT#A interrupt(so their PCI Reg3Dh = 01h).兩者接到同一個板子上. 假如,board designer決定將:(以下為假設的接法)

PCI slot1 接成: INT#A接到 I-routerINT#B,INT#B接到 I-routerINT#C,INT#C接到 I-routerINT#D,INT#D接到 I-routerINT#A PCI slot2 接成: INT#A接到 I-routerINT#A,INT#B接到 I-routerINT#B,INT#C接到 I-routerINT#C,INT#D接到 I-routerINT#D

則當 2 PCI devices接到 slot1 and 2,就發生:雖然都是透過INT#A interrupt,但是,最後卻是從 "不同的 source出去的 ( Device 1 INT#B出去,Device 2 INT#A出去...)

4、分配IRQPCI設備。

如前文所述,繞線好了後,經過路由INTx都連接到了PIRQA~DBIOS kernel會把經過計算好的可以用的PCI irq No.分配給PIRQA~D。比如說PIRQA~D分別對應IRQ5IRQ9IRQ5IRQ9。那麼最終連接到PIRQA上的設備(邏輯設備)都會分配到IRQ5。至此PCI IRQ的分配就算是完成了。

5、關於PCI IRQ的說明

有人肯定會疑問,爲什麽上面PIRQAPIRQC對應的IRQ No.都是5呢?這個怎麼能通信啊?呵呵,您的擔心是正常的,但是又是工程師們已經解決了的問題。篇首有提到,PCI IRQ是可以共用的。在這裡便被派上用場啦。

6、關於PCI IRQ Routing Table

6.1 PCI IRQ Routing Table綜述

上面的幾點我們談的熱火朝天,只有確定了PCI設備的INTx連接到了南橋的PIRQy那麼就可以正確地把IRQ No.分配給相應的PCI設備了。但是這裡有一个缺点:OS或者其他說軟體是無法知道硬體上究竟某個設備的INTx與南橋的PIRQy具體是怎麼對應的。OS或者其他軟體在不值得的情況下就不能正確分配IRQ No.給設備。那麼這個PCI IRQ Routing Table就挺身而出充當了描述硬體信息的這麼一個角色。它在整個IRQ分配的過程中,是重中之重。那麼我們來分析一下它的架構。

6.2 PCI IRQ Routing Table 的結構

Byte Offset

Size in Bytes

Name

0

4

Signature

4

2

Version

6

2

Table Size

8

1

PCI Interrupt Router's Bus

9

1

PCI Interrupt Router's DevFunc

10

2

PCI Exclusive IRQs

12

4

Compatible PCI Interrupt Router

16

4

Miniport Data

20

11

Reserved (Zero)

31

1

Checksum

32

16

First Slot Entry

48

16

Second Slot Entry

(N + 1) * 16

16

Nth Slot Entry

關於上面的這個結構表,其實我是想用中文描述一下,但是又覺得真的不妥。有些文字翻譯過來以後就有點不好理解。我還是貼一下PCI IRQ Routing Table spec的原文吧。如果有人對這個的E版真的不太瞭解,那麼我想我可以嘗試一下翻譯過來。只是這個表頭其實在BIOS code中都是固定的,或者會自動算好的(所以知道就可以了)。重要的是“Slot Entry”。所以我要對這個部份詳細說明一下。

6.3 Slot Entry的解析

Slot Entry: Each slot entry is 16-bytes long and describes how a slot's PCI interrupt pins are wire OR'd (線或)to other slot interrupt pins and to the chip set's IRQ pins. Each entry has the following format:

Byte Offset

Size in Bytes

Name

0

Byte

PCI Bus Number

1

Byte

PCI Device Number (in upper five bits)

2

Byte

Link Value for INTA#

3

Word

IRQ Bitmap for INTA#

5

Byte

Link Value for INTB#

6

Word

IRQ Bitmap for INTB#

8

Byte

Link Value for INTC#

9

Word

IRQ Bitmap for INTC#

11

Byte

Link Value for INTD#

12

Word

IRQ Bitmap for INTD#

14

Byte

Slot Number

15

Byte

Reserved

對於上表,Byte Offset 01分別是PCI Bus No.Device No.這是在軟體運行過程中判斷的標誌。“Link Value for INTA#”則是一個數字,分別是代表INTA連接到了南橋的PIRQy。比如說:0代表連接到了PIRQA1代表連接到了PIRAB。。。等等。後面以此類推。以上各個slot聯合在一起就是我們平時經常說的PCI IRQ Routing Table了。其實真正深入進去看,它也不是那麼神秘。

6.4 圖解PCI IRQ Routing Table

讓我們從圖片的角度來說明一下。見圖6.1

 

 

6.1

PCI IRQ Routing Table就像一個加工廠一樣,它把原始HW上的信息轉化成OS或者其他軟體可以識別的信息。

PCI IRQ Routing Table其實就像一個洋蔥一樣,它可以分成一層一層的信息。讓我們看看圖6.2就一目了然了。

 

 

6.2

7PCI 中斷共用的處理

系統必須為每個中斷提供對應的中斷服務程式,當然這個程式的入口位址是在中斷向量錶中有填入的。本文給出在路由機制中,設備2 INTA # 和設備3 INTD # 共用,假設連接到了PIRQB。通常如果多個設備使用同一個中斷請求線IRQi則後登記的中斷入口會覆蓋先登記的服務程式的入口先登記中斷的入口被存儲在後登記中斷的服務程式中依次形成一條鏈。設備1INTA發出中斷信號後,計算機經過一系列的過程會進入到IRQ9中斷服務子程式(ISR)中, CPU 首先轉入最後登記入口的中斷服務中,(這裡就先進入到設備2的中斷服務程式中去)查詢該設備的中斷請求位元若該位被置1則執行該程式否則找到下一個共用中斷的入口。(很明顯不是設備2,那麼)轉入下一個中斷服務程式執行在該程式中再查詢該設備的中斷請求位元判斷是否是該設備提出的中斷。(這個時候,設備1舉手說,終於輪到我啦,CPU大哥我要你幫我幹點事,好了後獎勵你一個香吻。。。)

我琢磨著畫個流程圖好理解點如下。

 

中斷流程圖

 

PS:  画这些图的时候真的花了不少时间,如果看的起我想转载的话,请说明出处。谢谢。

 


http://www.ppmy.cn/news/507168.html

相关文章

2D降噪3D降噪(NR:Noise Reduce)

2D降噪:只在2维空间域上进行降噪处理。基本方法:对一个像素将其与周围像素平均,平均后噪声降低,但缺点是会造成画面模糊,特别是物体边缘部分。因此对这种算法的改进主要是进行边缘检测,边缘部分的像素不用来…

语音增强与降噪

目前,语音信号处理已经从传统的信号处理发展到深度学习方法,基本上所有的问题都有了对应的深度学习方法,可以说深度学习无孔不入、遍地开花。 之所以有需求,还是因为问题的存在。特别是在直播中,噪声的问题更为严重。…

信号降噪方法

傅里叶变换 只能获取一段信号总体上包含哪些频率的成分,但是对各成分出现的时刻并无所知。“对非平稳过程,傅里叶变换有局限性”。 短时傅里叶变换(Short-time Fourier Transform, STFT) 把整个时域过程分解成无数个等长的小过…

降噪耳机简介及降噪技术-ANC、ENC、DSP、CVC

一、降噪技术 降噪是指利用某种方法达到降低噪音。 目前降噪技术有两种分别为:主动降噪和被动降噪。 1、物理背景 (1)噪声的本质:是频率、强弱变化无规律、杂乱无章的机械波。机械波又可以按人耳的识别程度分为一下几个部分&am…

消灭非稳态噪音的利器 - AI 降噪

一、轻量级神经网络降噪——ZegoAIDenoise 当下,用户在进行音频通话时常常置身于各种不同的场景中,嘈杂的背景声音以及非稳态噪音往往会对通话产生干扰,其中非稳态噪音是指在时间分布上不连续,并有其形态特征的噪声,是…

堆叠降噪自动编码器 Stacked Denoising Auto Encoder(SDAE)

原文链接 自动编码器(Auto-Encoder,AE) 自动编码器(Auto-Encoder,AE)自编码器(autoencoder)是神经网络的一种,经过训练后能尝试将输入复制到输出。自编码器内部有一个隐…

塞班手机刷linux,14年前的E680携带linux系统把诺基亚塞班系统按在地板摩擦

原标题:14年前的E680携带linux系统把诺基亚塞班系统按在地板摩擦 在android系统和IOS系统没有大展手脚的时候,智能手机的操作系统还是被诺基亚的塞班系统占领,除此之外还有为微软的windows mobile系统等都活跃在智能手机的操作系统市场。摩托…

诺基亚玩java卡顿_为什么诺基亚的塞班系统用多久都不会卡,而安卓系统经常卡?...

原标题:为什么诺基亚的塞班系统用多久都不会卡,而安卓系统经常卡? 在Android系统与iOS系统还没有出现之前,市面上用得最多的操作系统,是诺基亚的Symbian(塞班)系统,它是一个实时性、多任务的纯32位操作系统…