Xen-hypervisor中SPI中断虚拟化的实现-重要的寄存器

4 篇文章 0 订阅

基于armv8,SPI中断虚拟化的实现相关重要的寄存器

重要的寄存器

Interrupt Controller List Registers

ICH_LR_EL2, n = 0 - 15
目的:为virtual CPU interface提供中断上下文信息。
在这里插入图片描述state[63:62]:The state of the interrupt:
0b00-Invalid (Inactive).
0b01-Pending.
0b10-Active.
0b11-Pending and active.
HW[61]:
Group[60]:Indicates the group for this virtual interrupt:
0b0-This is a Group 0 virtual interrupt.
0b1-This is a Group 1 virtual interrupt, signaled as a virtual IRQ.
NMI[59]:ndicates whether the virtual priority has the non-maskable property.:
0b0-vINTID does not have the non-maskable interrupt property.
0b1-vINTID has the non-maskable interrupt property.
Priority[55:48]:The priority of this interrupt.
pINTID[44:32]:Physical INTID, for hardware interrupts.
vINTID[31:0]:Virtual INTID of the interrupt.

读取:MRS , ICH_LR_EL2
写:MSR ICH_LR_EL2,

Interrupt Controller Virtual Machine Control Register

ICH_VMCR_EL2
目的:使hypervisor能够保存和恢复GIC状态的虚拟机视图。原文-Enables the hypervisor to save and restore the virtual machine view of the GIC state.
在这里插入图片描述VPMR, bits [31:24]
此字段是ICV_PMR_EL1.Priority的别名。
Virtual Priority掩码。virtual CPU interface.的优先级掩码级别。如果挂起的虚拟中断的优先级高于该字段指示的值,则接口向PE发送虚拟中断信号。

VBPR0, bits [23:21]
此字段是ICV_BPR0_EL1.BinaryPoint的别名
Group 0的Virtual Binary Point Register。定义优先级值字段拆分为两部分(组优先级字段和子优先级字段)的点。组优先级字段确定Group 0中断抢占,并且如果ICH_VMCR_EL2.VCBPR==1,还确定Group 1中断抢占。

VBPR1, bits [20:18]
此字段是ICV_BPR1_EL1.BinaryPoint的别名。
Group 1的Virtual Binary Point Register。定义优先级值字段拆分为两部分(组优先级字段和子优先级字段)的点。如果ICH_VMCR_EL2.VCBPR==0,则组优先级字段确定Group 1中断抢占。

VEOIM, bit [9]
此位是ICV_CTLR_EL1.EOImode的别名。
Virtual EOI模式。控制对中断结束寄存器的写入是否也会停用虚拟中断:
0b0-ICV_ EOIR0_EL1和ICV_。访问ICV_DIR_EL1是不可预测的。
0b1-ICV_ EOIR0_EL1和ICV_。ICV_DIR_EL1提供中断去激活功能。

VCBPR, bit [4]
此字段是ICV_CTLR_EL1.CBPR的别名。
Virtual Common Binary Point Register。该位的可能值为:
0b0-ICV_BPR1_EL1确定虚拟组1中断的抢占组。
0b1-读取ICV_BPR1_EL1返回ICV_BPR0_EL1加1,饱和为0b111。将忽略对ICV_BPR1_EL1的写入。

VFIQEn, bit [3]
此位是GICV_CTLR.FIQEn的别名。
启用虚拟FIQ。该位的可能值为:
0b0-Group 0 virtual中断被呈现为virtual IRQ。
0b1-Group 0 virtual中断被呈现为virtual FIQ。

VAckCtl, bit [2]
此位是GICV_CTLR.AckCtl的别名。
Virtual AckCtl. 该位的可能值为:
0b0-如果最高优先级pending中断是Group 1,则读取GICV_IAR或GICV_HPPIR返回INTID 1022。
0b1-如果最高优先级pending中断是Group 1,则读取GICV_IAR或GICV_HPPIR返回相应中断的INTID。

VENG1, bit [1]
此位是ICV_IGRPEN1_EL1.Enable的别名。
Virtual Group 1中断启用。该位的可能值为:
0b0-Virtual Group 1中断被禁用。
0b1-Virtual Group 1中断已启用。

VENG0, bit [0]
此位是ICV_IGRPEN0_EL1.Enable的别名。
Virtual Group 0中断启用。该位的可能值为:
0b0- Virtual Group0中断被禁用。
0b1-Virtual Group 0中断已启用。

Hypervisor Configuration Register

**HCR_EL2 **
目的:为虚拟化提供配置控制,包括定义各种操作是否被捕获到EL2。
HCR_EL2, Hypervisor Configuration Register

在这里插入图片描述
AMO, bit [5]:Physical SError interrupt routing.
0b0:
在EL2以下的异常级别执行时,并且EL2在当前安全状态下启用:

  • 物理SError中断不会被带到EL2。
  • 当HCR_EL2.TGE的值为0时,如果PE使用AArch64在EL2执行,则除非通过SCR_EL3.EA位将物理SError中断路由到EL3,否则不会进行物理SEerror中断。
  • 虚拟SError中断被禁用。

0b1:
在任何异常级别执行时,并且EL2在当前安全状态下启用:

  • 物理SError中断被带到EL2,除非它们被路由到EL3。
  • 当HCR_EL2.TGE的值为0时,则启用虚拟SError中断。

