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啪在线| 免费黄色国产视频| 亚洲精品大秀视频| 亚洲无限乱码| 久久成人国产精品免费软件| 漂亮人妻被中出中文字幕久久| 国产精品jizz在线观看软件| 国产一二三区在线| 欧美 亚洲 日韩 国产| 成人亚洲国产| 国产微拍一区二区三区四区| 日韩A级毛片一区二区三区| 国产欧美日韩精品综合在线| 五月天久久综合国产一区二区| 妇女自拍偷自拍亚洲精品| 欧美色99| 四虎影院国产| 国产成人久久综合一区| 免费一级毛片在线观看| 国产在线精品人成导航| 国产00高中生在线播放| 亚洲精品无码AV电影在线播放| 亚洲成人精品久久| 污网站免费在线观看| 91年精品国产福利线观看久久| 精品国产欧美精品v| 天堂亚洲网| 99久久无色码中文字幕| 日本www在线视频| 欧美国产综合视频| 国产天天射| 色婷婷在线播放| 久久黄色一级视频| 亚洲黄色激情网站| 欧美精品成人| 精品视频一区二区三区在线播| 久热这里只有精品6| 欧美三级日韩三级| 欧美激情视频一区| 久久综合伊人77777| 国产美女视频黄a视频全免费网站| 72种姿势欧美久久久大黄蕉| 国产精品片在线观看手机版| 亚洲精品成人福利在线电影| 亚州AV秘 一区二区三区| 国产高清自拍视频| 国产喷水视频| 国产丝袜丝视频在线观看| 国产精品无码作爱| 日韩在线网址| 亚洲美女一级毛片| 污污网站在线观看| 久久精品一品道久久精品| 亚洲成aⅴ人在线观看| 亚洲不卡影院| 扒开粉嫩的小缝隙喷白浆视频| 国产丰满大乳无码免费播放 | 91久久天天躁狠狠躁夜夜| a毛片免费看| 538国产视频| 亚洲高清日韩heyzo| 国产簧片免费在线播放| 91国语视频| 婷婷亚洲天堂| 日韩高清一区 | 日韩国产一区二区三区无码| 国产精品99久久久久久董美香| 欧美午夜在线观看| 超清无码一区二区三区| 天天色天天综合网| 亚洲va精品中文字幕| 色综合成人| 久久亚洲黄色视频| 国产第八页| 尤物成AV人片在线观看|