999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

PCI設備電源管理驅動程序開發

2010-04-12 00:00:00程海全,胡君,徐抒巖,謝愛平
現代電子技術 2010年14期

摘 要:為使PCI設備具有電源管理功能,需要操作系統和驅動程序的配合來控制設備的電源狀態。通過研究Windows操作系統下系統和設備的電源策略,提出WDM驅動程序中處理系統電源IRP控制設備電源狀態的電源管理方案。說明處理電源管理IRP的工作機制,在基于Windows XP的系統上證明基于這種方案的WDM驅動程序運行穩定。

關鍵詞:電源管理; WDM; PCI; IRP

中圖分類號:TN302.7 文獻標識碼:A

文章編號:1004-373X(2010)14-0196-03

Driver Development of Power Management for PCI Device

CHENG Hai-quan1,2, HU Jun1, XU Shu-yan1, XIE Ai-ping3

(1. Space Optics Research Department, Changchun Institute of Optics, Fine Mechanics and Physics, Chinese Academy of Sciences, Changchun 130033, China;

2. Graduate School, Chinese Academy of Sciences, Beijing 100039, China;

3. College of Communication Engineering, Jilin University, Changchun 130032, China)

Abstract: The cooperation of operating system (OS) and driver is needed to control the power status of equipments for making PCI device to possess the function of power management. By the aid of the study on the power supply of systems and devices under Windows OS, a power management scheme is proposed to control the power status of equipments through processing system power IRP in WDM driver. WDM driver's mechanism of processing the power management IRP is elaborated. An experiment shows that WDM driver based on this scheme can work well with Windows XP.

Keywords: power management; WDM; PCI; IRP

0 引 言

隨著計算機軟硬件技術發展,要求設備能夠從待機或睡眠中快速啟動;要求在不使用時,移動設備能夠保持待機或休眠以節省電能的情況越來越多,傳統的冷啟動或熱啟動(復位啟動)已不能滿足人們的要求。微軟在Windows操作系統下設計了電源管理構架,為系統和設備的電源管理需求提供了廣泛的支持。目前Windows系統下的電源管理支持(advanced configuration and power interface ,ACPI) 高級配置和電源界面工業標準。

根據微軟的WDM驅動程序模型,很容易寫出具有一定功能的驅動程序,可是在設備運行了一段時間后,當系統要進入待機或休眠狀態時,就會發現桌面上彈出一個窗口——禁止待機。出現這種現象是由操作系統的默認電源管理策略所致,實際的原因在于驅動程序中沒有寫關于電源管理的代碼。本文中研究的WDM驅動就是為了使設備配合操作系統支持系統的待機和休眠。

1 系統和設備的電源策略

電源管理主要涉及操作系統和設備,系統電源狀態指示整個系統的總體電源使用,而設備電源狀態指示各個設備使用多少能量。PCI設備支持的電源等級是由PCI配置空間中的電源管理能力結構描述的[1]。PCI總線電源管理接口規范描述了電源管理能力結構寄存器和電源管理事件信號以及輔助電源,這些寄存器和信號讓操作系統可以控制PCI總線以及總線上每個功能的電源[2]。

電源管理器管理著系統級的電源策略,設備電源策略主負責設備的電源策略,它們互相配合才能完成系統和設備的電源狀態轉換。

1.1 系統和設備電源狀態

Windows操作系統定義了6種系統狀態S0~S5,S0稱為工作狀態,S1~S4屬于睡眠狀態。S5是關閉狀態。設備按照ACPI規范定義了4種設備狀態D0~D3。在D0狀態中,設備處于全供電狀態。在D3狀態中,設備處于無供電(或最小限度的電流)狀態。中間的D1和D2狀態指出設備的2個不同睡眠狀態。Microsoft規定了不同類型設備的類專用的電源需求,該規范要求每個設備至少要支持D0和D3兩個狀態[3]。

1.2 電源狀態轉換

