news 2026/3/8 3:29:15

ACPI!AcpiInitIrqArbiter函数分析检测PCI设备类型是否是PCI_CARDBUS_BRIDGE_TYPE

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ACPI!AcpiInitIrqArbiter函数分析检测PCI设备类型是否是PCI_CARDBUS_BRIDGE_TYPE

ACPI!AcpiInitIrqArbiter函数分析检测PCI设备类型是否是PCI_CARDBUS_BRIDGE_TYPE

第一部分:


if (PCI_CONFIGURATION_TYPE(pciData) == PCI_CARDBUS_BRIDGE_TYPE) {
AcpiArbCardbusPresent = TRUE;
}

//
// Bit encodings for PCI_COMMON_CONFIG.HeaderType
//

#define PCI_MULTIFUNCTION 0x80
#define PCI_DEVICE_TYPE 0x00
#define PCI_BRIDGE_TYPE 0x01
#define PCI_CARDBUS_BRIDGE_TYPE 0x02

#define PCI_CONFIGURATION_TYPE(PciData) \
(((PPCI_COMMON_CONFIG)(PciData))->HeaderType & ~PCI_MULTIFUNCTION)

第二部分:


0: kd> kc
#
00 hal!HaliPciInterfaceReadConfig
01 ACPI!AcpiInitIrqArbiter
02 ACPI!ACPIInitStartACPI
03 ACPI!ACPIRootIrpStartDevice
04 ACPI!ACPIDispatchIrp
05 nt!IofCallDriver
06 nt!IopSynchronousCall
07 nt!IopStartDevice
08 nt!PipProcessStartPhase1
09 nt!PipProcessDevNodeTree
0a nt!PipDeviceActionWorker
0b nt!PipRequestDeviceAction
0c nt!IopInitializeBootDrivers
0d nt!IoInitSystem
0e nt!Phase1Initialization
0f nt!PspSystemThreadStartup
10 nt!KiThreadStartup
0: kd> dv
Context = 0x00000000
BusOffset = 0x00 ''
Slot = 0x36
Buffer = 0xf789a204
Offset = 0
Length = 0x40
busHand = struct _BUS_HANDLER


1: kd> g
Breakpoint 92 hit
eax=00000040 ebx=00000016 ecx=00000000 edx=00000cf8 esi=00000001 edi=00000000
eip=f744760d esp=f789a1c4 ebp=f789a248 iopl=0 nv up ei ng nz ac po cy
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000293
ACPI!AcpiInitIrqArbiter+0x297:
f744760d 66817dbcffff cmp word ptr [ebp-44h],0FFFFh ss:0010:f789a204=15ad
0: kd> dv
RootFdo = 0x0b000009
context = struct AMLISUPP_CONTEXT_PASSIVE
buffer = unsigned char [64] "???"
adjVector = 0xb000009
driverKeyHandle = 0x00000000
deviceNum = 0x16
lastBus = 0x0b ''
driverKey = ""
currentBus = 0x00 ''
pciSlot = struct _PCI_SLOT_NUMBER
regValue = 0x00000000
foundBootConfig = 0x01 ''
noBootConfigAgreement = 0x01 ''
flags = 0x36 '6'


0: kd> dt PCI_COMMON_CONFIG 0xf789a204 -r
hal!PCI_COMMON_CONFIG
+0x000 VendorID : 0x15ad
+0x002 DeviceID : 0x7a0
+0x004 Command : 7
+0x006 Status : 0x10
+0x008 RevisionID : 0x1 ''
+0x009 ProgIf : 0 ''
+0x00a SubClass : 0x4 ''
+0x00b BaseClass : 0x6 ''
+0x00c CacheLineSize : 0x8 ''
+0x00d LatencyTimer : 0 ''
+0x00e HeaderType : 0x81 ''
+0x00f BIST : 0 ''
+0x010 u : __unnamed
+0x000 type0 : _PCI_HEADER_TYPE_0
+0x000 BaseAddresses : [6] 0
+0x018 CIS : 0
+0x01c SubVendorID : 0
+0x01e SubSystemID : 0
+0x020 ROMBaseAddress : 0
+0x024 CapabilitiesPtr : 0x40 '@'
+0x025 Reserved1 : [3] ""
+0x028 Reserved2 : 0
+0x02c InterruptLine : 0xff ''
+0x02d InterruptPin : 0 ''
+0x02e MinimumGrant : 0x4 ''
+0x02f MaximumLatency : 0 ''
+0x000 type1 : _PCI_HEADER_TYPE_1
+0x000 BaseAddresses : [2] 0
+0x008 PrimaryBus : 0 ''
+0x009 SecondaryBus : 0xc ''
+0x00a SubordinateBus : 0xc ''
+0x00b SecondaryLatency : 0 ''
+0x00c IOBase : 0x90 ''
+0x00d IOLimit : 0x90 ''
+0x00e SecondaryStatus : 0
+0x010 MemoryBase : 0xfcf0
+0x012 MemoryLimit : 0xfcf0
+0x014 PrefetchBase : 0xe751
+0x016 PrefetchLimit : 0xe751
+0x018 PrefetchBaseUpper32 : 0
+0x01c PrefetchLimitUpper32 : 0
+0x020 IOBaseUpper16 : 0
+0x022 IOLimitUpper16 : 0
+0x024 CapabilitiesPtr : 0x40 '@'
+0x025 Reserved1 : [3] ""
+0x028 ROMBaseAddress : 0
+0x02c InterruptLine : 0xff ''
+0x02d InterruptPin : 0 ''
+0x02e BridgeControl : 4

