6.14 Multicast Operations
Multicast Capability structure 定义了一个组播地址范围,将该范围分割为数量相等的 N 个组播窗口,并将每个组播窗口与一个
Multicast Group(MCG)关联。组件中支持组播的每个 Function 都实现了一个 Multicast Capability structure,该 structure 为通过
或到达该 Function 的 TLP 的每个 MCG 提供路由方向和权限检查。 Multicast Group 是一个宽度最多 6-bit 的字段,嵌入在从
MCIndexPosition 开始的地址中,如 Section 7.9.11.4 中所定义。

6.14.1 Multicast TLP Processing
如果下述所有条件都满足则会发生一盒组播命中(Multicast Hit):
·MC_Enable 字段设置为 1。
·TLP 是一个 Memory Write 或 Address Routed Message,两者均为 Posted Request。
·AddressTLP >= MCBaseAddress 。
·AddressTLP < (MCBaseAddress + (2MC_Index_Position * (MCNumGroup + 1)))
在此步骤中,每个 Switch 的 Ingress Port 和其他组件都使用其任何 Function 中的 MCEnabl、MCBaseAddress、MCIndexPosition 和 MCNum_Group 的值。需要软件来配置 Switch 的所有 Function 和 Multi-Function 所有 Function 的 Upstream Port,以使这些字段中的每个字段具有相同的值,如果不是这种情况,则结果不确定。
如果 Non-Posted Memory Request 中的地址在组播窗口中命中,则不会发生组播命中,并且将按照基本规范(即,作为单播)正常处理 TLP。
如果发生组播命中,则唯一仍可应用的 ACS 访问控制是 ACS Source Validation。特别是,无论是 ACS redirection 还是 ACS Egress Control vector 都不会影响组播匹配期间的操作.
如果发生组播命中,则正常的地址路由规则不适用。相反,TLP 的处理如下:
使用任意 Function 的 MCBaseAddress 和 MCIndexPosition 值从 TLP 中的地址中提取 Multicast Group。具体算法为:
MCG = ((AddressTLP – MCBaseAddress) >> MCIndexPosition) & 3Fh
在此过程中,组件可以将任何 Function 的 MCBaseAddress 和 MCIndexPosition 值。使用哪个 Function 的值是设备指定的。
组件接下来检查与提取的 MCG 对应的 MCBlockAll 和 MCBlockUntranslated 字段。Switch 和 Root Port 使用与 Ingress Port 关联的 MCBlockAll 和 MCBlockUntranslated 寄存器检查其 Ingress Port 中的组播 TLP。Endpoint Function 使用其 MCBlockAll 和MCBlockUntranslated 寄存器检查它们准备发送的组播 TLP。如果设置了与提取的 MCG 对应的 MCBlockAll 字段,则将 TLP 视为 MC Blocked






