一、MP Floating Pointer Structure
1. MP Floating Pointer 结构
2.表中各项的含义
名称 | 长度(Bytes) | 描述 | |
00H | SIGNATURE | 32 | 固定”_MP_” |
04H | PHYSICAL_ADDRESS POINTER | 32 | MP配置表的地址;MP不存在,字段值全为0 |
08H | LENGTH | 8 | Floating pointer结构表长度(16Bytes为单位) |
09H | SPEC_REV | 8 | MP规格版本号; 01H : V1.1; 04h : V1.4 |
0AH | CHECKSUM | 8 | 整个MP结构的校验和 |
0BH | MP FEATURE(information byte 1) | 8 | MP系统配置类型;所有bits均为0时,MP配置表存在;存在不为0的位时,表明存在默认配置; |
0CH | MP FEATURE(information byte 2) | 8 | 0-6bits:预留; 7th bit:IMCRP,该位被置位,表明存在IMCRP、PIC模式被实现;否则,支持Virtual Wire Mode |
0DH | MP FEATURE(information byte 3-5) | 24 |
预留,必须为0
|
- 关键字"_MP_"用于搜索MP结构表;
- MP Feature information byte 1:指示了MP系统默认配置类型,若非0,和系统某个默认配置项匹配;
- MP Feature information Byte 2的第七个bit:IMCR位,为1,表明系统支持PIC模式或者Virtual Wire Mode;P
- PHYSICAL_ADDRESS POINTER:MP配置表的起始地址;若该配置表不存在,该域全为0;
二、 MP Configuration Table Header(MP配置表头)
1. MP Configuration Table(MP配置表)格式
2. MP Configuration Table表头内容详细说明
位置
|
名称
|
长度 (Bits)
|
描述
|
00H
|
SIGNATURE
|
32
|
固定 ”PCMP”
|
04H
|
BASE TABLE LENGTH
|
16
|
Base configuration table 的长度
|
06H
|
SPEC_REV
|
8
|
MP 规格版本号
|
07H
|
CHECKSUM
|
8
|
Base configuration table 的校验和
|
08H
|
OEM ID
|
64
|
标识硬件生产厂商的字符串
|
16H
|
PRODUCT ID
|
96
|
标识 product family 的字符串
|
28H
|
OEM TABLE POINTER
|
32
|
指向 OEM 配置表的指针
|
32H
|
OEM TABLE SIZE
|
16
|
OEM 配置表大小
|
34H
|
ENTRY COUNT
|
16
|
基本配置表中的入口数目
|
36H
|
ADDRESS OF LOCAL APIC
|
32
|
处理器访问本地 APIC 时的基础地址
|
40H
|
EXTENDED TABLE LENGTH
|
16
|
扩展配置表(位于内存)的大小
|
42H
|
EXTENDED TABLE CHECKSUM
|
8
|
扩展配置表的校验和
|
三 MP Configuration Table入口
1. 说明
- 紧接着MP Configuration Table后面,每个entry的第一个字节决定了其类型;
- 每个Entry的长度固定;
- Entry存放顺序:按照类型升序顺序排序;
不同类型Entry对应的Type、长度如下表:
Entry 描述
|
Entry Type
|
长度 (Bytes)
|
描述
|
Processor
|
0
|
20
|
one entry per processor
|
Bus
|
1
|
8
|
One entry per bus
|
I/O APIC
|
2
|
8
|
One entry per I/O APIC
|
I/O Interrupt Assignment
|
3
|
8
|
One entry per bus interrupt source
|
Local Interrupt Assignment
|
4
|
8
|
One entry per system interrupt source
|
2. Processor Entries
(1)Processor Entries格式
(2)Processor Entries说明
位置( Bytes )
|
名称
|
长度 (Bits)
|
描述
|
00H
|
Entry TYPE
|
8
|
Entry 类型,0 表示 processor
|
01H
|
LOCAL APIC ID
|
8
|
Processor 本地APIC ID 号
|
02H
|
LOCAL APIC VERSION
|
8
|
本地 APIC 的版本寄存器
|
03H:0
|
CPU FLAGS:EN
|
1
|
0 ,处理器不可用;
|
03H:1
|
CPU FLAGS:BP
|
1
|
表明处理器是否是 bootstrap 处理器(引导处理器)
|
04H:0
|
STEPPING
|
4
|
CPU STEPPING (CPU signature)
|
04H:4
|
MODEL
|
4
|
CPU MODEL (CPU signature)
|
05H:0
|
FAMILY
|
4
|
CPU family (CPU signature)
|
08H
|
FEATURE FLAGS
|
32
|
CPUID 指令返回内容,具体 flags在下表展示
|
- 系统每个CPU执行CPU识别过程后,Processor Entries会从BIOS中填充到MP Configuration table中;
- 若处理器不包含CPUID指令,处理器重置后,BIOS必须用处理器EDX寄存器中内容填充FEATURE FLAGS
CPU Signatures:
Feature Flags:
3. BUS Entries
- Bus Type String字段:标识了系统总线类型;
- 每条Bus都被分配唯一 一个bus ID;bus ID被操作系统用来联系中断线和特定bus;
(1) BUS entry格式
(2) Bus Entry格式说明
位置(
Bytes
)
|
名称
|
长度
(Bits)
|
描述
|
00H
|
Entry TYPE
|
8
|
1,
表明
entry
类型为
Bus
入口
|
01H
|
BUS ID
|
8
|
BIOS
顺序分配的编号,标识特定总线
|
02H
|
BUS TYPE STRING
|
48
|
表明总线类型
|
(3) BUS 类型
4. I/O APIC Entries(中断控制器)
(1)I/OAPIC Entries格式
(2) I/O APIC Entires说明
位置( Bytes )
|
名称
|
长度 (Bits)
|
描述
|
00H
|
Entry TYPE
|
8
|
2, 表明entry 类型为 I/O APIC入口
|
01H
|
I/O APIC ID
|
8
|
I/O APIC 编号
|
02H
|
I/O APIC VERSION
|
8
|
I/O APIC 的版本寄存器
|
03H:0
|
I/O APIC FLAGS:EN
|
1
|
0,I/O APIC 不可用; 系统至少启用一个 I/O APIC
|
04H
|
I/O APIC ADDRESS
|
32
|
I/O APIC 的基本地址
|
5. I/O Interrupt Assignment Entries(I/O中断分配)(Loacal Interrupt Assignment Entries,本地中断分配)
- 记录了I/O中断源和I/O APIC中断输入之间的映射关系;
- 每个Entry对应一个I/O APIC中断输入源;
(1) I/O 中断入口格式
(2) 本地中断入口格式
(3) I/O中断入口格式说明
位置( Bytes )
|
名称
|
长度 (Bits)
|
描述
|
00H
|
Entry TYPE
|
8
|
3(4), 表明类型为I/O 中断入口(本地中断入口)
|
01H
|
INTERRUPT TYPE
|
8
|
中断类型
|
02H:0
|
PO
|
2
| APIC I/O(APIC本地输入信号) 输入信号的极性:
使用 82489DX时,必须使用 00
|
02H:2
|
EL
|
2
| APIC I/O (APIC本地)输入型号的触发模式:
|
04H
|
SOURCE BUS ID
|
8
|
中断信号来源 bus的编号
|
05H
|
SOURCE BUS IRQ
|
8
| 标识了中断信号,映射到 source bus signals ;
如: 0表示 ISA Bus的 IRQ0
|
06H
|
DESTINATION I/O API (APIC LOCAL) ID
|
8
|
标识了中断信号连接的 I/O APIC, ID为 0ffh时,信号和所有的 I/O APIC(APIC Local)连接
|
07H
|
DESTINATION I/O APIC (APIC LOCAL ) INT#
|
8
|
标识了中断信号连接的
INTINn
引脚
|
(3)系统中断类型
中断类型
|
描述
|
说明
|
0
|
INT
|
中断向量, APIC重定向表映射了中断号到中断入口间的映射
|
1
|
NMI
|
不可屏蔽的中断
|
2
|
SMI
|
管理系统的中断( system management interrupt )
|
3
|
ExtINT
|
中断向量;向量由外部 PIC提供;
|
四. 扩展的MP配置表入口(Extended MP Configuration Table Entry)
1. 说明
- 位于内存,在MP Configuration table前面几个部分之后,每个entry主要有三个元素域:Entry type, entry length和Data;
- OS发现unknown entry type时,仅仅忽略该entry,继续读取并分析下一个entry;
Extended MP Configuration Table的Entry type如下表:
Entry 描述
|
Entry type
|
长度( Bytes )
|
说明
|
SYSTEM ADDRESS SPACE MAPPING
|
128
|
20
|
描述系统可见内存或 I/O空间
|
BUS HIERARCHY DESCRIPTOR
|
129
|
8
|
描述 I/O总线互联方式
|
COMPATIBILITY BUS ADDRESS SPACE MODIFIER
|
130
|
8
|
为支持 ISA兼容,描述预先定义的内存地址范围和 I/O空间
|
2.系统地址映射入口:SYSTEM Address Space Mapping Entries
- 定义了特定bus可见的系统地址空间;
- Base Table中定义的bus可以有任意多个SYSTEM Address Space Mapping Entries;
- OS可根据该入口,通过给定bus访问连续地址空间;
(1) 入口格式
(2) 格式说明
位置( Bytes )
|
名称
|
长度 (Bits)
|
描述
|
00H
|
Entry TYPE
|
8
|
128, 表明是System Address Space Mapping Entry
|
01H
|
Entry LENGTH
|
8
|
Entry 长度
|
02H
|
BUS ID
|
8
|
可访问该系统地址的 BUS ID
|
03H
|
ADDRESS TYPE
|
8
| 系统地址类型,用来访问 bus addresses: ① 0 :I/O address ② 1 :memory address ③ 2 :prefetch address
其他所有 numbers预留
|
04H
|
ADDRESS BASE
|
64
|
开始地址
|
12H
|
LENGTH
|
64
|
对 bus可见的地址大小
|
- 若内存地址被映射到软件可见的bus,如PCI,必须明确定义其对应的System Address Space Mapping Entry;
- bus直接连到system bus时,必须提供system address space records和对应的compatibility base address modifiers描述映射到该bus的地址空间;
- 通常,MP配置表必须提供 系统地址空间到所有I/O总线的system address space mapping,除了两种情况:
② 通过parent I/O 总线连接的buses:subtractive decode bit is set
- 最简化描述系统资源到PCI buses的映射关系,仅仅需要为PCI BUS 0和其他peer PCI buses设置System Address Space Mapping Entries即可;
3. Bus Hierarchy Descriptor Entry
- 描述了I/O buses连接的层次结构;
(1)格式
(2)说明
位置( Bytes )
|
名称
|
长度 (Bits)
|
描述
|
00H
|
Entry TYPE
|
8
|
129, 表明是Bus Hierarchy Descriptor Entry
|
01H
|
Entry Length
|
8
|
Entry 长度(字节为单位)
|
02H
|
BUS ID
|
8
|
该 Bus的编号
|
03H:0
|
Bus Information:SD
|
1
|
Subtractive Decode Bus; 置位后,该bus 可以访问所有对 parent bus可见的地址空间
|
04H
|
Parent BUS
|
8
|
该 bus的 parent bus
|
4. Compatibility Bus Address Space Modifier Entry
- 用于保证ISA兼容:The Compatibility Bus Address Space Modifier defines a set of predefined address ranges that should either be added or removed from the supported address map ranges for a given bus. This entry type is used in combination with System Address Space Mapping entries to complete the description of memory and I/O ranges that are visible on a bus that incorporates support for ISA device compatibility
(1)格式
(2)说明
位置( Bytes )
|
名称
|
长度 (Bits)
|
描述
|
00H
|
Entry TYPE
|
8
|
130, 表明是Compatibility Bus Address Space Modifier Entry
|
01H
|
Entry Length
|
8
|
Entry 大小(字节为单位)
|
02H
|
BUS ID
|
8
|
被更新映射到的地址空间大小的 BUS编号
|
03H:0
|
ADDRESS Modifier:PR
|
1
| 1 :Range List 表示的地址范围将从 BUS ID映射到的地址空间中除去;
0 :Range List 表示的地址范围被加到 BUS ID的地址空间中;
|
04H
|
Predefined Range List
|
32
|
用于更新 BUS地址空间的地址列表
|
Range List可能的值:
五、 MP默认配置(简化BIOS设计)
说明:操作包含了默认的MP Configuration Table;MP Feature Information Byte 1定义了默认的系统配置类型;系统使用默认系统配置时,MP floating Pointer结构的物理地址指针置为0;
1. 使用默认MP配置,系统必须符合的条件
- 支持双处理器;
- 两个处理器都可以执行Intel架构指令集;
- 本地APICs内存基址为: 0FEE0_0000h
- 本地APIC的ID由硬件从0开始分配;
- I/O APIC内存基址为: 0FEC0_0000h
- Either PIC Mode or Virtual Wire Mode is implemented as the power-on default interrupt mode;
2. 系统默认配置表