1: kd> g
Breakpoint 91 hit
eax=804fb6c4 ebx=00000016 ecx=00000000 edx=00000c0c esi=00000002 edi=00000000
eip=804f2824 esp=f789a1a8 ebp=f789a248 iopl=0 nv up ei pl nz na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000206
hal!HaliPciInterfaceReadConfig:
804f2824 55 push ebp
0: kd> dv
Context = 0x00000000
BusOffset = 0x00 ''
Slot = 0x56
Buffer = 0xf789a204
Offset = 0
Length = 0x40
busHand = struct _BUS_HANDLER

0: kd> gu
Breakpoint 92 hit
eax=00000040 ebx=00000016 ecx=00000000 edx=00000cf8 esi=00000002 edi=00000000
eip=f744760d esp=f789a1c4 ebp=f789a248 iopl=0 nv up ei ng nz ac po cy
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000293
ACPI!AcpiInitIrqArbiter+0x297:
f744760d 66817dbcffff cmp word ptr [ebp-44h],0FFFFh ss:0010:f789a204=15ad
0: kd> dt PCI_COMMON_CONFIG 0xf789a204 -r
hal!PCI_COMMON_CONFIG
+0x000 VendorID : 0x15ad
+0x002 DeviceID : 0x7a0
+0x004 Command : 7
+0x006 Status : 0x10
+0x008 RevisionID : 0x1 ''
+0x009 ProgIf : 0 ''
+0x00a SubClass : 0x4 ''
+0x00b BaseClass : 0x6 ''
+0x00c CacheLineSize : 0x8 ''
+0x00d LatencyTimer : 0 ''
+0x00e HeaderType : 0x81 ''
+0x00f BIST : 0 ''
+0x010 u : __unnamed
+0x000 type0 : _PCI_HEADER_TYPE_0
+0x000 BaseAddresses : [6] 0
+0x018 CIS : 0
+0x01c SubVendorID : 0
+0x01e SubSystemID : 0
+0x020 ROMBaseAddress : 0
+0x024 CapabilitiesPtr : 0x40 '@'
+0x025 Reserved1 : [3] ""
+0x028 Reserved2 : 0
+0x02c InterruptLine : 0xff ''
+0x02d InterruptPin : 0 ''
+0x02e MinimumGrant : 0x4 ''
+0x02f MaximumLatency : 0 ''
+0x000 type1 : _PCI_HEADER_TYPE_1
+0x000 BaseAddresses : [2] 0
+0x008 PrimaryBus : 0 ''
+0x009 SecondaryBus : 0xd ''
+0x00a SubordinateBus : 0xd ''
+0x00b SecondaryLatency : 0 ''
+0x00c IOBase : 0xd0 ''
+0x00d IOLimit : 0xd0 ''
+0x00e SecondaryStatus : 0
+0x010 MemoryBase : 0xfcb0
+0x012 MemoryLimit : 0xfcb0
+0x014 PrefetchBase : 0xe711
+0x016 PrefetchLimit : 0xe711
+0x018 PrefetchBaseUpper32 : 0
+0x01c PrefetchLimitUpper32 : 0
+0x020 IOBaseUpper16 : 0
+0x022 IOLimitUpper16 : 0
+0x024 CapabilitiesPtr : 0x40 '@'
+0x025 Reserved1 : [3] ""
+0x028 ROMBaseAddress : 0
+0x02c InterruptLine : 0xff ''
+0x02d InterruptPin : 0 ''
+0x02e BridgeControl : 4

