news 2026/6/15 13:47:30

关于处理节点BAT1的时候会调用ACPI!GetOpRegionScope和处理节点BAT2的时候就不用调用ACPI!GetOpRegionScope函数了!!!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
关于处理节点BAT1的时候会调用ACPI!GetOpRegionScope和处理节点BAT2的时候就不用调用ACPI!GetOpRegionScope函数了!!!

关于处理节点BAT1的时候会调用ACPI!GetOpRegionScope和处理节点BAT2的时候就不用调用ACPI!GetOpRegionScope函数了!!!

第一部分:时间上在前。

https://chenghao.blog.csdn.net/article/details/157065028
处理节点BAT1的时候回调用ACPI!GetOpRegionScope
1: kd> kc
#
00 ACPI!AsyncEvalObject
01 ACPI!AMLIAsyncEvalObject
02 ACPI!ACPIGet
03 ACPI!IsPciDeviceWorker
04 ACPI!IsPciDevice
05 ACPI!GetOpRegionScopeWorker
06 ACPI!GetOpRegionScope
07 ACPI!PciConfigSpaceHandlerWorker

08 ACPI!PciConfigSpaceHandler
09 ACPI!InternalOpRegionHandler
0a ACPI!WriteCookAccess
0b ACPI!RunContext
0c ACPI!InsertReadyQueue
0d ACPI!RestartCtxtPassive
0e ACPI!ACPIWorker
0f nt!PspSystemThreadStartup
10 nt!KiThreadStartup


NTSTATUS
EXPORT
PciConfigSpaceHandlerWorker(
IN PNSOBJ AcpiObject,
IN NTSTATUS CompletionStatus,
IN POBJDATA Result,
IN PVOID Context
)
{

if (!state->OpRegion->Context) {

if (!(state->Flags & PCISUPP_GOT_SCOPE)) {

state->Flags |= PCISUPP_GOT_SCOPE;

status = GetOpRegionScope(state->OpRegion,
PciConfigSpaceHandlerWorker,
(PVOID)state,
&((PNSOBJ)(state->OpRegion->Context)));

if (status == STATUS_PENDING) {
return status;
}

if (!NT_SUCCESS(status)) {
status = STATUS_SUCCESS;
goto PciConfigSpaceHandlerWorkerDone;
}
}
}

第二部分:时间上在后。


处理节点BAT2的时候就不用调用ACPI!GetOpRegionScope函数了!!!


1: kd> kc
#
00 ACPI!GetPciAddress
01 ACPI!PciConfigSpaceHandlerWorker

02 ACPI!PciConfigSpaceHandler
03 ACPI!InternalOpRegionHandler
04 ACPI!WriteCookAccess
05 ACPI!RunContext
06 ACPI!InsertReadyQueue
07 ACPI!RestartCtxtPassive
08 ACPI!ACPIWorker
09 nt!PspSystemThreadStartup
0a nt!KiThreadStartup

NTSTATUS
EXPORT
PciConfigSpaceHandlerWorker(
IN PNSOBJ AcpiObject,
IN NTSTATUS CompletionStatus,
IN POBJDATA Result,
IN PVOID Context
)
{

//
// If we have not seen this OpRegion before, we need to
// fill in the dwContext with the PNSOBJ of the
// PCI device which the OpRegion relates to.
//

if (!state->OpRegion->Context) {

if (!(state->Flags & PCISUPP_GOT_SCOPE)) {

state->Flags |= PCISUPP_GOT_SCOPE;

status = GetOpRegionScope(state->OpRegion,
PciConfigSpaceHandlerWorker,
(PVOID)state,
&((PNSOBJ)(state->OpRegion->Context)));

if (status == STATUS_PENDING) {
return status;
}

if (!NT_SUCCESS(status)) {
status = STATUS_SUCCESS;
goto PciConfigSpaceHandlerWorkerDone;
}
}
}

//
// Identify the PCI device, that device's extension,
// and the pointer to the interface within the PCI
// driver that does PCI config space reads and writes.
//

state->PciObj = (PNSOBJ)state->OpRegion->Context;

pciDeviceFilter = (PDEVICE_EXTENSION)state->PciObj->Context;

if (pciDeviceFilter == NULL) {

//
// The device has not been initialized yet, we cannot perform
// PCI config cycles to it. Fail gracefully and return all 0xFF
//
bytes = 0;
status = STATUS_SUCCESS;
goto PciConfigSpaceHandlerWorkerDone;
}

ASSERT(pciDeviceFilter);

interface = pciDeviceFilter->Filter.Interface;

ASSERT(interface ? (interface->Size == sizeof(BUS_INTERFACE_STANDARD)) : TRUE);

//
// If interface is non-zero, we have enumerated this PCI
// device. So use the PCI driver to do config ops.
// If it is zero, make some attempt to figure out what
// device this request is for. The result will be
// used in calls to the HAL.
//

if (!interface) {

if (!(state->Flags & PCISUPP_GOT_SLOT_INFO)) {

state->Flags |= PCISUPP_GOT_SLOT_INFO;

status = GetPciAddress(state->PciObj,
PciConfigSpaceHandlerWorker,
(PVOID)state,
&state->Bus,
&state->Slot);

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

audio2face gRPC 服务 10246

10246 常见端口对应关系(不同版本略有差异) 5008:REST / HTTP 控制接口(你之前问过的) 10246:实时流 / gRPC / Stream(驱动表情用得最多) 测试端口: netstat -ano | f…

作者头像 李华
网站建设 2026/6/15 13:14:45

生成引擎优化(GEO)提升在线内容传播效率的探索与实践

生成引擎优化(GEO)的目的是通过分析用户的需求和搜索引擎的规则,提升在线内容的传播效率。内容创作者需要深入理解目标受众的期望,以确保所创作的内容精准匹配用户搜索意图。GEO倡导将核心关键词自然融入文章中,这不仅提高了搜索引擎的可见性…

作者头像 李华
网站建设 2026/6/8 19:43:11

Flutter艺术探索-Flutter错误处理:try-catch与异常捕获

Flutter错误处理实战:掌握try-catch与异常捕获 引言 在Flutter应用开发中,一套健壮的错误处理机制,往往是决定应用稳定性和用户体验的关键。Dart语言虽然提供了基于异常的错误处理模型,但在真实的Flutter项目中,我们还…

作者头像 李华
网站建设 2026/6/15 13:11:20

Flutter艺术探索-Flutter包管理:pubspec.yaml配置详解

Flutter包管理:pubspec.yaml配置详解 引言 搞Flutter开发,你肯定天天和pubspec.yaml这个文件打交道。它看起来简单,就是一个YAML格式的配置文件,但实际上,它管的事儿可多了——项目叫什么、用什么版本的Dart和Flutter、…

作者头像 李华
网站建设 2026/6/15 13:16:46

AQS、Condition

目录一、AQS抽象类1.自定义AQS2.如何实现多个线程按序执行3.独占锁3.1 acquire()方法(ReentrantLock源码为例)3.2 release()方法(ReentrantLock源码为例)4.共享锁4.1 acquireShared()方法(Semaphore源码为例&#xff0…

作者头像 李华