用户名  找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 57649|回复: 16

[原创]BIOS知识点滴Follow Bini系列之--ACPI _GPE & _Q方法

[复制链接]
发表于 2007-12-7 12:11:21 | 显示全部楼层 |阅读模式
--易祝兵 2007-12-7
  m8 F" I+ ]( z, v1 y
在BIOS初始化platform PM寄存器后,支持ACPI的操作系统会开启ACPI模式,一般同时开启SCI事件的响应。3 }& n  D8 U. J* }8 |+ Y
. W/ }  i" a! i6 L
什么是SCI?什么是SMI?6 H5 n+ w0 f1 U3 [5 f: G; j: X+ s# ~
这里如您不知道,我只大致解释一下:7 @6 j4 m- D* n$ [: O- z
SCI:系统控制中断,会由产生一个IRQ x(此x号码,一般可由平台的寄存器设定)中断请求,操作系统的ACPI驱动会响应此中断。
7 a5 M0 N0 P+ B& \+ fSMI:系统管理中断,由各设备或软件需要SMM服务时,下拉CPU的SMI Pin所产生,系统不论在做什么,都会挂起现执行的操作,跳至一个特殊的模式,叫系统管理模式(SMM)(当然是比操作系统有更高的优先权啦,才不管你0/3 level什么的。)
; E! u  Q0 |3 k+ H- p) ]
1 v+ @$ g6 i# D1 u5 @当你配置了一个GPIO产生events后,又打开了ACPI和SCI。那么系统在此GPIO Status发生变化的时候,ACPI驱动就会捕捉到。即:一般就执行一个ACPI里_GPE()内的一个方法。这是普通的。
  l8 }6 S. y6 C1 ^; }! u% r2 |
