天天看點

GIC 之二

GIC架構可以分為Distributor,CPUinterface和VirtualCPU interface三大部分。VirtualCPU interface隻在支援VirtualizationExtensions的系統存在。

Ø  Distributor

Distributor主要完成中斷優先級處理(interrupt prioritization)和配置設定(distribution)中斷到相應的CPU interface。

Ø  CPU interface

主要完成中斷優先級屏蔽(prioritymasking)和搶占處理(preemptionhandling)。

Distributor管理所有的中斷源,決定每個中斷優先級,并為每個CPUinterface選擇出最高優先級的中斷。一個Distributor可以支援8個CPUinterface。

Distributor提供如下程式設計接口:

Ø  使能挂起中斷是否傳遞(forward)到CPUinterface

DistributorControl Register

Ø  使能和禁用任意中斷

InterruptSet-Enable Registers/ Interrupt Clear-Enable Registers

Ø  設定任意中斷優先級

Interrupt PriorityRegisters

Ø  設定任意中斷的目标處理器(target processor list)

InterruptProcessor Targets Registers

Ø  設定中斷為電平觸發(level-sensitive)或者邊沿觸發(edge-triggered)

Interrupt ConfigurationRegisters

Ø  設定中斷為0組或者1組

Interrupt GroupRegisters

Ø  傳遞(Forwarding)任意SGI到一個或者多個目标處理器(target processor)

Software GeneratedInterrupt Register

Ø  檢視任意中斷的狀态

Ø  提供軟體方式設定或清除任意PI(peripheral)的挂起狀态

InterruptSet-Pending Registers/ Interrupt Clear-Pending Registers

SGI Clear-PendingRegisters/ SGI Set-Pending Registers

中斷使用中斷号(Interrupt ID)來辨別。每個CPUinterface可以處理多達1020個中斷。The Banking of SPI and PPI增加了Distributor支援的中斷數目。

GIC将ID_0~ID_1019分為:

Ø  SPI的中斷号為ID_32~ID_1019

Ø  Banking interrupt 的中斷号ID_0 ~ ID_31

n  SGI 中斷号為ID_0 ~ ID_15

一般被用來作為核間中斷IPI(Inter-ProcessorInterrupt)。

n  PPI 中斷号ID_16 ~ ID_31

2.3 CPU interface

 每個CPU interface為連接配接到GIC上的一個processor提供接口。每個CPU interface提供如下程式設計接口:

Ø  使能通知processor中斷請求

CPU InterfaceControl Register

Ø   應答中斷

InterruptAcknowledge Register

Ø  訓示中斷處理完成

End of InterruptRegister

Ø  設定processor的中斷優先級屏蔽(Interruptpriority mask)

Interrupt PriorityMask Register

Ø  定義processor中斷搶占政策

Ø  為processor決定最高優先級的挂起中斷

Highest PriorityPending Interrupt Register

CPU interface根據中斷優先級屏蔽和中斷搶占政策決定将最高優先級的挂起中斷的中斷請求發給processor。

繼續閱讀