支持subtractive功能的PCI-PCI桥工作原理

主要涉及两个概念:Bridge 和subtractive译码。还未详细修改,几年前的东西了,错误在所难免。

 

Pci框架概括

P2P 桥1的primary接口连接在PCI 总线0上 , P2P 桥1 的secondary接口连接到PCI 总线1 。P2P 桥2的primary接口连接在PCI 总线1 上, P2P 桥2 的secondary接口连接在PCI总线2 。桥后面(secondary)的总线编号总是等于桥的编号,系统主桥的编号为0 。

 

P2P bridge的结构

P2P bridge的内部结构大体如下,P2P bridge允许在桥一侧的master与在桥另一侧的目标设备(target)之间传输数据。P2P桥的结构如下。由以下几个模块组成:配置寄存器、primary的master接口、secondary的target接口、primary的target接口,secondary的master接口,还包括可选的上/下行的数据缓冲区。

下图可以看到一个bus总线的target接口连接到下个bus总线上的master接口。而数据通道之间的模块主要处理两bus间必要的地址传输和数据缓冲。

 

p2p bridge的功能:

 P2P 桥是为了扩充PCI 总线的负载能力。具体的说,P2P 桥的作用是协调两条PCI 总线之间的交通,P2P 桥必须具有如下的功能:

(1) 监视桥两侧PCI 总线上起动的所有 (transaction),并决定是否将(transaction)通过桥传送至另一条PCI 总线。当桥确定一条总线上的(transaction)需要传送到另一条总线上时,必须充当master 的(transaction)目标,以及充当目标总线的新(transaction)的主设备。;对于(transaction)的master 和target 来说,驻留于(transaction)的起始总线和目标总线之间的P2P 桥是不可见的。

(2) 桥监视第二总线上的SERR # (system error) , 如果采样有效, 则将其传送至第一总线的SERR # 。

(3) 桥监视第一总线上的RST # ,如果采样有效,则将其传送到第二总线上的RST# 。

 

 

关于decode的过程

资源的仲裁和地址译码

系统要合理的分配资源给pci设备使得所有pci设备功能不会去使用其他设备使用的资源,使得各个设备功能正确运行。这个过程就涉及到资源仲裁。为了提供正确的资源仲裁,操作系统必须知道:1、pci设备在使用的资源;2、pci设备通过地址传输调用资源的方法。而后者指的过程就是地址译码。

decode window:

the firmware or operating system definesthe address range for the decode windows

PCI-to-PCIbridges use decode windows of two types: decodewindows used to access I/O locations of devices and decode windows used toaccess memory locations of devices.

例如下图的地址队列。从primary指向secondary的白色地址部分可以认为是一个bridge window。

subtractive decode:

如果bridge支持subtractive decode,当在primary面没有找到另外的相应设备,则4个周期的超时之后,认为在当前总线上没有找到相应设备,产生从primary面到secondary面的响应。如果此bridge不支持subtractive decode的功能,则bridge不会响应并且不会传输数据,而是调用中断提示错误。

positive decode:   

如果地址译码过程中,桥会将primary侧的译码请求通过桥的windows传送到secondary侧,而此译码地址正好在window规定的范围中。

negative decode:   

在bridge的地址window外从secondary面到primary面的地址译码。这种译码发生在bridge的secondary面的设备想要访问primary面的设备的时候,而传输的地址数据不在window范围中定义。如果地址在window中范围内,则允许同一总线中的对应设备处理(transaction)--- peer-to-peer transactions而不经过bridge。如图5

图4 Addressdecoding types

图 5 Secondaryside bridge rules

 

PCI-PCI Bridge的类型

Windows系统中支持3种类型的p2pbridge。这些类型是:

1、  只支持subtractive的pci-pcibridge

2、  只支持positive的p2p bridge

3、  Subtractive类型p2p bridge

 

Subtractive-onlyPCI-to-PCI bridge

这种类型的bridge没有windows的概念的pci-pci bridge。只能实现通过subtractive decode方式访问pci bridge 的secondary侧的地址资源。不支持传输(transactions)的开始和终止都在secondary侧的pci总线上。点对点(peer to peer)的传输(transactions)是不支持的。

注:此种类型的bridge在pci-pci bridge的spec中没有定义。

Positive-only PCI-to-PCIbridge