1 L6 @- o4 J0 r$ G  rICH7 GPIO Status的寄存器如下:4 o( q  Q/ l* I) N$ F8 N
1.JPG
* H  e3 q4 S2 e+ F" T% W# m$ ^7 B# [1 G' f6 P
让GPIO产生SCI或SMI的Switch寄存器:9 l4 h$ U! x" w+ c5 G2 \* w
3.JPG 6 {" w( @3 Z  t+ y0 C* c

2 D, p- B; c6 {1 V1 N5 p% H( v' Y9 H一种机器所用到的的GPIO:' C* T7 z7 [7 p: f/ P- f$ o
2.JPG
- c( a* R# X3 Q5 v2 V6 K1 j/ ^! I
2 k* m. v5 P$ b* [7 m& c6 Q% ^" M& x处理这些事件的方法如下:
! L1 v" e  j0 M# E 4.JPG $ T! G$ h, A0 x
注意上面,的_L04是指你GPEx_STS的PM寄存器的第4个bit位发生变化时,所执行的ACPI事件方法,并不一定是指第4个GPIO所生产的方法,各平台有各平台的Chipset手册,注意看好。9 K& y6 J5 w7 Z
8 g7 l; L9 }$ p5 X8 k
那什么是Q方法?4 g' @' h# e' U5 A; {
当你的平台定义了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. O" q  b# q, f! ]9 \$ s5 {# E$ u1 N
, n1 ]8 [: P# j! S: v; a3 q
既然有256个,哪如何区分Q事件呢?
5 `" s+ n# U0 q( c1 D: R当Q事件产生时,OSPM会向ACPI EC发出一个命令去查询此Q事件的号码。EC会响应并回复一个号码给OSPM,然后OSPM就会执行ACPI里的某个Q方法。
: z0 B7 L6 f# c0 m/ R7 J+ ^1 s, y  [: |
如EC发现温度发生变化,就会向ACPI Thermal驱动发出通知,更新ACPI Thermal,以便系统按要求处理散热方案,如下图:$ S+ D$ ?8 m$ ^  N$ y9 f0 r# W
Method(_Q34) { // embedded controller event for thermal Notify
" I6 H1 q% k. K    (\_SB.TZ0.THM1, 0x80) # [& r9 J- o2 H, {" Y) S# X" |
}# A0 p4 A1 P! Y0 [

+ D" ^5 G/ W$ a; Q; m# i) G详见文档: ACPI 3.0b -> 5.6.2.2.3 Queuing the Matching Control Method for Execution.% u0 Z' k+ ^0 |& b8 W
如找不到ACPI 3.0b请到:http://www.ufoit.com/bbs/thread-7-1-1.html 处或 http://www.acpi.info 下载。
发表于 2007-12-8 09:17:47 | 显示全部楼层
嗯,多谢分享
回复

使用道具 举报

发表于 2007-12-24 11:22:01 | 显示全部楼层

wake event

看spec,GPE 事件产生后除了会发 SCI/SMI#,有时候还会发 wake event.3 a) O+ X& V. Y6 K
SCI --> IRQ --> ACPI driver。 ( i, A* |) }9 g+ Z# u" I  }) T- K
SMI# --> SMM。
+ O6 `) ~. ^- t1 s; R, D. P; r那 wake event 的工作机制又是怎样的呢?
回复

使用道具 举报

发表于 2007-12-24 12:09:51 | 显示全部楼层
Wake Event, 就是可以把系统唤醒的事件, 例如网络的唤醒方式, 是通过 PME# 产生 Wake 事件, 把机器从S1/S3/S4/S5唤醒, 返回到S0.
回复

使用道具 举报

 楼主| 发表于 2007-12-26 14:31:54 | 显示全部楼层
你看Host的Datasheet,看平台支持哪些唤醒,如你平台支持GPI[0..n]的 wake up,那就应该有个开关,让某个GPI[0..n]产生Wake event(注意是在S1~S5,看你的平台说明),如果在S0,那么就可能只产生SCI/SMI。所以,当此GPI产生Wake event时,HOST就会启用wake up上电时序进行平台上电。: f) {# r. e, [9 U
5 t& z: V% V8 u/ C0 Q
多翻平台的Datasheet,查找wake event,应该一目了然。
回复

使用道具 举报

发表于 2008-1-2 14:58:31 | 显示全部楼层
看了快一个月的ACPI了,总算知道大家的讨论什么了。
) u* c9 N4 ^4 L2 o/ L& U
* p! r3 G; |! i' f) q   ^    ^
1 w, a/ f! x! c) g) p9 q1 u# Y8 J# \& B (   。 。  )
7 z& l' Y  N( Q0 A     (  )
回复

使用道具 举报

发表于 2008-1-14 16:04:06 | 显示全部楼层
讲得不错。( P# o, W3 w# @5 R; C. ?% @9 r! a
其实一切均按apci规范进行,考验大家英语阅读和领会能力啊
回复

使用道具 举报

发表于 2008-5-19 20:16:16 | 显示全部楼层
"让GPIO产生SCI或SMI的Switch寄存器" 1 Y9 J: T7 }( x1 q" e

8 |4 s- y2 j+ M9 Z谢谢!
回复

使用道具 举报

发表于 2008-5-19 20:31:28 | 显示全部楼层
请教一个问题 / ~* O4 ^( n1 Z3 x, y- V

. Y) {$ q+ e( a: g+ ]1 J8 B) ~$ S2 YSMM里面还可以在发SMI吗?
回复

使用道具 举报

 楼主| 发表于 2008-5-20 00:54:48 | 显示全部楼层
SMI是不可重入的.具体见IA64 & IA32 AS, Volume 3B 第24章.
回复

使用道具 举报

发表于 2008-7-8 17:54:14 | 显示全部楼层
请楼主解释一下,
1 `+ h% x0 q) z% {+ HRST_CNT—Reset Control Register 2 {  o7 }) _$ x! W4 W
I/O Address: CF9h Attribute: R/W( Q2 g3 x; d* h
5 Y1 g: _6 o% r' h
ICH9在这之后都使用offset表示 Register Address(PMBASE + OFFSET, 这里的PMBASE是指 CF9吗??)
) x( x8 C7 w1 f0 V比如:
0 t" E2 {9 {5 p' y! l! @& oGEN_PMCON_1—General PM Configuration 1 Register
) X5 ?- g" R7 F& Z' K/ {* YOffset Address: A0h0 i7 y4 E6 ^9 ^8 C$ ~6 h

4 Z' _9 ^$ ]8 I& v( H2 q3 r如果我要对该register操作,该怎么做呢? I/O Address = 0x0CF9* 16 + 0xA0 = 0xd030 ??????4 P, x+ O9 i3 R% A3 _( P7 Y

! m4 |. a7 G: w3 u- I还有,您上面所写的
2 c, ]- @$ B5 V' Dmov al, 0Eh
8 ]1 j- x' O+ }& c+ {mov dx, 0CF9h: v4 u2 @0 I# e# U
out dx, al
1 `# a$ z* S3 Rjmp $
& T# x/ t  S' h# Q
9 J8 B0 j4 K' R  m2 z' \; O最后的jmp $ 是跳到哪了?
回复

使用道具 举报

 楼主| 发表于 2008-7-9 09:44:43 | 显示全部楼层
PMBASE,请查找ICH的spec,即可找到答案。
. l. n% C: ~; r* ]+ K7 K4 p1 z" i* w
Jmp $,就是Jmp到自己,也就相当于一个死循环。
回复

使用道具 举报

发表于 2009-12-4 17:25:54 | 显示全部楼层
哥哥,有些复杂
回复

使用道具 举报

发表于 2010-7-19 19:53:15 | 显示全部楼层
mark,等我先看看spec,再来领会先,多谢
回复

使用道具 举报

发表于 2011-1-4 14:26:46 | 显示全部楼层
mark,等我先看看spec,再来领会先,多谢
回复

使用道具 举报

发表于 2012-7-20 10:53:39 | 显示全部楼层
Bini,怎麼看不到你最近的動態了呢?什麽時候再出江湖,為我們指點迷津呀?
回复

使用道具 举报

发表于 2013-9-4 00:25:20 | 显示全部楼层
暂时还在学习中,很多看不懂
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

Archiver|手机版|小黑屋|计匠网

GMT+8, 2025-4-4 15:09 , Processed in 0.037375 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表