應用程序請求、系統活動/電池級別或用戶按下電源按鈕會導致電源狀態的改變,例如系統在響應待機(standby)命令過程中,電源管理器首先向每個驅動程序發送帶有IRP_MN_QUERY_POWER副功能碼的IRP_MJ_POWER請求以詢問設備能否接受即將到來的電源關閉請求。如果所有驅動程序都同意,電源管理器將發送第2個帶有IRP_MN_SET_POWER副功能碼的電源管理IRP(I/O reequest package),然后驅動程序把其設備置入低電源狀態以響應這個IRP[3-4]。

前文中驅動程序不能待機的原因,也就在這里,不符合電源管理要求的驅動程序否決了電源管理器發來的要求改變電源狀態IRP,導致系統不能待機。

1.3 PCI總線驅動程序與電源管理能力結構

總線驅動程序在電源管理中發揮著重要作用,甚至可以是電源策略主[5]。PCI電源管理能力結構為操作系統提供了一種標準機制來控制設備的功耗管理。對于某一個PCI設備來講,設備本身直接由PCI總線驅動程序管理[3]。總線驅動程序通過存取PCI電源管理能力結構的寄存器直接控制設備運行,達到物理上改變設備的電源狀態。

2 驅動程序設計過程

要使WDM驅動程序具有電源管理功能,首先需要在DriverEntry入口函數中注冊IRP_MJ_POWER IRP的派遣函數例程[6-7]。

pDriverObject->MajorFunction[IRP_MJ_POWER]= PowerDispatchRoutine;

驅動程序的電源管理例程圍繞電源IRP_MJ_POWER IRP進行處理,這些例程處理這個IRP,并在需要時產生這個IRP。這個IRP有4個電源管理次功能代碼,如表1所示。

表1 IRP_MJ_POWER次功能代碼

次功能IRP代碼描述

IRP_MN_QUERY_

POWER查詢系統或設備狀態變化是否可行

IRP_MN_SET_POWER設置系統或設備電源狀態

IRP_MN_WAIT_WAKE喚醒計算機,響應1個外部事件

IRP_MN_POWER_SEQUENCE發送這個IRP,確定設備是否真正進入特定的電源狀態

大多數驅動程序要求必須處理表1中前2個IRP,具有喚醒能力的設備驅動要處理IRP_MN_WAIT_WAKE。這里對IRP_MN_WAIT_WAKE和IRP_MN_POWER_SEQUENCE做默認處理。

NTSTATUS PowerDispatchRoutine(IN PDEVICE_OBJECT fdo, IN PIRP Irp) {

PAGED_CODE();

KdPrint((\"Enter PowerDispatchRoutine\\\\"));

NTSTATUS status = STATUS_SUCCESS;

switch(stack->MinorFunction) {

case IRP_MN_SET_POWER:

status = SetPowerState(fdo, Irp);

break;

case IRP_MN_QUERY_POWER:

status =QueryPowerState(fdo, Irp);

break;

case IRP_MN_WAIT_WAKE:

case IRP_MN_POWER_SEQUENCE:

default:

status = DispatchPowerDefault(fdo, Irp);

break;

}

return status;

}

電源管理器,維護一個單獨的電源IRP內部隊列,這保證在系統中只有一個“設置系統電源”IRP在處理,還保證每個設備只有一個“設置設備電源”IRP在運行[5]。

設備在完成一個電源IRP的處理時,必須告訴電源管理程序,使得它可以開始下一個電源IRP的處理。一般的默認處理就是簡單地把一個IRP沿設備棧向下傳遞(沒有完成例程),在跳過或復制當前IRP棧單元之前,應調用PoStartNextPowerIrp函數,如果使用完成例程,通常也必須調用PoStartNextPowerIrp。

NTSTATUS DispatchPowerDefault(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)

{

PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;

PoStartNextPowerIrp(Irp);

IoSkipCurrentIrpStackLocation(Irp);

return PoCallDriver(pdx->LowerDeviceObject, Irp);

}

2.1 設備電源能力結構