IMO, bit [4]:Physical IRQ Routing.
0b0:
在EL2以下的异常级别执行时,并且EL2在当前安全状态下启用:

  • 物理IRQ中断不会被带到EL2。
  • 当HCR_EL2.TGE的值为0时,如果PE使用AArch64在EL2执行,则不采用物理IRQ中断,除非它们通过SCR_EL3.IRQ位路由到EL3。
  • 虚拟IRQ中断被禁用。

0b1:
在任何异常级别执行时,并且EL2在当前安全状态下启用:

  • 物理IRQ中断被带到EL2,除非它们被路由到EL3。
  • 当HCR_EL2.TGE的值为0时,则启用虚拟IRQ中断。

FMO, bit [3]:Physical FIQ Routing.
0b0:
在EL2以下的异常级别执行时,并且EL2在当前安全状态下启用:
•物理FIQ中断不带到EL2。
•当HCR_EL2.TGE的值为0时,如果PE使用AArch64在EL2执行,则不采用物理FIQ中断,除非它们通过SCR_EL3.FIQ位路由到EL3。
•虚拟FIQ中断被禁用。
0b1:
在任何异常级别执行时,并且EL2在当前安全状态下启用:

  • 物理FIQ中断被带到EL2,除非它们被路由到EL3。
  • 当HCR_EL2.TGE为0时,则启用虚拟FIQ中断。

Distributor Control Register

GICD_CTLR
目的:启用中断和关联路由。
在这里插入图片描述

RWP, bit [31]
寄存器写入挂起。只读。指示寄存器写入是否正在进行:
0b0-没有正在进行的寄存器写入。先前寄存器写入受影响寄存器字段的影响对GIC体系结构的所有逻辑组件(包括CPU interfaces)都是可见的。
0b1-正在进行寄存器写入。由于更改的影响仍在传播,因此不能保证以前对受影响寄存器字段的寄存器写入的影响对GIC体系结构的所有逻辑组件(包括CPU interfaces)都可见。

E1NWF, bit [7]:Enable 1 of N Wakeup Functionality.
0b0-对于1 of N中断,无法选择处于休眠状态的PE。
0b1-可以为1 of N中断,选择休眠的PE,这是由IMPLEMENTATION DEFINED控件确定的。

DS, bit [6]:Disable Security.
0b0-不允许Non-secure访问和修改控制Group 0中断的寄存器。
0b1-允许Non-secure访问和修改控制Group 0中断的寄存器。
ARE_NS, bit [5]:Affinity Routing Enable, Non-secure state.
0b0-Affinity routing disabled for Non-secure state.
0b1-Affinity routing enabled for Non-secure state.
ARE_S, bit [4]:Affinity Routing Enable, Secure state.
0b0-Affinity routing disabled for Secure state.
0b1-Affinity routing enabled for Secure state.
EnableGrp1S, bit [2]:Enable Secure Group 1 interrupts.
0b0-Secure Group 1中断被禁用。
0b1-Secure Group 1中断已启用。
EnableGrp1NS, bit [1]:Enable Non-secure Group 1 interrupts.
0b0-Secure Group 1中断被禁用。
0b1-Secure Group 1中断已启用。
EnableGrp0, bit [0]:Enable Group 0 interrupts.
0b0-Group 0中断被禁用。
0b1-Group 0中断已启用。

List Registers

GICH_LR, n = 0 - 15
目的:这些寄存器为虚拟CPU interface.提供上下文信息。在这里插入图片描述
HW, bit [31]
指示此虚拟中断是否为硬件中断,这意味着它对应于物理中断。虚拟中断的停用还导致对应于INTID的物理中断的停用:
0b0-此中断完全由软件触发。当虚拟中断被停用时,不会向Distributor发送任何通知。
0b1-硬件中断。当虚拟中断被停用时,会向Distributor发送停用中断请求,使用GICH_LR.pITID来指示物理中断标识符。

Group, bit [30]
指示中断是Group 0还是Group1:
0b0-Group 0 virtual中断。GICV_CTLR.FIQEn确定它是作为虚拟IRQ还是作为虚拟FIQ被发信号通知,并且GICV_CTLC.EnableGrp0使能将该中断发信号通知给虚拟机。
0b1-Group 1 virtual中断,用信号通知为虚拟IRQ。ICV_CTLR.EnableGrp1使能向虚拟机发出该中断的信号。

State, bits [29:28]
中断的状态。此字段具有以下值之一:
0b00-Inactive
0b01-Pending
0b10-Active
0b11-Active and pending

Priority, bits [27:23]
此中断的优先级。

pINTID, bits [19:10]
此字段的功能取决于GICH_LR.HW的值。
当GICH_LR.HW==0时:

  • Bit[19]指示中断是否触发EOI维护中断。如果该位为1,则当vINTID标识的中断被停用时,EOI维护中断被断言。
  • 位[18:13]被保留,SBZ。
  • 如果vINTID字段值对应于SGI(即0-15),则位[12:10]包含请求PE的编号。这出现在GICV_IAR或GICV_AIAR的相应字段中。如果vINTID字段值不是0-15,则此字段必须清除为0。

当GICH_LR.HW==1时:

  • 此字段指示hypervisor转发给Distributor的pINTID。此字段只需要实现足够的位来保存ID配置的有效值。
  • 如果pINTID的值为0-15或1020-1023,则行为是不可预测的。如果pITID的值为16-31,则该字段应用于与请求去激活的virtual CPU interface相同的PE相关联的PPI。

vINTID, bits [9:0]
当通过GICV_IAR确认中断时,该INTID返回给VM。存储在List registers中的每个有效中断必须具有该virtual CPU interface. 的唯一vINTID。如果vINTID的值是1020-1023。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值