一.ACPI规范中定义
1.1概述
平台通信通道是OSPM与平台中的实体(例如平台控制器,或基板管理控制器(BMC))通信的通用机制。在本节中既没有定义与OSPM通信的实体,也没有定义来回传递的信息的任何方面。该信息是根据使用的PCC寄存器地址空间作为通信通道的实际接口定义的。
PCC定义了一个新的地址空间类型(PCC space, 0xA),它被实现为一个或多个独立的通信通道或子空间。
1.2 PCCT表
Table 14-351 Platform Communications Channel Table (PCCT)
Field | Length(字节) | Description |
Signature | 4 | PCCT |
Length | 4 | 表总长度 |
Flags | 4 | 置1表示完成命令可以产生中断 |
PCC Subspace Structure[n] (n = subspace ID) | —— | 子结构 |
1.2.1 一般通信结构 (type 0)
Table 14-354 PCC Subspace Structure type 0 (Generic Communications Subspace)
Field | Length(字节) | Description |
Type | 1 | 0 |
Length | 1 | 62 |
Base Address | 8 | 共享内存范围及地址 |
Length | 8 | 内存大小,需>8字节 |
Doorbell Register | 12 | 处理器相关地址,PCC门铃基地址。注:只有系统I/O空间和系统内存空间对Address_Space_ID值有效。 |
Doorbell Preserve | 8 | 包含写入门铃寄存器时保存的位掩码。 |
Doorbell Write | 8 | 包含写入门铃寄存器时要设置的位掩码。 |
Nominal Latency | 4 | 处理命令的延迟(以微秒为单位)。 |
Maximum Periodic Access Rate | 4 | 子空间通道可以支持的最大周期性请求数,以每分钟命令的形式报告。0表示没有限制。 |
Minimum Request Turnaround Time | 2 | 在一个命令完成后,OSPM在发出下一个命令之前必须等待的最小时间,以微秒为单位。 |
注意:对于依赖PCC接口的特性,不准确的最大周期性访问率和最小请求周转时间字段值会存在副作用。平台应该报告准确的值,允许最大的渠道效率,同时保持最大的渠道稳定性。
注意:OSPM使用最大周期性访问率来确定命令的周期性评估的最大速率。不频繁的、事件驱动的命令不受最大定期访问率的限制。
1.2.2 HW-Reduced通信子空间结构(类型1)
HW-Reduced通信子空间定义见表14-355。它是用来在HW-Reduced的ACPI平台上使用的,这些平台不支持SCI。除了中断,允许使用功能固定HW地址空间的门铃寄存器,这个子空间是相同的通用通信子空间在14.2节和14.4节描述。
Field | Length(字节) | Description |
Type | 1 | 1 |
Length | 1 | 62 |
Platform Interrupt | 4 | 此结构的PCC中断GSIV |
Platform Interrupt Flags | 1 | 2-7bit保留 Bit1:中断模式1-边缘触发 2-电平触发 Bit0:中断极性1-低有效 2-高有效 |
Reserved | 1 | 保留 |
Base Address | 8 | 共享内存范围及地址 |
Length | 4 | 内存大小,需>8字节 |
Doorbell Register | 12 | 处理器相关地址,PCC门铃基地址。注:只有系统I/O空间和系统内存空间对Address_Space_ID值有效。 |
Doorbell Preserve | 8 | 包含写入门铃寄存器时保存的位掩码。 |
Doorbell Write | 8 | 包含写入门铃寄存器时要设置的位掩码。 |
Nominal Latency | 4 | 处理命令的期望延迟(以微秒为单位)。 |
Maximum Periodic Access Rate | 4 | 子空间通道可以支持的最大周期性请求数,以每分钟命令的形式报告。0表示没有限制。 |
Minimum Request Turnaround Time | 2 | 在一个命令完成后,OSPM在发出下一个命令之前必须等待的最小时间,以微秒为单位。 |
注意:对于依赖PCC接口的特性,不准确的最大周期性访问率和最小请求周转时间字段值会存在副作用。平台应该报告准确的值,允许最大的渠道效率,同时保持最大的渠道稳定性。
注意:OSPM使用最大周期性访问率来确定命令的周期性评估的最大速率。不频繁的、事件驱动的命令不受最大定期访问率的限制。
1.2.3 HW-Reduced通信子空间结构(类型2)
HW-Reduced通信子空间定义见表14-355。它是用来在HW-Reduced的ACPI平台上使用的,这些平台不支持SCI。除了中断改变,允许使用功能固定HW地址空间的门铃寄存器,这个子空间是相同的通用通信子空间在14.2节和14.4节描述。
Field | Length(字节) | Description |
Type | 1 | 2 |
Length | 1 | 90 |
Platform Interrupt | 4 | 此结构的PCC中断GSIV |
Platform Interrupt Flags | 1 | 2-7bit保留 Bit1:中断模式1-边缘触发 2-电平触发 Bit0:中断极性1-低有效 2-高有效 |
Reserved | 1 | 保留 |
Base Address | 8 | 共享内存范围及地址 |
Length | 8 | 内存大小,需>8字节 |
Doorbell Register | 12 | 处理器相关地址,PCC门铃基地址。注:只有系统I/O空间和系统内存空间对Address_Space_ID值有效。 |
Doorbell Preserve | 8 | 包含写入门铃寄存器时保存的位掩码。 |
Doorbell Write | 8 | 包含写入门铃寄存器时要设置的位掩码。 |
Nominal Latency | 4 | 处理命令的期望延迟(以微秒为单位)。 |
Maximum Periodic Access Rate | 4 | 子空间通道可以支持的最大周期性请求数,以每分钟命令的形式报告。0表示没有限制。 |
Minimum Request Turnaround Time | 2 | 在一个命令完成后,OSPM在发出下一个命令之前必须等待的最小时间,以微秒为单位。 |
Platform Interrupt Ack Register | 12 | 包含平台中断ack寄存器的处理器相对地址,以通用地址结构格式表示。 注意:只有系统I/O、系统内存和功能性固定硬件空间对Address_Space_ID值有效。 |
Platform Interrupt Ack Preserve | 8 | 包含写平台中断ack寄存器时要保留的位掩码。 |
Platform Interrupt Ack Write | 8 | 包含写平台中断ack寄存器时要设置的位掩码。 |
注意:对于依赖PCC接口的特性,不准确的最大周期性访问率和最小请求周转时间字段值会导致惩罚性的副作用。平台应该报告准确的值,允许最大的渠道效率,同时保持最大的渠道稳定性。
注意:OSPM使用最大周期性访问率来确定命令的周期性评估的最大速率。不频繁的、事件驱动的命令不受最大定期访问率的限制
1.2.4扩展PCC子空间(第3及4类)
扩展的PCC通信子空间有两种类型:
类型3主空间:用于由OSPM与平台通信。
类型4从子空间:用于由平台向OSPM发送异步通知。
主子空间与类型0、1或2的子空间没有本质区别,最显著的区别是类型3的主空间不支持异步通知。从子空间,类型4,提供异步通知,并且不能被OSPM用于向平台发送消息。主从对一起创建OSPM和平台之间的双向接口。
描述主(类型3)和从(类型4)子空间的PCCT条目的格式如下表所示。
Field | Length(字节) | Description |
Type | 1 |
|
Length | 1 | 170 |
Platform Interrupt | 4 | 由平台触发的中断的GSIV: •对于主子空间(类型3),这是在该子空间上完成命令时引发的。 •对于从子空间(类型4),当平台发送通知时引发。 对于一个主子空间,如果PCCT的平台中断标志(表14-137)被设为0,这个字段将被忽略。如果PCCT中存在一个从子空间,那么平台中断标志(表14-137)必须设置为1。 注意,如果中断是边缘触发的,那么每个子空间必须有它自己唯一的中断。如果中断是电平触发的,一个GSIV可以被多个子空间共享,但是每个子空间必须有唯一的平台中断Ack保留和Ack集掩码(见下面) |
Platform Interrupt Flags | 1 | 2-7bit保留 Bit1:中断模式1-边缘触发 2-电平触发 Bit0:中断极性1-低有效 2-高有效 |
Reserved | 1 | 保留 |
Base Address | 8 | 共享内存范围及地址 |
Length | 8 | 内存大小,需>8字节 |
Doorbell Register | 12 | 处理器相关地址,PCC门铃基地址。注:只有系统I/O空间和系统内存空间对Address_Space_ID值有效。 |
Doorbell Preserve | 8 | 包含写入门铃寄存器时保存的位掩码。 |
Doorbell Write | 8 | 包含写入门铃寄存器时要设置的位掩码。 |
Nominal Latency | 4 | 处理命令的期望延迟(以微秒为单位)。 |
Maximum Periodic Access Rate | 4 | 子空间通道可以支持的最大周期性请求数,以每分钟命令的形式报告。0表示没有限制。 |
Minimum Request Turnaround Time | 4 | 在一个命令完成后,OSPM在发出下一个命令之前必须等待的最小时间,以微秒为单位。此字段仅与主子空间相关。 |
Platform Interrupt Ack Register | 12 | 包含平台中断应答寄存器的处理器相对地址,用通用地址结构(GAS)格式表示。 注意:只有系统I/O、系统emory和功能性固定硬件空间对Address_Space_ID值有效。 如果子空间不支持中断或中断是边缘驱动寄存器可能被省略。GAS结构的所有12字节上的0x0值表示不存在寄存器。 如果子空间支持中断,并且这些中断是级别的,则必须提供这个寄存器。通过使用读、修改、写序列来清除中断。 |
Platform Interrupt Ack Preserve | 8 | 包含写平台中断ack寄存器时要保留的位掩码。 |
Platform Interrupt Ack Set | 8 | 包含写平台中断ack寄存器时要设置的位掩码。 |
Reserved | 8 | 保留 |
Command complete check register address | 12 | 包含处理器相对地址,用通用地址结构(GAS)格式表示,命令完成检查登记。 注意:只有系统I/O、系统内存和功能性固定硬件空间对Address_Space_ID值有效 |
Command complete check mask | 8 | 掩码来确定一个命令是否完成,使用命令完成检查寄存器。如果寄存器的值通过逻辑和这个掩码组合,产生一个非零值,则命令完成 |
Command complete update register address | 12 | 包含处理器相对地址,用通用地址结构(GAS)格式表示,命令完成更新注册。 注意:只有系统I/O、系统内存和功能性固定硬件空间对Address_Space_ID值有效 |
Command complete update preserve mask | 8 | 掩码的位保留在命令完成更新寄存器中,当更新命令完成时在这个子空间中。 |
| 8 | 掩码要在命令完成更新寄存器中设置位元,当更新命令完成时在这个子空间中。对于主子空间,掩码必须指示如何清除命令全位。 对于从子空间,掩码必须指示如何设置命令的完成位 |
Error status register | 12 | 包含错误状态寄存器的处理器相对地址,用通用地址结构(GAS)格式表示。 这个字段被从通道上的OSPM忽略 注意:只有系统I/O、系统内存和功能性固定硬件空间对Address_Space_ID值有效 注意:这个寄存器可以与命令完成检查寄存器相同。 |
Error status mask | 8 | 这里包含的掩码可以通过逻辑和错误状态寄存器的内容进行组合,以确定在通过子空间的命令传输中是否发生了错误。 这个掩码的逻辑NOT被用来清除错误。反向掩码是通过逻辑和与错误状态寄存器的内容,并将结果写回所述寄存器。 从通道忽略此字段. |
1.3 通用通道共享内存区域
Table 14-358 Generic Communications Channel Shared Memory Region
Field | Length(字节) | Description |
Signature | 4 | PCC标签。子空间的签名是由具有子空间ID的值0x50434300的位或计算的,例如子空间3的签名是0x50434303。 |
Command | 2 | PCC命令域,见表14-359 |
Status | 2 | PCC状态域,见表14-360 |
Communication Space | - | 读取/写入PCC数据的内存区域。这个区域的大小比共享内存区域的大小小8字节(在通用通信子空间结构中指定)。该字段的第一个字节表示PCC地址0。 |
1.3.1通用通信信道命令字段
对于类型0到2的通道,这个16位字段用于选择平台要执行的一个已定义命令。OSPM负责在每次命令调用之前填充此字段。Table 14-359 Generic Communications Channel Command Field
Field | Length(字节) | Description |
Command | 8 | 要执行的命令代码。命令代码是特定于应用程序的,由该接口的使用者定义。 |
Reserved | 7 | 保留 |
Notify on completion | 1 | 如果设置了该设置,该平台应该在该命令完成时生成门铃中断。中断为0型子空间结构的SCI,或为1型和2型子空间结构的门铃中断场所描述的SCI。 如果在PCC全局标志中没有设置门铃位,则必须清除该位。 |
1.3.2通用通信信道状态字段
Table 14-360 Generic Communications Channel Status Field
Field | Length(字节) | Description |
Command Complete | 1 | 如果置一,则平台已经完成了对最后一条命令的处理。 |
Platform interrupt | 1 | 如果设置,则平台已经向该子空间发出了平台中断。OSPM必须检查命令完成和平台通知字段来确定中断的原因。 |
Error | 1 | 如果设置了该设置,该平台应该在该命令完成时生成门铃中断。中断为0型子空间结构的SCI,或为1型和2型子空间结构的门铃中断场所描述的SCI。 如果在PCC全局标志中没有设置门铃位,则必须清除该位。 |
Platform Notification | 1 | 如果设置,表示平台正在向OSPM发出异步通知。 |
reserve | 12 | 保留 |
1.3门铃协议
除了在从子空间上,OSPM使用门铃来通知平台共享内存区域包含一个准备处理的有效命令。一个门铃由一个硬件寄存器组成,通过I/O或内存映射I/O访问,定义在PCC子空间结构的门铃字段。OSPM通过对指定的寄存器执行一个读/改/写周期来按门铃,保留和设置PCC子空间结构的保留和写掩码中指定的位。
图14-77说明了OPSM通过PCC子空间向平台发送消息的步骤。
1. 首先,OSPM检查子空间上没有挂起的命令,表明子空间是空闲的。这是通过检查在子空间的status字段中设置了命令完成位来确定的。如果位被设置,子空间是自由使用的,并且与子空间相关联的共享内存被OSPM独占。
2. OSPM将一个命令放入子空间的共享内存中以更新标志、长度、命令和有效负载字段(参见表14-358)。如果平台在PCCT中表示支持平台中断(见表14-352),那么OSPM可以在处理完命令后请求平台生成一个中断。这是通过在标志中设置Notify on completion位域来实现的(见表14-352和表14-362)。
3. OSPM清除命令完成位。这一步将共享内存的所有权转移到平台。
4. OSPM通过对指定的寄存器执行一个读/改/写周期来按门铃,保留和设置PCC子空间结构的保留和写掩码中指定的位。
命令complete位的管理在类型0-2和类型3的子空间之间略有不同。对于前者,命令完成位位于状态寄存器中,该状态寄存器遵循14.2.2节中描述的特定格式。Type 3子空间仍然使用单个命令完整位,但是允许平台指定保存它的寄存器的位置和格式。
因此,描述type 3子空间的PCCT结构使用掩码和地址来描述如何设置位。同样,口罩也用于描述如何清除位。为了检查这些子空间是否设置了命令complete位,OSPM通过一个按位的AND将命令complete检查寄存器的内容与命令complete检查掩码结合起来。非零值表示设置了命令完成位。清除命令完成位是通过命令完成更新寄存器来完成的,这与命令完成检查寄存器的地址不同。在这种情况下,更新寄存器的内容被按位合并,并与保留掩码合并,然后结果被按位合并或与set掩码合并,并将结果写回更新寄存器。
对于类型1-3的子空间,在OSPM发送命令之前,命令完成位必须初始化为一个命令完成集。在类型0通道上,当子空间初始化时平台设置命令是否完成是实现定义的。在这些子空间中,OSPM不必在发送第一个命令之前检查要设置的命令是否已完成。
图14-77说明了平台在接收到命令时所采取的步骤:
5.为了健壮性,平台可以有选择地检查命令完整位是否清除
6.处理命令
7.设置命令完成位
8.触发由子空间PCCT条目的GSIV表示的平台中断(表14-357)。只有在第2步中请求中断,并且平台支持中断时,才会发生这种情况。平台可以通过平台中断标志(表14-352)来表示对中断的支持。
OSPM可以通过轮询命令完成位或通过平台中断来检测命令完成情况。当OSPM检测到命令已经完成时,它将继续执行以下步骤:
9. 必要时清除平台中断。如果:
•平台在命令完成时支持平台中断(表14-352)
•OSPM通过完成通知标志请求中断(见表14-358和表14-362)。
•中断被描述为通过平台中断标志触发的一个级别,和平台中断Ack寄存器地址,并且相关联的掩码由子空间PCCT条目提供(参见表类型2和3)。
10. 如果通过中断检测命令完成,可选检查命令完成
11. 处理命令响应
为了确保操作正确,有必要确保在步骤3完成之前,平台可以观察到OSPM在步骤2中执行的所有内存更新。同样,平台在第6步中执行的所有内存更新都必须在第7步完成之前被OSPM观察到。
注意:对于子空间类型0到2,所有对状态字段的访问都必须使用共享子空间的两个实体的互锁操作。类型3-4避免了这个需求。在未来的规范修订中,作为平台异步通知的弃用的一部分,子空间类型0到2的这一要求将被删除——参见14.5节。
1.4 平台通知
下面的部分描述子空间类型0-2和类型3-4上的平台通知。
1.4.1子空间类型0、1、2的平台通知
门铃协议是从OSPM到平台处理命令的同步通知。如果平台想要异步地通知OSPM一个事件,它可以设置平台中断和平台通知状态位并发出一个平台中断。OSPM将为中断服务,清除平台中断和平台通知位元,并为平台通知服务。平台通知的含义和为其服务所需的步骤是由使用PCC接口的各个组件定义的。
平台必须等待,直到OSPM发出消费者定义的命令,通知平台OSPM已经准备好为平台通知服务。该命令是特定于子空间的,并不是所有子空间都支持该命令。平台通知必须与中断一起使用。不支持轮询平台通知。
在发布平台通知时,平台不能修改共享内存区域的任何部分,状态字段除外。子空间类型0、1和2的平台通知将在该规范的未来修订中不推荐使用。要求平台能够向OSPM发送异步通知的实现者应该使用主/从子空间。
注意:对状态字段的所有访问必须使用互锁操作,由共享子空间的两个实体进行。在未来的规范修订中,作为平台异步通知的弃用的一部分,对于子空间类型0到2,这一需求将被删除。
1.4.2从PCC子空间的平台通知(类型4)
主空间和子空间只允许从OSPM到平台的同步通信,并且不使用为类型0到2的子空间提供的平台通知机制。相反,一个主子空间可以与一个从子空间配对,类型4,它是专门为OSPM通信平台提供的。
与类型3主空间一样,类型4从子空间包含一个命令完整位。在默认情况下,从子空间属于OSPM,因此当它准备接收来自平台的通知时,它必须设置set命令完成位。
通知的通信流如图14-78所示。可以看到,通信流非常类似于主空间的通信流,如图14-77所示,除了平台和OSPM的角色是相反的。步骤如下:
1. 首先,平台检查子空间上没有命令挂起完成,表明子空间是空闲的。这是通过检查在子空间的status字段中设置了命令完成位来实现的。如果位被设置,子空间就可以自由使用,并且与子空间相关联的共享内存专属于平台。
2. 平台将通知命令放置到子空间中的共享内存中,更新标志、长度、命令和有效负载字段(见表14-361)。通过在标志中设置生成信号位,一旦OSPM完成了对通知命令的处理,平台可以要求OSPM按门铃(见表14-362)。
3.然后平台清除命令完成部分。这将共享内存的所有权转移到OSPM。
4. 平台填充由从子空间的GSIV表示的平台中断。当OSPM接收到中断时,它执行以下步骤:
5. 清除平台中断。如果中断被描述为通过平台中断标志触发的一个级别,和平台中断Ack寄存器地址,以及相关联的掩码由子空间PCCT入口提供(见表14-357),这是必需的。
6. 可选地检查命令完成位是否清楚。
7. 处理通知命令。
8. 使用命令complete更新寄存器和掩码设置命令完成位。
9. 门铃响起。如果按门铃的平台在上面的步骤2中要求,这是必需的。这还要求子空间的PCCT入口有一个非零的门铃注册地址。
平台可以通过轮询命令完成位,或者通过接收来自OSPM的门铃中断来检查OSPM是否处理了通知。当平台检测到OSPM已经处理了通知时,平台将采取以下步骤:
10. 如果设置了轮询检查命令完成。如果使用门铃,此步骤是可选的。
11. 处理命令响应
平台必须确保在第2步中的任何写操作在第3步中的写操作之前都能被OSPM应用程序处理器观察到。类似地,OSPM必须确保在第8步完成之前,平台可以观察到第7步中的任何写操作。使用PCC的单个协议定义了通知的含义。
1.5引用PCC地址空间
一个单独的PCC寄存器可以被通用地址结构引用,或者通过使用地址空间ID PCC (0xA)在通用寄存器描述符中引用。在使用PCC地址空间时,将Access Size字段重新定义为子空间ID,并标识描述符所指的PCC子空间。
例如,下面的资源模板是PCC子空间中地址9,0x30处的字段占用位8到15:
ResourceTemplate()
{
Register (
PCC,
//AddressSpaceKeyword
8,
//RegisterBitWidth
8,
//RegisterBitOffset
0x30,
//RegisterAddress
9
//AccessSize (subspace ID)
)
}
注意,除非寄存器/资源字段明确允许使用PCC地址空间,否则不能在任何资源模板或寄存器中使用PCC地址空间。