PnP管理器在啟動設備后向設備發出查詢設備能力的請求,該請求的參數是一個DEVICE_CAPABILITIES結構,PCI總線驅動程序通常填充DEVICE_CAPABILITIES結構,該結構包含了與電源管理有關的幾個域。功能設備驅動程序應該首先向設備棧下轉發該IRP,等待IRP完成后,在必要時可以更改DEVICE_CAPABILITIES結構。

電源策略主負責檢查DEVICE_CAPABILITIES結構中的DeviceState域來確定每個系統電源狀態對應的設備電源狀態。這個結構中指出了對應于一個系統電源級設備可以處于的最高電源狀態。功能驅動程序可以在設備擴展中存儲這個結構中相關的域,在這個IRP完成以后,驅動程序不能改變它的內容[3]。

2.2 處理系統電源IRP

如果驅動程序收到一個“設置系統電源狀態”IRP,首先必須確定等效的設備電源狀態,如果當前設備電源狀態與要求的設備狀態不同,必須改變設備的狀態。通常總是把設備設置成與設備的當前活動、設備的電源能力以及系統的電源狀態相一致的最低電源狀態。

在向底層驅動程序傳遞“設置系統電源狀態”IRP之前改變設備狀態,在所有底層驅動程序處理后再給設備加電。必須給自己發出“設置設備電源狀態”IRP以改變設備電源狀態,然后等待這個IRP完成,然后可以繼續處理“設置系統電源狀態”IRP。以處理系統將要管理為例說明這個過程[4],如圖1所示。

圖1 降低系統電源IRP處理過程

2.3 處理設備電源IRP

如果收到“設置設備電源狀態”IRP,在調用低層驅動程序前,必須關閉設備的電源。在所有低層驅動程序啟動后,再啟動設備。這意味著應設置一個完成例程,并在那里給設備加電。這里以處理降低設備電源狀態為例[5]說明這個過程,如圖2所示。

圖2 降低設備電源IRP處理過程

2.4 實驗結果及分析

在Windows XP系統上加載采用這種電源管理方案的虛擬設備驅動程序,使系統從全功耗運行轉向休眠,再從休眠中恢復,用DebugView工具得到驅動打印的Log信息如下:

Enter HelloWDMPower

Power Manager query power state

Enter DispatchSystemPowerIrp

Enter CompletionSystemPowerRoutine

Send device power IRP according to system power IRP

Enter HelloWDMPower

Power Manager query power state

Enter DispatchDeviceQueryPower

Device power state query

newDeviceState = 4

Ready to pass down IRP for device power state query

Enter PowerDownPrepCallback

Enter DevicePowerCompleteCallback

Enter HelloWDMPower

System or device power is going to be change

Enter DispatchSystemPowerIrp

System power state change

newSystemState = 5

Enter CompletionSystemPowerRoutine

Send device power IRP according to system power IRP

Enter HelloWDMPower

System or device power is going to be change

Enter DispatchDeviceSetPower

Device power down

newDeviceState = 4

Ready to pass down IRP for device power state change

Enter PowerDownPrepCallback

Enter DevicePowerCompleteCallback

Enter HelloWDMPower

System or device power is going to be change

Enter DispatchSystemPowerIrp

System power state change

newSystemState = 1

Enter CompletionSystemPowerRoutine

Send device power IRP according to system power IRP

Enter HelloWDMPower

System or device power is going to be change

Enter DispatchDeviceSetPower

Device power up

newDeviceState = 1

Enter CompletionDevicePowerUp

Enter PowerUpCallback

Enter DevicePowerCompleteCallback

上述結果表明使用這種電源管理方案的驅動程序能和系統配合休眠,并能夠成功從休眠的狀態下啟動,另外具體應用到硬件上時要在說明的地方加上與設備相關的代碼。

3 結 語

本文介紹了PCI設備電源管理驅動程序的開發,電源管理在PCI規范中是可選的,現在PCI Express設備越來越多,而PCI Express設備必須實現電源管理能力。由于PCI Express與PCI軟件上兼容這里研究的電源管理方案同樣適用于PCI Express設備[8-10]。限于篇幅本文只給出了部分實現代碼,完整實例請參考WDK給出的toaster程序。

參考文獻

