MADT表以统一中断模型实现描述了系统中所有的中断。支持中断模型包括PC-AT兼容的双8259中断控制器,对于ARM处理器系统,GIC控制器。
MADT格式如下所示:
Field | Byte Length | Byte Offset | 描述 |
Signature | 4 | 0 | ‘APIC’ |
Length | 4 | 4 | MADT整个长度 |
Revision | 1 | 8 | 5 |
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相关的中断控制器结构体类型。
它以全局系统中断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 |
在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 |
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页的长度 |
在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 |