0: kd> g
Breakpoint 91 hit
eax=804fb6c4 ebx=00000016 ecx=00000000 edx=00000c0d esi=00000003 edi=00000000
eip=804f2824 esp=f789a1a8 ebp=f789a248 iopl=0 nv up ei pl nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000202
hal!HaliPciInterfaceReadConfig:
804f2824 55 push ebp
0: kd> dv
Context = 0x00000000
BusOffset = 0x00 ''
Slot = 0x76
Buffer = 0xf789a204
Offset = 0
Length = 0x40
busHand = struct _BUS_HANDLER
0: kd> g
Breakpoint 92 hit
eax=00000040 ebx=00000016 ecx=00000000 edx=00000cf8 esi=00000003 edi=00000000
eip=f744760d esp=f789a1c4 ebp=f789a248 iopl=0 nv up ei ng nz ac po cy
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000293
ACPI!AcpiInitIrqArbiter+0x297:
f744760d 66817dbcffff cmp word ptr [ebp-44h],0FFFFh ss:0010:f789a204=15ad
0: kd> dt PCI_COMMON_CONFIG 0xf789a204 -r
hal!PCI_COMMON_CONFIG
+0x000 VendorID : 0x15ad
+0x002 DeviceID : 0x7a0
+0x004 Command : 7
+0x006 Status : 0x10
+0x008 RevisionID : 0x1 ''
+0x009 ProgIf : 0 ''
+0x00a SubClass : 0x4 ''
+0x00b BaseClass : 0x6 ''
+0x00c CacheLineSize : 0x8 ''
+0x00d LatencyTimer : 0 ''
+0x00e HeaderType : 0x81 ''
+0x00f BIST : 0 ''
+0x010 u : __unnamed
+0x000 type0 : _PCI_HEADER_TYPE_0
+0x000 BaseAddresses : [6] 0
+0x018 CIS : 0
+0x01c SubVendorID : 0
+0x01e SubSystemID : 0
+0x020 ROMBaseAddress : 0
+0x024 CapabilitiesPtr : 0x40 '@'
+0x025 Reserved1 : [3] ""
+0x028 Reserved2 : 0
+0x02c InterruptLine : 0xff ''
+0x02d InterruptPin : 0 ''
+0x02e MinimumGrant : 0x4 ''
+0x02f MaximumLatency : 0 ''
+0x000 type1 : _PCI_HEADER_TYPE_1
+0x000 BaseAddresses : [2] 0
+0x008 PrimaryBus : 0 ''
+0x009 SecondaryBus : 0xe ''
+0x00a SubordinateBus : 0xe ''
+0x00b SecondaryLatency : 0 ''
+0x00c IOBase : 0xf0 ''
+0x00d IOLimit : 0 ''
+0x00e SecondaryStatus : 0
+0x010 MemoryBase : 0xfc70
+0x012 MemoryLimit : 0xfc70
+0x014 PrefetchBase : 0xe6d1
+0x016 PrefetchLimit : 0xe6d1
+0x018 PrefetchBaseUpper32 : 0
+0x01c PrefetchLimitUpper32 : 0
+0x020 IOBaseUpper16 : 0
+0x022 IOLimitUpper16 : 0
+0x024 CapabilitiesPtr : 0x40 '@'
+0x025 Reserved1 : [3] ""
+0x028 ROMBaseAddress : 0
+0x02c InterruptLine : 0xff ''
+0x02d InterruptPin : 0 ''
+0x02e BridgeControl : 4

} else {

//
// This is a bridge. Update lastBus with the Subordinate
// bus if it is higher.
//

lastBus = lastBus > pciData->u.type1.SubordinateBus ?
lastBus : pciData->u.type1.SubordinateBus;

if (PCI_CONFIGURATION_TYPE(pciData) == PCI_CARDBUS_BRIDGE_TYPE) {
AcpiArbCardbusPresent = TRUE;
}


//
// Bit encodings for PCI_COMMON_CONFIG.HeaderType
//

#define PCI_MULTIFUNCTION 0x80
#define PCI_DEVICE_TYPE 0x00
#define PCI_BRIDGE_TYPE 0x01
#define PCI_CARDBUS_BRIDGE_TYPE 0x02

#define PCI_CONFIGURATION_TYPE(PciData) \
(((PPCI_COMMON_CONFIG)(PciData))->HeaderType & ~PCI_MULTIFUNCTION)


for (deviceNum = 0; deviceNum < PCI_MAX_DEVICES; deviceNum++) {
for (funcNum = 0; funcNum < PCI_MAX_FUNCTION;funcNum++) {


0: kd> p
eax=00000001 ebx=00000016 ecx=0000000d edx=00000c0eesi=00000003edi=00000000
eip=f7447764 esp=f789a1c4 ebp=f789a248 iopl=0 nv up ei ng nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000282
ACPI!AcpiInitIrqArbiter+0x3ee:
f7447764 46inc esi
0: kd> p
eax=00000001 ebx=00000016 ecx=0000000d edx=00000c0eesi=00000004edi=00000000
eip=f7447765 esp=f789a1c4 ebp=f789a248 iopl=0 nv up ei pl nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000202
ACPI!AcpiInitIrqArbiter+0x3ef:
f7447765 83fe08 cmp esi,8


0: kd> g
Breakpoint 91 hit
eax=804fb6c4 ebx=00000016 ecx=00000000 edx=00000c0e esi=00000004 edi=00000000
eip=804f2824 esp=f789a1a8 ebp=f789a248 iopl=0 nv up ei pl nz na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000206
hal!HaliPciInterfaceReadConfig:
804f2824 55 push ebp
0: kd> dv
Context = 0x00000000
BusOffset = 0x00 ''
Slot = 0x96
Buffer = 0xf789a204
Offset = 0
Length = 0x40
busHand = struct _BUS_HANDLER


10010110 0x16 160004

现在:

funcNum=4

deviceNum=6

下一个1:

funcNum=5

deviceNum=6

101 10110=0xb6

下一个2:

funcNum=6

deviceNum=6

110 10110=0xd6

下一个3:

funcNum=7

deviceNum=6

111 10110=0xf6

0: kd> dt PCI_SLOT_NUMBER -r
hal!PCI_SLOT_NUMBER
+0x000 u : __unnamed
+0x000 bits : __unnamed
+0x000 DeviceNumber : Pos 0, 5 Bits
+0x000 FunctionNumber : Pos 5, 3 Bits
+0x000 Reserved : Pos 8, 24 Bits
+0x000 AsULONG : Uint4B


0: kd> g
Breakpoint 92 hit
eax=00000040 ebx=00000016 ecx=00000000 edx=00000cf8 esi=00000004 edi=00000000
eip=f744760d esp=f789a1c4 ebp=f789a248 iopl=0 nv up ei ng nz ac po cy
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000293
ACPI!AcpiInitIrqArbiter+0x297:
f744760d 66817dbcffff cmp word ptr [ebp-44h],0FFFFh ss:0010:f789a204=15ad
0: kd> dt PCI_COMMON_CONFIG 0xf789a204 -r
hal!PCI_COMMON_CONFIG
+0x000 VendorID : 0x15ad
+0x002 DeviceID : 0x7a0
+0x004 Command : 7
+0x006 Status : 0x10
+0x008 RevisionID : 0x1 ''
+0x009 ProgIf : 0 ''
+0x00a SubClass : 0x4 ''
+0x00b BaseClass : 0x6 ''
+0x00c CacheLineSize : 0x8 ''
+0x00d LatencyTimer : 0 ''
+0x00e HeaderType : 0x81 ''
+0x00f BIST : 0 ''
+0x010 u : __unnamed
+0x000 type0 : _PCI_HEADER_TYPE_0
+0x000 BaseAddresses : [6] 0
+0x018 CIS : 0
+0x01c SubVendorID : 0
+0x01e SubSystemID : 0
+0x020 ROMBaseAddress : 0
+0x024 CapabilitiesPtr : 0x40 '@'
+0x025 Reserved1 : [3] ""
+0x028 Reserved2 : 0
+0x02c InterruptLine : 0xff ''
+0x02d InterruptPin : 0 ''
+0x02e MinimumGrant : 0x4 ''
+0x02f MaximumLatency : 0 ''
+0x000 type1 : _PCI_HEADER_TYPE_1
+0x000 BaseAddresses : [2] 0
+0x008 PrimaryBus : 0 ''
+0x009 SecondaryBus : 0xf ''
+0x00a SubordinateBus : 0xf ''
+0x00b SecondaryLatency : 0 ''
+0x00c IOBase : 0xf0 ''
+0x00d IOLimit : 0 ''
+0x00e SecondaryStatus : 0
+0x010 MemoryBase : 0xfc30
+0x012 MemoryLimit : 0xfc30
+0x014 PrefetchBase : 0xe691
+0x016 PrefetchLimit : 0xe691
+0x018 PrefetchBaseUpper32 : 0
+0x01c PrefetchLimitUpper32 : 0
+0x020 IOBaseUpper16 : 0
+0x022 IOLimitUpper16 : 0
+0x024 CapabilitiesPtr : 0x40 '@'
+0x025 Reserved1 : [3] ""
+0x028 ROMBaseAddress : 0
+0x02c InterruptLine : 0xff ''
+0x02d InterruptPin : 0 ''
+0x02e BridgeControl : 4

第四部分:

0: kd> g
Breakpoint 91 hit
eax=804fb6c4 ebx=00000016 ecx=00000000 edx=00000c0f esi=00000005 edi=00000000
eip=804f2824 esp=f789a1a8 ebp=f789a248 iopl=0 nv up ei pl nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000202
hal!HaliPciInterfaceReadConfig:
804f2824 55 push ebp
0: kd> dv
Context = 0x00000000
BusOffset = 0x00 ''
Slot = 0xb6
Buffer = 0xf789a204
Offset = 0
Length = 0x40
busHand = struct _BUS_HANDLER

91 e Disable Clear 804f2824 0001 (0001) hal!HaliPciInterfaceReadConfig
92 e Disable Clear f744760d 0001 (0001) ACPI!AcpiInitIrqArbiter+0x297
93 e Disable Clear f744774a 0001 (0001) ACPI!AcpiInitIrqArbiter+0x3d4

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/6 10:20:39

MusePublic企业应用:设计师团队接入MusePublic构建内部AI创意协作平台

MusePublic企业应用&#xff1a;设计师团队接入MusePublic构建内部AI创意协作平台 1. 为什么设计师团队需要专属的AI人像创作引擎 你有没有遇到过这样的场景&#xff1a;设计团队接到一个高端时尚品牌项目&#xff0c;需要在48小时内产出12组不同风格的艺术人像海报——既要体…

作者头像 李华
网站建设 2026/3/3 8:24:06

零基础5分钟部署GLM-4-9B-Chat翻译大模型:vLLM+Chainlit实战教程

零基础5分钟部署GLM-4-9B-Chat翻译大模型&#xff1a;vLLMChainlit实战教程 你是不是也遇到过这些情况&#xff1a;想试试国产大模型但被复杂的环境配置劝退&#xff1f;看到GLM-4-9B-Chat支持26种语言翻译很心动&#xff0c;却卡在部署环节&#xff1f;听说vLLM能提速一倍&am…

作者头像 李华
网站建设 2026/3/7 1:41:02

BEYOND REALITY Z-Image 5分钟快速上手:8K级写实人像生成保姆级教程

BEYOND REALITY Z-Image 5分钟快速上手&#xff1a;8K级写实人像生成保姆级教程 1. 为什么你该试试这个模型 你有没有试过用AI生成一张真正能用的写实人像&#xff1f;不是那种五官模糊、皮肤发蜡、光影生硬的“AI味”照片&#xff0c;而是能直接用在个人主页、作品集、甚至商业…

作者头像 李华
网站建设 2026/3/8 2:57:24

基于python+Django的电信资费管理系统_6u2zxybc_c011

前言   Django电信资费管理系统是一个基于Python Django框架开发的Web应用程序&#xff0c;专门用于电信运营商的资费套餐管理、用户账单计算和业务分析。该系统结合了Django的高效开发能力和电信行业的业务特点&#xff0c;实现了资费套餐配置、用户消费计算、账单生成等核心…

作者头像 李华
网站建设 2026/3/4 13:53:07

一键部署VibeThinker-1.5B,轻松实现代码生成任务

一键部署VibeThinker-1.5B&#xff0c;轻松实现代码生成任务 你是否试过在深夜调试一个动态规划题&#xff0c;反复修改状态转移方程却始终卡在边界条件&#xff1f;是否在准备算法面试时&#xff0c;想快速验证一段递归逻辑是否正确&#xff0c;却苦于没有即时反馈的本地工具…

作者头像 李华
网站建设 2026/3/2 18:51:29

Qwen3-Embedding-4B应用落地:跨境电商多语言商品描述语义对齐方案

Qwen3-Embedding-4B应用落地&#xff1a;跨境电商多语言商品描述语义对齐方案 1. 为什么跨境卖家总在“翻译失真”里打转&#xff1f; 你有没有遇到过这种情况&#xff1a; 一款设计精美的北欧风陶瓷咖啡杯&#xff0c;在中文详情页写的是“极简线条、哑光釉面、手作温度”&a…

作者头像 李华