[1]PCI-SIG. PCI bus power management interface specification revision 1.2[EB/OL].[ 2004-03-03] . http://www.pcisig.com.

[2]李貴山,陳金鵬.PCI局部總線及其應用[M].西安:西安電子科技大學出版社,2003.

[3]Microsoft. Windows driver kit 7600[EB/OL].[ 2009-10-01] .http://www.microsoft.com.

[4]ONEY Walter. Programming the microsoft windows driver model[M]. US: Microsoft Press, 1999.

[5]Chris Cant.Windows WDM設備驅動程序開發指南[M].孫義,譯.北京:機械工業出版社,2000.

[6]PCI-SIG. PCI local bus specification v3.0[EB/OL].[ 2010-03-10] .http://www.pcisig.com.February 3,2004.

[7]張強.Compact PCl板卡硬件設計與傳輸速率測試[J].光學精密工程,2009,17(8):2049-2050.

[8]PCI-SIG. PCI.Express.Base.Specification.v1.1 [EB/OL].[ 2005-03-28] .http://www.pcisig.com.

[9]National Instruments. PCI Express 標準概述[EB/OL].[ 2007-12-14] . http://www.ni.com 2009.

[10]Microsoft. PCI, PCI-X, and PCI Express: Frequently Asked Questions[DB/OL]. [ 2005-10-18] . http://www.microsoft.com.

主站蜘蛛池模板: 自拍偷拍一区| 亚洲天堂日本| 在线观看91香蕉国产免费| 亚洲午夜国产片在线观看| 成人伊人色一区二区三区| 亚洲av日韩av制服丝袜| 中文字幕亚洲专区第19页| 日韩高清成人| 亚洲精品视频网| 高清视频一区| 日本草草视频在线观看| 欧美国产日韩一区二区三区精品影视| 亚洲精品手机在线| 欧美精品导航| 久久亚洲国产一区二区| 原味小视频在线www国产| 国产精品久久久久鬼色| 毛片久久久| 免费国产好深啊好涨好硬视频| 欧美一级专区免费大片| 免费在线成人网| 欧美激情二区三区| 99在线视频免费观看| 狠狠色狠狠色综合久久第一次| 国产九九精品视频| 91视频精品| 丰满人妻久久中文字幕| 久久亚洲中文字幕精品一区| 亚洲AⅤ无码日韩AV无码网站| 国产成人精品男人的天堂 | 青草视频免费在线观看| 天天操天天噜| 毛片免费高清免费| 中文字幕伦视频| 国产成人福利在线| 亚洲精品无码在线播放网站| 久久99精品久久久大学生| 久久综合亚洲色一区二区三区| 欧美第一页在线| 欧美成人午夜在线全部免费| 精品第一国产综合精品Aⅴ| 无套av在线| 国产在线观看成人91 | 人妻无码AⅤ中文字| 无码AV动漫| 久久福利网| 久视频免费精品6| 亚洲精品第五页| 国产拍揄自揄精品视频网站| 中文字幕在线永久在线视频2020| 丝袜美女被出水视频一区| 无码免费试看| 老司机久久99久久精品播放| 亚洲欧美成人综合| 久久香蕉欧美精品| 亚洲天堂网在线视频| 亚洲欧美一区二区三区图片 | 美女国内精品自产拍在线播放| 亚洲第一色网站| 一级不卡毛片| 国产精品一区在线观看你懂的| 青青草国产在线视频| 亚洲精品无码抽插日韩| 国产一线在线| 欧美一级一级做性视频| 亚洲精品天堂在线观看| 国产九九精品视频| 亚洲精品午夜无码电影网| 精品国产www| 国产理论最新国产精品视频| 久久国产精品国产自线拍| 中文字幕在线播放不卡| 久草视频精品| 久久中文字幕av不卡一区二区| 黄色免费在线网址| 538国产视频| 亚欧乱色视频网站大全| 亚洲Aⅴ无码专区在线观看q| 91精品国产丝袜| 性欧美在线| 亚洲区欧美区| 亚洲日本一本dvd高清|