|
|
|
--易祝兵 2007-12-7
5 c6 t+ T7 K( s& ]在BIOS初始化platform PM寄存器后,支持ACPI的操作系统会开启ACPI模式,一般同时开启SCI事件的响应。
- M; z; d. [2 Q' D8 ^0 I2 d' [) O: z7 x5 ^: m
什么是SCI?什么是SMI?* _1 t/ Q4 @2 C7 ]1 e/ w }8 K! ~
这里如您不知道,我只大致解释一下:" e: M, g$ [9 ^; d
SCI:系统控制中断,会由产生一个IRQ x(此x号码,一般可由平台的寄存器设定)中断请求,操作系统的ACPI驱动会响应此中断。3 u a- {9 Q4 q- [/ r$ Z
SMI:系统管理中断,由各设备或软件需要SMM服务时,下拉CPU的SMI Pin所产生,系统不论在做什么,都会挂起现执行的操作,跳至一个特殊的模式,叫系统管理模式(SMM)(当然是比操作系统有更高的优先权啦,才不管你0/3 level什么的。)
" O0 ]1 g" q( e, Q( G5 g8 }8 v
2 c( W6 m) {9 p当你配置了一个GPIO产生events后,又打开了ACPI和SCI。那么系统在此GPIO Status发生变化的时候,ACPI驱动就会捕捉到。即:一般就执行一个ACPI里_GPE()内的一个方法。这是普通的。+ R Q) t# l$ W3 r+ @8 j2 p
( R8 c2 [/ A, w3 Q$ RICH7 GPIO Status的寄存器如下:8 i' ?6 _2 p1 V' U: n' D) k Q$ y
% J% A7 ~" }# a% n/ b: W2 ? i+ t9 ~
4 e0 T& j( d( P让GPIO产生SCI或SMI的Switch寄存器:
8 |7 |: }6 F& I6 @
0 G4 y2 p& F( F
4 m: x. Q) _. k4 d7 [& A一种机器所用到的的GPIO:
7 H6 U/ p: j: F4 `4 F+ J
% y t" l7 G/ t3 {0 Y
, {- @1 [/ H0 b6 u/ V处理这些事件的方法如下:$ u: e' ^7 C* }6 Q6 v# s
$ ]) \% J7 X! S, g; K2 c5 m注意上面,的_L04是指你GPEx_STS的PM寄存器的第4个bit位发生变化时,所执行的ACPI事件方法,并不一定是指第4个GPIO所生产的方法,各平台有各平台的Chipset手册,注意看好。" _5 s2 {6 }' `6 E
" V* x6 N' _/ D) s, T
那什么是Q方法? [0 d N, u1 F( y; U; f8 j. n
当你的平台定义了ACPI嵌入式控制器(EC,PNPID:PNP0C09[PNPID的文档,见本站内的贴子:http://www.ufoit.com/bbs/thread-97-1-1.html]),并指定了EC所使用的GPIO,那么,此GPIO的事件(状态发生变化)产生时,就会产生一个Q事件,处理此事件的,就叫Q方法,可以有从0到FF个,即: _Q00() ~ Q255()。$ M v" a& c. C1 m0 D
6 P; i. I; R" i3 F
既然有256个,哪如何区分Q事件呢?
. n! L- ?7 k# G: A; j( j Z当Q事件产生时,OSPM会向ACPI EC发出一个命令去查询此Q事件的号码。EC会响应并回复一个号码给OSPM,然后OSPM就会执行ACPI里的某个Q方法。: }) G2 Y6 A' ?; @$ S! J. j
+ `* @/ c9 l- a2 n' X6 \如EC发现温度发生变化,就会向ACPI Thermal驱动发出通知,更新ACPI Thermal,以便系统按要求处理散热方案,如下图:
1 y% q7 \+ g Q$ z" @) L; r+ [Method(_Q34) { // embedded controller event for thermal Notify
H1 H+ E' r' _- I (\_SB.TZ0.THM1, 0x80)
* y4 I% j1 e) o3 N& u; F}. k( p9 o, e! F3 d
% b& e7 ?9 b: U) N详见文档: ACPI 3.0b -> 5.6.2.2.3 Queuing the Matching Control Method for Execution.1 z' s; B! L7 C. G. R) V0 o
如找不到ACPI 3.0b请到:http://www.ufoit.com/bbs/thread-7-1-1.html 处或 http://www.acpi.info 下载。 |
|