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

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

[复制链接]
发表于 2007-12-7 12:11:21 | 显示全部楼层 |阅读模式
--易祝兵 2007-12-7
( U% ?; y5 k9 |1 W" {" f- y
在BIOS初始化platform PM寄存器后,支持ACPI的操作系统会开启ACPI模式,一般同时开启SCI事件的响应。3 H+ A# W  d/ `# q
0 _$ ?! y" y. N( @( S
什么是SCI?什么是SMI?) X9 x$ W) v; ^" J; U. c% t
这里如您不知道,我只大致解释一下:
. C. A; T" r* s4 W1 ^( qSCI:系统控制中断,会由产生一个IRQ x(此x号码,一般可由平台的寄存器设定)中断请求,操作系统的ACPI驱动会响应此中断。
- m2 D, U; J: m0 F5 RSMI:系统管理中断,由各设备或软件需要SMM服务时,下拉CPU的SMI Pin所产生,系统不论在做什么,都会挂起现执行的操作,跳至一个特殊的模式,叫系统管理模式(SMM)(当然是比操作系统有更高的优先权啦,才不管你0/3 level什么的。)
5 \+ C! x% o/ Q' F" e1 y8 k1 y- b7 r7 G
当你配置了一个GPIO产生events后,又打开了ACPI和SCI。那么系统在此GPIO Status发生变化的时候,ACPI驱动就会捕捉到。即:一般就执行一个ACPI里_GPE()内的一个方法。这是普通的。2 m) o4 G9 r  O+ j8 ?) N- Z5 Q& x

8 B- D) F- c4 z* ~, d+ h# Y3 E' Z/ HICH7 GPIO Status的寄存器如下:
! T( u  P5 d: L  j- C2 T. X 1.JPG
, I5 ~, _3 l& m% g3 `# _# ?' ~+ m- ?6 D
让GPIO产生SCI或SMI的Switch寄存器:! V/ M3 w3 |& v' o
3.JPG
8 C! R4 d; t; ~0 a8 I' C' }: H3 k2 [: m+ `$ u8 P
一种机器所用到的的GPIO:" Q! B" ~( k5 s. h4 G
2.JPG
4 z& t8 ^% j5 r9 H  u# {' A; |# l# O& k5 x" B1 q, J
处理这些事件的方法如下:
9 a3 v% u% \2 u 4.JPG 6 X0 L) @2 G1 G9 }* i( |  l
注意上面,的_L04是指你GPEx_STS的PM寄存器的第4个bit位发生变化时,所执行的ACPI事件方法,并不一定是指第4个GPIO所生产的方法,各平台有各平台的Chipset手册,注意看好。6 r$ l4 N+ F) I

$ o/ s, w( h1 S那什么是Q方法?
2 l; n' s- n7 v, T# h& Q6 {+ R当你的平台定义了ACPI嵌入式控制器(EC,PNPID:PNP0C09[PNPID的文档,见本站内的贴子:http://www.ufoit.com/bbs/thread-97-1-1.html]),并指定了EC所使用的GPIO,那么,此GPIO的事件(状态发生变化)产生时,就会产生一个Q事件,处理此事件的,就叫Q方法,可以有从0到FF个,即: _Q00() ~ Q255()。- E' q3 G! N$ j6 k* m4 f2 }