这种类型的bridge只能通过positive decodes来实现源自桥的primary侧的传输。Subtractive decode是不支持的。由于此种桥具有bridge window,所以能实现点对点(peer to peer)的传输(transactions)。同时还能支持negative decode

由于此类桥不支持subtractive decodes ,所以positive-only p2p bridge 不能寻址secondary侧的设备。

Subtractive PCI-to-PCIbridge

这种类型的bridge具有bridge windows的功能,而且支持positive 、subtractive decode。如下图。因为此类桥有positive decode window,可以通过window 实现在桥的secondary侧的peer-peer的transactions。同时也可以实现negative decode过程。

由于这类bridge支持subtractive decodes,那么就能支持桥的secondary侧的legacy设备的寻址。

SubtractivePCI-to-PCI bridge

 

参考资料:

1、  PCI-to-PCI BridgeArchitecture Specification, revision 1.1

2、  Ich6 pci-pci bridge部分

3、  Supporting Subtractive PCI-to-PCI Bridges in Windows

 注:所有图片均来自网络。

为了让你的 AMD 处理器尽可能兼容 macOS 13 系统,在配置 `.vmx` 文件时需要注意一些关键点。这涉及到虚拟化技术、硬件支持以及具体的参数设置等问题。 首先,确保你的计算机具备最新的 BIOS 更新,并启用了 SVM(AMD-V)功能——这是运行基于 Hypervisor 的系统如 macOS 所必需的基础条件之一;其次选择合适的虚拟平台工具比如 VMware Workstation Pro 或 Fusion 来创建 Mac 虚拟环境更为理想。以下是针对 `.vmx` 文件的一些必要修改建议: ### 1. 激活必要的 CPU 特性 在 `.vmx` 文件里添加以下内容以暴露正确的处理器标志给 guest OS 使用: ```plaintext cpuid.1.ecx.sse42 = "true" cpuid.1.ecx.popcnt = "true" vhv.enable = "TRUE" # 若可用的话启用 Intel VT-x / AMD-V Nested Virtualization 功能 smc.present = "TRUE" # 添加 SMC (System Management Controller) 支持用于苹果固件模拟 ``` ### 2. 定义适当的主板与芯片组信息 为了让 macOS 认为自己是在真实的 Apple 设备上启动而不是 PC 平台上,则还需要伪造 SMBIOS 数据并且指定恰当型号: ```plaintext guestOS = "darwin13" # 告诉宿主我们正安装的是 Darwin/macOS 类型的操作系统 board-id = "Mac-5C6B7AEBAA080F9E" serialNumber = "" # 自行生成有效的序列号字符串替代空白处 uuid.bios = "" # 另外也需要提供独一无二的 UUID 值防止冲突现象发生 pciBridge0.present = "TRUE" pciBridge4.present = "TRUE" pciBridge4.virtualDev = "pcieRootPort" pciBridge4.functions = "8" pciBridge5.present = "TRUE" pciBridge5.virtualDev = "pcieRootPort" pciBridge5.functions = "8" pciBridge6.present = "TRUE" pciBridge6.virtualDev = "pcieRootPort" pciBridge6.functions = "8" pciBridge7.present = "TRUE" pciBridge7.virtualDev = "pcieRootPort" pciBridge7.functions = "8" # 还可以进一步增加更多 PCIe 插槽以便日后拓展用途... ``` > **注意**:上述 `board-id`, `serialNumber`, 和 `uuid.bios` 字段的具体值取决于所仿冒的确切 Mac 设备版本,请参照相关社区资源获取准确数据填充进去。 ### 3. 显卡与声音设备调整 由于大多数非官方渠道构建出来的 Hackintosh 解决方案都不会包含对 discrete GPU 的良好驱动覆盖范围,因此推荐暂时切换至软件渲染途径直到完成初始设置过程后再考虑后续改进措施。 同时将音频控制器类型更改为能较好匹配目标系统的样式: ```plaintext mks.gl.allowBlacklistedDrivers = "TRUE" # 强制允许黑名单内的图形驱动加载 svga.vramSize = "2048" # 分配适量显存空间减少压力 sound.startConnected = "FALSE" # 默认禁用声卡避免干扰正常引导流程 ``` 当以上所有步骤都完成后别忘记再次保存更改并重启受影响的虚拟实例验证效果啦~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值