GIC/ITS代码分析(1)MADT表
MADT表以统一中断模型实现描述了系统中所有的中断。支持中断模型包括PC-AT兼容的双8259中断控制器,对于ARM处理器系统,GIC控制器。
MADT格式如下所示:
Field |
Byte Length |
Byte Offset |
描述 |
Signature |
4 |
0 |
‘APIC’ |
Length |
4 |
4 |
MADT整个长度 |
Revision |
1 |
8 |
5 |
Checksum |
1 |
9 |
整个表的checksum |
OEMID |
6 |
10 |
OEM ID |
OEM Table ID |
8 |
16 |
厂商ID |
OEM Revision |
4 |
24 |
OEM版本 |
Creator ID |
4 |
28 |
Vendor ID |
Creator Revision |
4 |
32 |
Vendor版本 |
Local Interrupt Controller Address |
4 |
36 |
每个处理器可以访问它本地的中断控制器的32位物理地址 |
Flags |
4 |
40 |
标志 |
Interrupt Controller Structure[n] |
- |
44 |
实现的中断控制器结构体 |
中断控制器结构体支持的类型很多,这里仅介绍GIC相关的中断控制器结构体类型。
1 GICD结构体
它以全局系统中断GSIV代表所有线中断。在ARM系统中GIC管理系统中的中断。每个中断由INTID区分。ACPI中GSIV对于外设中断一一映射到GIC INTID,可能为SPI或PPI。GICD结构体将GICD描述给OS。GICD结构体如下所示:
Field |
Byte Length |
Byte Offset |
描述 |
Type |
1 |
0 |
0xC |
Length |
1 |
1 |
24 |
Reserved |
2 |
2 |
保留必须为0 |
GIC ID |
4 |
4 |
GICD的硬件ID |
Physical Base Address |
8 |
8 |
GICD的物理基地址 |
System Vector Base |
4 |
16 |
保留,必须为0 |
GIC version |
1 |
20 |
0x4 - GICv3 |
Reserved |
3 |
21 |
必须为0 |
2 GICC结构体
在GIC中断模型中,逻辑处理器要求在DSDT中有一个处理器Device Object,使用GICC结构体转换每个处理器GIC信息。
GICC结构体格式如下所示:
Field |
Byte Length |
Byte Offset |
描述 |
Type |
1 |
0 |
0xB |
Length |
1 |
1 |
80 |
Reserved |
2 |
2 |
保留必须为0 |
GIC Interface Number |
4 |
4 |
GIC的CPU接口编号。对于GICv3/v4,该域由平台实现 |
ACPI Processor UID |
4 |
8 |
当处理器设备的_UID值匹配该域中的值时,OS将GICC结构与处理器Device Object关联 |
Flags |
4 |
12 |
查看下面的GICC标志 |
Parking Protocol Version |
4 |
16 |
ARM处理器Parking Protocol实现的版本 |
Performance Interrupt GSIV |
4 |
20 |
GSIV用于性能monitor中断 |
Parked Address |
8 |
24 |
处理器Parking Protocol mailbox的64位物理地址 |
Physical Base Address |
8 |
32 |
该域保持64位物理地址,处理器可以通过该域访问GIC CPU接口 |
GICV |
8 |
40 |
GIC虚拟CPU接口寄存器地址。 |
GICH |
8 |
48 |
GIC虚拟接口控制块寄存器地址。 |
VGIC Maintenance interrupt |
4 |
56 |
虚拟GIC维护中断的GSIV |
GICR Base Address |
8 |
60 |
该域保持对应的GICR的64位物理地址。如果所有GICR在always-on电源域,使用GICR结构体,则该域必须为0。如果GICR结构体存在于MADT中,则该域被忽略 |
MPIDR |
8 |
68 |
该域遵守ARM架构的MPIDR格式 |
Processor Power Efficiency Class |
1 |
76 |
描述相对应的处理器的相关的power efficiency。 |
Reserved |
1 |
77 |
必须为0 |
SPE overflow Interrupt |
2 |
78 |
Statistical Profiling Extension overflow GSIV |
GICC CPU Interface标志:
GIC Flag |
Bit Length |
Bit Offset |
描述 |
Enabled |
1 |
0 |
如果为0,处理器不能使用,操作系统不会使用它 |
Performance Interface Mode |
1 |
1 |
0电平触发 1边沿触发 |
VGIC Maintenance interrupt Mode Flags |
1 |
2 |
0电平触发 1边沿触发 |
Reserved |
29 |
3 |
必须为0 |
3 GICR结构体
GICR通过提供包含GICR页的物理地址使能GICR基地址的discovery。在MADT中可以有超过一个GICR结构体。GICR结构体仅在GICv3或更高版本且将所有GICR放置always-on电源域时使用。当GICR结构体存在时,OSPM忽略GICC结构体中GICR Base Address域。
Field |
Byte Length |
Byte Offset |
描述 |
Type |
1 |
0 |
0xE |
Length |
1 |
1 |
16 |
Reserved |
2 |
2 |
保留,必须为0 |
Discovery Range Base Address |
8 |
4 |
包含GICR的页的64位物理地址 |
Discovery Range Length |
4 |
12 |
GICR Discovery页的长度 |
4 GIC ITS结构体
在GICv3/v4实现中GIC ITS是可选择的。GIC ITS结构体的格式如下所示:
Field |
Byte Length |
Byte Offset |
描述 |
Type |
1 |
0 |
0xF |
Length |
1 |
1 |
20 |
Reserved |
2 |
2 |
保留,必须为0 |
GIC ITS ID |
4 |
4 |
包含GICR的页的64位物理地址 |
Physical Base Address |
8 |
8 |
ITS的64位物理地址 |
Reserved |
4 |
16 |
保留,必须为0 |
GIC/ITS代码分析(1)MADT表相关推荐
- GIC/ITS代码分析(0)GIC/ITS框架介绍
结合GIC芯片手册,计划分多次对GIC/ITS代码进行分析,加深对GIC/ITS代码的理解. 在分析代码之前,需要对GIC/ITS作简要介绍,包括GIC/ITS在系统中的位置,GIC/ITS硬件的介绍 ...
- GIC/ITS代码分析(2)GICv3驱动初始化
这里我们介绍GICv3驱动的基础框架,后续再介绍GICv4的支持.GICv3驱动在文件drivers/irqchip/irq-gic-v3.c中.同时仅介绍ACPI方式下GICv3驱动. 该驱动由宏I ...
- GIC/ITS代码分析(4)中断的分配/映射及注册
本章节分析常用的中断分配/映射及注册函数,对这个过程有个基本的理解.后续针对不同的中断使用实例作更详细介绍. 1 中断的分配/映射 它主要根据硬件中断号hwirq,分配virq,建立起映射,然后请求中 ...
- GIC/ITS代码分析(3)ITS驱动初始化
这里对ITS再作简要介绍.在GICv3中,外设通过写GITS_TRANSLATER,根据所写内容解析出device_id和event_id,根据device_id找到设备所对应的Device Tabl ...
- GIC/ITS代码分析(8)中断应用实例之SGI中断
SGI中断也称IPI中断,即处理器间中断,一个处理器可以向其他处理器发送中断,以达到目标处理器执行某种事情. 如上所示,cpu0通过写GICD寄存器让cpu2上产生SGI中断. 在ARM64系统中,硬 ...
- GIC/ITS代码分析(13)LPI中断虚拟化之KVM中ITS设备的模拟
1 ITS设备的注册 ITS设备和GIC设备通过函数kvm_register_device_ops()注册不同的操作函数,如下所示: 2 系统调用KVM_CREATE_DEVICE 在QEMU中会调用 ...
- GIC/ITS代码分析(12)LPI中断虚拟化之QEMU中ITS设备的模拟
QEMU中实现ITS设备模拟在文件hw/intc/arm_gicv3_its_kvm.c中实现.初始化如下: 过程如下: 定义ITS设备的具现化接口kvm_arm_its_realize(): 设备设 ...
- php table转json,html table表数据转Json格式示例代码分析
本文为大家介绍下html table表数据转Json格式,下面有个不错的示例,大家可以参考下 代码如下: var keysArr = new Array("key0", " ...
- Linux GIC代码分析
一.前言 GIC(Generic Interrupt Controller)是ARM公司提供的一个通用的中断控制器,其architecture specification目前有四个版本,V1-V4(V ...
最新文章
- FastAI 课程学习笔记 lesson 1:宠物图片分类
- 钻井缸套排量_川庆钻探||合理化建议成果展示:用陶瓷代替金属,缸套使用寿命延长了10倍...
- resumable oracle,Oracle的Resumable特性
- 投资83亿!“双一流”高校异地落户,传来新消息!
- mysql binlog 恢复 表_MySQL通过Binlog恢复删除的表
- (chap5 web服务器) 虚拟主机
- 架构师养成之道-01-知识图谱
- 《复杂》读书笔记(part2)--混沌与逻辑斯蒂映射
- ABP vNext微服务架构详细教程——结束语
- 根据用户名或者厂商名称生成相关的弱口令
- python基础编程语法-Python基础语法学习笔记
- set-cookie无法存入到浏览器cookie问题汇总
- Matlab实现Monte Carlo期权定价
- 货币金融学(4): 商业银行业务/央行
- 互联网日报 | 5月18日 星期二 | 中国移动启动A股上市;京东物流启动全球招股;快手发布首款自研手游产品...
- 小马虎想用计算机计算396乘19,四年级上册数学精选练习题
- httpc客户端API
- 易语言多线程崩溃解决的原因
- Flutter——Flutter初探与Dart基础
- Linux下的SMB服务(samba服务器)