8 j  Z4 T: F( P! y+ E8 y既然有256个,哪如何区分Q事件呢?
/ l9 a/ C. k8 X- S* Z当Q事件产生时,OSPM会向ACPI EC发出一个命令去查询此Q事件的号码。EC会响应并回复一个号码给OSPM,然后OSPM就会执行ACPI里的某个Q方法。) N# E  [  c* F
8 {% V0 _8 q" B/ c% T
如EC发现温度发生变化,就会向ACPI Thermal驱动发出通知,更新ACPI Thermal,以便系统按要求处理散热方案,如下图:1 w. T$ Z4 a) n! x% a
Method(_Q34) { // embedded controller event for thermal Notify+ ?+ X5 `$ K7 o$ Z  ], D
    (\_SB.TZ0.THM1, 0x80) 7 P/ r* g3 o+ t: {& N
}' R4 ~5 E  o) v: T7 V4 p0 t
; G. s4 o" n5 j
详见文档: ACPI 3.0b -> 5.6.2.2.3 Queuing the Matching Control Method for Execution.
" w! e' D2 l+ z5 C2 ~8 p" o6 E如找不到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.- q! z' u/ R( e! J+ N" Z  _
SCI --> IRQ --> ACPI driver。 7 k( v$ ]  z4 s" t# K
SMI# --> SMM。9 e0 ]2 ?1 N# j# I' i+ G) p+ N
那 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+ B9 j2 _, C. s, j* J" k. s( I# S8 P9 L  Y1 m" e- H! X
多翻平台的Datasheet,查找wake event,应该一目了然。
回复

使用道具 举报

发表于 2008-1-2 14:58:31 | 显示全部楼层
看了快一个月的ACPI了,总算知道大家的讨论什么了。( g, B' S5 @. M

# Z: `& \# n- J# s   ^    ^
# j7 n) O5 O+ N* \ (   。 。  )
* x- p! P$ i; p' u     (  )
回复

使用道具 举报

发表于 2008-1-14 16:04:06 | 显示全部楼层
讲得不错。
2 u! e, J7 v9 g" f0 l0 ?" w其实一切均按apci规范进行,考验大家英语阅读和领会能力啊
回复

使用道具 举报

发表于 2008-5-19 20:16:16 | 显示全部楼层
"让GPIO产生SCI或SMI的Switch寄存器"
3 p/ F% ?( y0 i1 E. R5 o3 o3 B5 B2 ~7 d0 j2 U+ M3 n. c' w
谢谢!
回复

使用道具 举报

发表于 2008-5-19 20:31:28 | 显示全部楼层
请教一个问题 # |: Z$ R7 f$ |* p% x

9 r& E4 `/ u* G# }" n, ]: q' LSMM里面还可以在发SMI吗?
回复

使用道具 举报

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

使用道具 举报

发表于 2008-7-8 17:54:14 | 显示全部楼层
请楼主解释一下,1 C' Z2 Y/ G; t3 x% e% Z
RST_CNT—Reset Control Register - S6 e9 g% r) y3 k" m
I/O Address: CF9h Attribute: R/W
- [7 G+ A9 `5 j" q8 Z3 Q9 i+ X8 ]# G6 Z; Q, I$ E
ICH9在这之后都使用offset表示 Register Address(PMBASE + OFFSET, 这里的PMBASE是指 CF9吗??)
, [, @$ \$ ]5 u& _8 \比如:- a' ~6 m2 i+ f1 j' {4 A$ T  O" t1 L
GEN_PMCON_1—General PM Configuration 1 Register : ]5 j; z: m5 j+ T
Offset Address: A0h
0 ?" ^2 h: v9 D- F  r) ?1 @5 t- ~: D
如果我要对该register操作,该怎么做呢? I/O Address = 0x0CF9* 16 + 0xA0 = 0xd030 ??????
6 r% c7 C( Q% L4 @, d9 Q+ }$ m+ c" i7 V
7 L7 g; V4 U' |5 K3 h+ |) Z还有,您上面所写的
4 f' C% `, S# @9 dmov al, 0Eh: p/ X8 j+ R. _, c6 D! s
mov dx, 0CF9h& U; `% ?/ \, E' z; X0 c1 \
out dx, al2 S1 \7 v; s8 w. k4 d. o
jmp $
+ B2 y& c. @# [5 C# y
- [! }, j" M8 W2 N9 Z最后的jmp $ 是跳到哪了?
回复

使用道具 举报

 楼主| 发表于 2008-7-9 09:44:43 | 显示全部楼层
PMBASE,请查找ICH的spec,即可找到答案。. |! {, P% z& u  X* \' {
* A; H" H5 M( h. c
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-19 03:52 , Processed in 0.029360 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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