|
--易祝兵 2007-12-7
- Y# w* J5 t8 s, a' R在BIOS初始化platform PM寄存器后,支持ACPI的操作系统会开启ACPI模式,一般同时开启SCI事件的响应。
8 K& Z: ~1 I* b1 @" H- S5 Y& \+ l; h. t
什么是SCI?什么是SMI?- ^) I9 K5 q q. l6 m
这里如您不知道,我只大致解释一下:
. d7 t2 ~) |) O4 VSCI:系统控制中断,会由产生一个IRQ x(此x号码,一般可由平台的寄存器设定)中断请求,操作系统的ACPI驱动会响应此中断。$ J3 }: T6 x: n* F% \- S# }
SMI:系统管理中断,由各设备或软件需要SMM服务时,下拉CPU的SMI Pin所产生,系统不论在做什么,都会挂起现执行的操作,跳至一个特殊的模式,叫系统管理模式(SMM)(当然是比操作系统有更高的优先权啦,才不管你0/3 level什么的。)
; ]4 m" \0 M' F& R0 ]7 @$ M: l) b' v& e: ?, z
当你配置了一个GPIO产生events后,又打开了ACPI和SCI。那么系统在此GPIO Status发生变化的时候,ACPI驱动就会捕捉到。即:一般就执行一个ACPI里_GPE()内的一个方法。这是普通的。
/ q* ~5 ^! a5 }1 i0 @3 T- s6 O3 I, y3 K0 N5 c" z
ICH7 GPIO Status的寄存器如下:
" M6 b( t* T {* O6 F1 {
% s/ R7 z# ?9 `' g
% T$ Q ~9 e r
让GPIO产生SCI或SMI的Switch寄存器:
0 Q; {) V( X# _( b4 G5 z- y
/ n7 ~9 ^) e2 X: E- P3 q! d0 U( u: r/ @/ O# T+ I
一种机器所用到的的GPIO:
/ S( h" {0 f+ j- y/ X2 D
+ P" S5 D) [' s+ Y0 \5 a- a& k. U
% j$ \7 Z& A% n! E1 {5 |+ u1 r处理这些事件的方法如下:
4 |2 ], \' g/ V
! {+ D0 `3 g/ H/ q2 l注意上面,的_L04是指你GPEx_STS的PM寄存器的第4个bit位发生变化时,所执行的ACPI事件方法,并不一定是指第4个GPIO所生产的方法,各平台有各平台的Chipset手册,注意看好。
* {& S! C) @: M5 R9 j
. X2 e/ ^. _, i' L/ ~. |- h那什么是Q方法?
2 k! q7 b( A, _+ e& s9 W- Z5 ?* Y4 F" V当你的平台定义了ACPI嵌入式控制器(EC,PNPID:PNP0C09[PNPID的文档,见本站内的贴子:http://www.ufoit.com/bbs/thread-97-1-1.html]),并指定了EC所使用的GPIO,那么,此GPIO的事件(状态发生变化)产生时,就会产生一个Q事件,处理此事件的,就叫Q方法,可以有从0到FF个,即: _Q00() ~ Q255()。: \& s7 H7 }8 ^5 \1 G" h, O# d
$ F/ M( q; \) n" C% _既然有256个,哪如何区分Q事件呢?8 G3 K a. m. H9 d; o
当Q事件产生时,OSPM会向ACPI EC发出一个命令去查询此Q事件的号码。EC会响应并回复一个号码给OSPM,然后OSPM就会执行ACPI里的某个Q方法。* k/ E8 J, k# w6 S1 S n$ z5 c( g; a
- y# F% P& l& D- `! o; e' r
如EC发现温度发生变化,就会向ACPI Thermal驱动发出通知,更新ACPI Thermal,以便系统按要求处理散热方案,如下图:! Z' j& H: i/ x0 ]* W
Method(_Q34) { // embedded controller event for thermal Notify8 D- W# u. P( V$ m- @, D+ C+ Q0 F
(\_SB.TZ0.THM1, 0x80) / b0 I# ?$ q0 c( z
}7 ~+ X2 J/ r1 W' \
# P: e* u; `4 I' Z8 {详见文档: ACPI 3.0b -> 5.6.2.2.3 Queuing the Matching Control Method for Execution.
( j4 L' L F6 Z* L$ Y0 j$ S. [1 c如找不到ACPI 3.0b请到:http://www.ufoit.com/bbs/thread-7-1-1.html 处或 http://www.acpi.info 下载。 |
|