|
|
|
--易祝兵 2007-12-7 " b8 j& ]0 y/ M9 c' S; \
在BIOS初始化platform PM寄存器后,支持ACPI的操作系统会开启ACPI模式,一般同时开启SCI事件的响应。/ m! c' ]$ F7 L* V& H# c8 R3 t
8 v0 q V/ X- Q5 M# L. O5 o什么是SCI?什么是SMI?
+ G; a/ W$ \, g0 f这里如您不知道,我只大致解释一下:7 \- k6 r' C3 O
SCI:系统控制中断,会由产生一个IRQ x(此x号码,一般可由平台的寄存器设定)中断请求,操作系统的ACPI驱动会响应此中断。4 S* p7 L9 Y) I# C5 B B- `& F1 D
SMI:系统管理中断,由各设备或软件需要SMM服务时,下拉CPU的SMI Pin所产生,系统不论在做什么,都会挂起现执行的操作,跳至一个特殊的模式,叫系统管理模式(SMM)(当然是比操作系统有更高的优先权啦,才不管你0/3 level什么的。)
: F; D4 d2 h8 D7 V5 F8 G( K4 z- E t& F& M* g; c. V
当你配置了一个GPIO产生events后,又打开了ACPI和SCI。那么系统在此GPIO Status发生变化的时候,ACPI驱动就会捕捉到。即:一般就执行一个ACPI里_GPE()内的一个方法。这是普通的。
# y' z% J- `5 M1 \% ]
2 J; ?4 M" Y6 B: l2 I$ M6 EICH7 GPIO Status的寄存器如下:" |% Y- m, ~2 [: @# b0 L. x8 n! k
% W+ G0 Y" `) l& R3 H+ z
0 c. ~0 e4 |8 r# t% F* q' }让GPIO产生SCI或SMI的Switch寄存器:
l- H& m% j9 H$ ^
9 B; {, R3 `% q3 S
/ D8 L# H9 |7 d一种机器所用到的的GPIO:
9 H) \$ C" j C; S4 W9 y/ e" k
* z" U+ ~) h- y+ X m
% _2 G/ c. S0 F. m% l- E% ~, t3 M# P处理这些事件的方法如下:1 f- D. S: u+ `, @/ T
1 |4 f/ T+ x" _' F4 N1 `
注意上面,的_L04是指你GPEx_STS的PM寄存器的第4个bit位发生变化时,所执行的ACPI事件方法,并不一定是指第4个GPIO所生产的方法,各平台有各平台的Chipset手册,注意看好。
, ?8 O1 Z8 y/ G+ b E' y4 y9 F: F$ s V7 E
那什么是Q方法?# e3 u# k& F3 r2 t
当你的平台定义了ACPI嵌入式控制器(EC,PNPID:PNP0C09[PNPID的文档,见本站内的贴子:http://www.ufoit.com/bbs/thread-97-1-1.html]),并指定了EC所使用的GPIO,那么,此GPIO的事件(状态发生变化)产生时,就会产生一个Q事件,处理此事件的,就叫Q方法,可以有从0到FF个,即: _Q00() ~ Q255()。
0 [; a9 M: K3 V
; b( ?( Y1 Z) w, x* M: m既然有256个,哪如何区分Q事件呢?
5 H3 ?3 w( ^6 L当Q事件产生时,OSPM会向ACPI EC发出一个命令去查询此Q事件的号码。EC会响应并回复一个号码给OSPM,然后OSPM就会执行ACPI里的某个Q方法。3 Q9 s% L* A4 G- U
& |9 V b+ I+ W! z( E* B3 R: m. H0 ?
如EC发现温度发生变化,就会向ACPI Thermal驱动发出通知,更新ACPI Thermal,以便系统按要求处理散热方案,如下图:1 ]8 m9 h. N5 w* O/ [
Method(_Q34) { // embedded controller event for thermal Notify
# N2 n) g& G5 \6 b) c (\_SB.TZ0.THM1, 0x80) 4 k+ @8 `, d6 I+ _( Y
}
9 M& h* ?3 M# W! F& ~# i m. p+ N0 F5 q
详见文档: ACPI 3.0b -> 5.6.2.2.3 Queuing the Matching Control Method for Execution.8 K7 W2 @+ z0 F
如找不到ACPI 3.0b请到:http://www.ufoit.com/bbs/thread-7-1-1.html 处或 http://www.acpi.info 下载。 |
|